Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете
Основы Ansible

Регистрация результата

Представьте себе ситуацию, когда результат вывода одной таски, нужно использовать в другой. Например, добавить в 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, то выполнится только последняя команда.


<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».