2015-02-24 12 views
5

Ich versuche, den Kurznamen eines Servers zu erhalten, an dem gearbeitet wird.ansible kann nicht inventory_hostname

Ich habe dies in jinja2:

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

Die obigen schwappt gerade die ganze glob von Fakten statt nur den kurzen Namen. Diese

ist, was die hosts.yaml wie folgt aussieht:

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

Antwort

11

Was möchten Sie verwenden ist nur {{ inventory_hostname }} (oder {{ inventory_hostname_short }} für den Kurznamen).

Das Objekt hostvars ist eine Möglichkeit, auf die Variablen jedes Hosts zuzugreifen, über den Ansible informiert ist. So hostvars[inventory_hostname] geben Sie das Objekt alle bekannten Fakten über den aktuellen Host enthält, wird hostvars['foo'] geben Sie das Objekt enthält alle bekannten Fakten über den Host ‚foo‘ usw.

Angenommen, Sie haben eine Gruppe von Hosts namens ‚db_servers und Sie wollten eine Liste der IP-Adressen all dieser Hosts in einer Vorlage erstellen. Hier ist, wie Sie das tun würden:

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

Dies führte mich zu {{ansible_hostname}}. Vielen Dank! –

Verwandte Themen