2015-04-01 56 views
1

我使用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地址。

回答

1

我在http://jpmens.net/2015/01/29/caching-facts-in-ansible/上了解到,默認情況下,緩存事實在組之間刷新。但是,通過配置負責人將緩存放在磁盤上來配置負載均衡器時,可以提供所有事實,包括我需要的來自Web服務器的信息。創建這個ansible.cfg在同一文件夾作爲我Vagrantfile修復該問題:

[defaults] 
fact_caching = jsonfile 
fact_caching_connection = /tmp/mycachedir 

此塊是不必要的,我刪除它:

- hosts: webservers 
    user: vagrant 
    name: Gather facts from webservers 
    tasks: []