...

понедельник, 9 февраля 2015 г.

Автоматизируем и ускоряем процесс настройки облачных серверов с 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/диск независимо друг от друга) или использовать автомасштабирование.


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


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


Recommended article: Chomsky: We Are All – Fill in the Blank.

This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий