В этом Часть 7 из Серия Ansible, вы узнаете, как создавать и использовать шаблоны в Ansible для создания настраиваемых конфигураций на управляемых узлах. Шаблоны в Ansible - это простой и удобный способ передачи пользовательских конфигураций на управляемые узлы, на которых работают разные системы, с минимальным редактированием файлов playbook.
Чтобы лучше понять, что такое шаблон, давайте рассмотрим, как ИТ-менеджер пишет электронное письмо, чтобы пригласить свой отдел на коктейльную вечеринку. Электронное письмо отправляется каждому из участников, а также предлагает им пометиться вместе со своими супругами.
Электронное письмо было настроено таким образом, что тело письма остается прежним, но адресаты и имена их супругов различаются. Электронное письмо становится шаблон, а получатели и соответствующие супруги переменные.
Это был общий пример. Ansible использует Jinja2 который представляет собой современный механизм шаблонов для фреймворков Python, используемый для генерации динамического контента или выражений. Шаблоны чрезвычайно полезны при создании пользовательских файлов конфигурации для нескольких серверов, но уникальных для каждого из них.
Jinja2 использует двойные фигурные скобки {{... }}
чтобы заключить переменную, которая была определена. Для комментариев используйте {{# #}
а для условных операторов используйте {% … %}
.
Предположим, у вас есть модель данных Сети VLAN в вашей сети с хост-системами, которые вы хотите протолкнуть на их соответствующие Сети VLAN как показано.
vlans: - id: 10 name: LB - id: 20 name: WB_01 - id: 30 name: WB_02 - id: 40 name: DB.
Чтобы отобразить эту конфигурацию, соответствующий jinja2 шаблон называется vlans.j2 будет выглядеть так, как показано. Как видите, переменные vlan.id и vlan.name были заключены в фигурные скобки.
vlan {{vlan.id}} имя {{vlan.name}}
Собирая все это вместе в playbook, который размещает разные хост-машины, это будет выглядеть, как показано:
- задачи хостов: - имя: Отображение шаблона конфигурации VLAN: src: vlans.j2 dest: "vlan_configs / {{inventory_hostname}}. conf"
В этом примере мы создадим index.html файлы, которые будут отображать информацию о имя хоста и ОС 2 запущенных веб-серверов CentOS и Ubuntu.
Ubuntu 18 - IP-адрес: 173.82.202.239. CentOS 7 - IP-адрес: 173.82.115.165.
Веб-сервер Apache уже установлен на обоих серверах.
Итак, давайте создадим сценарий test_server.yml как показано:
- хосты: все становятся: да задачи: - имя: Установить шаблон index.html: src: index.html.j2 dest: /var/www/html/index.html mode: 0777.
Наш Джиндзя шаблон файла index.html.j2 который будет перенесен в index.html файл на каждом веб-сервере. Всегда не забывайте ставить расширение .j2
в конце, чтобы обозначить, что это файл jinja2.
Давайте теперь создадим файл шаблона index.html.j2.
Имя хоста этого веб-сервера: {{ansible_hostname}}.
Он работает в системе {{ansible_os_family}}
Этот шаблон представляет собой базовый HTML-файл, в котором ansible_hostname и ansible_os_family - это встроенные переменные, которые будут заменены соответствующими именами хостов и операционными системами отдельных веб-серверов в браузере.
А теперь давайте запустим сценарий.
# ansible-playbook test_server.yml.
Теперь давайте перезагрузим веб-страницы для обоих CentOS 7 и Ubuntu веб-серверы.
Как видите, на каждом сервере отображается разная информация об имени хоста и семействе ОС. И это как круто Jinja2 шаблоны есть!
Иногда вы можете решить заменить значение переменной строкой, которая отображается определенным образом.
Например, в предыдущем примере мы можем решить, чтобы переменные Ansible отображались в верхнем регистре. Для этого добавьте к переменной верхнее значение. Таким образом значение переменной преобразуется в формат верхнего регистра.
{{ansible_hostname | верхний}} => CENTOS 7. {{ansible_os_family | верхний}} => REDHAT.
Точно так же вы можете преобразовать строковый вывод в нижний регистр, добавив нижний аргумент.
{{ansible_hostname | нижний}} => centos 7. {{ansible_os_family | нижний}} => redhat.
Кроме того, вы можете заменить одну строку другой.
Например:
Название фильма {{movie_name}} =>
Название фильма Звенеть.
Чтобы заменить вывод другой строкой, используйте аргумент replace, как показано:
Название фильма {{movie_name | replace («Кольцо», «Ограбление»)}} =>
Название фильма Ограбление.
Чтобы получить наименьшее значение в массиве, используйте мин фильтр.
{{[2, 3, 4, 5, 6, 7] | min}} => 2.
Точно так же, чтобы получить наибольшее число, используйте Максимум фильтр.
{{[2, 3, 4, 5, 6, 7] | max}} => 7.
Чтобы отобразить уникальные значения, используйте уникальный фильтр.
{{[2, 3, 3, 2, 6, 7] | уникальный}} => 2, 3.
Использовать случайный фильтр, чтобы получить случайное число от 0 до значения.
{{50 | random}} => Некоторое случайное число.
Как и в языках программирования, у нас есть петли в Ansible Jinja2.
Например, чтобы сгенерировать файл, содержащий список чисел, используйте для цикла как показано в примере ниже:
{% для числа в [0, 1, 2, 3, 4, 5, 6, 7]%} {{ номер }} {% конец для%}
Вы также можете комбинировать цикл for с если еще операторы для фильтрации и получения определенных значений.
{% для числа в [0, 1, 2, 3, 4, 5, 6, 7]%} {% if number == 5%} {{number}} {% endif%} {% endfor%}
На этом лекция закончилась. Присоединяйтесь к нам в следующей теме, где мы окунемся в работу с доступными переменными и фактами.