当hosts操作是带有ansible的localhost时,如何从组中排除localhost

时间:2017-04-20 10:35:58

标签: localhost ansible jinja2 ansible-inventory ansible-template

我必须使用template.j2列出文件中的所有服务器。目的是使用ansible库存文件生成最新的配置文件。所有文件都在ansible服务器上。 我有一个generate-projectconf.yml,一个template.j2和一个inventory文件。 问题是,使用我的方法,localhost也在生成的文件中。我只想要库存文件中的IP。

我的yml文件看起来像那样

- hosts: localhost
  tasks:
 - name: modif du project.conf
   template: src="template.j2" dest="/tmp/project.conf" 

template.j2文件

...
ServersList
    {% for host in  groups[servers_to_monitor] %}
    {{ hostvars[host]['ansible_hostname'] }} : {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}
    {% endfor %}
...

库存文件看起来像那样

[DB_Servers]
cas05  ansible_ssh_host=192.168.20.105  ansible_user=ansible
cas06  ansible_ssh_host=192.168.20.106  ansible_user=ansible

[MS_Account_Servers]
acc21  ansible_host=192.168.20.99  ansible_user=ansible
acc22  ansible_host=192.168.20.100  ansible_user=ansible

[MS_Admin_Servers]
adm21  ansible_host=192.168.20.79  ansible_user=ansible
adm22  ansible_host=192.168.20.80  ansible_user=ansible

[MS_Admingui_Servers]
ihm21   ansible_host=192.168.20.81  ansible_user=ansible

要启动它,我执行命令

ansible-playbook  generate-projectconf.yml -i /.../inventory --extra-vars "servers_to_monitor=all"

结果如下:

...
dep01 : 192.168.20.3
ihm21 : 192.168.20.81
adm21 : ...
...

1 个答案:

答案 0 :(得分:2)

从模板中的服务器列表中排除当前主机(在您的情况下为localhost):

{% for host in groups[servers_to_monitor] | difference([inventory_hostname]) %}