when statements should not include jinja2 templating delimiters

1,218 views
Skip to first unread message

Dave Cottlehuber

unread,
May 23, 2017, 7:20:20 AM5/23/17
to ansible...@googlegroups.com
I'm getting a benign warning below:

```
[WARNING]: when statements should not include jinja2 templating
delimiters such as {{ }} or {% %}.
Found: not ansible_check_mode and (zerotier_status != "OK" or
zerotier_name != "{{ inventory_hostname }}")
```

In this specific case I could get away with dropping the final clause of
the `when` check, but does anybody have an idea how to refactor this to
avoid the warnings in future? I get the feeling I'm missing some very
obvious pattern here.

```yaml
- name: zerotier | authorise this connection
uri:
url: https://my.zerotier.com/api/network/{{ net.zerotier.network
}}/member/{{ zerotier_address }}
method: POST
HEADER_Authorization: "Bearer {{ net.zerotier.token }}"
body_format: json
body:
name: "{{ inventory_hostname }}"
config:
authorized: true
return_content: yes
register: zerotier_authorisation
when: not ansible_check_mode and (zerotier_status != "OK" or
zerotier_name != "{{ inventory_hostname }}")
tags:
- zerotier
```

Larry Smith

unread,
May 23, 2017, 8:00:48 AM5/23/17
to Ansible Project
Dave,
You could easily just rewrite as below and it should solve your issue.

when: >
      not ansible_check_mode and (zerotier_status != "OK" or 
      zerotier_name != inventory_hostname)


Josh Smift

unread,
May 23, 2017, 8:02:50 AM5/23/17
to ansible...@googlegroups.com
DC> In this specific case I could get away with dropping the final clause
DC> of the `when` check, but does anybody have an idea how to refactor
DC> this to avoid the warnings in future? I get the feeling I'm missing
DC> some very obvious pattern here.

Just drop the Jinja delimiters: Since 'when' is already expecting Jinja,
you don't need to mark variables, instead you need to mark literal strings
(like how you quoted "OK").

when: not ansible_check_mode and (zerotier_status != "OK" or zerotier_name != inventory_hostname)

Should do the trick -- all those unquoted strings are variable names. (Or
keywords, like "not" and "and". :^)

-Josh (j...@care.com)

(apologies for the automatic corporate disclaimer that follows)

This email is intended for the person(s) to whom it is addressed and may contain information that is PRIVILEGED or CONFIDENTIAL. Any unauthorized use, distribution, copying, or disclosure by any person other than the addressee(s) is strictly prohibited. If you have received this email in error, please notify the sender immediately by return email and delete the message and any attachments from your system.

Matt Martz

unread,
May 23, 2017, 8:03:46 AM5/23/17
to ansible...@googlegroups.com
when statements are already executed in the context of jinja, and shouldn't also include jinja2 delimiters.

To fix your when statement is pretty simple:

when: not ansible_check_mode and (zerotier_status != "OK" or
  zerotier_name != inventory_hostname)

Effectively all you generally need is to remove the {{ }}, and since you wrapped the delimiters in quotes, remove them too.

You were already using other vars without {{ }}.


--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/1495538414.1499599.985718800.1572CF23%40webmail.messagingengine.com.
For more options, visit https://groups.google.com/d/optout.
--
Matt Martz
@sivel
sivel.net

Dave Cottlehuber

unread,
May 23, 2017, 1:54:28 PM5/23/17
to ansible...@googlegroups.com
On Tue, 23 May 2017, at 14:03, Matt Martz wrote:
> when statements are already executed in the context of jinja, and
> shouldn't
> also include jinja2 delimiters.
>
> To fix your when statement is pretty simple:
>
> when: not ansible_check_mode and (zerotier_status != "OK" or
> zerotier_name != inventory_hostname)
>
> Effectively all you generally need is to remove the {{ }}, and since you
> wrapped the delimiters in quotes, remove them too.
>
> You were already using other vars without {{ }}.

#facepalm moment - thanks everybody!

A+
Dave
Reply all
Reply to author
Forward
0 new messages