В этой части 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
Чтобы отобразить эту конфигурацию, соответствующий шаблон jinja2 с именем vlans.j2 должен выглядеть так, как показано далее.
Как видите, переменные vlan.id и vlan.name заключены в фигурные скобки.
vlan {{ vlan.id }}
  name {{ vlan.name }}
Собрав все это вместе в playbook, который совмещает разные хост-машины, это будет выглядеть так:
    - 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
Веб-сервер Apache уже установлен на обоих серверах.

Для CentOS 7

Для Ubuntu 18.04

Итак, давайте создадим playbook test_server.yml, как показано ниже:
---

 - hosts: all
   become: yes

   tasks:

    - name: Install index.html
      template:
        src: index.html.j2
        dest: /var/www/html/index.html
        mode: 0777
Наш шаблон файла Jinja — index.html.j2, который будет помещен в файл index.html на каждом веб-сервере.

Не забывайте ставить расширение .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.

Для CentOS 7

Для Ubuntu 18.04

Как видите, на каждом сервере отображается различная информация об имени хоста и семействе ОС.
Вот как круто работает Jinja2 шаблонизатор!

ФИЛЬТРЫ:

Иногда вы можете решить заменить значение переменной строкой, которая появляется определенным образом.

Пример 1. Создание строк в верхнем / нижнем регистре

Например, в предыдущем примере мы можем решить сделать так, чтобы переменные Ansible отображались в верхнем регистре.

Для этого добавьте значение upper переменной.

Таким образом, значение в переменной преобразуется в верхний регистр.

{{ ansible_hostname | upper }} => CENTOS 7
{{ ansible_os_family | upper }} => REDHAT
Точно так же вы можете преобразовать вывод строки в нижний регистр, добавив аргумент lower
{{ ansible_hostname | lower }}  => centos 7
{{ ansible_os_family | lower }} => redhat

Пример 2: заменить строку на другую

Кроме того, вы можете заменить одну строку другой.

Например:

Название фильма: {{movie_name}} => Название фильма: Ring

Чтобы заменить вывод другой строкой, используйте аргумент replace, как показано ниже:

Название фильма: {{ movie_name | replace (“Ring“,”Heist”) }} => Название фильма — «Heist».
И это все по этой лекции.
Присоединяйтесь к нам в следующей теме, где мы будем работать с переменными и фактами.
Поделитесь статьей:

Добавить комментарий