如何在ansible命令行中添加可选变量并在playbook中检查其存在?

6

如果在命令行中给出了一个标志,我希望只运行特定的任务。例如,我想要使用以下内容运行ansible-playbook命令:--extra-vars "composer-install=true"。我需要一项任务来检查是否设置了composer-install变量,并且如果设置并且等于true,则运行给定的任务来运行composer install。我不太确定如何实现最后一部分。

2个回答

10

你遇到错误的原因是因为你正在访问一个从未设置过的变量。你似乎在使用额外变量的存在来表示你想要运行composer install(即你从未传递--extra-vars="composer-install=false"),所以你可以使用is defined

- shell: composer install
  when: composer-install is defined

但是变量可以通过过滤器传递,这在这种情况下非常有用,因为它仍然允许您传递真/假值,而不定义变量也可以正常工作:

- shell: composer install
  when: composer-install|default(false)

更多关于条件语句的内容可以在这里找到:http://docs.ansible.com/playbooks_conditionals.html

jinja2过滤器有多个非常有用的功能,详情请参见:http://docs.ansible.com/playbooks_variables.html#jinja2-filters

最后,内置的jinja2过滤器完整列表在这里:http://jinja.pocoo.org/docs/dev/templates/#builtin-filters


感谢您提供的信息丰富的答案,即使在我选择另一个解决方案作为答案之后! - timetofly
其实,我在这里想问一下如何正确使用jinja2过滤器将字符串转换为整数并进行乘法运算?例如,我有一个模板,我想将一个变量设置为ansible_fact * 2,而ansible_fact也是一个字符串。但是我在文档中找不到相关信息。 - timetofly
1
有一个“int”过滤器,它似乎有效(我必须自己测试一下):- 调试:msg={{ '2'|int * 2 }} - Ramon de la Fuente

1
我认为你正在寻找 when参数
- name: optional composer install
  shell: composer install
  when: composer-install

谢谢,这让我朝着正确的方向前进了。只是按照你所做的方式会导致错误。解决方法是还要在playbook中添加一个"vars:"部分,并添加composer-install变量,将其设置为"false"。显然,命令行变量会覆盖playbook中设置的变量。干杯! - timetofly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接