Amazon web services 在Ansible中,我可以将字典作为变量传递给云模块吗
我正在使用ansible中的ec2_asg云模块更新自动缩放组。我正试图将其作为一个角色,以便将其应用于多个剧本,我想知道是否可以将标记值作为变量传递进来 如果没有变量,asg任务看起来像:Amazon web services 在Ansible中,我可以将字典作为变量传递给云模块吗,amazon-web-services,ansible,Amazon Web Services,Ansible,我正在使用ansible中的ec2_asg云模块更新自动缩放组。我正试图将其作为一个角色,以便将其应用于多个剧本,我想知道是否可以将标记值作为变量传递进来 如果没有变量,asg任务看起来像: ec2_asg: name: "test_app" tags: - Environment: Production - Name: test_app 我知道我也可以做到: ec2_asg: name: {{asg_name}}" tags: - Envi
ec2_asg:
name: "test_app"
tags:
- Environment: Production
- Name: test_app
我知道我也可以做到:
ec2_asg:
name: {{asg_name}}"
tags:
- Environment: "{{asg_tag_env}}"
- Name: "{{asg_tag_name}}"
但我很好奇,在我的组变量中,我是否可以将所有标记信息作为变量传递进来,即
asg_tags: "{'tags': {'Environment': Production, 'Name': test_app}}" #option1
或
当我尝试时,可以在ec2_asg模块中通过
#option1
ec2_asg
name: "{{asg_name}}"
"{{asg_tags}}"
这似乎不起作用,因为模块不了解字典的根索引是您在ec2_asg模块中指定的标记选项。我只是在加载YAML时遇到语法错误 如果我尝试
#option2
ec2_asg
name: "{{asg_name}}"
tags: "{{asg_tags}}"
我从ansible返回一个错误声明:对于标记.items()中的k,v:\n属性错误:“str”对象没有属性“items”\n
要么这不受支持,要么我不确定如何构造变量,以便ec2_asg模块正确读取标记并知道如何应用它们。首先,请注意,
标记的值是一个字典列表,每个字典都有一个键:
tags:
- Environment: Production
- Name: test_app
如果将其粘贴到YAML解析器中,您将看到相应的JSON是:
{
"tags": [
{
"Environment": "Production"
},
{
"Name": "test_app"
}
]
}
因此,无论您为变量指定什么值,它都需要是一个类似的列表
我目前无法亲自测试ec2*模块,但如果您正确定义一个变量,如下所示:
asg_tags:
- Environment: Production
- Name: test_app
或者(尽管我发现前者更容易阅读):
然后,您应该能够执行以下操作:
- ec2_asg:
name: "test_app"
tags: "{{ asg_tags }}"
这是可能的,但男孩很烦人。不幸的是,我再也无法访问该代码了——通过作业是的,我听到你在那里,我想我很接近了,但遇到了一个路障。谢谢你larsks,这很有效,谢谢你在YAML解析器上的指针,非常感谢
asg_tags: [{"Environment": "Production"}, {"Name": "test_app"}]
- ec2_asg:
name: "test_app"
tags: "{{ asg_tags }}"