如何使用异步运行Ansible并行任务并检查日志成功/失败

问题描述:

我正在尝试使用正确的操作手册并行启动几个作业。 我必须发布到http才能开始工作;一旦工作排队,完成工作可能需要1-3分钟。我需要在后台并行启动几个作业,然后轮询日志以获取成功消息或失败的消息,并且还需要超时。我有ssh访问SERVERNAME,所以正则表达式搜索部分非常有效;但是我没有找到一种方法来使它在日志中发现“Started Failed”时失败。试过的状态=缺席,但似乎适用于其他wait_for组件。如何使用异步运行Ansible并行任务并检查日志成功/失败

这一切都可以Ansible?我想出下面的yaml。

--- 

- hosts: localhost 
    connection: local 
    gather_facts: no 


    tasks: 

    - name: Launch an http POST 
     async: 10 
     poll: 0 
     uri: 
     url: "https://SERVERNAME/MYLINK1" 
     method: POST 
     headers: 
      Content-Type: "application/x-www-form-urlencoded" 
     status_code: 200 
     validate_certs: no 
     timeout: 10 
     return_content: yes 
     register: response1 

    - name: Launch an http POST 
     async: 10 
     poll: 0 
     uri: 
     url: "https://SERVERNAME/MYLINK2" 
     method: POST 
     headers: 
      Content-Type: "application/x-www-form-urlencoded" 
     status_code: 200 
     validate_certs: no 
     timeout: 10 
     return_content: yes 
     register: response2 

    - name: Wait Job to be ready 
     async: 120 
     delegate_to: SERVERNAME 
     wait_for: 
     path: /usr/local/logs/mylog1.log 
     search_regex: "Started Success" 
     register: wait_for_success1 

    - name: Wait Job to be failed 
     async: 120 
     delegate_to: SERVERNAME 
     wait_for: 
     path: /usr/local/logs/mylog1.log 
     search_regex: "Started Failed" 
     register: wait_for_failed1 

    - name: Wait Job to be ready 
     async: 120 
     delegate_to: SERVERNAME 
     wait_for: 
     path: /usr/local/logs/mylog2.log 
     search_regex: "Started Success" 
     register: wait_for_success=2 

    - name: Wait Job to be failed 
     async: 120 
     delegate_to: SERVERNAME 
     wait_for: 
     path: /usr/local/logs/mylog2.log 
     search_regex: "Started Failed" 
     register: wait_for_failed2 

您不应在检查任务中使用async。您可以在wait_for模块中使用timeout参数。

- hosts: SERVERNAME 
    tasks: 
    - name: Wait Job1 to be ready 
     wait_for: 
     path: /usr/local/logs/mylog1.log 
     search_regex: "Started Success" 
     timeout: 120 

    - name: Wait Job2 to be ready 
     wait_for: 
     path: /usr/local/logs/mylog2.log 
     search_regex: "Started Success" 
     timeout: 120 

我不会打扰检查日志中是否出现“启动失败”。如果Ansible在超时(本例中为2米)的日志中看不到“已启动成功”,则播放将失败。