Ansible

Ansible 選擇列表中的空白元素

  • January 7, 2022

我需要一個包含*_names*列表中所有空白元素的變數。我試過這個:

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

但它似乎不起作用

這是清單:

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

為了給出一些上下文,我需要這個變數來計算空白元素並進行比較。

簡單直覺的方法是select將元素等於空字元串。另一個有點反直覺但寫起來更緊湊的是簡單reject的元素(預設情況下會拒絕所有非空值)。以下劇本展示了兩種解決方案,它們給出了相同的結果。

注意:reject這裡的方法只有在列表中的其他非空元素不評估為假時才有效。如果您曾經錯誤的布爾值,它們也將被保留

- 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

引用自:https://serverfault.com/questions/1089315