Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.
Загляните в раздел «Обсуждение»:
Представьте себе ситуацию, когда результат вывода одной таски, нужно использовать в другой. Например, добавить в cron список домашних директорий пользователя. Для выполнения такой операции в Ansible существует механизм, который называется регистрация результата:
- hosts: all
gather_facts: no
tasks:
- shell: ls /Users
register: home_dirs
- name: add home dirs to cron
cron: name="backup_dirs" minute="0" hour="5.2" job="backup /home/{{ item }}"
with_items: home_dirs.stdout_lines
- debug:
var: home_dirs.stdout_lines
С помощью ключа register
, можно записать результат работы модуля shell
в переменную с произвольным именем, например, home_dirs
. И использовать эту переменную в другой задаче, при вызове модуля cron
.
Распечатаем содержимое переменной home_dirs
. Для этого нам подойдёт модуль debug
, который позволяет делать вывод значений:
- hosts: all
gather_facts: no
tasks:
- shell: ls /Users
register: home_dirs
# - name: add home dirs to cron
# cron: name="backup_dirs" minute="0" hour="5.2" job="backup /home/{{ item }}"
# with_items: home_dirs.stdout_lines
- name: print home_dirs variable
debug: var=home_dirs
$ ansible-playbook playbook.yml -i production.ini
TASK: [print home_dirs variable] ****************
ok: [localhost] => {
"var": {
"home_dirs": {
"changed": true,
"cmd": "ls /Users",
"delta": "0:00:00.011196",
"end": "2020-08-11 15:20:12.739441",
"failed": false,
"rc": 0,
"start": "2020-08-11 15:20:12.728245",
"stderr": "",
"stderr_lines": [],
"stdout": "Guest\nShared\nkirill
"stdout_lines": [
"Guest,
"Shared",
"kirill"
]
}
}
}
home_dirs
- это хеш, внутри которого содержится информация о таске: выполнена ли задача, сколько времени заняло её выполнение, какой модуль использовался и, самое главное, содержимое stderr
и stdout
. Причём sdtout
представлен в двух форматах: в виде строки и списка. Списочный формат позволяет использовать результат в цикле, что мы и сделали в первоначальном плейбуке.
Ещё один пример:
- hosts: all
gather_facts: no
tasks:
- command: 'false'
register: result
ignore_errors: yes
- command: echo 'ehu'
when: not result.failed
- command: uptime
when: result.failed
Здесь модуль command
вызывает функцию false
. Результат работы модуля регистрируется в переменную result
. Строго говоря, функция возвращает не нулевой статус, поэтому плейбук должен завершиться с ошибкой и не выполняться дальше. На самом деле так и происходит. Но вывод ошибки можно подавить с помощью ignore_errors
. Этот ключ позволяет продолжить выполнение плейбука вне зависимости от успешности выполнения команды.
Дальше идёт два варианта развития событий. Нужная команда выполняется по условию. И поскольку result.failed: true
, то выполнится только последняя команда.
Вам ответят команда поддержки Хекслета или другие студенты.
Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.
или войти в аккаунт
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.
Наши выпускники работают в компаниях:
Зарегистрируйтесь или войдите в свой аккаунт