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

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

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

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

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

Фильтры

Шаблонизатор Jinja2 поддерживает фильтры - специальные функции, которые применяются к переменным и производят с ними какие-то изменения. Соответственно, и в Ansible этот механизм тоже используется:

- hosts: all
  gather_facts: no
  vars:
    numbers: [3, 2, 1, 3, 2]
  tasks:
    - name: get min number
      debug: msg={{ numbers | min }}
    - name: get max number
      debug: msg={{ numbers | max }}
    - name: get unique values
      debug: var={{ item }}
      with_items: numbers | unique
    - name: get random value
      debug: msg={{ ['a', 'b', 'c'] | random }}

Здесь применяются различные фильтры к списку чисел (переменная numbers):

  • min находит минимальное значение
  • max находит максимальное значение
  • unique находит уникальные значения (результатом является список, поэтому для вывода на печать используем цикл)
  • random позволяет выбрать случайное значение из списка

В документации Ansible есть ещё с десяток похожих фильтров, которые ищут пересечение между списками, объединения и т.д.

При выполнении этого плейбука мы получим вот такой результат:

$ ansible-playbook playbook.yml -i production.ini
TASK [get min number] *************************
ok: [localhost] => {
    "msg": "1"
}

TASK [get max number] *************************
ok: [localhost] => {
    "msg": "3"
}

TASK [get unique values] **********************
ok: [localhost] => (item=numbers | unique) => {
    "ansible_loop_var": "item",
    "item": "numbers | unique",
    "numbers | unique": [
        3,
        2,
        1
    ]
}

TASK [get random value] ***********************
ok: [localhost] => {
    "msg": "a"
}

Вот ещё несколько примеров:

- hosts: all
  gather_facts: no
  vars:
    path: /var/log/upstart/nginx.log
  tasks:
    - debug: msg={{ '192.0.2.1/24' | ipaddr('address') }}
    - debug: msg={{ 'test1' | hash('sha1') }}
    - debug: msg={{ path | basename }}
    - debug: msg={{ path | dirname }}
    - debug: msg={{ "~/Movies" | expanduser }}

Рассмотрим фильтры, которые мы использовали, более подробно:

  • Фильтр ipaddr позволяет извлекать из ip-адреса различные части. Для его работы возможно придётся установить дополнительный Python-пакет. В документации об этом написано.
  • Фильтр hash создаёт хэш.
  • Фильтры basename и dirname работают с путями. С помощью них можно выделить имя файла и путь к директории.
  • expanduser раскрывает тильды и делает подстановку.

Запустите этот плейбук самостоятельно и изучите его вывод.


<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 «Политикой конфиденциальности» и «Условиями оказания услуг».