Python – using regex in jinja 2 for ansible playbooks


HI i am new to jinja2 and trying to use regular expression as shown below

{% if ansible_hostname == 'uat' %}
   {% set server = '' %}

{% else %}
   {% set server = 'define yourself' %}
{% endif %}

{% if {{ server }} match('*thinking*') %}
  {% set ssl_certificate = 'akash' %}

{% elif {{ server }} match( '*sleeping*')%}
   {% set ssl_certificate = 'akashthakur' %}
{% endif %}

based on the value of "server" i would like to evaluate as which certificates to use.
ie if domain contains "thinking" keyword then use these certificates and if it contains "sleeping" keyword then use that certificate.

But didn't found any jinja2 filter supporting this.
Please help me.I found some python code and sure that can work but how to use python in jinja2 templates?

Best Solution

Jinja2 can quite easily do substr checks with a simple 'in' comparison, e.g.

{% set server = '' %}
{% if 'thinking' in server %}
   do something...
{% endif %}

So your substring regex filter isn't required. However if you want more advanced regex matching, then there are in fact filters available in ansible - see the regex filters in - funnily enough, your match syntax above is nearly exactly right.

+1 for Bereal's answer though, it gives a nice alternative in the form of a map.