簡體   English   中英

如何在 Ansible 劇本的條件下使用列表

[英]How to use a list in a when conditional in Ansible playbook

我正在嘗試檢查是否已添加某些掛載點,但只想查看我添加的那些存儲在added_mounts中。

如何將變量中的列表提供給條件條件,如下例所示?

對不起,如果我的措辭沒有達到標准,但我仍在學習。

我正在使用 Ansible 2.9。

我嘗試使用vars_files並制作一個列表並將其放在./host_vars/test/added_mounts./vars/added_mounts中,但它沒有幫助。

我正在考慮嘗試在條件條件下使用循環,但在下面不起作用。

when: item.device == {{ item }}
loop: added_mounts

列表中的一項有效:

- name: "check mounted directories"
  hosts: test
  vars:
    - added_mounts: '/dev/sda1'
  
  tasks:

    - name: Show only Mount point and device info
      debug:
        msg: "{{ item.mount }} - {{ item.device }}"
      loop: "{{ ansible_facts.mounts }}"
      loop_control:
        label: "{{ item.mount }} - {{ item.device }}"
      when: item.device == added_mounts

列表中的幾個項目不起作用:

- name: "check mounted directories"
  hosts: test
  vars:
    - added_mounts:
        - '/dev/sda1'
        - '/dev/mapper/vg_abc-lv_abc'
  tasks:

    - name: Show only Mount point and device info
      debug:
        msg: "{{ item.mount }} - {{ item.device }}"
      loop: "{{ ansible_facts.mounts }}"
      loop_control:
        label: "{{ item.mount }} - {{ item.device }}"
      when: item.device == added_mounts

如果有人有任何提示或指出顯而易見的事情,我將不勝感激。

您已經在評論中有提示,可以在您的循環中設置一個條件來回答您的直接問題。

同時,在這種情況下,您甚至不需要條件。 您可以使用selectattr過濾器直接從源中選擇現有的掛載。 有關參考,請參閱Ansible 中的數據操作(您實際上會在其中找到一個幾乎完全符合您的問題的示例)。

這是一個例子:

- name: Show only Mount point and device info
  debug:
    msg: "{{ item.mount }} - {{ item.device }}"
  loop: "{{ ansible_facts.mounts | selectattr('device', 'in', added_mounts) | list }}"
  loop_control:
    label: "{{ item.mount }} - {{ item.device }}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM