繁体   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