我正在尝试从EC2创建AMI。但是,在这样做之前,我想检查是否存在具有相同名称的AMI。如果是,我想在尝试使用给定名称创建AMI之前取消注册。
问题1:如果AMI已存在,如何仅运行AMI取消注册。 问题2:当取消注册调用时,如何在创建具有相同名称的AMI之前等待?
这是我到目前为止所拥有的
- name: Check if AMI with the same name exists
ec2_ami_find:
name: "{{ ami_name }}"
register: ami_find
- name: Deregister AMI if it exists
ec2_ami:
image_id: "{{ ami_find.results[0].ami_id }}"
state: absent
when: ami_find.results[0].state == 'available'
- pause:
minutes: 5
- name: Creating the AMI from of the instance
ec2_ami:
instance_id: "{{ item.id }}"
wait: yes
name: "{{ ami_name }}"
delegate_to: 127.0.0.1
with_items: "{{ ec2.instances }}"
register: image
修改 当状态可用时,我可以取消注册AMI'并等待几分钟后再尝试创建新的AMI(具有相同的名称)。但是,有时我得到以下回复。在这种情况下,我想继续创建AMI。
TASK [createAMI : Check if AMI with the same name exists] **********************
ok: [local] => {"changed": false, "results": []}
答案 0 :(得分:1)
首先检查结果是否为空,然后检查状态。
when: ami_find.results | length and ami_find.results[0].state == 'available'
答案 1 :(得分:0)
感谢上面的评论,我设法将以下内容添加到取消注册任务中,并设法处理空响应。
- name: Check if AMI with the same name exists
ec2_ami_find:
name: "{{ ami_name }}"
register: ami_find
- name: Deregister AMI if it exists
ec2_ami:
image_id: "{{ ami_find.results[0].ami_id }}"
state: absent
when: ami_find.results | length and ami_find.results[0].state == 'available'