问题描述
在使用 Ansible 时,想要在变量未设置时完全排除一个参数。他不想使用默认值,而是希望在参数未设置时,根本不引用该参数。
举例来说,对于如下的任务:
- name: manage_aix_lvm | creating new VG
aix_lvg:
force: "{{ item.force | default('no') }}"
pp_size: "{{ item.ppsize }}"
pvs: "{{ item.disks | join(',') }}"
vg: "{{ item.vgname }}"
state: present
become: true
loop: "{{ lvm_groups }}"
如果变量 item.ppsize
未设置,用户希望完全排除这个参数。这是因为这是一个可选参数,如果未设置,操作系统将自动计算该值。
用户想知道是否可以在单个任务中实现这一目标,或者是否需要创建多个任务/资源来检查 item.ppsize
是否设置,并根据情况重定向到不同的任务/资源。
解决方案
在 Ansible 中,你可以使用 default
过滤器来使用特殊的 omit
变量来省略模块参数。这样,在变量未设置时,将完全排除该参数。
步骤
- 在你的 Ansible 任务中,使用
default
过滤器来设置参数的默认值为omit
:
pp_size: "{{ item.ppsize | default(omit) }}"
这将使参数 pp_size
在变量 item.ppsize
未设置时被完全排除。
请注意,default(omit)
将确保在变量未设置时不引用该参数,而不是使用默认值。这正符合你的需求,即排除参数而不使用默认值。
这样,你就可以在单个任务中实现排除参数的目标,而不需要创建多个任务或资源来处理这种情况。
总结
通过使用 Ansible 的 default
过滤器以及特殊的 omit
变量,你可以在变量未设置时完全排除一个参数。这将使你的任务更加灵活,并且可以根据需要选择是否包含特定参数。
请注意,以上解决方案适用于 Ansible 版本较新的情况,若你使用的是较旧版本,可能需要根据版本差异进行相应调整。在应用解决方案前,请确保备份重要数据。
正文完