#ansible #jinja2 #ansible-template
Вопрос:
В файле шаблона jinja2 я пытаюсь найти строку в имени хоста сервера, а затем применить нужные мне настройки на основе того, что он нашел. Вот что у меня есть. Это работает, однако, все получает настройку developmenthosts.
{% if 'dev' or 'tst' or 'test' or 'eng' in ansible_hostname %} {{ developmenthosts }} {% else %} {{ productionhosts }} {% endif %}
Любая помощь была бы отличной, и я довольно новичок в использовании шаблонов jinja2.
Комментарии:
1. и в чем же заключается ценность
ansible_hostname
?2. ansible_hostname будет одним из четырех, для моего тестирования это будет lnx-dev-01, lnx-tst-01, lnx-stg-01, lnx-prd-01
Ответ №1:
Попробуйте выполнить следующее, используя regex_search
if/else, который можно записать в более коротком и чистом формате.
"{{ developmenthosts if ( ansible_hostname|regex_search('dev|tst|test|eng') ) else productionhosts }}"
Пример:
---
- name: Sample playbook
connection: local
# gather_facts: false
hosts: localhost
vars:
developmenthosts: MYDEVHOST
productionhosts: MYPRODHOST
tasks:
- debug:
msg: "{{ ansible_hostname }}"
- debug:
msg: "{{ developmenthosts if ( ansible_hostname |regex_search('dev|tst|test|eng') ) else productionhosts }}"
Комментарии:
1. Спасибо, это сработало безупречно.