未定义事实时省略属性
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
- 省略,否则
我目前有很多这样的任务。这里的文件模块只是一个例子。
- 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
当 - 委托给
localhost
- 省略,否则
for_localhost
为真时