2017-07-07 123 views
1

目標:在完成循環中的所有任務時,需要發起對發起循環的任務的響應。如何在ANSIBLE循環中處理每次迭代的結果

示例代碼:

角色/創建/任務/ main.yml

- name: Perform operations on all elements of 'input' list 
    include: task_lists.yml 
    with_items: "{{ input }}" 

角色/創建/任務/ task_lists.yml

# operation_1 is a python module 
    - name: Perform operation - 1 
     operation_1: 
     task: "Perform operation - 1" 
     . 
     . 
     . 

    # operation_2 is a python module 
    - name: Perform operation - 2 
     operation_2: 
     task: "Perform operation - 2" 
     . 
     . 
     . 

我們有設計,其中一個框架,每個任務都是一個python模塊。我們將任務參數傳遞給每個模塊。根據框架,我們傳遞給python模塊的任務名稱和任務參數之間應該有一個映射。

現在的問題是,我們需要一個普通的python模塊從main.yml中調用。每次迭代的結果應該作爲輸入傳遞給這個python模塊並處理。

- name: Perform operations on all elements of 'input' list 
     include: task_lists.yml 
     #Store result from the task_lists.yml into register say 'result' 
     #Call a python module here, which accepts 'result' as input and does some operation 
     with_items: "{{ input }}" 

我的問題這可能嗎?

有人可以幫我在這裏。

在此先感謝。

+0

我最好的建議你可以嘗試在循環中使用'wait_for'。這可以等待特定的事件發生,例如等待直到創建特定的文件。然後,所有任務都可以在完成時創建帶有結果的輸出文件,並且主要進程將把這些輸出傳遞到下一個模塊。我不知道這是否是最好的解決方案,但它應該起作用。 –

+0

您正在問這個問題[https://stackoverflow.com/q/38470217/2947502]。 Ansible中沒有這樣的機制 - 您可以手動將單個結果添加到列表中。 – techraf

回答

-1

您可以使用通知者&處理:

角色/創建/任務/ task_lists.yml

# operation_1 is a python module 
- name: Perform operation - 1 
    operation_1: 
    task: "Perform operation - 1" 
    shell: "echo {{ result}}" 
    . 
     notify: Performed operation - 1" 

在角色/事/處理器/ main.yml:

- name: something happened 
    debug: 
     msg: "{{ result }}" 
相關問題