如何使用 ansible 动态库存终止 ec2 实例?

如何使用 ansible 动态库存终止 ec2 实例?

我搜索了整个互联网,但找不到这个问题的答案。“如何使用带标签的动态库存终止 ec2 实例?”如果我可以终止带有特定标签的 ec2 实例或实例组

ec2 模块要求传递实例 ID,但没有任何自动化操作。因此,正在寻找一种使用 ansible 动态清单来定位特定标签的方法

- name: terminate single instance
   hosts: all
   tasks:
     - action: ec2_facts
     - name: terminating single instance
       local_action:
         module: ec2
         state: 'absent'
         region: us-east-1
         instance_ids: "{{ ansible_ec2_instance_id }}"

我已经尝试使用以下命令

ansible-playbook terminate.yml --tags "tag_Name_web_server"

这意味着我也想删除 ec2 实例,Name' tag 'web-server 现在当我运行它时,它会查看几个 ec2 实例,但只针对那些带有指定标签的实例。简而言之,不起作用。

任何帮助将不胜感激

答案1

我遇到了和你一样的问题

从今天起(准确地说是 Ansible 2.5),你可以在没有 host_vars 的情况下使用ec2_instance模块(与模块不同ec2

例如,您想要终止所有具有标签值对的 ec2 实例:Usage:k8s-ansible,这是您需要的任务:

ec2_instance:
  state: absent
  filters:
    tag:Usage: k8s-ansible

答案2

--tagsswitch 与 ec2 标签没有任何共同之处:

-t TAGS, --tags=TAGS 仅运行带有这些值标记的剧本和任务

您应该使用外部变量和主机模式:

- name: Terminate tagged instances
  hosts: tag_{{ tag_name }}_{{ tag_value }}
  tasks:
    - ec2_facts:
    - ec2:
        state: absent
        region: "{{ ansible_ec2_placement_region }}"
        instance_ids: "{{ ansible_ec2_instance_id }}"
      delegate_to: localhost

执行:ansible-playbook -e tag_name=Name -e tag_value=web_server terminate.yml

相关内容