Ansible: 如果变量未设置,如何排除参数

40次阅读
没有评论

问题描述

在使用 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 变量来省略模块参数。这样,在变量未设置时,将完全排除该参数。

步骤

  1. 在你的 Ansible 任务中,使用 default 过滤器来设置参数的默认值为 omit
pp_size: "{{ item.ppsize | default(omit) }}"

这将使参数 pp_size 在变量 item.ppsize 未设置时被完全排除。

请注意,default(omit) 将确保在变量未设置时不引用该参数,而不是使用默认值。这正符合你的需求,即排除参数而不使用默认值。

这样,你就可以在单个任务中实现排除参数的目标,而不需要创建多个任务或资源来处理这种情况。

总结

通过使用 Ansible 的 default 过滤器以及特殊的 omit 变量,你可以在变量未设置时完全排除一个参数。这将使你的任务更加灵活,并且可以根据需要选择是否包含特定参数。

请注意,以上解决方案适用于 Ansible 版本较新的情况,若你使用的是较旧版本,可能需要根据版本差异进行相应调整。在应用解决方案前,请确保备份重要数据。

正文完