# If condition in ansible jinja2 template

**URL:** <https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707>\
**Category:** Ansible Project\
**Created:** [February 19, 2019, 2:41pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707 "2019-02-19T14:41:02Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![Pandu\_jh](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@Pandu\_jh](https://forum.ansible.com/u/Pandu_jh)\
**Post date:** [February 19, 2019, 2:41pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/1 "2019-02-19T14:41:02Z")

</div>

Search keyword in “host\_fqdn” variable. If the value has “[lab.com](http://lab.com)” keyword in it, it should directly store the value to “host\_fqdn” again  
or else it should add “[lab.com](http://lab.com)” keyword to the value and store it to “host\_fqdn” variable. Please assist.

vars:  
host\_fqdn: server  
host\_fqdn: |  
{% if ‘[lab.com](http://lab.com)’ in {{ host\_fqdn }} %}  
{% host\_fqdn = “{{ host\_fqdn }}” %}  
{% else %}  
{% host\_fqdn = “{{ host\_fqdn }}.lab.com” %}  
{% endif %}

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [February 19, 2019, 3:41pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/2 "2019-02-19T15:41:49Z")

</div>

I'm pretty sure you can't use Jinja in vars like that, but you can have a set\_fact task like this

&nbsp;&nbsp;&nbsp;- set\_fact:  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;host\_fqdn: "{{ host\_fqdn if 'lab.com' in host\_fqdn else host\_fqdn ~ '.lab.com' }}"

---

<div class="post-metadata">

**Author:** ![Pandu\_jh](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@Pandu\_jh](https://forum.ansible.com/u/Pandu_jh)\
**Post date:** [February 19, 2019, 3:49pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/3 "2019-02-19T15:49:00Z")

</div>

Can you please confirm, if the below syntax is correct. I am getting error.

vars\_prompt:

- name: host\_fqdn  
prompt: Enter Hostname of a new VM  
private: no  
tasks:
- set\_fact:  
host\_fqdn: “{{ host\_fqdn if ‘[lab.com](http://lab.com)’ in host\_fqdn else host\_fqdn ‘.lab.com’ }}”
- debug: var=host\_fqdn

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [February 19, 2019, 3:54pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/4 "2019-02-19T15:54:29Z")

</div>

What is the error then? We are not psychic.

---

<div class="post-metadata">

**Author:** ![Pandu\_jh](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@Pandu\_jh](https://forum.ansible.com/u/Pandu_jh)\
**Post date:** [February 19, 2019, 3:57pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/5 "2019-02-19T15:57:24Z")

</div>

This was the error.

TASK [set\_fact] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
fatal: [rchtest01]: FAILED! =\> {“msg”: “template error while templating string: expected token ‘end of print statement’, got ‘string’. String: {{ host\_fqdn if ‘[lab.com](http://lab.com)’ in host\_fqdn else host\_fqdn ‘.lab.com’ }}”}

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [February 19, 2019, 4:03pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/6 "2019-02-19T16:03:16Z")

</div>

You are missing the tilde ~ in you syntax, check my previous mail and you'll see the tilde.

---

<div class="post-metadata">

**Author:** ![Pandu\_jh](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@Pandu\_jh](https://forum.ansible.com/u/Pandu_jh)\
**Post date:** [February 19, 2019, 4:06pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/7 "2019-02-19T16:06:41Z")

</div>

Sorry my bad, it missed it. it’s working perfectly now, Thanks much !!

TASK [debug] \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*  
ok: [rchtest01] =\> {  
“host\_fqdn”: “[rchtest01.lab.com](http://rchtest01.lab.com)”  
}

---

<div class="post-metadata">

**Author:** ![Pandu\_jh](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@Pandu\_jh](https://forum.ansible.com/u/Pandu_jh)\
**Post date:** [February 19, 2019, 4:07pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/8 "2019-02-19T16:07:59Z")

</div>

If possible could you please explain the syntax, It will be very helpful for me to use it in other cases.

---

<div class="post-metadata">

**Author:** ![Kai\_Stian\_Olstad](https://avatars.discourse-cdn.com/v4/letter/k/e19adc/32.png) [@Kai\_Stian\_Olstad](https://forum.ansible.com/u/Kai_Stian_Olstad)\
**Post date:** [February 19, 2019, 4:24pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/9 "2019-02-19T16:24:14Z")

</div>

I could try, not sure if it's understandable

Just split it in multiple lines

[1] {{ host\_fqdn  
[2] if 'lab.com' in host\_fqdn  
[3] else  
[4] host\_fqdn ~ '.lab.com' }}

[2]  
If the variable host\_fqdn contains the string lab.com the choose [1].

[3]  
If the variable host\_fqdn dosen't contains the string lab.com the choose [4]

[4]  
Tilde is used to concatenate two strings.  
So this will concatenate the content of variable fqdn\_host with the string .lab.com

You can also use the Ansible ternary filter

{{ ('lab.com' in host\_fqdn) | ternary(host\_fqdn, host\_fqdn ~ '.lab.com') }}

---

<div class="post-metadata">

**Author:** ![Pandu\_jh](https://avatars.discourse-cdn.com/v4/letter/p/3bc359/32.png) [@Pandu\_jh](https://forum.ansible.com/u/Pandu_jh)\
**Post date:** [February 19, 2019, 4:51pm UTC](https://forum.ansible.com/t/if-condition-in-ansible-jinja2-template/29707/10 "2019-02-19T16:51:53Z")

</div>

Thank you so much for the explanation.
