所以我有一个非常简单的 ansible 脚本来终止我使用标签过滤的 EC2 实例。
- name: Destroy Web Instance.
hosts: localhost
connection: local
vars_files:
- group_vars/all
tasks:
- name: Gather Web Instance EC2 Facts.
ec2_instance_info:
region: "{{ region }}"
filters:
"tag:Type": "web"
aws_access_key: "{{ec2_access_key}}"
aws_secret_key: "{{ec2_secret_key}}"
register: ec2_web
- name: Kill EC2 Instance
ec2:
instance_ids: "{{ ec2_web.instances[0].instance_id }}"
state: absent
region: "{{ region }}"
aws_access_key: "{{ec2_access_key}}"
aws_secret_key: "{{ec2_secret_key}}"
该脚本运行良好,但当同一标签内有多个实例时,它只会终止第一个实例。有什么方法可以终止这些标签中的每个实例吗?
instance_ids: "{{ ec2_web.instances[0].instance_id }}"
这只是一个实例,因此仅终止一个实例。您可以使用
count_tag
来计算具有特定标签的实例,并使用 exact_count
终止实例的确切数量
本文档末尾的示例
https://docs.ansible.com/ansible/latest/collections/amazon/aws/ec2_module.html
您的代码的“问题”是您仅在第一个实例中获得
instance_id
(instances[0]
)。instance_id
:
ec2_web.instances | map(attribute='instance_id') | list
另一种方法是为
ec2_web.instances
中的每个元素循环执行任务。