调用内部函数Fn::MergeMapToList,将多个Map合并成一个以Map为元素的列表。
函数声明
JSON
{ "Fn::MergeMapToList": [ { "key_1": ["key_1_item_1", "key_1_item_2", ...] }, { "key_2": ["key_2_item_1", "key_2_item_2", ...], }, ... ] }
YAML
完整函数的语法。
Fn::MergeMapToList: - key_1: - key_1_item_1 - key_1_item_2 - ... - key_2: - key_2_item_1 - key_2_item_2 - ... - ...
缩写形式。
!MergeMapToList [{key_1: [key_1_item_1, key_1_item_2, ..]}, {key_2: [key_2_item_1, key_2_item_2, ...]}, ...]
参数信息
[{key_1: [key_1_item_1, key_1_item_2, ..]}, {key_2: [key_2_item_1, key_2_item_2, ...]},...]:将要合并的源列表,列表中包含多个Map,每个Map的Value都必须是一个列表。
合并规则:
分别取源列表中每个Map中的Key和第一个Value,放入合并后列表的第一个Map中。
再分别取源列表中每个Map中的Key和第二个Value,放入合并后列表的第二个Map中;以此类推。
最终合并后的列表长度是由源列表中Map的最大Value的长度决定。如果存在源列表中Map的Value长度不一致时,会重复取Value长度较小的列表的最后一个元素, 使最终合并之后列表中每个Map的元素个数都一样。
返回值
以合并后的Map为元素的列表。
使用示例
合并三个Map,每个Map中键值对应的列表长度一致。
Fn::MergeMapToList: - key_1: - key_1_item_1 - key_1_item_2 - key_2: - key_2_item_1 - key_2_item_2 - key_3: - key_3_item_1 - key_3_item_2
合并结果如下:
- key_1: key_1_item_1 key_2: key_2_item_1 key_3: key_3_item_1 - key_1: key_1_item_2 key_2: key_2_item_2 key_3: key_3_item_2
合并三个Map,每个Map中键值对应的列表长度不一致。
Fn::MergeMapToList: - key_1: - key_1_item_1 - key_1_item_2 - key_2: - key_2_item_1 - key_2_item_2 - key_2_item_3 - key_3: - key_3_item_1 - key_3_item_2
合并结果如下:
- key_1: key_1_item_1 key_2: key_2_item_1 key_3: key_3_item_1 - key_1: key_1_item_2 key_2: key_2_item_2 key_3: key_3_item_2 - key_1: key_1_item_2 key_2: key_2_item_3 key_3: key_3_item_2
完整示例
以下模板示例中,把WebServer中创建的所有实例,都加入到一个负载均衡的虚拟服务器组中。
ROSTemplateFormatVersion: '2015-09-01'
Resources:
WebServer:
Type: ALIYUN::ECS::InstanceGroupClone
Properties:
SourceInstanceId: i-xxxxx
Password: Hello****
MinAmount: 1
MaxAmount: 1
CreateVServerGroup:
Type: ALIYUN::SLB::VServerGroup
Properties:
LoadBalancerId: lb-****
VServerGroupName: VServerGroup-****
BackendServers:
!MergeMapToList
- Port:
- 6666
- 9090
- 8080
- ServerId: !GetAtt WebServer.InstanceIds
- Weight:
- 20
- 100
支持的函数
文档内容是否对您有帮助?