Tooling

Configuration Management

Ansible, Salt, Chef, Puppet — declarative server configuration.

IaC provisions the box. Configuration management installs packages, drops files, configures users, and ensures the running state matches the declared state.

The major tools

  • Ansible — agentless, SSH-based, YAML playbooks, idempotent modules. The default for new projects in 2026; almost everyone knows or can read it.
  • SaltStack — agent-based (or agentless via salt-ssh); event-driven; faster at huge scale than Ansible. Smaller community now than its peak.
  • Puppet — agent-based, mature, declarative DSL; still common in big enterprise.
  • Chef (now Progress Chef) — Ruby-flavored cookbooks; less common in 2026.
  • CFEngine — original CM tool; niche.
  • cdist — Python; targets minimal embedded systems.

Lighter / Ansible-adjacent

  • Pyinfra — Python alternative to Ansible; faster, scripting-feel.
  • mgmt — event-driven, parallel; James Shubin's interesting take.
  • Mitogen for Ansible — Python plugin that makes Ansible 5–10× faster.

Bash-script-replacement tier (very small fleets)

  • Bash + ssh + a Makefile — fine for 1–3 servers. Don't over-engineer.
  • Just / Make / Taskfile — task runners; pair with SSH commands.
  • AWS Systems Manager Run Command — AWS-native shell command broadcaster.

Bootstrap / first-boot

  • cloud-init — see Cloud-init & Provisioning; the standard for first-boot config on cloud VMs.
  • Ignition — Fedora CoreOS / Flatcar / Talos first-boot config.
  • Packer — bake the config into the image instead.

Common tasks Ansible handles

  • Install / update packages with apt / dnf / pacman.
  • Manage users, groups, sudoers.
  • Drop config files from templates (Jinja2).
  • Manage systemd services.
  • Manage firewall rules (iptables / nftables / ufw).
  • Set kernel sysctls.
  • Roll out file mode / SELinux contexts.
  • Run one-off commands.

What Ansible isn't great at

  • Image building (use Packer).
  • Container orchestration (use k8s / Nomad / Kamal).
  • Stateful coordination across hosts (use Consul / etcd).
  • Speed at huge scale (Salt / Mitogen / Puppet beat plain Ansible).

Patterns to adopt

  • Small modules, one purpose each. Long monolithic playbooks become unmaintainable.
  • Idempotency first. Re-running should be safe. Use modules, not raw command.
  • Inventory in YAML / dynamic from cloud. Don't hand-edit hosts.
  • Vault encrypted secrets for ansible-vault — or use SOPS.
  • Run in CI with check mode (--check) before apply.
  • Test with Molecule for important roles.

Tooling around Ansible

  • Molecule — test framework for Ansible roles.
  • AWX / Ansible Automation Platform — Red Hat's web UI for runs / RBAC.
  • Semaphore — open-source AWX alternative.
  • ansible-lint — style + best-practice linter.

Pick this if…

  • Default for any small / medium fleet: Ansible.
  • You need huge-scale event-driven CM: Salt or Puppet.
  • You'd rather write Python: Pyinfra.
  • 3 or fewer servers and you live in ssh: scripts + a Makefile.
  • Cloud VMs that should self-bootstrap: cloud-init for first boot, Ansible for ongoing.

On this page