具有poll = 0的Ansible异步模块未完成任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有poll = 0的Ansible异步模块未完成任务相关的知识,希望对你有一定的参考价值。

首先,我正在使用Ansible 2.0.0(我无法避免)。

我有这样的任务。在这里,我使用ping命令将流量发送到目标计算机2分钟。此命令在远程计算机上运行。

- name: Ping destination VM from host VM.
  shell: ping -n -i 0.004 100.1.1.1 -c 30000 | grep "received" | cut -d"," -f2 | xargs | cut -d" " -f1
  delegate_to: 172.25.11.207
  async: 250
  poll: 0
  register: ping_result
  failed_when: ping_result.rc != 0

在此之后我还有2-3个其他任务。这不应该超过一分钟。

现在,经过这些任务,我想捕获ping_result的输出。所以我检查上面任务的状态如下:

- name: Check ping status
  async_status:
    jid: "{{ ping_result.ansible_job_id }}"
  register: job_result
  until: job_result.finished
  retries: 10

现在这失败了以下错误:

失败! => {“failed”:true,“msg”:“错误!条件检查'job_result.finished'失败。错误是:ERROR!错误,同时评估条件(job_result.finished):错误!'dict对象'没有属性'完成'“}

从错误中,看起来原始任务还没有完成。我甚至试图增加async时间,直到5000.没有运气。

任何有关这方面的帮助将不胜感激。

答案

评论的回答:

您应该使用delegate_to来检查异步作业的状态,因为原始的async任务也已被委派。

以上是关于具有poll = 0的Ansible异步模块未完成任务的主要内容,如果未能解决你的问题,请参考以下文章

Linux Ansible介绍

Ansible 日常使用技巧(上)

I/O复用 select和poll

Ansible常用模块使用

第4天:Ansible模块

Ansible应用领域