Ansible. Создание Playbook.

Ansible. Создание Playbook.

Playbooks Ansible – это сценарии, с помощью которых на удалённые серверы отправляются наборы команд. Вместо того чтобы запускать каждую команду Ansible отдельно, вы можете создать целый комплекс команд и поместить его в playbook.
Также playbook можно рассматривать как описание состояния ресурсов системы, в котором она должна находиться в конкретный момент времени, включая установленные пакеты, запущенные службы, созданные файлы и многое другое. Ansible проверяет, что каждый из ресурсов системы находится в ожидаемом состоянии и пытается исправить состояние ресурса, если оно не соответствует ожидаемому.

Плейбуки Ansible пишутся в формате сериализации данных YAML.

В качестве примера напишем несколько playbook’ов  развёртывания сервисов на сервер Debian 10.

Playbook для установки nginx.

Для начала создадим playbook для установки nginx.

# touch ./nginx.yml

---
- hosts: mysql.sysad.su
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=latest update_cache=true
      notify:
        - start nginx

  handlers:
    - name: start nginx
      service: name=nginx state=started

Файл должен начинаться с:

---

Это требование ко всем документам YAML, иначе документ будет некорректно прочитан.
Формат YAML очень чувствителен к пробелам. с помощью пробелов он группирует данные. В файлах YAML можно использовать только пробелы; чтобы файл был прочитан корректно, все интервалы должны располагаться последовательно.

Элементы файла, которые находятся на одном уровне, отмечаются одинаковым интервалом.

Элементы, которые начинаются с тире (-), считаются списками. Элементы в формате ключ:значение действуют как хеши или словари. В целом, это всё, что нужно знать о базовом YAML.

Во второй строке помещается список - hosts: ИмяХоста или ГруппаХостов , таким образом задаём хост или множество хостов, для которых выполняется playbook.

Например, в файле /etc/ansible/hosts определена группа [dbservers], в которую входят два хоста mysql.sysad.su и mysql2.sysad.su :

[dbservers]
mysql.sysad.su
mysql2.sysad.su

Нижеследующая конструкция задаёт применение playbook ко всем хостам группы dbservers:

---
- hosts: dbservers

Далее переходим к описанию набор задач (task):

---
- hosts: mysql.sysad.su
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=latest update_cache=true
      notify:
        - start nginx

На высшем уровне находится tasks (на одном уровне с hosts). Этот параметр задаёт список пар «ключ:значение».
Первый ключ «name» – описательный параметр, в котором можно указать любое имя.
Следующий ключ — «apt». Это ссылка на модуль Ansible, точно так же, как когда мы используем команду ansible и вводим что-то наподобие: ansible -m apt -a 'whatever' all
Этот модуль позволяет нам указать пакет и состояние, в котором он должен находиться, которое в нашем случае latest.
Строка update-cache=true обновляет кэш пакетов удалённой машины (apt-get update) перед установкой нового пакета.
Пункт notify содержит список с одним пунктом, который называется start nginx. Это не внутренняя команда Ansible, это ссылка на обработчик, который может выполнять определенные функции при вызове из задачи. Ниже мы определим обработчик start nginx.

---
- hosts: mysql.sysad.su
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=latest update_cache=true
      notify:
        - start nginx

  handlers:
    - name: start nginx
      service: name=nginx state=started

Раздел handlers расположен на том же уровне, что и hosts и tasks. Обработчики похожи на задачи, но они запускаются только тогда, когда задача сообщает им о том, что в клиентской системе произошли изменения.

Например, у нас здесь есть обработчик, который запускает службу Nginx после установки пакета. Обработчик не вызывается, если задача Installs nginx web server не приведет к изменениям в системе, что означает, что пакет должен был быть установлен, но его там еще не было.

Playbook’и запускаются на выполнение командой ansible-playbook, для нашего примера:
# ansible-playbook nginx.yml

Результат выполнения:

 

Выполнение команды привело к установке и запуску nginx на узле mysql.sysad.su. Проверяем работу nginx по ссылке: http://mysql.sysad.su

Расширим функциональность playbook за счёт замены индексного файла index.html

Создаём каталог и в нём index.html:
# mkdir ./static_files
touch ./index.html

Добавляем в index.html

<html>
  <head>
    <title>This is a sample page</title>
  </head>
  <body>
    <p>It's works!</p>
  </body>
</html>
---
- hosts: mysql.sysad.su
  tasks:
    - name: Installs nginx web server
      apt: pkg=nginx state=latest update_cache=true
      notify:
        - start nginx
    - name: Upload default index.html for host
      copy: src=static_files/index.html dest=/var/www/html/ mode=0644
  handlers:
    - name: start nginx
      service: name=nginx state=started

При повторном запуске playbook’а Ansible проверит каждую задачу. Он увидит, что Nginx уже установлен на хосте, поэтому оставит его в покое. Он увидит новый раздел задач и заменит index.html файл на управляемом хосте тем, который находится на сервере управления.

Создаём файл playbook для развёртывания MariaDB:
# touch ./mysqlserver.yml

Задаём пароль пользователя root посредством переменной:

---
- hosts: dbservers
  vars:
    mysql_root_password: SecretWord
Nicko

Добавить комментарий