Infrastructure as code (IaC) is the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools.
The IT infrastructure managed by this process comprises both physical equipment, such as bare-metal servers, as well as virtual machines, and associated configuration resources. The definitions may be in a version control system. It can use either scripts or declarative definitions, rather than manual processes, but the term is more often used to promote declarative approaches.
| Tool | Released by | Method | Approach | Comments |
|---|---|---|---|---|
| Chef | Chef | Pull | Delcarative and imperative | Ruby |
| Puppet | Puppet | Pull | Declarative | Ruby |
| SaltStack | SaltStack | Push and Pull | Delcarative and imparative | Python |
| Terraform | HirashiCorp | Push | Declarative | Go, HCL, JSON |
| Ansible | RedHat | Push | Declarative and imparative | Python, YAML |
Delcarative = define WHAT end result you want Imperative = define exact steps - HOW
Configuration management (CM) is a systems engineering process for establishing and maintaining consistency of a product's performance, functional, and physical attributes with its requirements, design, and operational information throughout its life.
Configuration Managment allows to automate and manage:
- infrastructure/platform
- services that run on that platform
| Ansible | Terraform |
|---|---|
| Mainly configuration tool | Mainly infrastructure provisioning tool |
| more mature | relatively new |
| written in Python | written in Go |
| better for configuring that infrastructure | better for infrastructure |