【发布时间】:2020-01-21 11:50:23
【问题描述】:
我有两台 linux 服务器:
- server1: ip: 10.241.55.6, hostname: server1
- server2: ip: 10.242.55.7, hostname: server2
我创建了一个名为 servers 的 ansible 清单文件,其内容如下:
[IC]
10.241.55.6
10.241.55.7
现在我已经创建了这个 jinja2 库存模板文件:test.j2,内容如下:
[IC]
{% for hostip in groups['IC'] %}
{% if hostip == ansible_default_ipv4.address %}
{{ ansible_default_ipv4.address }} default_hostname={{ ansible_nodename }}
{{ ansible_default_ipv4.address }} default_hostname={{ ansible_nodename }}
{% endif %}
{% endfor %}
我正在运行这个 ansible playbook:
---
- name: Generate portal inventory file
hosts: all
tasks:
- name: Generate inventory
delegate_to: localhost
template:
src: inventory/test.j2
dest: inventory/test
命令是:ansible-playbook -i inventory/servers generate-inventory.yml
最终目标是 ansible 从清单文件连接到每个服务器,然后基于 jinja2 清单模板,它创建一个具有以下格式的新清单文件:
[IC]
10.241.55.6 default_hostname=hostname_of_the_server_with_that_ip
等等……
for 循环的问题是所有条目都具有相同的服务器 ip(而我应该为每个具有各自主机名的服务器都有一个条目):
[IC]
10.241.55.6 default_hostname=server1
10.241.55.6 default_hostname=server2
我在这里缺少什么?另外,如果有任何其他更好的方法来实现这一点,请告诉我。
【问题讨论】:
标签: ansible ansible-2.x ansible-inventory ansible-template