Использование 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.

Сказать спасибо