我有以下任务来并行构建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
为什么?
答案 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
对于三台机器中的每台机器,然后将它们存储到我的变量中。