如何在Ansible任务中生成支持多动态标签的AWS SSM激活码
Ansible SSM激活码动态传入多标签解决方案
核心解决逻辑:Ansible的loop/with_items属于任务级循环,每遍历一个元素就会完整执行一次当前任务,因此才会生成多个激活码。我们只需要将标签拼接逻辑放到Jinja2模板渲染阶段,在单次任务执行前完成所有标签参数的组装,就能实现单次调用传入全部标签的需求。
具体实现步骤
1. 调整角色内部代码
首先新增标签参数拼接任务,再调用AWS CLI生成激活码:
- name: 预拼接SSM激活码标签参数 set_fact: ssm_tag_params: >- {% for key, val in aws_ssm_instance_tags.items() %} "Key={{ key }},Value={{ val }}" {% endfor %} - name: 生成SSM激活码和ID command: | aws ssm create-activation --tags {{ ssm_tag_params }} register: ssm_activation_code
2. 角色使用方式无变动
使用者仍可按原有设计传入自定义标签字典即可:
- role: ansible-role-aws-sm-agent vars: aws_ssm_instance_tags: { "key1": "value1", "key2": "value2", "env": "production", "project": "biz" }
可选优化方案
如果希望简化代码避免手动拼接参数,可以使用Ansible官方AWS集合提供的aws_ssm_activation模块,原生支持直接传入标签字典,写法更简洁:
- name: 生成SSM激活码和ID amazon.aws.aws_ssm_activation: iam_role: "你的SSM实例角色名" tags: "{{ aws_ssm_instance_tags }}" register: ssm_activation_code
该方案兼容你的Ansible 2.9运行环境,只需提前安装amazon.aws集合即可使用。
内容的提问来源于stack exchange,提问作者tarpanpathak
相关产品推荐
相关产品推荐

