В этой части 7 серии Ansible вы узнаете, как создавать и использовать шаблоны в Ansible для создания настраиваемых конфигураций на управляемых узлах.
Создание шаблонов в Ansible – это простой и удобный способ передачи пользовательских конфигураций на управляемые узлы, работающие в разных системах, с минимальным редактированием файлов playbook.
Что такое шаблоны в Ansible?
Чтобы лучше понять, что такое шаблон, давайте рассмотрим, как ИТ-менеджер готовит электронное письмо, чтобы пригласить свой отдел на коктейльную вечеринку.
Электронное письмо отправляется каждому из участников, а также предлагается придти вместе со своими супругами.
Электронная почта была настроена таким образом, что тело письма остается тем же, но адресаты и имена их соответствующих супругов различаются.
Письмо становится шаблоном, а получатели и соответствующие супруги – переменными.
Это был общий пример.
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
vlan {{ vlan.id }} name {{ vlan.name }}
- hosts tasks: - name: Rendering VLAN configuration template: src: vlans.j2 dest: "vlan_configs/{{ inventory_hostname }}.conf"
Пример 1. Настройка веб-серверов в разных дистрибутивах
В этом примере мы создадим файлы index.html, которые будут отображать информацию об имени хоста и ОС двух веб-серверов, работающих под управлением CentOS и Ubuntu.
Ubuntu 18 - IP address: 173.82.202.239 CentOS 7 - IP address: 173.82.115.165
Для CentOS 7
Для Ubuntu 18.04
--- - hosts: all become: yes tasks: - name: Install index.html template: src: index.html.j2 dest: /var/www/html/index.html mode: 0777
Не забывайте ставить расширение .j2 в конце, чтобы указать, что это файл jinja2.
Давайте теперь создадим файл шаблона index.html.j2.
<html> <center> <h1> The hostname of this webserver is {{ ansible_hostname }}</h1> <h3> It is running on {{ ansible_os_family}}system </h3> </center> </html>
Этот шаблон представляет собой базовый HTML-файл, где ansible_hostname и ansible_os_family являются встроенными переменными, которые будут заменены соответствующими именами хостов и операционными системами отдельных веб-серверов в браузере.
Теперь давайте запустим плейбук.
# ansible-playbook test_server.yml
Для CentOS 7
Для Ubuntu 18.04
ФИЛЬТРЫ:
Иногда вы можете решить заменить значение переменной строкой, которая появляется определенным образом.
Пример 1. Создание строк в верхнем / нижнем регистре
Например, в предыдущем примере мы можем решить сделать так, чтобы переменные Ansible отображались в верхнем регистре.
Для этого добавьте значение upper переменной.
Таким образом, значение в переменной преобразуется в верхний регистр.
{{ ansible_hostname | upper }} => CENTOS 7 {{ ansible_os_family | upper }} => REDHAT

{{ ansible_hostname | lower }} => centos 7 {{ ansible_os_family | lower }} => redhat

Пример 2: заменить строку на другую
Кроме того, вы можете заменить одну строку другой.
Например:
Название фильма: {{movie_name}} => Название фильма: Ring
Чтобы заменить вывод другой строкой, используйте аргумент replace, как показано ниже:
{{ movie_name | replace (“Ring“,”Heist”) }} =>
Название фильма – «Heist».