【问题标题】:Ansible selectattr and map with optional fieldsAnsible selectattr 和带有可选字段的映射
【发布时间】:2020-12-29 14:06:50
【问题描述】:

我正在尝试创建一个 ansible playbook 来设置多个节点。在我的变量中,我有以下结构:

nodes:
  - nodename: foonode
    othervalue: foo
    booleanvalue: true
  - nodename: barnode
    othervalue: bar

布尔值是可选的,并且默认为 false。稍后可能会有更多可选值。现在我只想使用可选的布尔值。

- name: "Debug"
  debug:
    msg: "Do something useful here"
  when:  when: nodes | selectattr('nodename', 'equalto', ansible_hostname) | map(attribute='booleanvalue') | first | bool

只要布尔值存在,这段代码 sn-p 就可以工作。但它不适用于 barnode。因为我使用的是 2.9.6,所以我不能使用 map(attribute='booleanvalue', default='whatever')。是否有其他或更好的方法可以使其与可选值一起使用?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    将数据放入字典。例如,

    nodes:
      foonode:
        othervalue: foo
        booleanvalue: true
      barnode:
        othervalue: bar
    

    那么,条件是微不足道的

      - debug:
          msg: "Do something useful here"
        when: nodes[inventory_hostname]['booleanvalue'] | default(false)
    

    未测试

    【讨论】:

    • 非常感谢。这很有效,而且很容易理解。
    猜你喜欢
    • 2012-10-31
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    相关资源
    最近更新 更多