Знакомство с 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
на удаленных хостах будут обновлены установленные пакеты.
В следующей статье рассмотрим использование условий и переменных в наборах инструкций.