2016-02-03 21 views
0

Ansible僅在開始時纔會獲得事實。但我需要檢查每個命令的事實。 例如:如何在Ansible的每個命令中獲得事實

我需要創建一個目錄,之後,我需要把文件放到這個目錄。但是,在開始時會出現無法得到的事實'dir',創建目錄並且在下一步事實上仍然是FALSE和無法跳過此步驟=(並且僅在第二次運行後才執行此步驟。

我會嘗試setup 。步驟再次收集事實,但它不工作

我不喜歡這樣寫道:

- stat: path=/etc/zabbix/scripts/rabbitmq 
    register: rmqscriptdir 

- name: Create scripts dir if not exist 
    when: rmqscriptdir.stat.exists == False 
    shell: mkdir /etc/zabbix/scripts/rabbitmq 

- name: Gathering facts again 
    setup: 

- name: Set owner and permissions to rabbitmq directory 
    when: rmqscriptdir.stat.exists == True 
    file: path=/etc/zabbix/scripts/rabbitmq owner=zabbix group=root mode=0750 


- stat: path=/etc/zabbix/scripts/rabbitmq/api.py 
    register: rmqscript_api 

- name: Create api.py if not exist 
    when: rmqscript_api.stat.exists == False and rmqscriptdir.stat.exists == True 
    shell: cd /etc/zabbix/scripts/rabbitmq; wget https://raw.githubusercontent.com/jasonmcintosh/rabbitmq-zabbix/master/scripts/rabbitmq/api.py 

- name: Gathering facts again 
    setup: 

- name: Set owner and permissions to api.py 
    when: rmqscript_api.stat.exists == True 
    file: path=/etc/zabbix/scripts/rabbitmq/api.py owner=zabbix group=root mode=0755 

回答

1

我想你誤會setup模塊做什麼通過註冊值時,它不會成爲事實在再次運行時將被setup模塊重新加載。您的註冊值保持不變。如果您要再次檢查路徑是否存在,您不需要重新運行setup模塊,而是重新註冊其輸出。

但無論如何,Ansible的想法實際上並不是手動檢查每個任務是否應該執行。這是Ansible關心你的事情,Ansible通常是無能的,這意味着無論你運行多少次,它都會有相同的結果。

這是一個清理版本,它創建一個文件夾並下載文件。如果文件夾已經存在,第一個任務將不會執行任何操作。如果文件api.py已經存在,則第二個任務將不執行任何操作。

- name: Create scripts dir if not exist 
    file: 
    path: /etc/zabbix/scripts/rabbitmq 
    state: directory 
    owner: zabbix 
    group: root 
    mode: 0750 

- name: Create api.py if not exist 
    get_url: 
    url: https://raw.githubusercontent.com/jasonmcintosh/rabbitmq-zabbix/master/scripts/rabbitmq/api.py 
    dest: /etc/zabbix/scripts/rabbitmq/api.py 
    owner: zabbix 
    group: root 
    mode: 0755 

PS:如果你想看看哪個值由setup模塊重新加載,你可以註冊其輸出並顯示在一個調試任務,像這樣:

- setup: 
    register: all_server_facts 

- debug: 
    var: all_server_facts 

這僅包含服務器事實,有關cpu的信息,硬盤驅動器,網絡等。另請參閱this answer以獲取示例輸出。

+0

感謝您的回答。在我使用puppet之前,它會隨機運行一個任務,並希望檢查每個命令的所有依賴關係。我可以註冊統計到以前註冊的變量嗎? – ITJunkie

+0

您可以覆蓋以前註冊的變量。你是這個意思嗎? – udondan

+0

是的,謝謝。 – ITJunkie