ansible:检查数组元素之一是否在变量字符串中
ansible: check if one of array elements is in variable string
我在 ansible 中有一个列表:
ssh_port_patterns: [
"domain.tld",
"example.tld",
"something.tld"
]
并且我想要 运行 一项任务,前提是其 inventory_hostname 将包含其中一项短语。例如任务应该是 运行 当 inventory_hostname 将被设置为:extra.domain.tld
,但在 something.else.tld
的情况下不应该
是否可以用ansible做这样的检查?
ansible_domain
有一个 Ansible fact ,它通常包含 Ansible 正在执行任务的主机的域后缀。 最简单的方法 是将其与列表 ssh_port_patterns
.
匹配
示例 debug
仅当主机名的后缀在列表中时才会 运行 消息:
- debug:
msg: "run on {{ ansible_hostname }}"
when: ansible_domain in ssh_port_patterns
更新:
如果出于某种原因只能用inventory_hostname
来实现,那么split
和join
可以用来构成域后缀并与列表匹配。
- debug:
msg: "run on {{ ansible_hostname }}"
when: inventory_hostname.split('.')[1:]|join('.') in ssh_port_patterns
我在 ansible 中有一个列表:
ssh_port_patterns: [
"domain.tld",
"example.tld",
"something.tld"
]
并且我想要 运行 一项任务,前提是其 inventory_hostname 将包含其中一项短语。例如任务应该是 运行 当 inventory_hostname 将被设置为:extra.domain.tld
,但在 something.else.tld
是否可以用ansible做这样的检查?
ansible_domain
有一个 Ansible fact ,它通常包含 Ansible 正在执行任务的主机的域后缀。 最简单的方法 是将其与列表 ssh_port_patterns
.
示例 debug
仅当主机名的后缀在列表中时才会 运行 消息:
- debug:
msg: "run on {{ ansible_hostname }}"
when: ansible_domain in ssh_port_patterns
更新:
如果出于某种原因只能用inventory_hostname
来实现,那么split
和join
可以用来构成域后缀并与列表匹配。
- debug:
msg: "run on {{ ansible_hostname }}"
when: inventory_hostname.split('.')[1:]|join('.') in ssh_port_patterns