Эта статья покажет вам, как использовать Ansible шаблон модуль и некоторые основы языка шаблонов Jinja2. Итак, приступим!
Предпосылки
Если вы хотите попробовать примеры из этой статьи:
1) На вашем компьютере должен быть установлен Ansible.
2) У вас должен быть как минимум хост Ubuntu / Debian или хост CentOS / RHEL 8, настроенный для автоматизации Ansible.
На LinuxHint есть много статей, посвященных установке Ansible и настройке хостов для автоматизации Ansible. Вы также можете проверить их, если необходимо.
Настройка каталога проектов Ansible
Прежде чем мы продолжим, рекомендуется создать структуру каталогов проекта, чтобы все было немного организовано.
Чтобы создать каталог проекта шаблон-демонстрация / и все необходимые подкаталоги (в вашем текущем рабочем каталоге), выполните следующую команду:
$ mkdir -pv шаблон-демонстрация / плейбуки / шаблоны
После создания каталога проекта перейдите в каталог проекта, как показано ниже:
$ cd template-demo /
Создать хозяева файл инвентаризации, как показано ниже:
$ nano хосты
Затем добавьте IP-адрес вашего хоста или DNS-имя (vm1.нодекит.ком а также vm2.нодекит.ком) в файле инвентаря.
По завершении этого шага сохраните файл, нажав
Создайте файл конфигурации Ansible в каталоге проекта, как показано ниже:
$ нано доступный.cfg
Затем введите следующие строки в анзибль.cfg файл.
После завершения этого шага сохраните файл, нажав
На этом этапе каталог проекта должен выглядеть следующим образом:
$ tree
Как видите, хосты Ansible также доступны. Итак, мы можем перейти к следующему разделу этой статьи.
$ ansible all -u ansible -m пинг
Основы модуля шаблонов Ansible
В шаблон модуль Ansible принимает те же параметры, что и копировать модуль Ansible.
Common Ansible шаблон параметры модуля:
src - Путь к файлу шаблона Jinja2 на вашем компьютере, который будет проанализирован языком шаблонов Jinja2 и скопирован на удаленные хосты.
dest - Путь назначения на удаленных хостах, на который будет скопирован файл.
владелец - Владелец файла на удаленных хостах.
группа - Группа файла на удаленных хостах.
Режим - Режим доступа к файлам на удаленных хостах.
Давайте посмотрим на пример.
Сначала создайте новую пьесу Ansible copy_file_template1.ямл в пьесы / каталог, а именно:
$ nano playbooks / copy_file_template1.ямл
Затем введите следующие строки в copy_file_template1.ямл учебник.
- хосты: всепользователь: ansible
задачи:
- имя: Копировать индекс.html файл на сервер
шаблон:
src: index.jinja2
место назначения: / дом / анзибль / индекс.html
владелец: ansible
группа: анзибль
режим: 0644
Этот сценарий будет копировать индекс.jinja2 файл из пьесы / шаблоны / каталог (относительно каталога вашего проекта) на удаленные хосты с помощью Ansible шаблон модуль.
По завершении этого шага сохраните файл, нажав
Создать индекс.jinja2 файл шаблона в пьесы / шаблоны каталог, а именно:
$ nano playbooks / templates / index.jinja2
Введите следующие строки в индекс.jinja2 файл шаблона:
Добро пожаловать в Linuxhint!
Это простой HTML-файл. Я не использовал здесь какой-либо причудливый синтаксис Jinja2.
По завершении этого шага сохраните файл, нажав
Запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Плейбук должен успешно работать.
Как видите, индекс.jinja2 шаблон был отрисован с использованием языка шаблонов Jinja2. Отрендеренный контент следует скопировать в индекс.html файл удаленных хостов.
Печать переменных в шаблоне Jinja2
Вы можете использовать Ansible факты, переменные и пользовательские переменные в своих шаблонах Jinja2.
В вашем шаблоне Jinja2 вы можете распечатать значение переменной, используя имя_переменной синтаксис. Если переменная является объектом, вы можете распечатать отдельные свойства объекта, используя objectVariable.Имя свойства синтаксис.
В следующем примере мы напечатаем Дата собственность ansible_date_time объект в нашем индекс.jinja2 шаблон.
Настройка $ ansible all -u ansible -m | egrep --color 'дата | время'
Сначала откройте индекс.jinja2 файл шаблона в текстовом редакторе nano, как показано ниже:
$ nano playbooks / шаблоны / index.jinja2
Добавьте следующую строку в индекс.jinja2 файл шаблона:
Страница создана ansible_date_time.Дата
Финал индекс.jinja2 файл должен выглядеть так, как показано на скриншоте ниже.
По завершении этого шага сохраните файл, нажав
Запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Как видите, индекс.jinja2 шаблон был обработан языком шаблонов Jinja2 и заменил ansible_date_time.Дата переменная с датой в ГГГГ-ММ-ДД формат. Затем результат был скопирован на индекс.html файл на удаленном хосте.
Условный оператор if в шаблоне Jinja2
Язык шаблонов Jinja2 поддерживает условные если заявления. Вы можете проверить определенные переменные перед печатью чего-либо, используя если утверждение.
Джиндзя2 если синтаксис следующий:
% if condition%Сделайте что-нибудь, если условие верно
% endif%
Давайте посмотрим на пример Jinja2 если утверждение.
В этом разделе я продемонстрирую Jinja2 если заявление с использованием ansible_distribution переменная фактов.
Настройка $ ansible all -u ansible -m | egrep --color 'dist'
Сначала откройте индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:
$ nano playbooks / templates / index.jinja2
Затем добавьте следующие строки в индекс.jinja2 файл шаблона:
% if ansible_distribution == "Debian"%Вы используете Debian Linux
% endif%
Здесь я проверил, есть ли ansible_distribution является Debian. Если это так, то выведите строку Вы используете Debian Linux
Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Теперь запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Как видите, на моем удаленном хосте Debian индекс.html файл имеет строку Вы используете Debian Linux
Условно: оператор if-else в шаблоне Jinja2
Язык шаблонов Jinja2 поддерживает условные если еще заявления. Вы можете распечатать одно, если условие совпадает, и другое, если оно не использует если еще утверждение.
Джиндзя2 если еще синтаксис следующий:
% если условие%Сделайте что-нибудь, если условие верно
% еще %
Сделайте что-нибудь, если условие неверно
% endif%
Давайте посмотрим на пример Jinja2 если еще утверждение.
Сначала откройте индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:
$ nano playbooks / templates / index.jinja2
Затем добавьте следующие строки в индекс.jinja2 файл шаблона:
% if ansible_distribution == "Debian"%Вы используете Debian Linux
% еще %
Вы не используете Debian Linux
% endif%
Здесь я проверил, есть ли ansible_distribution является Debian. Если это так, то выведите строку Вы используете Debian Linux Вы не используете Debian Linux
Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Как видите, на моем удаленном хосте Debian индекс.html файл имеет строку Вы используете Debian Linux Вы не используете Debian Linux
Условно: оператор if-elif в шаблоне Jinja2
Язык шаблонов Jinja2 поддерживает условные if-elif заявления.
Джиндзя2 if-elif синтаксис следующий:
% if condition1%Сделайте что-нибудь, если условие1 истинно
% elif condition2%
Сделайте что-нибудь, если условие2 истинно
% elif condition3%
Сделайте что-нибудь, если условие3 истинно
…
% elif conditionN%
Сделайте что-нибудь, если условиеN истинно
% еще %
Сделайте что-нибудь, если ни одно из условий не выполняется
% endif%
Здесь % еще % раздел не является обязательным, но он есть, если он вам нужен.
Давайте посмотрим на пример Jinja2 if-elif утверждение.
Сначала откройте индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:
$ nano playbooks / templates / index.jinja2
Затем добавьте следующие строки в индекс.jinja2 файл шаблона:
% if ansible_distribution == "Debian"%Вы используете Debian Linux
% elif ansible_distribution == "CentOS"%
Вы используете CentOS Linux
% еще %
Ваша операционная система не поддерживается
% endif%
Здесь я проверил, есть ли ansible_distribution является Debian. Если это так, то выведите строку Вы используете Debian Linux
Я также проверил, есть ли ansible_distribution является CentOS. Если это так, то выведите строку Вы используете CentOS Linux
В противном случае распечатайте Ваша операционная система не поддерживается
Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Как видите, на моем удаленном хосте Debian индекс.html файл имеет строку Вы используете Debian Linux
На моем удаленном хосте CentOS индекс.html файл имеет строку Вы используете CentOS Linux
Если бы у меня был другой удаленный хост под управлением ОС, отличной от Debian или CentOS, на нем была бы строка Ваша операционная система не поддерживается
Итак, Jinja2 if-elif состояние рабочее.
Циклы в шаблоне Jinja2
Вы также можете печатать массивы и объекты с помощью циклов в Jinja2.
Джиндзя2 для синтаксис цикла следующий:
Сделайте что-нибудь с variableName
% endfor%
Здесь на каждой итерации массива arrayName, один из элементов массива (начиная с начала массива) присваивается имя_переменной Переменная. Вы можете что-то сделать с этой переменной внутри цикла.
Давайте посмотрим, как вы можете распечатать элементы массива в своем шаблоне Jinja2 в следующем примере.
Сначала откройте copy_file_template1.ямл Ansible playbook с текстовым редактором nano, как показано ниже:
$ nano playbooks / copy_file_template1.ямл
Затем добавьте следующие строки в copy_file_template1.ямл файл playbook:
вары:меню:
- Дом
- Продукты
- О нас
- Свяжитесь с нами
Здесь я добавил меню массив в copy_file_template1.ямл учебник. Затем я напечатаю элементы массива, используя цикл в моем индекс.jinja2 Файл шаблона Jinja2.
Наконец, copy_file_template1.ямл файл playbook должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Теперь откройте индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:
$ nano playbooks / templates / index.jinja2
Добавьте следующие строки в индекс.jinja2 файл шаблона:
Здесь я создаю простую панель навигации HTML с помощью Jinja2 для петля. Цикл повторяется через меню массив (который я определил в copy_file_template1.yaml playbook) и генерирует меню элемент в каждой итерации.
Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Как видите, Jinja2 для цикл сгенерировал панель навигации HTML (в индекс.html файл).
Вы также можете получить доступ к массиву объектов в вашем шаблоне Jinja2.
Давайте посмотрим на другой пример.
Сначала откройте copy_file_template1.ямл Ansible playbook с текстовым редактором nano, как показано ниже:
$ nano playbooks / copy_file_template1.ямл
Затем добавьте следующие строки в copy_file_template1.ямл файл playbook:
вары:меню:
- имя: Дом
ссылка: / home
- имя: Продукция
ссылка: / продукты
- имя: О нас
ссылка: / about-us
- имя: Свяжитесь с нами
ссылка: / свяжитесь с нами
Здесь я добавил меню массив объектов в copy_file_template1.ямл учебник. Каждый из этих объектов имеет два свойства: название собственность и ссылка на сайт имущество.
Наконец, copy_file_template1.ямл файл playbook должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Открой индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:
$ nano playbooks / templates / index.jinja2
Затем добавьте следующие строки в индекс.jinja2 файл шаблона:
Все, что вы видите здесь, такое же, как в предыдущем примере. Единственная разница в том, что я печатаю свойства объекта название (с использованием меню.название) а также ссылка на сайт (с использованием меню.ссылка на сайт) в моем индекс.jinja2 Шаблон Jinja2.
Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.
После редактирования файла сохраните файл, нажав
Теперь запустите playbook copy_file_template1.ямл следующим образом:
Плейбуки $ ansible-playbook / copy_file_template1.ямл
Как видите, Jinja2 для цикл сгенерировал панель навигации HTML (в индекс.html файл) из массива объектов.
Что дальше?
В этой статье я показал вам, как использовать Ansible шаблон модуль и описал некоторые основы языка шаблонов Jinja2. Посетите официальный сайт Jinja2, чтобы узнать больше о языке шаблонов Jinja2.