2016-08-29 9 views
3

Ich bin interessiert zu erfahren, ob Ansible ein enthaltenes Playbook asynchron ausführen kann?Ansible: Können wir ein Include-Playbook asynchron ausführen?

Im Grunde versuche ich eine Aufgabe auszuführen "Feuer und vergiss es, überprüfe es später." Wenn ich später nachschaue, möchte ich auch eine lockere Benachrichtigung mit dem Ergebnis senden.

Allerdings habe ich bemerkt, dass das mitgelieferte Playbook für die Slack-Benachrichtigung ein wenig länger dauert als erwartet und daher hält es den Rest des Playbooks.

Was ich will, ist die Async der mitgelieferten Playbook für Slack Benachrichtigung, so dass das aktuelle Playbook fortgesetzt wird.

Zum Beispiel habe ich eine playbook.yml-Datei, die wie folgt aussieht:

- hosts: localhost 

    tasks: 
    - name: Fire and forget task 
    shell: some_task.sh 
      chdir=/tmp/ 
    register: fire_and_forget_task 
    async: 3600 
    poll: 0 


    - name: Check on fire and forget task 
    async_status: jid={{ fire_and_forget_task.ansible_job_id }} 
    register: task_status 
    until: task_status.finished 
    retries: 100 
    ignore_errors: yes 


    - name: Send slack success msg 
    include: slack.yml msg="Fire and forget task SUCCESS" 
    when: task_status.stdout is defined and 
      'SUCCESS' in fire_and_forget_task.stdout 
    async: 3600 
    poll: 0 


    - name: Send slack failed msg 
    include: slack.yml msg="Fire and forget task FAILED" 
    when: task_status.stdout is defined and 
      'FAILED' in fire_and_forget_task.stdout 
    async: 3600 
    poll: 0 

Datei wie folgt aussieht Meine slack.yml:

- name: Send notification message via Slack 
    local_action: 
     module: slack 
     token: <REDACTED> 
     attachments: 
     - text: "{{ msg }}" 
     color: "#83F52C" 
     title: "Ansible Status {{ lookup('pipe','date') }}" 

Mit dem obigen Textbuch, das „msg slack Erfolg senden "Für eine einfache Aufgabe dauert die Ausführung der Aufgabe sehr lange. Es scheint, dass es nicht asynchron läuft, obwohl ich es ausdrücklich gesagt habe.

Was ist der beste Weg, um das gewünschte Ergebnis zu erzielen? Danke.

Antwort

2

include kann async Schlüsselwort nicht verwenden.
Wenn Ihr slack.yml ist so einfach, Ihr Material mit einem einzigen Anruf einfach ersetzen sind:

- name: Send notification message via Slack 
    local_action: 
    module: slack 
    token: <REDACTED> 
    attachments: 
    - text: "Task result {{ (task_status.stdout is defined and 'SUCCESS' in task_status.stdout) | ternary('SUCCESS','FAILURE') }}" 
     color: "#83F52C" 
     title: "Ansible Status {{ lookup('pipe','date') }}" 
    async: 3600 
    poll: 0 

P. S. aber ich verstehe nicht, wie ein einzelner Slack HTTP-Aufruf Ihr Playbook verlangsamt, wenn Sie eine lange laufende Aufgabe haben (mit hohen async und retries Zahlen), bevor es ...

Verwandte Themen