3

Ich muss alle Server in einer Datei auflisten, indem ich eine template.j2 verwende. Der Zweck besteht darin, eine Konfigurationsdatei mit der Ansible-Inventardatei zu erstellen. Alle Dateien befinden sich auf dem möglichen Server. Ich habe eine generate-projectconf.yml, eine template.j2 und die Inventardatei. Das Problem ist, dass mit meiner Methode der Localhost auch in der generierten Datei ist. Ich möchte nur IP, die in der Inventardatei sind.Wie man localhost von Gruppen ausschließt, wenn die Host-Aktion localhost mit ansible ist

Meine yml Datei sieht aus wie diese

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

die template.j2 Datei

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

Die Inventar-Datei wie, dass dies zu starten

[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 

sieht, führe ich den Befehl

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

Das Ergebnis sieht wie folgt aus:

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

Antwort

2

Ausschließen aktuellen Host (in Ihrem Fall localhost) aus der Liste der Server in der Vorlage:

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

funktioniert perfekt, vielen Dank! –

Verwandte Themen