What is it?
Configuration management is the process of standardizing resource configurations and enforcing their state across IT infrastructure in an automated yet agile manner.
package { "apache":
name => "httpd",
ensure => present,
}
service { "apache":
name => "apache",
ensure => running,
enable => true,
require => Package["apache"],
}
package 'apache' do
package_name 'httpd'
action :install
end
service 'apache' do
action [:enable, :start]
end
- hosts: all
tasks:
- name: 1. Install Apache
yum: name=httpd state=present
- name: 2. Start Apache Service
service: name=httpd state=running enabled=yes
Lightweight agent system. Manages configuration of a large number of computers using the client–server paradigm or stand-alone. Any client state which is different from the policy description is reverted to the desired state. Configuration state is specified via a declarative language. CFEngine's paradigm is convergent "computer immunology".
When to use it:
Performance and low memory usage is the primary motivating factor for your environment. If you also agree with the convergent and promise theory behind CFEngine, its for you.
Puppet code design works as a list of dependencies, which can make your life easier or more confusing, depending on the setup. Historically been the choice for more sysadmins.
When to use it:
Puppet is a good choice if stability and maturity are key factors for you. It's good for large enterprises with a heterogeneous environment and range of skills on the DevOps team.
The Chef design is transparent and based on following the instructions it's given, which means that you’ll have to make sure your instructions are clear. Historically been the choice for developers.
When to use it:
If you already use Git and have a solid understanding of the Ruby language, it's a great fit. Chef is good for development-focused teams and environments. It's good for enterprises looking for a more mature solution for a heterogeneous environment.
Readings