如果没有运行具有相同名称的实例,我正在尝试配置实例并在其上执行其他一些角色。我正在使用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实例,配置步骤也会失败。如何解决这两个问题?
答案 0 :(得分:2)
尝试这个条件:
when: ec2_exists.instances | selectattr('state','equalto','running') | list | count == 0
当running
状态中没有实例时,这应该触发 - 列表为空或所有元素的state
属性与running
不同。