Day 59 of 90 Days of DevOps Challenge: Introduction to Configuration Management and Ansible


Over the past several days, I’ve built a solid foundation in Infrastructure as Code (IaC) using Terraform. Here's a quick summary of what I’ve covered:
Started with the basics of Terraform: providers, resources, variables, and outputs.
Designed reusable, modular infrastructure using root and child modules.
Learned how to manage multi-environment deployments using workspaces.
Handled lifecycle control using
taint
andreplace
for safe resource recreation.Built environment-specific infrastructure with isolated state files using
*.tfvars
.
With Terraform, I now know how to provision and manage infrastructure automatically, but there’s still one major component left in the DevOps toolkit: Configuration Management.
Now that infrastructure provisioning is automated, the next step in my DevOps journey is learning how to configure and manage those machines efficiently. That’s where Ansible comes in.
Understanding Configuration Management
Configuration Management (CM) refers to the process of maintaining computer systems, servers, and software in a desired, consistent state. It includes tasks such as:
Installing required software packages on target systems
Applying operating system updates and security patches
Distributing configuration files and templates
Managing system services and user accounts
There are two primary approaches to configuration management:
Manual Configuration Management
This involves system administrators logging into each machine and performing changes manually. This process is time-consuming, repetitive, error-prone, and difficult to scale or audit. It often leads to configuration drift, where systems become inconsistent over time.Automated Configuration Management
This approach uses automation tools to define system configurations as code and apply them across infrastructure in a consistent and repeatable way. Automation reduces human error, ensures uniform environments, and supports scalability.
To overcome the limitations of manual processes, automated configuration management has become a best practice in modern DevOps workflows.
Popular Tools for Automated Configuration Management
Several tools exist in the market to automate system configuration:
Puppet – A mature configuration tool written in Ruby
Chef – Also Ruby-based, uses recipes and cookbooks to define configurations
Ansible – A newer, simpler tool that is agentless and uses YAML for configuration
While Puppet and Chef are powerful, they have steeper learning curves and require agents to be installed on target machines. In contrast, Ansible is currently one of the most popular tools due to its simplicity, flexibility, and agentless architecture.
What is Ansible?
Ansible is an open-source automation platform initially developed by Michael DeHaan and now maintained by Red Hat. It is written in Python and uses YAML to define automation tasks in files called Playbooks.
Ansible is widely adopted for its ease of use, extensibility, and suitability for managing both small-scale and enterprise-level infrastructure.
Key Characteristics of Ansible
Agentless Architecture: Ansible connects to target systems using SSH, so no additional software (agent) needs to be installed on managed machines.
Simple Syntax: Ansible playbooks are written in YAML, making them human-readable and easy to understand.
Idempotency: Ansible ensures that running the same playbook multiple times does not result in unintended changes.
Extensible Modules: A wide variety of built-in modules are available, and users can write their own custom modules in Python.
What Can Ansible Do?
Ansible can be used for a broad range of automation tasks in IT operations and DevOps pipelines, including but not limited to:
Configuration Management
Installing software packages
Configuring system settings
Managing files, directories, and users
Application Deployment
Deploying applications to servers
Managing application dependencies
Rolling updates and zero-downtime deployments
Orchestration
Coordinating tasks across multiple servers in a defined order
Automating complex multi-tier deployments
Provisioning and Integration
Integrating with tools like Terraform for full infrastructure + configuration automation
Preparing cloud or virtual machines with the necessary software and security configurations
Why Ansible is Essential in DevOps
In modern DevOps environments, speed, consistency, and automation are critical. Ansible plays a vital role in enabling:
Rapid provisioning of fully configured infrastructure
Elimination of manual configuration errors
Seamless integration into CI/CD pipelines
Consistent environments across development, staging, and production
By incorporating Ansible into a DevOps workflow, teams can achieve faster deployments, fewer production issues, and more predictable infrastructure behavior.
Final Thoughts
Today marks a significant transition point in my #90DaysOfDevOps journey — from infrastructure provisioning with Terraform to configuration automation with Ansible. Understanding the distinction and relationship between the two is crucial for building reliable and scalable systems.
Terraform lays the foundation by provisioning resources, and Ansible builds upon that by configuring those resources into usable environments. The combination of both tools forms a complete and powerful infrastructure automation strategy.
In the upcoming days, I will explore Ansible in more depth, starting with its architecture, inventory management, and writing basic playbooks to automate tasks on real machines.
Stay tuned for Day 60, where I begin implementing Ansible hands-on.
Subscribe to my newsletter
Read articles from Vaishnavi D directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
