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来实现,那么splitjoin可以用来构成域后缀并与列表匹配。

    - debug:
        msg: "run on {{ ansible_hostname }}"
      when: inventory_hostname.split('.')[1:]|join('.') in ssh_port_patterns