2017-08-28 89 views
0

我正嘗試調配實例並對其執行一些其他角色(如果具有相同名稱的實例未運行)。我使用的EC2模塊來提供和ec2_remote_facts過濾特定EC2名稱:如果未使用Ansible運行,則提供EC2實例

- name: Gather Facts to check if a similar instance is running 
    ec2_remote_facts: 
    filters: 
     instance-state-name: running 
     "tag:Name" : "{{ tag_name }}" 
    register: ec2_exists 

- name: Display Details 
    debug: var=ec2_exists 

- name: Provison "{{ count }}" ec2 instances in "{{ region }}" 
    ec2: 
    key_name: "{{ key_name }}" 
    instance_type: "{{ instance_type }}" 
    image: "{{ hip_ami_id }}" 
    vpc_subnet_id: "{{ vpc_subnet_id }}" 
    group_id: "{{ group_id }}" 
    region: "{{ region }}" 
    instance_profile_name: "{{ instance_profile_name }}" 
    exact_count: "{{ count }}" 
    count_tag: "{{ count_tag }}" 
    instance_tags: 
      CostCentre: V_EFXSales 
      Name: "{{ tag_name }}" 
    delegate_to: 127.0.0.1 
    register: ec2 
    when: ec2_exists.results[0].state != 'running' 

這種運作良好,但有時我得到以下時,我顯示ec2_exists變種的結果。

TASK [provision : Display Details] ********************************************* 
ok: [local] => { 
    "ec2_exists": { 
     "changed": false, 
     "instances": [] 
    } 
} 

這通常是由於先前供應和使用相同的名稱彙報與空狀態終止的實例。 在這種情況下,即使沒有以相同名稱運行的ec2實例,提供步驟也會失敗。如何解決這兩個條件?

回答

1

嘗試這個條件:

when: ec2_exists.instances | selectattr('state','equalto','running') | list | count == 0 

當有running狀態沒有情況下,這應該解僱 - 列表爲空或所有元素具有state屬性running不同。