2015-02-24 65 views
5

我試圖獲取正在處理的服務器的簡稱。ansible無法獲取inventory_hostname

我有這樣的的Jinja2:

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

以上只是溢出的事實,而不是僅僅短名的整個水珠。

這是hosts.yaml的樣子:

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

回答

11

要使用什麼纔是{{ inventory_hostname }}(或{{ inventory_hostname_short }}的簡稱)。

hostvars對象是一種訪問Ansible知道的每個主機變量的方法。所以hostvars[inventory_hostname]會給你含有關於當前主機的所有已知事實的對象,hostvars['foo']會給你包含所有關於主機「foo」的已知事實的對象等。

假設你有一組名爲'db_servers ',並且您想要生成模板中所有主機的IP地址列表。以下是你如何做到這一點:

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

這導致我使用{{ansible_hostname}}。謝謝! – 2015-02-24 01:41:17