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



我正在尝试使用一个 ansible 剧本并行启动几个作业。我必须 POST 到 http 才能开始工作;作业排队后,可能需要 1-3 分钟才能完成作业。我需要在后台并行启动几个作业,然后轮询日志以查找成功消息或失败消息,并且还需要超时。我确实可以对服务器名称进行 ssh 访问,因此正则表达式搜索部分几乎可以正常工作;但是,当它在日志中找到"启动失败"时,我没有找到一种方法使其失败。尝试状态=不存在,但这似乎适用于其他wait_for组件。

这一切都在 Ansible 中可行吗?我想出了下面的山药。

---
- 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 在超时(在本例中为 2m)后未在日志中看到"已开始成功",则播放将失败。

最新更新