在 Jinja 模板中使用 Ansible 控制主机的 IP 地址

Blu*_*ueM 5 ansible ansible-facts

我想将 IP 地址插入到 Ansible playbook 使用的 J2 模板中。该 IP 地址不是正在配置的主机的地址,而是完成配置的主机的 IP。到目前为止,我发现的所有内容都涵盖了使用与所配置的主机相关的变量/事实。\n换句话说:I\xe2\x80\x99d 喜欢插入的 IP 是[\'ansible_default_ipv4\'][\'address\']执行ansible -m setup 127.0.0.1.

\n\n

我认为我可以使用本地剧本编写一个包含 IP 的动态生成的模板文件,但我希望这可能是 \xe2\x80\x9cAnsible 方式\xe2\x80\x9d。

\n

yda*_*coR 2

setup您可以使用 alocal_action或本地运行模块来强制 Ansible 获取有关控制主机的事实delegate_to。然后,您可以注册该输出并解析它,或者只是set_fact给它一个有用的名称,以便稍后在模板中使用。

一个示例游戏可能类似于:

   tasks:
    - name: setup
      setup:
      delegate_to: 127.0.0.1

    - name: set ansible control host IP fact
      set_fact:
        ansible_control_host_address: "{{ hostvars[inventory_hostname]['ansible_eth0']['ipv4']['address'] }}"
      delegate_to: 127.0.0.1

    - name: template file with ansible control host IP
      template:
        src: /path/to/template.j2
        dest: /path/to/destination/file
Run Code Online (Sandbox Code Playgroud)

然后ansible_control_host_address像平常一样在模板中使用该变量:

...
Ansible control host IP: {{ ansible_control_host_address }}
...
Run Code Online (Sandbox Code Playgroud)