我使用Vagrant和Ansible 1.9創建一個haproxy前端(在負載平衡器組中)和兩個jetty後端服務器(在webservers組中)的QA環境。該haproxy.cfg與以下行來顯示什麼Ansible是緩存的模板:Ansible不緩存事實供以後使用
{% for host in groups['webservers'] %}
server {{ host }} {{ hostvars[host] }}:8080 maxconn 1024
{% endfor %}
最終的配置會使用這樣的:
server {{ host }} {{ hostvars[host]['ansible_eth1']['ipv4']['address'] }}:8080 maxconn 1024
配置每個後端服務的IP地址。
在此基礎上:http://docs.ansible.com/guide_rolling_upgrade.html我使用下面的嘗試挑起Ansible緩存每個Web服務器的IP地址:
- hosts: webservers
user: vagrant
name: Gather facts from webservers
tasks: []
的Web服務器是先建,以及負載均衡器最後。但是,web服務器的IP地址沒有被緩存。這就是所有那些:
server qa01 {'ansible_ssh_host': '127.0.0.1', 'group_names': ['webservers'], 'inventory_hostname': 'qa01', 'ansible_ssh_port': 2222, 'inventory_hostname_short': 'qa01'}:8080 maxconn 1024
我需要做什麼來緩存這些值?看起來Ansible知道這些值,因爲:
- hosts: all
user: vagrant
sudo: yes
tasks:
- name: Display all variables/facts known for a host
debug: var=hostvars[inventory_hostname]
將顯示完整的值集合,包括我需要的IP地址。