Lorsque vous définissez les propriétés de votre configuration ou de vos modèles, vous pouvez utiliser des références aux propriétés d'autres ressources au lieu de fournir directement des valeurs. Par exemple, si vous souhaitez créer un gestionnaire de groupe d'instances utilisant un modèle d'instance du même déploiement, vous pouvez utiliser une référence avec la syntaxe $(ref.instance-template.selfLink)
au lieu de saisir explicitement le lien complet d'accès au modèle d'instance.
Les références vous permettent d'effectuer les actions suivantes :
Accéder aux propriétés non définies jusqu'à la création de la ressource. Par exemple, lorsque vous définissez une machine virtuelle dans votre configuration, vous ne connaissez pas encore son adresse IP. Vous pouvez cependant utiliser une référence à cette adresse IP. Lorsque vous déployez votre configuration, la VM est d'abord créée, puis Deployment Manager obtient l'adresse IP externe lorsque celle-ci est disponible.
Rendre vos configurations ou vos modèles plus faciles à lire et à dépanner. Par exemple, si vous devez configurer plusieurs règles de transfert, vous devez également spécifier un réseau à utiliser. Au lieu de fournir un lien d'accès au réseau pour chaque règle de transfert, vous pouvez créer une référence à la propriété
selfLink
du réseau en utilisant la syntaxe suivante :$(ref.network-name.selfLink)
Si vous devez résoudre des problèmes de configuration, la référence permet d'identifier facilement le réseau utilisé dans la règle de transfert.
Lorsque vous créez une référence à une ressource, vous créez également une dépendance entre les ressources. Par exemple, considérons l'extrait suivant, où sandbox-vm
utilise une référence à network-a
:
resources:
- name: sandbox-vm
type: compute.v1.instance
properties:
network: $(ref.network-a.selfLink)
...
...
- name: network-a
type: compute.v1.network
properties:
...
Lorsque vous déployez cette configuration, Deployment Manager crée network-a
avant sandbox-vm
afin que la référence puisse être résolue. Si des références ne sont pas correctement résolues, le déploiement échoue.
Vous pouvez utiliser des références dans les configurations et les modèles.
Avant de commencer
- Si vous voulez vous servir des exemples de ligne de commande de ce guide, installez l'outil de ligne de commande gcloud.
- Si vous voulez utiliser les exemples d'API de ce guide, configurez l'accès aux API.
- Vous devez savoir comment créer une configuration.
- Vous devez savoir comment créer un modèle de base.
Ajouter des références dans les fichiers de configuration
Vous pouvez ajouter des références dans les fichiers de configuration à l'aide du format suivant :
$(ref.RESOURCE_NAME.PROPERTY)
L'exemple ci-dessous crée un réseau, puis deux instances qui utilisent des références au nouveau réseau. Dans cet exemple, la référence est :
$(ref.a-new-network.selfLink)
Lorsque vous déployez cette configuration, le réseau est créé avant les deux instances, et la référence renvoie au selfLink
de la ressource réseau.
Ajouter des références dans les modèles
Dans les fichiers de modèle, l'ensemble de la référence doit être précédé du symbole $
et être mis entre parenthèses :
$(ref.RESOURCE_NAME.PROPERTY)
Vous pouvez combiner des références avec d'autres fonctionnalités telles que des propriétés de modèle et des variables d'environnement. Pour vous assurer que Deployment Manager analyse correctement la référence, il est important de garder votre chaîne de référence dans son intégralité entre parenthèses.
Voici quelques exemples de déclaration de références dans des modèles :
Jinja
Référence qui inclut une variable d'environnement
network: $(ref.{{ env["deployment"] }}-network.selfLink)
Référence à une valeur dans un tableau
subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
Référence qui inclut une propriété de modèle
network: $(ref.{{ properties["network"] }}.selfLink)
Référence utilisant un paramètre Jinja
network: $(ref.{{ NETWORK_NAME }}.selfLink)
Référence en sortie
outputs: - name: UrlToService value: http://$(ref.{{ env["deployment"] }}-network.networkInterfaces[0].accessConfigs[0].natIp):8080/
Python
Référence qui inclut une variable d'environnement
'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
Référence à une valeur dans un tableau
'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
Référence qui inclut une propriété de modèle
'network': '$(ref.' + context.properties['network'] + '.selfLink)'
Référence utilisant un paramètre Python
'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
Référence en sortie
outputs = [{'name': 'UrlToService', 'value': '$(ref.' + context.env['deployment'] + '-network.networkInterfaces[0].accessConfigs[0].natIP):8080'}]
Étapes suivantes
- Prévisualisez votre configuration avant de la déployer.
- Créez un déploiement.
- En savoir plus sur les modèles