如何在ansible命令行中添加可选变量,并在剧本中检查它们是否存在?

如何在ansible命令行中添加可选变量,并在剧本中检查它们是否存在?,ansible,ansible-playbook,Ansible,Ansible Playbook,我只想在命令行中给出标志的情况下运行特定任务。例如,我希望使用以下命令运行ansible playbook命令:--extra vars“composer install=true”。不知何故,我需要一个任务来检查composer install变量是否设置,如果设置并等于true,则运行运行composer install的给定任务。我不太清楚最后一部分该怎么做。我想你正在寻找答案 出现错误的原因是您正在访问一个从未设置过的变量。您似乎在使用额外变量的存在作为您希望composer安装运行的指

我只想在命令行中给出标志的情况下运行特定任务。例如,我希望使用以下命令运行ansible playbook命令:
--extra vars“composer install=true”
。不知何故,我需要一个任务来检查
composer install
变量是否设置,如果设置并等于true,则运行运行
composer install
的给定任务。我不太清楚最后一部分该怎么做。

我想你正在寻找答案


出现错误的原因是您正在访问一个从未设置过的变量。您似乎在使用额外变量的存在作为您希望composer安装运行的指示(即,您永远不会通过--extra vars=“composer install=false”),因此您可以使用
定义的

- shell: composer install
  when: composer-install is defined
但是变量可以通过过滤器传递,这在这种情况下很有用,因为它仍然允许您传递true/false,而不定义变量仍然有效:

- shell: composer install
  when: composer-install|default(false)
有关条件的更多信息,请参见此处:

jinja2过滤器非常有用,原因不止一个,因此这里有更多关于这些过滤器的信息:

最后,这里是内置jinja2过滤器的完整列表:

谢谢,这让我找到了正确的方向。只是做你所做的会导致一个错误。解决方案是在剧本中添加一个“vars:”部分,并添加
composer install
变量,将其设置为“false”。显然,命令行变量覆盖了剧本中设置的变量。干杯。感谢您提供了信息丰富的答案,即使我选择了另一个解决方案作为答案!实际上,当我在这里的时候,我可以问一下如何正确地使用jinja2过滤器将字符串转换为整数并进行乘法吗?例如,我有一个模板,其中我想将一个变量设置为
ansible\u fact*2
,并且ansible\u fact也是一个字符串。我在文档中找不到它。有一个“int”过滤器,它似乎可以工作(必须自己测试):-debug:msg={{'2'| int*2}
- shell: composer install
  when: composer-install|default(false)