Amazon web services 在Ansible中,我可以将字典作为变量传递给云模块吗

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

我正在使用ansible中的ec2_asg云模块更新自动缩放组。我正试图将其作为一个角色,以便将其应用于多个剧本,我想知道是否可以将标记值作为变量传递进来

如果没有变量,asg任务看起来像:

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 }}"