首页 > 解决方案 > ansible如何根据条件检查列表中的值

问题描述

我尝试查找变量是否具有存储在列表中的有效值。
列表的名称也存储在一个变量中。如果变量无效,则测试应该失败。
如果我使用列表的名称,这将有效:

- fail: msg="unsupported version requested"
  when: requestedversion not in windowsversionlist

但是名称versionlist也是一个变量,因为像linux和windows这样的列表更多。

这不起作用:

- fail: msg="unsupported version requested"
  when: requesterversion not in versionlist 

变量的versionlist值为windowsversionlist

我尝试{{ versionlist }},等等,但这不起作用。

标签: ansible

解决方案


您应该使用vars查找

- fail: 
    msg: "unsupported version requested"
  when: "requestedversion not in lookup('vars', versionlist)"

鉴于剧本:

- hosts: localhost
  gather_facts: no
      
  tasks:
    - fail: 
        msg: "unsupported version requested"
      when: "requestedversion not in lookup('vars', versionlist)"
      vars:
        requestedversion: a.a.a
        versionlist: windowsversionlist
        windowsversionlist: 
          - x.x.x
          - y.y.y
          - z.z.z

这给出了:

PLAY [localhost] *************************************************************************************************

TASK [fail] ******************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "unsupported version requested"}

PLAY RECAP *******************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

推荐阅读