Ansible 从列表中选择空白元素

Ansible 从列表中选择空白元素

我需要一个包含所有空白元素的变量_名称列表。我尝试过这个:

blanks: "{{ _names|select('search', '') | list }}"

但它似乎不起作用

以下是列表:

    "_names":
    [
        "",
        "ABC",
        "",
        ""
    ]

为了提供一些背景信息,我需要这个变量来计算空白元素并进行比较。

答案1

简单直观的方法是将select元素设置为等于空字符串。另一种有点违反直觉但更简洁的方法是简单地将reject元素设置为等于空字符串(默认情况下将拒绝所有非空值)。以下剧本演示了两种解决方案,它们的结果相同。

注意:reject此处的方法仅在列表中其他非空元素的计算结果不为 false 时才有效。如果您曾经将布尔值设为 false,它们也会被保留

- hosts: localhost
  gather_facts: false

  vars:
      _names:  ["","ABC","",""]
      blanks_select: "{{ _names | select('==', '') | list }}"
      blanks_reject: "{{ _names | reject | list }}"

  tasks:
    - debug:
        var: "{{ item }}"
      loop:
        - blanks_select
        - blanks_reject

这使:

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

TASK [debug] *********************************************************************
ok: [localhost] => (item=blanks_select) => {
    "ansible_loop_var": "item",
    "blanks_select": [
        "",
        "",
        ""
    ],
    "item": "blanks_select"
}
ok: [localhost] => (item=blanks_reject) => {
    "ansible_loop_var": "item",
    "blanks_reject": [
        "",
        "",
        ""
    ],
    "item": "blanks_reject"
}

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

相关内容