Инструменты пользователя

Инструменты сайта


service:ansible

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
service:ansible [05.09.2025 14:18] – [ansible-lint] viacheslavservice:ansible [02.10.2025 06:46] (текущий) – [Windows] viacheslav
Строка 499: Строка 499:
  
 ==== Шаблоны Jinja2 ==== ==== Шаблоны Jinja2 ====
 +<WRAP round tip 60%>
 +Чтобы избавить себя от возни с лишними строками и отступами в формируемом файле, нужно добавить в шаблон .j2
 +<code python>
 +#jinja2: lstrip_blocks:True
 +</code>
 +
 +> First, I’ll give you an easy, by far more preferable, way of taming whitespace and then we’ll dig into the more involving methods.
 +> So here it comes:
 +> //Always render with trim_blocks and lstrip_blocks options enabled.//
 +> That’s it, the big secret is out. Save yourself trouble and tell Jinja2 to apply trimming and stripping to all of the blocks.
 +[[https://ttl255.com/jinja2-tutorial-part-3-whitespace-control/|Jinja2 Tutorial - Part 3 - Whitespace control]]
 +
 +</WRAP>
 +
 +
 Это движок для подстановки переменных или для динамического формирования конфигурационных файлов. Ссылка на переменную идёт в любом файле yaml в двойных фигурных скобках. Это движок для подстановки переменных или для динамического формирования конфигурационных файлов. Ссылка на переменную идёт в любом файле yaml в двойных фигурных скобках.
 <code yaml> <code yaml>
Строка 578: Строка 593:
 https://stackoverflow.com/questions/41667864/can-the-templates-module-handle-multiple-templates-directories\\ https://stackoverflow.com/questions/41667864/can-the-templates-module-handle-multiple-templates-directories\\
 https://docs.ansible.com/ansible/2.9/plugins/lookup/filetree.html https://docs.ansible.com/ansible/2.9/plugins/lookup/filetree.html
 +
 +=== Условия ===
 +В зависимости от значения ''feature.enabled'' вставляется та или иная строка.
 +
 +Задача
 +<code yaml>
 +- name: demo the template
 +  hosts: localhost
 +  gather_facts: false
 +  vars:
 +    setting: a_val
 +    feature:
 +      enabled: true
 +    another_setting: b_val
 +  tasks:
 +    - name: pause with render
 +      pause:
 +        prompt: "{{ lookup('template', 'demo.j2') }}"
 +</code>
 +Шаблон
 +<code python>
 +setting = {{ setting }}
 +{% if feature.enabled %}
 +feature = True
 +{% else %}
 +feature = False
 +{% endif %}
 +another_setting = {{ another_setting }}
 +</code>
 +
 +== Встроенное условие ==
 +<code yaml>
 +- name: demo the template
 +  hosts: localhost
 +  gather_facts: false
 +  vars:
 +    api:
 +      v2: true
 +  tasks:
 +    - name: pause with render
 +      debug:
 +        msg: "API = cinder{{ 'v2' if api.v2 else '' }}"
 +</code>
 +Выведет ''API = cinderv2'', если ''api.v2'' имеет значение ''true''.
 +
 +=== Цикл с фильтрацией элементов ===
 +Если в data_dirs есть список значений, он вставится в результате обработки шаблона.
 +<code yaml>
 +- name: demo the template
 +  hosts: localhost
 +  gather_facts: false
 +  vars:
 +    data_dirs:
 +      - Ыыы
 +      - Зьзьзь
 +      - Жжжжж
 +      - ЪУЪ
 +  tasks:
 +    - name: pause with render
 +      pause:
 +        prompt: "{{ lookup('template', 'demo-for.j2') }}
 +</code>
 +
 +Шаблон с отсевом значения ''/'', условием по счётчику цикла и контролем запятых в значении. Дефис перед процентом в конце строки препятствует печати лишней пустой строки.
 +<code python># data dirs
 +{% for dir in data_dirs if dir != "/" -%}
 +{% if loop.first -%}
 +data_dir = {{ dir }}{{ ',' if not loop.last else '' }}
 +{% else -%}
 +           {{ dir }}{{ ',' if not loop.last else '' }}
 +{% endif -%}
 +{% else -%}
 +# no data dirs found
 +{% endfor -%}
 +</code>
 +
 +Способы доступа к индексу цикла
 +^Переменная ^Описание ^
 +|loop.index |Текущая итерация данного цикла (начиная с 1) |
 +|loop.index0 |Текущая итерация данного цикла (начиная с 0) |
 +|loop.revindex |Общее число итераций до окончания данного цикла (начиная с 1) |
 +|loop.revindex0 |Общее число итераций до окончания данного цикла (начиная с 0) |
 +|loop.first |Булево True если это первая итерация |
 +|loop.last |Булево True если это последняя итерация |
 +|loop.first |Общее число элементов в данной последовательности |
 +https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_loops.html#extended-loop-variables
 +
 ==== Динамические переменные ==== ==== Динамические переменные ====
 Используются для нескольких ОС, где разные пути к конфигам и один и тот же пакет называется по-разному, например apache2 в Debian и httpd в CentOS. Создаётся несколько файлов с переменными: Используются для нескольких ОС, где разные пути к конфигам и один и тот же пакет называется по-разному, например apache2 в Debian и httpd в CentOS. Создаётся несколько файлов с переменными:
Строка 798: Строка 900:
 Особый подход, свои модули. Подключение в основном через WinRM. Особый подход, свои модули. Подключение в основном через WinRM.
  
-Inventory. ''ansible_winrm_transport=ntlm'', если доменная учётка. Если используется WinRM HTTPS (порт 5986), то бывает полезным добавить опцию ''ansible_winrm_server_cert_validation=ignore''+Inventory.\\
 <code ini> <code ini>
 [server1] [server1]
 server1.example.com ansible_connection=winrm ansible_port=5985 ansible_winrm_transport=ntlm server1.example.com ansible_connection=winrm ansible_port=5985 ansible_winrm_transport=ntlm
 </code> </code>
 +<WRAP round important 80%>
 +Если возникает ошибка ''%%"msg": "plaintext: the specified credentials were rejected by the server"%%'', то использовать параметр ''ansible_winrm_transport=ntlm''\\ 
 +Если используется WinRM HTTPS (порт 5986), то бывает полезным добавить опцию ''ansible_winrm_server_cert_validation=ignore''
 +</WRAP>
 +
 +Пример ad-hoc
 +<code bash>
 +ansible all -i '192.168.1.111,' -e "ansible_connection=winrm" -e "ansible_port=5985" -e "ansible_winrm_transport=ntlm" -e "ansible_password=123456" -u user -m win_shell -a "dir ~\desktop"
 +</code>
 +
  
 Пример задачи. Для Windows лучше оборачивать переменные с путями в одинарные кавычки, т. к. там используется обратный слэш. Пример задачи. Для Windows лучше оборачивать переменные с путями в одинарные кавычки, т. к. там используется обратный слэш.
Строка 1434: Строка 1546:
 [[https://www.youtube.com/playlist?list=PLT98CRl2KxKEUHie1m24-wkyHpEsa4Y70|Getting started with Ansible (Learn Linux TV)]]\\ [[https://www.youtube.com/playlist?list=PLT98CRl2KxKEUHie1m24-wkyHpEsa4Y70|Getting started with Ansible (Learn Linux TV)]]\\
 [[https://ezhvsalate.ru/posts/ansible-peredaem-json-v-tele-zaprosa-ispolzuia-modul-uri|Ansible: передаем json в теле запроса, используя модуль uri]]\\ [[https://ezhvsalate.ru/posts/ansible-peredaem-json-v-tele-zaprosa-ispolzuia-modul-uri|Ansible: передаем json в теле запроса, используя модуль uri]]\\
-[[https://stackoverflow.com/questions/21008083/run-task-only-if-host-does-not-belong-to-a-group|Как в Ansible запустить задачу, если сервер не входит в группу]]+[[https://stackoverflow.com/questions/21008083/run-task-only-if-host-does-not-belong-to-a-group|Как в Ansible запустить задачу, если сервер не входит в группу]]\\ 
 +[[https://github.com/PacktPublishing/Mastering-Ansible-Third-Edition|Mastering Ansible - Third Edition (Github repo)]]
  
  
service/ansible.1757081917.txt.gz · Последнее изменение: viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki