Знакомство с Ansible. Часть 2: разбор вывода playbook

Oct 26, 2015 18:53 · 541 words · 3 minute read ansible

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

В следующей статье рассмотрим использование условий и переменных в наборах инструкций.

tweet Share