Отговорни

Как да използвам модула Ansible Template

Как да използвам модула Ansible Template
Отговорното шаблон модул се използва главно за копиране на файлове от клиента 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 Project Directory

Преди да продължим по-нататък, добре е да създадем структура на директория на проекти, само за да поддържаме нещата малко организирани.

За да създадете директория на проекта шаблон-демо / и всички необходими поддиректории (в текущата работна директория), изпълнете следната команда:

$ mkdir -pv template-demo / playbooks / templates

След като директорията на проекта е създадена, отидете до директорията на проекта, както следва:

$ cd шаблон-демо /

Създавам домакини инвентарен файл, както следва:

$ nano домакини

След това добавете IP или DNS името на вашия хост (vm1.нодеките.com и vm2.нодеките.com) в инвентарния файл.

След като приключите с тази стъпка, запазете файла, като натиснете + х, следван от Y и .

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

$ nano ansible.cfg

След това въведете следните редове в ансибъл.cfg файл.

След като приключите с тази стъпка, запазете файла, като натиснете + х, следван от Y и .

В този момент директорията на проекта трябва да изглежда както следва:

$ дърво

Както можете да видите, Ansible хостовете също са достъпни. И така, можем да преминем към следващия раздел на тази статия.

$ ansible all -u ansible -m ping

Основи на модула за отговорен шаблон

The шаблон модул на Ansible приема същите опции като копие модул на Ansible.

Често отговорен шаблон опции на модула:

src - Пътят на файла на шаблона Jinja2 на вашия компютър, който ще бъде анализиран от езика за шаблони на Jinja2 и копиран на отдалечените хостове.
дест - Целевият път на отдалечените хостове, към който ще бъде копиран файлът.
собственик - Собственикът на файла на отдалечените хостове.
група - Групата на файла на отдалечените хостове.
режим - Режимът за разрешаване на файлове на отдалечените хостове.

Нека разгледаме един пример.

Първо, създайте нова книга за игра Ansible copy_file_template1.ямъл в книги за игри / директория, както следва:

$ nano playbooks / copy_file_template1.ямъл

След това въведете следните редове в copy_file_template1.ямъл книга за игри.

- домакини: всички
потребител: ansible
задачи:
- име: Копиране на индекс.html файл към сървър
шаблон:
src: индекс.jinja2
dest: / home / ansible / index.html
собственик: ансибъл
група: анзибъл
режим: 0644

Тази книга ще копира индекс.jinja2 файл от книги за игра / шаблони / директория (спрямо директорията на вашия проект) към отдалечените хостове с помощта на Ansible шаблон модул.

След като приключите с тази стъпка, запазете файла, като натиснете + х, следван от Y и .

Създайте индекс.jinja2 файл на шаблон в книги за игра / шаблони директория, както следва:

$ nano playbooks / templates / index.jinja2

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




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


Добре дошли в Linuxhint!



Това е просто обикновен HTML файл. Тук не използвах изискан синтаксис на Jinja2.

След като приключите с тази стъпка, запазете файла, като натиснете + х, следван от Y и .

Стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

Книгата за игри трябва да работи успешно.

Както можете да видите, индекс.jinja2 Шаблонът е изобразен с помощта на шаблонен език Jinja2. Изобразеното съдържание трябва да бъде копирано в индекс.html файл на отдалечените хостове.

Печат на променливи в шаблон Jinja2

Можете да използвате Ansible факти, променливи и дефинирани от потребителя променливи във вашите шаблони на Jinja2.

На вашия шаблон Jinja2 можете да отпечатате стойността на променлива с помощта на име на променлива синтаксис. Ако променливата е обект, можете да отпечатате отделни свойства на обекта с помощта на objectVariable.име на собственост синтаксис.

В примера, който следва, ще отпечатаме дата собственост на ansible_date_time обект в нашия индекс.jinja2 шаблон.

$ ansible all -u ansible -m setup | egrep --color 'дата | час'

