Reputation: 23
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
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