如果未使用Ansible运行,则提供EC2实例

时间:2017-08-28 10:54:06

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

如果没有运行具有相同名称的实例,我正在尝试配置实例并在其上执行其他一些角色。我正在使用EC2模块进行配置,并使用ec2_remote_facts来过滤特定的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 var的结果时会得到以下内容。

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

这通常是由于以前提供和终止的具有相同名称的实例报告为空状态。 在这种情况下,即使没有使用相同名称运行的ec2实例,配置步骤也会失败。如何解决这两个问题?

1 个答案:

答案 0 :(得分:2)

尝试这个条件:

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

running状态中没有实例时,这应该触发 - 列表为空或所有元素的state属性与running不同。