Рассмотрим 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. Привилегии суперпользователя понадобятся для установки пакетов.
Далее четыре последовательных шага:
- Установка веб-сервера httpd
- Его запуск и добавление в автозагрузку (за счет enabled=yes)
- Копирование файла index.html с мастера на ноды — в /var/www/html/index.html
- Сохранение правил 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, который ранее создавался на мастер хосте
Данный пример использования playbook в Ansible показывает, как выполнять конфигурацию подконтрольных машин.
Для крупных систем принцип работы работы тот же. Увеличивается только сложность playbook.