qwert-poiuy
qwert-poiuy

Reputation: 23

How to use variable substitution in a when condition?

I'm a new ansible user. I need a variable in a task's when condition. I am trying to use home_directory variable, which is defined as home_directory: "{{ ansible_env.HOME }}" in the vars/main.yaml file.

I tried to use something like following:

when: {{ home_directory}}/var_name['var_key'] != command_output['stdout']

However, I later found out that jinja templates {{}} or {%%} are not allowed/recommended in the when condition. I also tried condition without quotes and {{}} but home_directory value is not being replaced in the when condition.

Could someone please tell me what I can do here?

Upvotes: 2

Views: 1074

Answers (1)

larsks
larsks

Reputation: 312620

However, I later found out that jinja templates {{}} or {%%} are not allowed/recommended in the when condition.

This is because the arguments to when are evaluated in an implicit template context. In other words, write exactly what you would write inside {{...}} markers, but you don't need the markers because the context is intrinsic to the command.

In other words, instead of:

when: {{ home_directory}}/var_name['var_key'] != command_output['stdout']

Write:

when: home_directory ~ "/" ~ var_name['var-key'] != command_output['stdout']

Where ~ is the Jinja string concatenation operator.

We can simplify that a bit:

when: "%s/%s" % (home_directory, var_name.var_key) != command_output.stdout

This takes advantage of Linux string formatting syntax to substitute variables into a string.

Upvotes: 4

Related Questions