Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

ansible - 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?

question from:https://stackoverflow.com/questions/65866313/how-to-use-variable-substitution-in-a-when-condition

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.6k users

...