Utiliser des références

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 qui utilise un modèle d'instance du même déploiement, au lieu de saisir explicitement le lien d'accès complet au modèle d'instance, vous pouvez indiquer une référence en appliquant la syntaxe $(ref.instance-template.selfLink).

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 vers le réseau pour chaque règle de transfert, vous pouvez créer une référence à la propriété selfLink du réseau à l'aide de 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, dans lequel 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 génère la valeur network-a avant sandbox-vm afin que la référence puisse être associée. Si les références ne sont pas correctement associées, le déploiement échoue.

Vous pouvez utiliser des références dans les configurations et les modèles.

Avant de commencer

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)
# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: the-first-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/[MY_PROJECT]/zones/us-central1-f/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
- name: the-second-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/[MY_PROJECT]/zones/us-central1-f/machineTypes/g1-small
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
- name: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: 10.0.0.0/16

Lorsque vous déployez cette configuration, le réseau est créé avant les deux instances et la référence est associée à la propriété 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 conserver la totalité de la chaîne de référence 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

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Cloud Deployment Manager