3

我必須使用template.j2列出文件中的所有服務器。目的是生成一個最新的配置文件與可靠的清單文件。所有文件都在安全服務器上。 我有一個generate-projectconf.yml,一個template.j2和庫存文件。 問題是,我的方法localhost也在生成的文件中。我只想要庫存文件中的IP。如何在主機操作是localhost localhost時從組中排除localhost

我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 : ... 
... 

回答

2

排除當前主機(在你的情況localhost)從模板服務器列表:

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

完美的作品,非常感謝你! –