Инструкция Jinja2 по шаблону if/else

#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. Спасибо, это сработало безупречно.