使用带有Ansible的ec2_ami创建AMI

时间:2017-08-29 08:13:33

标签: amazon-web-services amazon-ec2 ansible

我正在尝试从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": []}

2 个答案:

答案 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'