如何查看模板中的Map值
Map合集是一種以鍵值對形式存儲數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),本文為您介紹如何查看模板中的Map值。
查看單層映射值
您可以通過調(diào)用下列函數(shù)獲取單層映射中的值。
不建議您在模板中的Mappings部分定義單層Map,ROS無法獲取Mappings中單層Map的值。更多信息,請參見映射(Mappings)。
Fn::Select
推薦您使用該函數(shù)獲取單層Map的值。
當(dāng)輸入為一個JSON對象時,調(diào)用Fn::Select函數(shù)獲取key_a對應(yīng)的value_a。更多信息,請參見Fn::Select。
ROSTemplateFormatVersion: '2015-09-01' Parameters: InputMap: Type: Json Outputs: value_a: Value: Fn::Select: - key_a - InputMap
您也可以直接在模板中構(gòu)造字典獲取值。
ROSTemplateFormatVersion: '2015-09-01' Resources: Mock: Type: MockResource Properties: Prop1: Fn::Select: - key - key1: value1 key2: value2
Fn::GetJsonValue
當(dāng)輸入為一個JSON字符串時,您可以調(diào)用Fn::GetJsonValue獲取第一層的key所對應(yīng)的value。更多信息,請參見Fn::GetJsonValue。
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InputMapJsonString:
Type: Json
Outputs:
value_a:
Value:
Fn::GetJsonValue:
- key_a
- InputMapJsonString
查看雙層映射值
您可以通過調(diào)用下列函數(shù)獲取雙層映射中的值。
Fn::FindInMap
該函數(shù)只適用于查看在Mappings中定義的雙層映射值。
您可以調(diào)用Fn::FindInMap函數(shù)獲取模板中Mappings部分定義的雙層映射值。更多信息,請參見映射(Mappings)和Fn::FindInMap。
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
regionParam:
Description: 選擇創(chuàng)建ECS的地域
Type: String
AllowedValues:
- hangzhou
- beijing
Mappings:
RegionMap:
hangzhou:
'32': m-25l0rcfjo
'64': m-25l0rcfj1
beijing:
'32': m-25l0rcfj2
'64': m-25l0rcfj3
Resources:
WebServer:
Type: ALIYUN::ECS::Instance
Properties:
ImageId:
Fn::FindInMap:
- RegionMap
- Ref: regionParam
- '32'
Fn::Select
該函數(shù)適用于查看非Mappings中定義的雙層映射值。
您可以通過嵌套Fn::Select函數(shù)的方法獲取雙層映射中的值。更多信息,請參見Fn::Select。
Fn::Select:
- key_1_1:
- Fn::Select:
- key_1
- key_1:
key_1_1: value_1_1
key_1_2: value_1_2
key_2:
key_2_1: value_2_1
key_2_2: value_2_2
返回值:value_1_1。
查看多層映射值
您可以通過調(diào)用下列函數(shù)獲取多層映射中的值。
Fn::Select
您可以通過嵌套Fn::Select和Fn::FindInMap函數(shù)獲取Mappings中的多層映射值,ROS只支持通過Fn::FindInMap函數(shù)獲取Mappings中的value。當(dāng)您想獲取Mappings中的多層映射值時,您可以先通過Fn::FindInMap獲取雙層映射的值,此時返回一個Map合集,然后再通過Fn::Select函數(shù)去獲取想要的值。
Fn::Select: - key - Fn::FindInMap: - MapName - TopLevelKey - SecondLevelKey
您也可以通過多次嵌套Fn::Select函數(shù)的方法獲取非Mappings中多層映射中的值。更多信息,請參見Fn::Select。
Fn::Jq
您可以通過設(shè)置多個篩選器來滿足多層查找的需求。更多信息,請參見Fn::Jq。
Fn::Jq:
- All
- '.parameters[] | {"param_name": .name, "param_type":.type}'
- changeSet:
items: []
kind: git
id: 2013-12-27_00-09-37
parameters:
- name: PKG_TAG_NAME
value: trunk
- name: GIT_COMMIT
value: master
- name: TRIGGERED_JOB
value: trunk-buildall
返回值:
- param_name: PKG_TAG_NAME
- param_name: GIT_COMMIT
- param_name: TRIGGERED_JOB