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

в 9:42, , рубрики: automation, infoboxcloud, it-infrastructure, system administration, автоматизация, Блог компании Infobox, ит-инфраструктура, Настройка Linux, системное администрирование, управление, хостинг

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

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

Разбор нашего первого playbook

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

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

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

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

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

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

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

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

Oтладка playbook

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

-v. Вывод базовой информации.

ansible-playbook playbooks/setup_nginx.yml -v

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

-vv. Более подробный вывод.

ansible-playbook playbooks/setup_nginx.yml -vv

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

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

ansible-playbook playbooks/setup_nginx.yml -vvv

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

Можно выводить любые переменные ansible для отладки. Для этого добавьте в playbook следующую секцию:

 - name: Debug
    debug: msg={{ ansible_distribution }}

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

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

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

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

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

Можно исполнить только конкретную задачу из playbook:

ansible-playbook playbooks/setup_nginx.yml --start-at-task="Debug"

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

Повторное использование в 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 для освещения в последующих статьях.

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

Автор: infobox

Источник

Поделиться

* - обязательные к заполнению поля