2017-08-29 12 views
0

EC2からAMIを作成しようとしています。しかし、そうする前に、同じ名前のAMIが存在するかどうか確認したいと思います。存在する場合は、指定された名前のAMIを作成する前に登録を解除したいと思います。EC2_amiを使用したAMIの作成

問題1:AMIが既に存在する場合のみ、AMIの登録を解除するにはどうすればよいですか。 Issue2:登録解除コールが発行された場合、同じ名前の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の作成を続けたいと思います。

+1

試してみることができますか?:when:ami_find.results |長さとami_find.results [0] .state == 'available'' – helloV

+0

は答えとして投稿しました。 – helloV

+0

ありがとうございます。それが働いた答えとしてマークしました。ご協力いただきありがとうございます – SSF

答えて

1

まず、結果が空でないかどうかを確認してから状態を確認します。

when: ami_find.results | length and ami_find.results[0].state == 'available' 
0

上記のコメントのおかげで、私はDeregisterタスクに以下を追加して、空の応答に対処できました。

- 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' 
関連する問題