Les modèles ROS permettent d'interroger des valeurs stockées sous forme de paires clé-valeur. Selon que le mappage est défini dans la section Mappings et selon son nombre de niveaux, utilisez les fonctions intrinsèques décrites dans cette rubrique.
Sélectionnez la fonction appropriée en fonction du type de votre mappage :
|
Type de mappage |
Défini dans la section Mappings |
Fonction recommandée |
|
Un seul niveau |
Non |
|
|
Un seul niveau (chaîne JSON) |
Non |
|
|
Deux niveaux |
Oui |
|
|
Deux niveaux |
Non |
|
|
Multiniveau |
Oui (deux niveaux ou plus) |
|
|
Multiniveau |
Non |
|
|
Multiniveau (filtres complexes) |
L'un ou l'autre |
|
Interroger une valeur dans un mappage à un seul niveau
Ne définissez pas de mappage à un seul niveau dans la section Mappings. Resource Orchestration Service (ROS) ne permet pas d'interroger une valeur dans un mappage à un seul niveau situé dans la section Mappings. Pour plus d'informations, consultez la rubrique Mappings.
Fn::Select
Utilisez la fonction Fn::Select pour interroger une valeur dans un mappage à un seul niveau.
La fonction Fn::Select accepte une clé et un objet de mappage, puis renvoie la valeur correspondante. Pour plus d'informations, consultez la rubrique Fn::Select.
-
Interrogez
value_aà partir d'un paramètre d'objet JSON : étant donnékey_a, la fonction renvoievalue_a:ROSTemplateFormatVersion: '2015-09-01' Parameters: InputMap: Type: Json Outputs: value_a: Value: Fn::Select: - key_a - InputMap -
Interrogez une valeur dans un mappage intégré défini directement dans le modèle :
ROSTemplateFormatVersion: '2015-09-01' Resources: Mock: Type: MockResource Properties: Prop1: Fn::Select: - key - key1: value1 key2: value2
Fn::GetJsonValue
Lorsque le mappage est transmis sous forme de chaîne JSON plutôt que d'objet JSON, utilisez la fonction Fn::GetJsonValue pour interroger la valeur associée à une clé de premier niveau. Pour plus d'informations, consultez la rubrique Fn::GetJsonValue.
Étant donné key_a, la fonction renvoie value_a :
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
InputMapJsonString:
Type: Json
Outputs:
value_a:
Value:
Fn::GetJsonValue:
- key_a
- InputMapJsonString
Interroger une valeur dans un mappage à deux niveaux
Fn::FindInMap
La fonction Fn::FindInMap fonctionne uniquement avec les mappages à deux niveaux définis dans la section Mappings.
Utilisez la fonction Fn::FindInMap pour rechercher une valeur à l'aide d'une clé de premier niveau et d'une clé de second niveau. Pour plus d'informations, consultez les rubriques Mappings et Fn::FindInMap.
L'exemple suivant sélectionne un ID d'image ECS en fonction de la région et de l'architecture. Étant donné regionParam=hangzhou et l'architecture '32', la fonction renvoie m-25l0rcfjo :
ROSTemplateFormatVersion: '2015-09-01'
Parameters:
regionParam:
Description: the region where you want to create the Elastic Compute Service (ECS) instance
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
Utilisez la fonction Fn::Select imbriquée pour les mappages à deux niveaux qui ne figurent pas dans la section Mappings.
Imbriquez deux fois la fonction Fn::Select pour accéder aux données d'un mappage à deux niveaux. L'appel interne récupère le sous-mappage correspondant à key_1, tandis que l'appel externe récupère la valeur associée à key_1_1. Pour plus d'informations, consultez la rubrique Fn::Select.
La fonction renvoie value_1_1 :
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
Interroger une valeur dans un mappage multiniveau
Fn::Select
-
Pour les mappages comportant plus de deux niveaux dans la section Mappings, combinez les fonctions
Fn::FindInMapetFn::Select: utilisezFn::FindInMappour récupérer un sous-mappage à la limite des deux premiers niveaux, puis utilisezFn::Selectpour accéder aux clés plus profondes.Fn::Select: - key - Fn::FindInMap: - MapName - TopLevelKey - SecondLevelKey Pour les mappages multiniveau situés en dehors de la section Mappings, imbriquez plusieurs fois la fonction
Fn::Selecten suivant le même schéma que pour l'exemple à deux niveaux. Pour plus d'informations, consultez la rubrique Fn::Select.
Fn::Jq
Utilisez la fonction Fn::Jq lorsque vous devez appliquer des filtres complexes sur des structures imbriquées, par exemple pour extraire des champs spécifiques d'un tableau d'objets. Pour plus d'informations, consultez la rubrique Fn::Jq.
L'exemple suivant extrait les champs name et type de chaque objet du tableau parameters :
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
Résultat renvoyé :
- param_name: PKG_TAG_NAME
- param_name: GIT_COMMIT
- param_name: TRIGGERED_JOB