首页 > 解决方案 > 不能在剧本任务中使用 ansible 额外的变量值

问题描述

在运行 ansible 剧本时,我提供了额外的变量,特别是对于我传递多个值的模块变量。

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

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

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

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

标签: ansibleansible-2.xansible-inventoryansible-facts

解决方案


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

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

对于第二个选项,这里是如何做到这一点:

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

希望能帮助到你。


推荐阅读