Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Ansible шаблоны jinja2


Ansible шаблоны 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 собирает факты об удаленных хостах.
 
Оф.док.
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html
 
Примеры
 
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;
    }
}

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект