Навигация
|
Ansible шаблоны jinja2Ansible шаблоны jinja2
В этом уроке вы на примерах узнаете, как использовать модуль шаблона Ansible для анализа файла шаблона jinja2.
Jinja2 — это современный язык шаблонизации для разработчиков Python.
Jinja2 — это расширяемый механизм шаблонизации, и его можно использовать в Ansible для шаблонизации файлов.
Идея здесь заключается в том, что файл шаблона будет создан с использованием системы шаблонов jinja2
Модуль шаблона Ansible будет использоваться внутри плейбука для ссылки или рендеринга созданного файла шаблона jinja2.
В примере ниже мы собираемся создать файл пользовательского сообщения.
Файл будет отображать дистрибутив ОС и версию, полное доменное имя и администратора.
Файл инвентаря вариант 1
hosts
[localhost]
localhost
Файл инвентаря вариант 2
hosts.yml
all:
hosts:
localhost:
ansible_ssh_host: 127.0.0.1
1. Создайте файл шаблона jinja2 с именем (temp.j2) для сообщения дня (MOD)
temp.j2
This server is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.
The fully qualified domain name is {{ ansible_facts['fqdn'] }}.
The Administrator is {{ administrator }}.
- Факты,переменная, {{ ansible_facts[‘distribution’] }} отобразит дистрибутив ОС
- Факты,переменная, {{ ansible_facts[‘distribution_version’] }} отобразит версию ОС
- Факты,переменная, {{ ansible_facts[‘fqdn’] }} отобразит полное доменное имя системы
- Переменная, {{ administrator }} отобразит значение переменной, которое можно указать в плейбуке или отдельном файле.
Теперь создайте плейбук, в котором используйте модуль шаблона для рендеринга файла шаблона jinja2.
2. Создайте playbook, указав модуль шаблона рендеринга шаблона jinja2.
playbook.yml
---
- hosts: localhost
become: true
gather_facts: false
vars:
- administrator: cameo@domain.ru
tasks:
- name: configure_message
template:
src: temp.j2
dest: /etc/MOD
3. Запустите сценарий
# ansible-playbook playbook.yml --syntax-check -i hosts && ansible-playbook playbook.yml -i hosts
4. Убедиться, что файл для отображения сообщения дня создан.
# cat /etc/MOD
This server is a Ubuntu version 22.04 system.
The fully qualified domain name is localhost.
The Administrator is cameo@domain.ru.
# ansible localhost -a "cat /etc/MOD"
localhost | CHANGED | rc=0 >>
This server is a Ubuntu version 22.04 system.
The fully qualified domain name is localhost.
The Administrator is cameo@domain.ru.
5. Вывести больше переменных, с именем distribution с помощью модуля setup.
Ansible module-setup собирает факты об удаленных хостах.
Оф.док.
Примеры
5.1. Соберите полную информацию о хосте
# ansible localhost -m setup
5.2. Получите IP-адрес
# ansible localhost -m setup -a 'filter=ansible_default_ipv4'
192.168.20.138 | SUCCESS => {
"ansible_facts": {
"ansible_default_ipv4": {
"address": "10.2.13.186",
"alias": "eth0",
"broadcast": "10.2.13.255",
"gateway": "10.2.13.1",
"interface": "eth0",
"macaddress": "52:54:00:7d:e2:a7",
"mtu": 1500,
"netmask": "255.255.255.0",
"network": "10.2.13.0",
"type": "ether"
}
},
"changed": false
}
5.3. Получить информацию о памяти
$ ansible localhost -m setup -a 'filter=ansible_memory_mb'
192.168.20.138 | SUCCESS => {
"ansible_facts": {
"ansible_memory_mb": {
"nocache": {
"free": 803,
"used": 189
},
"real": {
"free": 504,
"total": 992,
"used": 488
},
"swap": {
"cached": 0,
"free": 1535,
"total": 1535,
"used": 0
}
}
},
"changed": false
}
5.4. Получите адреса IPV4 хоста
# ansible localhost -m setup -a "filter=ansible_all_ipv4_addresses"
localhost | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.128.83"
]
},
"changed": false
}
5.5. Подстановочные знаки для нечеткого соответствия.
Соберите информацию, заканчивающуюся ключевым словом «distribution»
# ansible localhost -m setup -a "filter=*distribution*"
localhost | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/os-release",
"ansible_distribution_file_variety": "Debian",
"ansible_distribution_major_version": "22",
"ansible_distribution_release": "jammy",
"ansible_distribution_version": "22.04"
},
"changed": false
}
Другие часто используемые параметры:
ansible_all_ipv4_addresses: отображает только информацию IPv4.
ansible_devices: отображает только информацию об устройстве диска.
ansible_distribution: отображает, какая система, например: centos, suse и т. д.
ansible_distribution_major_version: отображает основную версию системы.
ansible_distribution_version: отображает только версию системы.
ansible_machine: отображает тип системы, например: 32-разрядная или 64-разрядная.
ansible_eth0: отображает только информацию об eth0.
ansible_hostname: отображает только имя хоста.
ansible_kernel: отображает только версию ядра.
ansible_lvm: отображает информацию о lvm.
ansible_memtotal_mb: отображает общую память системы.
ansible_memfree_mb: отображает доступную системную память.
ansible_memory_mb: отображает подробные сведения о памяти.
ansible_swaptotal_mb: отображает общий объем памяти подкачки.
ansible_swapfree_mb: отображает доступную память памяти подкачки.
ansible_mounts: отображает состояние монтирования системного диска.
ansible_processor: отображает количество ЦП (в частности, отображает модель каждого ЦП).
ansible_processor_vcpus: отображает количество ЦП (отображается только общее количество).
6. Пример шаблона jinja2 для Apache
temp.j2
<VirtualHost {{ ansible_default_ipv4.address }}:{{ http_port }}>
serverAdmin root@{{ ansible_domain }}
ServerName {{ ansible_fqdn }}
ServerAlias {{ ansible_hostname }}
DocumentRoot /vhosts/{{ ansible_fqdn }}/html
ErrorLog logs/{{ ansible_hostname}}-error.log
CustomLog logs/{{ ansible_hostname }}-access.log common
</VirtualHost>
<Directory "/vhosts/{{ ansible_fqdn }}/html">
AllowOverride none
Options Indexes
Require all granted
</Directory>
playbook.yml
---
- hosts: localhost
become: true
gather_facts: false
vars:
- http_port: 8080
tasks:
- name: configure jina2 template
template:
src: temp.j2
dest: /etc/httpd/conf.d/{{ ansible_hostname }}.conf
notify:
- restart apache
- name: configure a sample
copy:
content: "This is {{ ansible_fgdn }}\n"
dest: /vhosts/{{ ansible_fqdn }}/html/index.html
mode: 0644
owner: www
group: www
handlers:
- name restart apache
service:
name: apache
state: restarted
7. Пример шаблона jinja2 для Nginx
temp.j2
server {
listen {{ http_port }};
root /var/www/html/{{ ansible_fqdn }}/html/;
index index.htm;
server_name {{ ansible_fqdn }};
localtion / {
try_files $uri $uri/ =404;
}
}
playbook.yml
---
- hosts: localhost
become: true
gather_facts: false
vars:
- http_port: 8080
tasks:
- name: configure jina2 template
template:
src: temp.j2
dest: /etc/nginx/sites-enabled/{{ ansible_fqdn }}.conf
notify:
- reloaded nginx
- name: configure a sample
copy:
content: "This is {{ ansible_fgdn }}\n"
dest: /var/www/html/{{ ansible_fqdn }}/html/index.html
mode: 0644
owner: www
group: www
handlers:
- name reloaded nginx
service:
name: nginx
state: reloaded
8. Jinja2 и цикл for
Создадим прототип файла hosts (ip - alias)
playbook.yml
---
- hosts: localhost
become: true
gather_facts: false
vars_files:
- records.yml
tasks:
- name: populate /etc/hosts
template:
src: temp.j2
dest: /etc/hosts_example
records.yml
network_properties:
- name: localhost
ipv4: 127.0.0.1
- name: server_name1 server_name2
ipv4: 192.168.1.2
temp.j2
{% for host in network_properties %}
{{ host.ipv4 }} {{ host.name }}
{% endfor %}
# ansible-playbook playbook.yml -i hosts.yml --syntax-check && ansible-playbook playbook.yml -i hosts.yml
# cat /etc/hosts_example
127.0.0.1 localhost
192.168.1.2 server_name1 server_name2
Прототип файла nginx
temp.j2
{% set list=['12','13'] %}
upstream {{server_name}} {
{% for i in list %}
server 192.168.100.{{i}}:80;
{% endfor%}
}
server {
listen {{http_prot}};
server_name {{server_name }};
location / {
root /var/www/html;
index index.html;
}
}
Комментарии пользователей Эту новость ещё не комментировалиНаписать комментарий Анонимам нельзя оставоять комментарии, зарегистрируйтесь! |
Контакты Группа ВК | Код обмена баннерами | Видео к IT статьям на YoutubeВидео на другие темы Смотреть | |||
Мои друзья: | © Snakeproject.ru создан в 2013 году.При копировании материала с сайта - оставьте ссылку.Весь материал на сайте носит ознакомительный характер,за его использование другими людьми, автор ответственности не несет. |
||||
Поддержать автора и проект
|