В чем разница между Ansible и Puppet

«В чем разница между Ansible и Puppet» — вопрос из категории DevOps, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ansible и Puppet — инструменты для управления конфигурациями, но с разными подходами:

  1. Архитектура

    • Puppet использует клиент-серверную модель (агенты на нодах).
    • Ansible — агент-фри, работает через SSH.
  2. Язык конфигурации

    • Puppet: декларативный DSL (напоминает Ruby).
    • Ansible: YAML + Jinja2 (проще для чтения).
  3. Идемпотентность
    Оба поддерживают, но в Ansible она встроена в модули, а в Puppet — в язык.

  4. Оркестрация
    Ansible удобнее для ad-hoc задач (через ansible ad-hoc), Puppet — для строгого контроля состояния.

Пример Ansible (playbook.yml):

- hosts: webservers
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

Пример Puppet (manifest.pp):

package { 'nginx':
  ensure => installed,
}

Когда что выбрать:

  • Ansible — для простоты и быстрого старта.
  • Puppet — для сложных инфраструктур с жестким compliance.