我搜索了整个互联网,但找不到这个问题的答案。“如何使用带标签的动态库存终止 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
--tags
switch 与 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