不能在剧本任务中使用ansible额外的vars值

时间:2019-11-12 23:05:00

标签: ansible ansible-2.x ansible-inventory ansible-facts

在运行ansible剧本时,我将提供额外的变量,尤其是用于传递多个值的 modules 变量。

ansible-playbook abc.yml  --extra-vars "status=enable modules='redis apache zookeeper'"

当额外var中的模块具有“ redis”时,我想运行以下任务

  - name: fetch ports
    shell: ll | grep -i "ports"
    when:  modules == "redis"

但是,即使额外vars中的模块具有“ redis”,上述任务也会被跳过。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您提供的modules变量是一个字符串,有2个选项:

  1. 尝试在提供的字符串中搜索“ redis”,而不是理想的选择,因为如果您提供了redisv2 apache zookeeper之类的字符串,它将验证为true。
  2. 使用空格作为分隔符将字符串拆分到列表中,然后如果“ redis”位于列表元素之一中,则验证为true。

第二个选项,方法如下:

  - name: fetch ports
    shell: ll | grep -i "ports"
    when: '"redis" in modules.split(" ")'

希望有帮助。