有没有办法通过 Ansible 标签终止所有 EC2 实例?

问题描述 投票:0回答:2

所以我有一个非常简单的 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}}"

该脚本运行良好,但当同一标签内有多个实例时,它只会终止第一个实例。有什么方法可以终止这些标签中的每个实例吗?

amazon-ec2 ansible yaml ansible-2.x ansible-facts
2个回答
1
投票
instance_ids: "{{ ec2_web.instances[0].instance_id }}"

这只是一个实例,因此仅终止一个实例。您可以使用

count_tag
来计算具有特定标签的实例,并使用
exact_count

终止实例的确切数量

本文档末尾的示例

https://docs.ansible.com/ansible/latest/collections/amazon/aws/ec2_module.html


0
投票

您的代码的“问题”是您仅在第一个实例中获得

instance_id
instances[0]
)。
一种解决方案是使用以下内容提取所有
instance_id

ec2_web.instances | map(attribute='instance_id') | list

另一种方法是为

ec2_web.instances
中的每个元素循环执行任务。

© www.soinside.com 2019 - 2024. All rights reserved.