为了支持 Ansible 中的动态键值对,我希望更新一个现有角色,该角色创建一个 AWS SSM 激活以允许在运行时传递任意标签。
到目前为止,我已尝试利用以下 Ansible 构造,但均未成功:list变量、变量、、dict和loop原生 Python方法。with_dictwith_itemsdict
以下是我的 Ansible 环境的一些详细信息:
- Ansible 版本:2.9.23
- AWS CLI 版本:1.18.147
- Python版本:3.7.10
- AWS SSM 命令参考:https ://docs.aws.amazon.com/cli/latest/reference/ssm/create-activation.html
当前带有硬编码标签的角色/命令如下所示:
- name: Generate SSM activation code and ID
command: |
aws ssm create-activation
--tags "Key=key1,Value=value1" "Key=key2,Value=value2"
register: ssm_activation_code
我们的想法是将其更新为如下所示:
name: Generate SSM activation code and ID
command: |
aws ssm create-activation
--tags "Key={{ item.key }},Value={{ item.value }}"
register: ssm_activation_code
with_items: "{{ aws_ssm_instance_tags }}"
并让角色传递标签的消费者像这样:
- role: ansible-role-aws-sm-agent
vars:
aws_ssm_instance_tags: {
"key1": "value1",
"key2": "value2",
.....
}
所有循环结构的问题是任务为每个键值对运行一次,导致多个 SSM 激活,这是不正确的。相反,我想在一次执行中传递所有标签。如果需要,我很乐意提供任何其他详细信息。非常感谢您对此的任何帮助。