Définir des propriétés de modèle et utiliser des variables d'environnement

L'un des avantages de l'utilisation de modèles pour votre déploiement est la possibilité de créer et de définir des propriétés personnalisées, qui vous permettent de les réutiliser dans plusieurs zones, régions et projets.

Les propriétés de modèle sont des variables arbitraires. Chaque fichier de configuration ou fichier de modèle peut fournir une valeur pour une propriété de modèle, sans modifier le modèle. Ainsi, vous pouvez modifier la valeur d'une propriété pour différentes configurations sans altérer le modèle.

Pour référencer une valeur arbitraire, utilisez la syntaxe suivante dans votre modèle :

context.properties["property-name"]

En plus des propriétés de modèle, vous pouvez également utiliser des variables d'environnement spécifiques à votre déploiement, qui sont préremplies avec des informations concernant le déploiement. Vous pouvez utiliser des variables d'environnement dans des modèles pour obtenir des informations uniques sur votre déploiement.

Pour appeler une variable d'environnement, utilisez la syntaxe suivante :

context.env['variable-name']

Les variables d'environnement valides incluent le nom du déploiement, l'ID du projet, la propriété de nom de la ressource et le type de configuration. En savoir plus sur les variables d'environnement

Propriétés et variables d'environnement d'un modèle

Lors de cette étape, vm-template.py montre les avantages des propriétés de modèle et des variables d'environnement. Ouvrez vm-template.py :

cd deploymentmanager-samples/examples/v2/step_by_step_guide/step7_use_environment_variables/python

nano vm-template.py  # use your preferred text editor

Certaines parties du modèle ont été remplacées par des propriétés de modèle et des variables d'environnement. Par exemple, l'ID de projet est remplacé par context.env[project]. Ainsi, vous n'avez pas besoin de le remplacer manuellement dans vos modèles.

Les commentaires du fichier décrivent les autres modifications apportées au modèle.

# 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.

"""Creates the virtual machine."""

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'


def GenerateConfig(context):
  """Creates the virtual machine with environment variables."""

  resources = [{
      # `the-first-vm` is replaced with `context.env[`name`]`
      'name': context.env['name'],
      'type': 'compute.v1.instance',
      'properties': {
          # All occurrences of `us-central1-f` are replaced with
          # `context.properties[`zone`]. 
          # All occurrences of the project ID are replaced with 
          # `context.env[`project`]`.
          # `f1-micro` is replaced with `context.properties["machineType"].  
          'zone': context.properties['zone'],
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/',
                                  context.env['project'], '/zones/',
                                  context.properties['zone'], '/machineTypes/',
                                  context.properties['machineType']]),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                          'debian-cloud/global/',
                                          'images/family/debian-11'])
              }
          }],
          # `$(ref.a-new-network.selfLink)` is replaced with 
          # `$(ref.` + context.properties[`network`] + `selfLink)`.
          'networkInterfaces': [{
              'network': '$(ref.' + context.properties['network']
                         + '.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

De même, network-template.py et firewall-template.py utilisent le nom du déploiement dans leur définition, en appelant context.env['name'].

Déployer la configuration

Pour afficher le fichier de configuration de ce déploiement, exécutez la commande suivante :

nano config-with-many-templates.yaml

Enregistrez les modifications et redéployez votre configuration pour vérifier le bon fonctionnement des variables.

gcloud deployment-manager deployments create deployment-with-template-properties --config config-with-many-templates.yaml

Supprimer le déploiement

Il est recommandé de supprimer le déploiement pour éviter les frais. Ce déploiement n'est pas nécessaire pour l'étape suivante. Exécutez la commande suivante pour supprimer le déploiement :

gcloud deployment-manager deployments delete deployment-with-template-properties

Anticiper : scripts d'aide

Découvrez ensuite les scripts d'aide pour effectuer efficacement des tâches récurrentes.