Знакомство с Ansible. Часть 2: разбор вывода playbook
Oct 26, 2015 18:53 · 541 words · 3 minute read
В предыдущей статье мы успешно установили и проверили работоспособность системы управления конфигурациями Ansible, а так же написали и выполнили первый набор инструкций (playbook). Давайте разберемся с результатами его выполнения!
ansible-playbook install_nginx.yml
PLAY [test] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [test-1]
ok: [test-2]
TASK: [Install package nginx] *************************************************
changed: [test-1]
changed: [test-2]
TASK: [Starting service nginx] ************************************************
ok: [test-1]
ok: [test-2]
PLAY RECAP ********************************************************************
test-1 : ok=3 changed=1 unreachable=0 failed=0
test-2 : ok=3 changed=1 unreachable=0 failed=0
GATHERING FACTS — это первая задача, которая по умолчанию присутствует в любом наборе инструкций. Как видим из названия задачи, ее цель — сбор метаданных об удаленных хостах в форме переменных (например ip-адреса, имени хоста, установленной ОС). Полученные данные могут быть использованы в следующих задачах, описанных в playbook.
Посмотреть переменные и их значения можно командой:
ansible -m setup test
Дальше в выводе следуют задачи, описанные в секции task: набора инструкций и результаты их выполнения:
TASK: [Install package nginx]— установка web-сервераnginx;TASK: [Starting service nginx]— запуск web-сервераnginx.
Первая задача выполнена с изменениями, о чем свидетельствует состояние changed — все верно, раньше web-сервера nginx в системе не было, теперь он установлен.
Вторая задача выполнена без изменений, так как web-сервер nginx автоматически запускается после установки.
Для сравнения результатов вывода, запустим данный набор инструкций еще раз:
ansible-playbook install_nginx.yml
PLAY [test] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [test-1]
ok: [test-2]
TASK: [Install package nginx] *************************************************
ok: [test-1]
ok: [test-2]
TASK: [Starting service nginx] ************************************************
ok: [test-1]
ok: [test-2]
PLAY RECAP ********************************************************************
test-1 : ok=3 changed=0 unreachable=0 failed=0
test-2 : ok=3 changed=0 unreachable=0 failed=0
Видим, что результаты выполнения задачи Install package nginx отличаются от предыдущего запуска playbook.
Последняя секция в выводе результатов выполнения набора инструкций — PLAY RECAP. Здесь присутствуют четыре параметра:
ok— количество выполняемых задач (включая задачуGATHERING FACTS);changed— количество измененных состояний на удаленном хосте;unreachable— количество хостов, которые были недоступны по время выполнения набора инструкций;failed— количество невыполненных задач на удаленном хосте. Подробности выполнения набора инструкций (playbook) можно увидеть с помощью вывода отладочной информации одного из трех доступных уровней (-v,-vvи-vvvсоответственно).
Также для отладки часто выводят переменные, полученные с удаленных хостов при выполнении задачи GATHERING FACTS, для этого достаточно в playbook добавить такую задачу:
...
- name: Debug
debug: msg={{ ansible_distribution }}
Результатом выполнения такого набора инструкций будет:
ansible-playbook debug.yml
PLAY [test] ******************************************************************
GATHERING FACTS ***************************************************************
ok: [test-1]
ok: [test-2]
TASK: [Debug] *****************************************************************
ok: [test-1] => {
"msg": "Ubuntu"
}
ok: [test-2] => {
"msg": "Ubuntu"
}
PLAY RECAP ********************************************************************
test-1 : ok=2 changed=1 unreachable=0 failed=0
test-2 : ok=2 changed=1 unreachable=0 failed=0
Запустить только конкретную задачу из playbook можно командой:
ansible-playbook debug.yml --step --start-at-task="Debug"
Весьма полезной является возможность вызывать набор инструкций из другого набора инструкций. Хороший пример — обновление установленных пакетов в ОС. Для этого создадим playbook update_os.yml со следующим содержанием:
---
tasks:
- name: Update
apt: update_cache=yes
- name: Upgrade
apt: upgrade=full
Этот playbook можно включить как задачу в набор инструкций install_nginx.yml, который мы создавали в предыдущей статье:
---
- hosts: test
tasks:
- include: update_os.yml
- name: Install nginx package
apt: name=nginx update_cache=yes
sudo: yes
- name: Starting nginx service
service: name=nginx state=started
sudo: yes
И теперь, перед установкой web-сервера nginx на удаленных хостах будут обновлены установленные пакеты.
В следующей статье рассмотрим использование условий и переменных в наборах инструкций.