2015-02-24 14 views
5

Sto cercando di ottenere il nome breve di un server su cui si sta lavorando.ansible non può ottenere inventory_hostname

ho questo in Jinja2:

ServerAlias graphite.{{ hostvars[inventory_hostname] }} 
ServerAlias graphite.{{ hostvars[inventory_hostname] }}.{{dc}}.{{subnet}} 

È possibile che questo si riversa solo l'intero glob dei fatti invece di solo il nome breve.

Questo è ciò che la hosts.yaml assomiglia:

graphite.experimental.com dc=lv1 subnet=coupons.lan 

risposta

11

Ciò che si vuole utilizzare è solo {{ inventory_hostname }} (o {{ inventory_hostname_short }} per il nome breve).

L'oggetto hostvars è un modo per accedere alle variabili di ogni host di cui Ansible è a conoscenza. Così hostvars[inventory_hostname] vi darà l'oggetto che contiene tutti i fatti noti relativi l'host corrente, hostvars['foo'] vi darà l'oggetto che contiene tutti i fatti noti relativi alla 'foo' padrone di casa, ecc

Supponiamo di avere un gruppo di host chiamato 'db_servers 'e volevi generare un elenco degli indirizzi IP di tutti quegli host in un modello. Ecco come si farebbe:

{% for host in groups['db_servers'] %} 
    {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }} 
{% endfor %} 
+1

questo mi ha portato a utilizzare {{ansible_hostname}}. Grazie! –

Problemi correlati