Тази статия ще ви покаже как да използвате 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) в инвентарния файл.
След като приключите с тази стъпка, запазете файла, като натиснете
Създайте конфигурационен файл Ansible в директорията на проекта, както следва:
$ nano ansible.cfg
След това въведете следните редове в ансибъл.cfg файл.
След като приключите с тази стъпка, запазете файла, като натиснете
В този момент директорията на проекта трябва да изглежда както следва:
$ дърво
Както можете да видите, 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 шаблон модул.
След като приключите с тази стъпка, запазете файла, като натиснете
Създайте индекс.jinja2 файл на шаблон в книги за игра / шаблони директория, както следва:
$ nano playbooks / templates / index.jinja2
Въведете следните редове в индекс.jinja2 файл с шаблон:
Добре дошли в Linuxhint!
Това е просто обикновен HTML файл. Тук не използвах изискан синтаксис на Jinja2.
След като приключите с тази стъпка, запазете файла, като натиснете
Стартирайте книгата за игри 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 файлът трябва да изглежда както е показано на екранната снимка по-долу.
След като приключите с тази стъпка, запазете файла, като натиснете
Стартирайте книгата за игри 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 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Сега стартирайте книгата за игри copy_file_template1.ямъл както следва:
$ ansible-playbook playbooks / copy_file_template1.ямъл
Както можете да видите, на моя отдалечен хост на Debian, индекс.html файлът има реда Работите с Debian Linux
Условно: 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 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Стартирайте книгата за игри copy_file_template1.ямъл както следва:
$ ansible-playbook playbooks / copy_file_template1.ямъл
Както можете да видите, на моя отдалечен хост на Debian, индекс.html файлът има реда Работите с Debian Linux Не използвате Debian Linux
Условно: 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 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Стартирайте книгата за игри copy_file_template1.ямъл както следва:
$ ansible-playbook playbooks / copy_file_template1.ямъл
Както можете да видите, на моя отдалечен хост на Debian, индекс.html файлът има реда Работите с Debian Linux
На моя отдалечен хост CentOS, индекс.html файлът има реда Работите с CentOS Linux
Ако имах друг отдалечен хост с операционна система, различна от Debian или CentOS, той щеше да има линията Вашата операционна система не се поддържа
И така, 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 трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Сега отворете индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:
$ nano playbooks / templates / index.jinja2
Добавете следните редове в индекс.jinja2 файл с шаблон:
Тук генерирам обикновена лента за навигация в HTML с помощта на Jinja2 за цикъл. Цикълът преминава през менюта масив (който съм дефинирал в copy_file_template1.yaml playbook) елементи и генерира a меню елемент във всяка итерация.
И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Стартирайте книгата за игри 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 трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Отвори индекс.jinja2 Шаблон Jinja2 с нано текстов редактор, както следва:
$ nano playbooks / templates / index.jinja2
След това добавете следните редове в индекс.jinja2 файл с шаблон:
Всичко, което виждате тук, е същото като в предишния пример. Единствената разлика е, че отпечатвам свойствата на обекта име (използвайки меню.име) и връзка (използвайки меню.връзка) в моето индекс.jinja2 Шаблон Jinja2.
И накрая, индекс.jinja2 файлът на шаблона трябва да изглежда както е показано на екранната снимка по-долу.
След като редактирате файла, запазете файла, като натиснете
Сега стартирайте книгата за игри copy_file_template1.ямъл както следва:
$ ansible-playbook playbooks / copy_file_template1.ямъл
Както можете да видите, Jinja2 за цикъл генерира HTML лента за навигация (в индекс.html файл) от масив обекти.
Какво следва?
В тази статия ви показах как да използвате Ansible шаблон модул и описа някои основи на езика за шаблониране Jinja2. Посетете официалния уебсайт на Jinja2, за да научите повече за езика за шаблониране Jinja2.