Plays в Ansible - вот что делает Ansible таким удобным. Playbooks позволяют выполнять рутинные задачи с несколькими модулями. Когда мы должны использовать playbooks?
Давайте посмотрим на обычную задачу обслуживания: обновление ваших серверов. Мы не должны использовать сборник пьес для этого, учитывая , что это только одна команда: apt-get update
. Мы можем просто использовать одну команду для обновления программного обеспечения на всех наших серверах. Однако для развертывания чего-либо вроде веб-сервера или сервера базы данных требуется больше работы: не просто одна команда. Playbooks являются префектом для этого случая. Они позволяют использовать несколько модулей, которые являются командами, которые могут быть выполнены на сервере. Например, существуют модули для копирования файлов и выполнения команд оболочки по SSH.
Так, как мы используем playbooks? Давайте начнем!
Шаг 1: Создание .yml
файла YAML ( )
Ansible playbooks записываются в виде .yml
файлов; Ansible не может интерпретировать другие форматы. Пример Ansible playbook выглядит следующим образом:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
(Взято из документации Ansible)
Шаг 2: Понимание playbooks: задачи и обработчики
Как видите, в этой пьесе есть несколько разделов. Прежде всего, вы увидите hosts:
линию. Это определяет, на каких хостах должна быть выполнена playbook. Вы также можете видеть, что мы определили пару переменных, к которым можно обращаться и которые можно использовать в книге. Затем вы увидите ряд задач. Эти задачи можно назвать, например, как «Установить Apache». Вторая задача в примере записывает в конфигурацию Apache. Затем вы увидите следующее:
notify:
- restart apache
Это говорит о задаче выполнить определенный обработчик. В данном случае это относится к обработчику restart apache
, который можно найти в нижней части playbook:
handlers:
- name: restart apache
service: name=httpd state=restarted
Обработчики удобны, потому что, на примере, вы можете захотеть перезапустить Apache несколько раз. В этом случае вам не нужно повторять создание задачи каждый раз, когда вам нужно перезапустить Apache, но вместо этого вы можете просто обращаться к одному и тому же обработчику каждый раз.
Шаг 3: Выполнение playbooks
Скажем, вы хотите развернуть сервер Apache. Ну, как вы можете видеть, мы только что создали книгу для этого. Выполнение playbooks может быть сделано с помощью ansible-playbook
команды. Например, если бы мы выполнили эту пьесу на всех серверах в этой webservers
категории (вам нужно, чтобы эта категория была в вашем /etc/ansible/hosts
файле), вы бы выполнили следующую команду, учитывая, что имя вашего файла плейбука apache.yml
:
ansible-playbook -i webservers apache.yml
Поздравляем! Теперь вы выполнили playbook на всех серверах в вашей webservers
категории. Теперь вам нужно просто дождаться завершения развертывания, и вы увидите, что Apache успешно установлен и настроен на этих серверах.