Първо отворете индекс.jinja2 файл с шаблон с нано текстов редактор, както следва:

$ nano playbooks / templates / index.jinja2

Добавете следния ред към индекс.jinja2 файл с шаблон:

Страницата е генерирана на ansible_date_time.дата

Финалът индекс.jinja2 файлът трябва да изглежда както е показано на екранната снимка по-долу.

След като приключите с тази стъпка, запазете файла, като натиснете + х, следван от Y и .

Стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

Както можете да видите, индекс.jinja2 Шаблонът беше обработен от шаблонен език Jinja2 и замени ansible_date_time.дата променлива с датата в ГГГГ-ММ-ДД формат. След това изходът беше копиран в индекс.html файл на отдалечения хост.

Условно if изявление в шаблон Jinja2

Езикът за шаблониране Jinja2 поддържа условен ако изявления. Можете да проверите определени променливи, преди да отпечатате каквото и да е, като използвате ако изявление.

Джинджа2 ако синтаксисът е както следва:

% ако условие%
Направете нещо, ако условието е вярно
% endif%

Нека да видим пример за Jinja2 ако изявление.

В този раздел ще демонстрирам Jinja2 ако с помощта на ansible_distribution факти променлива.

$ ansible all -u ansible -m setup | egrep - цвят "dist"

Първо отворете индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:

$ nano playbooks / templates / index.jinja2

След това добавете следните редове в индекс.jinja2 файл с шаблон:

% if ansible_distribution == "Debian"%

Работите с Debian Linux


% endif%

Ето, проверих дали ansible_distribution е Debian. Ако е, отпечатайте низа

Работите с Debian Linux

. В противен случай не го отпечатвайте.

И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Сега стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

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

Работите с Debian Linux

. На моя отдалечен хост CentOS обаче линията не присъства. И така, Jinja2 ако състоянието работи.

Условно: if-else изявление в шаблон Jinja2

Езикът за шаблониране Jinja2 поддържа условен ако-друго изявления. Можете да отпечатате едно нещо, ако условието съвпада и да отпечатате нещо друго, ако не използва ако-друго изявление.

Джинджа2 ако-друго синтаксисът е както следва:

% ако условие%
Направете нещо, ако условието е вярно
% else%
Направете нещо, ако състоянието е невярно
% endif%

Нека да видим пример за Jinja2 ако-друго изявление.

Първо отворете индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:

$ nano playbooks / templates / index.jinja2

След това добавете следните редове в индекс.jinja2 файл с шаблон:

% if ansible_distribution == "Debian"%

Работите с Debian Linux


% else%

Не използвате Debian Linux


% endif%

Ето, проверих дали ansible_distribution е Debian. Ако е, отпечатайте низа

Работите с Debian Linux

. В противен случай отпечатайте

Не използвате Debian Linux

.

И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

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

Работите с Debian Linux

. Но на моя отдалечен хост CentOS, индекс.html файлът има реда

Не използвате Debian Linux

. И така, Jinja2 ако-друго състоянието работи.

Условно: if-elif изявление в шаблон Jinja2

Езикът за шаблониране Jinja2 поддържа условен if-elif изявления.

Джинджа2 if-elif синтаксисът е както следва:

% ако условие1%
Направете нещо, ако условието1 е вярно
% elif условие2%
Направете нещо, ако условието2 е вярно
% elif условие3%
Направете нещо, ако условието3 е вярно
..
% elif условиеN%
Направете нещо, ако условиетоN е вярно
% else%
Направете нещо, ако никое от условията не е вярно
% endif%

Ето, % else% раздел е по избор, но той е там, ако имате нужда от него.

Нека да видим пример за Jinja2 if-elif изявление.

Първо отворете индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:

$ nano playbooks / templates / index.jinja2

След това добавете следните редове в индекс.jinja2 файл с шаблон:

% if ansible_distribution == "Debian"%

Работите с Debian Linux


% elif ansible_distribution == "CentOS"%

