[英]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.