Автоматизируем и ускоряем процесс настройки облачных серверов с Ansible. Часть 2: вывод playbook, отладка, повторное использование

В предыдущей статье мы начали изучение Ansible, популярного инструмента для автоматизации настройки и развертывания ИТ-инфраструктуры. Ansible был успешно установлен в InfoboxCloud, описаны принципы работы, базовая настройка. В завершении статьи мы показали как быстро установить nginx на несколько серверов.

Ansible InfoboxCloud

В этой статье мы продолжим изучение Ansible: разберем вывод playbook, научимся отлаживать их и разделять для удобства повторного использования.

Управление конфигурациями

Разбор нашего первого playbook
В прошлой статье мы получили вывод от исполнения нашего первого playbook. Давайте разберем его.


Gathering facts – это первая задача по умолчанию в любом playbook. Задача собирает полезные метаданные о серверах в форме переменных, которые могут использоваться в playbook в дальнейшем. Например, такими переменными может быть ip–адрес, архитектура ОС и имя хоста.
Можно посмотреть эти переменные, используя команду:
ansible -m setup experiments
, где experiments – название секции в вашем inventory.
или записать ее в файл
ansible -m setup experiments >> facts

Ниже в выводе указаны задачи TASK, согласно ходу выполнения playbook: установка nginx, запуск сервиса.

Давайте запустим выполнение playbook повторно.
ansible-playbook playbooks/setup_nginx.yml


По сравнению с предыдущим выводом задача Install nginx package выполнена без изменений. Состояние уже достигнуто: nginx установлен. Задача старта сервиса nginx в обоих случаях выполнена без изменений, так как сервис nginx стартует сам сразу после установки. Если остановить сервис nginx на одном из серверов вручную, после запуска playbook он поднимется.


Как мы видим, выполняется одно из ключевых свойств систем Ansible: Идемпотентность (операция, которая если применяется к любому значению несколько раз — всегда получается то же значение, как и при однократном применении). Большинство систем управления конфигурациями следуют этому принципу и применяют его на инфраструктуру.

Давайте посмотрим на секцию PLAY RECAP ниже в выводе. Параметр changed показывает, сколько раз в задачах менялось состояние сервера. ok – количество исполняемых задач вместе с Gathering facts.

Oтладка playbook
Понимать, что случилось при исполнении playbook, бывает очень полезно для исправления ошибок.
Есть 3 уровня вывода отладочной информации (Verbose).

-v. Вывод базовой информации.
ansible-playbook playbooks/setup_nginx.yml -v



-vv. Более подробный вывод.
ansible-playbook playbooks/setup_nginx.yml -vv



-vvv. Самый подробный вывод.
В этом выводе указаны SSH–команды, которые Ansible использует для создания временных файлов на удаленном хосте для запуска скрипта удаленно.
ansible-playbook playbooks/setup_nginx.yml -vvv


Можно выводить любые переменные ansible для отладки. Для этого добавьте в playbook следующую секцию:
- name: Debug
    debug: msg={{ ansible_distribution }}

При запуске playbook вы увидите вывод этой переменной. Каждая переменная Ansible начинается с префикса ansible_.


Еще одна полезная команда — возможность посмотреть на все задачи, выполняющиеся в playbook. Она особенно полезна, когда есть несколько playbook, исполнающих другие playbook.

ansible-playbook playbooks/setup_nginx.yml --list-tasks


Можно исполнить только конкретную задачу из playbook:
ansible-playbook playbooks/setup_nginx.yml --start-at-task="Debug"



Повторное использование в Playbook

Если задача или набор задач часто используется вами — есть смысл оформить ее в виде отдельного файла, который можно будет использовать в других playbook.

Создайте папку для повторно используемых задач:
mkdir ~/ansible/playbooks/tasks

Давайте создадим задачу обновления ОС в файле ~/ansible/playbooks/tasks/os_update.yml:
---
#Update and upgrade apt-based linux
- name: Update and upgrade apt-based Linux
  apt: update-cache=yes state=latest
  sudo: yes

Tеперь мы можем включить секцию обновления ОС в ~/ansible/playbooks/setup_nginx.yml:
---
- hosts: experiments
  remote_user: root
  tasks:

  - include: tasks/os_update.yml

  - name: Install nginx package
    apt: name=nginx update_cache=yes
    sudo: yes

  - name: Starting nginx service
    service: name=nginx state=started
    sudo: yes

Теперь до установки nginx Ubuntu на обслуживаемых серверах из Inventory будет обновлена.
Стоит и установку nginx (~/ansible/playbooks/tasks/pgk_nginx_install.yml) вынести в отдельную задачу, если вы часто ставите nginx.
---
#Install NGINX package
  - name: Install nginx package
    apt: name=nginx update_cache=yes
    sudo: yes

  - name: Starting nginx service
    service: name=nginx state=started
    sudo: yes

В результате наш playbook станет совсем простым:

---
- hosts: experiments
  remote_user: root
  tasks:

  - include: tasks/os_update.yml
  - include: tasks/pkg_nginx_install.yml


Можно написать и задачу для удаления nginx (~/ansible/tasks/pkg_nginx_remove.yml):
---
#Remove NGINX package
 - name: Stopping nginx service
   service: name=nginx state=stopped
   sudo: yes

 - name: Remove nginx package
   apt: name=nginx state=removed
   sudo: yes

и вызвать ее (~/ansible/playbooks/remove_nginx.yml):
---
- hosts: experiments
  remote_user: root
  tasks:
  - include: tasks/pkg_nginx_remove.yml

ansible-playbook ~/ansible/playbooks/remove_nginx.yml -i ~/ansible/inventory

, где через -i указываем путь к файлу inventory, что позволяет нам запускать ansible-playbook не только из папки ansible.

В следующей статье мы поговорим о переменных и условиях Ansible. Наконец-то наши playbook будут корректно работать на разных ОС.

Заключение

В написании статьи очень помогла книга "Learning Ansible" и конечно официальная документация.

Все эксперименты с Ansible удобно делать в InfoboxCloud, так как имеется возможность для каждого виртуального сервера установить именно то количество ресурсов, которое необходимо для задачи (CPU/Ram/диск независимо друг от друга) или использовать автомасштабирование, а не выбирать VM из готовых шаблонов для сферического коня в вакууме. Когда эксперименты не проводятся — можно просто выключить VM и оплачивать только стоимость диска.

Если вы обнаружили ошибку в статье, автор ее с удовольствием исправит. Пожалуйста напишите в ЛС или на почту о ней. Туда же можно задавать вопросы по Ansible для освещения в последующих статьях. Ссылки на следующие статьи будут добавлены в конец этой статьи, поэтому можно просто сохранить ее на будущее.

Успешной работы!

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.