Работите с CentOS Linux


% else%

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


% endif%

Ето, проверих дали ansible_distribution е Debian. Ако е, отпечатайте низа

Работите с Debian Linux

.

Проверил съм и дали ansible_distribution е CentOS. Ако е, отпечатайте низа

Работите с CentOS Linux

.

В противен случай отпечатайте

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

.

И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

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

Работите с Debian Linux

.

На моя отдалечен хост CentOS, индекс.html файлът има реда

Работите с CentOS Linux

.

Ако имах друг отдалечен хост с операционна система, различна от Debian или CentOS, той щеше да има линията

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

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

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

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

Можете също да отпечатвате масиви и обекти с помощта на цикли в Jinja2.
Джинджа2 за цикъл синтаксис е както следва:

% за име на променлива в име на масив%
Направете нещо с variableName
% endfor%

Тук, във всяка итерация на масива arrayName, един от елементите на масива (започвайки от началото на масива) е присвоен на променливаName променлива. Можете да направите нещо с тази променлива в цикъла.

Нека да видим как можете да отпечатате елементи от масив във вашия шаблон Jinja2 в следващия пример.

Първо отворете copy_file_template1.ямъл Отговорна книга за игри с нано текстов редактор, както следва:

$ nano playbooks / copy_file_template1.ямъл

След това добавете следните редове в copy_file_template1.ямъл файл на playbook:

варира:
менюта:
- У дома
- Продукти
- За нас
- Свържете се с нас

Тук добавих a менюта масив в copy_file_template1.ямъл книга за игри. След това ще отпечатам елементите на масива, като използвам цикъл в моя индекс.jinja2 Файл с шаблон на Jinja2.

И накрая, copy_file_template1.ямъл файлът на playbook трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Сега отворете индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:

$ nano playbooks / templates / index.jinja2

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

Тук генерирам обикновена лента за навигация в HTML с помощта на Jinja2 за цикъл. Цикълът преминава през менюта масив (който съм дефинирал в copy_file_template1.yaml playbook) елементи и генерира a меню елемент във всяка итерация.

И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

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

Можете също така да получите достъп до масив от обекти във вашия шаблон Jinja2.

Нека да видим друг пример.

Първо отворете copy_file_template1.ямъл Отговорна книга за игри с нано текстов редактор, както следва:

$ nano playbooks / copy_file_template1.ямъл

След това добавете следните редове в copy_file_template1.ямъл файл на playbook:

варира:
менюта:
- име: Начало
връзка: / начало
- име: Продукти
връзка: / продукти
- name: За нас
връзка: / за-нас
- име: Свържете се с нас
връзка: / свържете се с нас

Тук добавих a менюта обект масив в copy_file_template1.ямъл книга за игри. Всеки от тези обекти има две свойства, а име имущество и а връзка Имот.

И накрая, copy_file_template1.ямъл файлът на playbook трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Отвори индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:

$ nano playbooks / templates / index.jinja2

След това добавете следните редове в индекс.jinja2 файл с шаблон:

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

И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.

След като редактирате файла, запазете файла, като натиснете + х, следван от Y и .

Сега стартирайте книгата за игри copy_file_template1.ямъл както следва:

$ ansible-playbook playbooks / copy_file_template1.ямъл

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

Какво следва?

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

Средният бутон на мишката не работи в Windows 10
The среден бутон на мишката ви помага да превъртате дълги уеб страници и екрани с много данни. Ако това спре, добре ще свършите да използвате клавиату...
Как да промените левия и десния бутон на мишката на компютър с Windows 10
Напълно нормално е всички устройства на компютърни мишки да са ергономично проектирани за десничари. Но има налични устройства за мишка, които са спец...
Емулирайте кликванията на мишката, като задържите курсора на мишката с кликаща мишка в Windows 10
Използването на мишка или клавиатура в неправилна поза при прекомерна употреба може да доведе до много здравословни проблеми, включително напрежение, ...