2015-02-24 13 views
5

Tôi đang cố gắng lấy tên ngắn của máy chủ đang được xử lý.không thể nhận được inventory_hostname

Tôi có điều này trong jinja2:

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

Trên đây chỉ tràn toàn bộ glob các sự kiện thay vì chỉ là tên viết tắt.

Đây là những gì hosts.yaml trông giống như:

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

Trả lời

11

gì bạn muốn sử dụng chỉ là {{ inventory_hostname }} (hoặc {{ inventory_hostname_short }} cho tên viết tắt).

Đối tượng hostvars là một cách để truy cập các biến của mọi máy chủ mà Ansible biết. Vì vậy, hostvars[inventory_hostname] sẽ cung cấp cho bạn đối tượng chứa tất cả các thông tin đã biết về máy chủ lưu trữ hiện tại, hostvars['foo'] sẽ cung cấp cho bạn đối tượng chứa tất cả các sự kiện đã biết về máy chủ 'foo', v.v.

Giả sử bạn có một nhóm máy chủ được gọi là 'db_servers 'và bạn muốn tạo danh sách địa chỉ IP của tất cả các máy chủ đó trong một mẫu. Dưới đây là cách bạn sẽ làm điều đó:

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

điều này đã dẫn tôi sử dụng {{ansible_hostname}}. Cảm ơn bạn! –

Các vấn đề liên quan