Ansible

Как использовать модуль шаблонов Ansible

Как использовать модуль шаблонов Ansible
Ансибл шаблон модуль в основном используется для копирования файлов с клиента Ansible (где установлен Ansible) на хосты Ansible (под управлением Ansible). Преимущество использования шаблон модуль, а не копировать модуль, заключается в том, что Ansible шаблон модуль может использовать язык шаблонов Jinja2. Jinja2 - это мощный язык шаблонов Python, с помощью которого вы можете создавать файлы конфигурации, веб-страницы и т. д. Вы также можете использовать переменные, циклы и условия Ansible в своих шаблонах Jinja2.

Эта статья покажет вам, как использовать 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.нодекит.ком) в файле инвентаря.

По завершении этого шага сохраните файл, нажав + Икс, с последующим Y а также .

Создайте файл конфигурации Ansible в каталоге проекта, как показано ниже:

$ нано доступный.cfg

Затем введите следующие строки в анзибль.cfg файл.

После завершения этого шага сохраните файл, нажав + Икс, с последующим Y а также .

На этом этапе каталог проекта должен выглядеть следующим образом:

$ 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 шаблон модуль.

По завершении этого шага сохраните файл, нажав + Икс, с последующим Y а также .

Создать индекс.jinja2 файл шаблона в пьесы / шаблоны каталог, а именно:

$ nano playbooks / templates / index.jinja2

Введите следующие строки в индекс.jinja2 файл шаблона:




Демонстрация шаблона Jinja2


Добро пожаловать в Linuxhint!



Это простой HTML-файл. Я не использовал здесь какой-либо причудливый синтаксис Jinja2.

По завершении этого шага сохраните файл, нажав + Икс, с последующим Y а также .

Запустите 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 файл должен выглядеть так, как показано на скриншоте ниже.

По завершении этого шага сохраните файл, нажав + Икс, с последующим Y а также .

Запустите 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 файл шаблона должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Теперь запустите playbook copy_file_template1.ямл следующим образом:

Плейбуки $ ansible-playbook / copy_file_template1.ямл

Как видите, на моем удаленном хосте Debian индекс.html файл имеет строку

Вы используете Debian Linux

. Однако на моем удаленном хосте CentOS линии нет. Итак, Jinja2 если состояние рабочее.

Условно: оператор 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 файл шаблона должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Запустите playbook copy_file_template1.ямл следующим образом:

Плейбуки $ ansible-playbook / copy_file_template1.ямл

Как видите, на моем удаленном хосте Debian индекс.html файл имеет строку

Вы используете Debian Linux

. Но на моем удаленном хосте CentOS индекс.html файл имеет строку

Вы не используете Debian Linux

. Итак, Jinja2 если еще состояние рабочее.

Условно: оператор 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 файл шаблона должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Запустите playbook copy_file_template1.ямл следующим образом:

Плейбуки $ ansible-playbook / copy_file_template1.ямл

Как видите, на моем удаленном хосте Debian индекс.html файл имеет строку

Вы используете Debian Linux

.

На моем удаленном хосте CentOS индекс.html файл имеет строку

Вы используете CentOS Linux

.

Если бы у меня был другой удаленный хост под управлением ОС, отличной от Debian или CentOS, на нем была бы строка

Ваша операционная система не поддерживается

в индекс.html файл.

Итак, Jinja2 if-elif состояние рабочее.

Циклы в шаблоне Jinja2

Вы также можете печатать массивы и объекты с помощью циклов в Jinja2.
Джиндзя2 для синтаксис цикла следующий:

% для variableName в arrayName%
Сделайте что-нибудь с 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 должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Теперь откройте индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:

$ nano playbooks / templates / index.jinja2

Добавьте следующие строки в индекс.jinja2 файл шаблона:

Здесь я создаю простую панель навигации HTML с помощью Jinja2 для петля. Цикл повторяется через меню массив (который я определил в copy_file_template1.yaml playbook) и генерирует меню элемент в каждой итерации.

Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Запустите 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 должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Открой индекс.jinja2 Шаблон Jinja2 с текстовым редактором nano, как показано ниже:

$ nano playbooks / templates / index.jinja2

Затем добавьте следующие строки в индекс.jinja2 файл шаблона:

Все, что вы видите здесь, такое же, как в предыдущем примере. Единственная разница в том, что я печатаю свойства объекта название (с использованием меню.название) а также ссылка на сайт (с использованием меню.ссылка на сайт) в моем индекс.jinja2 Шаблон Jinja2.

Наконец, индекс.jinja2 файл шаблона должен выглядеть так, как показано на скриншоте ниже.

После редактирования файла сохраните файл, нажав + Икс, с последующим Y а также .

Теперь запустите playbook copy_file_template1.ямл следующим образом:

Плейбуки $ ansible-playbook / copy_file_template1.ямл

Как видите, Jinja2 для цикл сгенерировал панель навигации HTML (в индекс.html файл) из массива объектов.

Что дальше?

В этой статье я показал вам, как использовать Ansible шаблон модуль и описал некоторые основы языка шаблонов Jinja2. Посетите официальный сайт Jinja2, чтобы узнать больше о языке шаблонов Jinja2.

Лучшие игры с отслеживанием рук
Oculus Quest недавно представил отличную идею отслеживания рук без контроллеров. С постоянно растущим числом игр и действий, которые осуществляются фо...
Как показать наложение OSD в полноэкранных приложениях и играх Linux
Игра в полноэкранные игры или использование приложений в полноэкранном режиме без отвлекающих факторов может отрезать вас от соответствующей системной...
Топ-5 карт для захвата игр
Все мы видели и любили потоковые игры на YouTube. PewDiePie, Jakesepticye и Markiplier - лишь некоторые из лучших игроков, которые заработали миллионы...