未定义事实时省略属性

Omit attribute when fact is not defined

我目前有很多这样的任务。这里的文件模块只是一个例子。

- file:
    path: "{{ datapath }}"
    state: "directory"
  when:
    - "storage is not defined"

- file:
    path: "{{ datapath }}"
    state: "directory"
  delegate_to: "{{ storage.host }}"
  when:
    - "storage is defined"
    - "storage.host is defined"

在定义事实时,它会在 inventory_host 或不同的主机上创建一个目录。

我想知道是否可以减少这里的任务数量。通常我会使用 omit 过滤器。但是因为我有几个条件,所以我不确定在 delegate_to.

中使用哪种语法

您还可以在 inline expression

中使用 omit 特殊变量
- file:
    path: "{{ datapath }}"
    state: directory
  delegate_to: "{{ storage.host if storage.host is defined else omit }}"

有了这个,并且因为你可以链接 inline-if,所以你可以有多个以 omit 结尾的条件,例如

delegate_to: >-
  {{
    storage.host
      if storage.host is defined
      else 'localhost'
        if for_localhost | default(false)
        else omit
  }}

将是:

  • 在定义时委托给 storage.host
  • for_localhost 为真时
  • 委托给 localhost
  • 省略,否则