在 Ansible 中提取 {{ inventory_hostname }} 的一部分以在 playbook 中使用

Cli*_*lla 2 regex ansible

我目前正在编写一个小型 Ansible 剧本,其工作是在 /etc/resolv.conf 的搜索列表中添加一个附加域。

要添加到搜索列表的第二个域必须包含目标主机的主机名的一部分。我在剧本执行期间使用神奇变量 {{ inventory_hostname }} 获取每个目标主机的主机名。

然后,我需要从 {{ inventory_hostname }}(例如“xyz”)中提取字符 4 - 6,以便添加到搜索列表的第二个域是 xyz.foo.bar。在 bash 中,可以通过以下方式获得:

SERVER=$('hostname':3:3)
env=${SERVER:3:3}
Run Code Online (Sandbox Code Playgroud)

...变量“env”将等于“xyz”。

只要手动定义“xyz”,该剧本就可以工作。

我知道 Ansible 有正则表达式过滤器,可以帮助解决类似的问题,但是我无法找出满足我需要的正则表达式。

为了完整起见,我在 ansible 中尝试过类似的操作:

{{ inventory_hostname|3:3 }}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

小智 5

几乎是一样的,你可以用它"{{ inventory_hostname[3:6] }}"来选择字符3到6。

例如这个任务

  - debug:
      msg: "{{ inventory_hostname[3:6] }}"
Run Code Online (Sandbox Code Playgroud)

会输出

ok: [localhost] => {
    "msg": "alh"
}
Run Code Online (Sandbox Code Playgroud)