Работа с Ansible playbook

Для Ansible playbook пример, который нагляднее всего демонстрирует возможности — настройка какого-то пакета с нуля на удаленных машинах. Возьмем веб-сервер httpd.

Установка Ansible и начальная конфигурация выполнены ранее. Используется CentOS 7.

 

Ansible playbook пример

Управление осуществляется от имени системного пользователя ansadmin, такой же создан на каждой ноде.

su — ansadmin

В первом playbook зададим последовательность задач, выполнение которых позволит получить веб-сервер в минимальной конфигурации.

mcedit httpd.yml

- hosts: app
  user: ansadmin
  become_method: sudo
  tasks:
    - name: 1. Install latest version of apache
      yum: name=httpd state=present
      become: true
    - name: 2. start apache
      service: name=httpd state=started enabled=yes
      become: true
    - name: 3. copy standart index.html
      copy: src=/tmp/index.html dest=/var/www/html/index.html mode=0664
      become: true
    - name: 4. save iptables
      command: iptables-save
      become: true

 

Сначала директивой hosts указывается группа машин, на которых применяется playbook. Это группа app, в нее входит только сервер node1.

Далее пользователь и опция become, которая позволит выполнять команды с sudo. Привилегии суперпользователя понадобятся для установки пакетов.

 

Далее четыре последовательных шага:

  1. Установка веб-сервера httpd
  2. Его запуск и добавление в автозагрузку (за счет enabled=yes)
  3. Копирование файла index.html с мастера на ноды — в /var/www/html/index.html
  4. Сохранение правил iptables

 

Добавим index.html, он будет доставляться на ноды за счет Ansible

mcedit /tmp/index.html

<h1>index file</h1>
<p>Here we have our custom index.html file which will be delivered by Ansible</p>

 

Запускаем проверку написанного файла, она подобна выполнению команд с ключем —dry-run. Симулирует указанные действия не внося фактически изменений в систему

 

ansible-playbook httpd.yml —check

PLAY [app] […skipped…]

TASK [Gathering Facts] […skipped…]
ok: [node1]

TASK [1. Install latest version of apache] […skipped…]
ok: [node1]

TASK [2. start apache] […skipped…]
changed: [node1]

TASK [3. copy standart index.html] […skipped…]
changed: [node1]

TASK [4. save iptables] […skipped…]
skipping: [node1]

PLAY RECAP […skipped…]
node1 : ok=4 changed=2 unreachable=0 failed=0

 

 

Теперь playbook можно выполнить, ошибок возникнуть не должно

ansible-playbook httpd.yml

 

! На CentOS может использоваться firewalld.

Если сетевой экран есть, он не позволит подключиться.  В playbook можно добавить команду разрешающую доступ к порту 80 или просто останавливающую firewalld. Затем вновь применить playbook к ноде

 

 

Фрагмент файла может выглядеть так:

- name: 5. stop firewalld
  command: service firewalld stop
  become: true

 

Теперь можно обратиться к внешнему IP адресу сервера node1. При обращении будет направлен запрос к файлу index.html, который ранее создавался на мастер хосте

ansible playbook пример

Данный пример использования playbook в Ansible показывает, как выполнять конфигурацию подконтрольных машин.

Для крупных систем принцип работы работы тот же. Увеличивается только сложность playbook.