async_status丢失其正在执行的任务的结果

时间:2018-08-17 14:57:59

标签: ansible

我有以下任务来并行构建AWS ec2实例:

- name: Set up testing EC2 instances
  ec2_instance:
    image_id: "{{ ami }}"
    name: "testing {{ item }}"
    tags:
      Resposible Party: neil.watson@genesys.com
      Purpose: Temporary shared VPC CICD testing
    vpc_subnet_id: "{{ item }}"
    wait: yes
  register: ec2_instances
  async: 7200
  poll: 0
  loop:
    - "{{ PrivateSubnet01.value }}"

- name: Wait for instance creation to complete
  async_status: jid={{ item.ansible_job_id }}
  register: ec2_jobs
  until: ec2_jobs.finished
  retries: 300
  loop: "{{ ec2_instances.results }}"

- debug:
    msg: "{{ ec2_instances }}"

麻烦的是最终调试任务没有显示我的期望。我希望看到Flashing Briefing API Feed Reference模块的所有返回值,但我只会看到:

ok: [localhost] => 
  msg:
    changed: true
    msg: All items completed
    results:
    - _ansible_ignore_errors: null
      _ansible_item_label: subnet-0f69db3460b3391d1
      _ansible_item_result: true
      _ansible_no_log: false
      _ansible_parsed: true
      ansible_job_id: '814747228663.130'
      changed: true
      failed: false
      finished: 0
      item: subnet-0f69db3460b3391d1
      results_file: /root/.ansible_async/814747228663.130
      started: 1

为什么?

2 个答案:

答案 0 :(得分:0)

“设置测试EC2实例” 任务是异步运行的(投票:0 )并注册了 ec2_instances 在它们完成引导之前(完成:0 )。之后,变量 ec2_instances 尚未更改。 ec2_jobs ,可能会在任务“等待实例创建完成” 完成后注册,并保留您期望的信息?

答案 1 :(得分:0)

所以我也在寻找针对这种情况的解决方案。没找到就自己弄了。

显然,如果您提供相同的名称、区域和 image_id,ec2_instance 将返回一个已经启动的 ec2 的实例。

因此,就我而言,我必须配置 3 个新实例,

我运行了 3 个任务,每个任务都启动了一个异步实例。

然后运行 ​​3 async_status 任务以确保所有 3 个实例都已启动。然后跑

    community.aws.ec2_instance:
      name: "machine_1"
      region: "us-east-1"
      image_id: ami-042e8287309f5df03
    register: machine_1

对于三台机器中的每台机器,然后将它们存储到我的变量中。