Définir les propriétés du modèle

L'utilisation de modèles offre plusieurs avantages, parmi lesquels la possibilité de créer et de définir des propriétés de modèle personnalisées. Celles-ci sont des variables arbitraires que vous définissez dans des fichiers de modèle. Chaque fichier de modèle ou fichier de configuration utilisant le modèle en question peut fournir une valeur à la propriété du modèle, sans altérer directement celui-ci. Ainsi, vous pouvez extraire la propriété et en modifier la valeur pour chaque configuration unique, sans avoir à mettre à jour le modèle sous-jacent.

Par exemple, la ligne suivante spécifie une propriété de modèle dans l'URL du type de machine :

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

Dans une configuration utilisant ce modèle, vous pouvez définir la valeur de zone dans la section properties du modèle :

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Deployment Manager saura qu'il doit transmettre la valeur de zone au modèle sous-jacent.

Avant de commencer

Créer une propriété de modèle

Pour créer une propriété de modèle :

Jinja

En Jinja, définissez une propriété à l'aide la syntaxe suivante :

{{ properties["PROJECT_NAME"] }}

Exemple :

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

En Python, définissez une propriété à l'aide la syntaxe suivante :

  context.properties["PROPERTY_NAME"]

Exemple :

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/machineTypes/n1-standard-1']),
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

Pour obtenir l'exemple complet en Python, consultez le dépôt GitHub de Deployment Manager.

Définir des valeurs pour les propriétés de modèle dans la configuration de premier niveau

Dans la configuration de premier niveau, vous pouvez définir des valeurs pour les propriétés de modèle à l'aide de la syntaxe suivante :

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Vous devez définir des valeurs pour toutes les propriétés du modèle au sein de ce dernier. Par exemple, si un modèle possède des propriétés zone, image et network, vous devez définir des valeurs pour toutes ces propriétés dans la configuration de premier niveau.

Si certaines propriétés de modèle possèdent des valeurs par défaut, envisagez de les définir à l'aide de schémas. Une propriété de modèle avec une valeur par défaut peut être omise de la configuration de premier niveau si cette valeur est adaptée au déploiement.

Définir des valeurs pour les propriétés de modèle dans l'outil de ligne de commande

Plutôt que de fournir des valeurs aux propriétés de modèle dans le fichier parent qui importe le modèle, Deployment Manager offre la possibilité de les définir directement dans la Google Cloud CLI. Vous n'avez pas besoin de créer de fichier YAML de niveau supérieur. Deployment Manager génère automatiquement une configuration de premier niveau pour votre déploiement en fonction des informations de votre requête.

Par exemple, supposons que vous disposiez du modèle suivant, qui comprend une propriété de modèle appelée zone :

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Avec la Google Cloud CLI, vous pouvez transmettre directement ce fichier de modèle et indiquez les valeurs de vos propriétés de modèle sur la ligne de commande. Par exemple, la requête suivante transmet le modèle et spécifie directement la propriété zone sur la ligne de commande :

gcloud deployment-manager deployments create a-single-vm --template vm_template.jinja \
    --properties zone:us-central1-a

Points à noter :

  • Toutes les valeurs sont analysées en tant que valeurs YAML. Par exemple, la valeur version: 3 est transmise au format d'entier. Si vous souhaitez la définir en tant que chaîne, placez la valeur entre guillemets simples avec échappement : version: \'3\'.

  • Les valeurs booléennes ne sont pas sensibles à la casse. Les valeurs TRUE, true et True sont donc traitées de la même manière.

  • Vous devez transmettre toutes les propriétés requises définies par le modèle. Vous ne pouvez pas vous limiter à un sous-ensemble des propriétés. Si certaines propriétés possèdent des valeurs par défaut, vous pouvez les omettre dans la ligne de commande.

Pour spécifier plusieurs propriétés, fournissez des paires valeur/clé séparées par des virgules. L'ordre dans lequel vous spécifiez les paires n'a pas d'importance. Exemple :

gcloud deployment-manager deployments create my-igm \
    --template vm_template.jinja \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

Une fois cette commande exécutée, Deployment Manager crée un déploiement à partir du modèle fourni. Vous pouvez vérifier que le déploiement a bien été créé à l'aide de la console Google Cloud ou de la gcloud CLI. Pour savoir comment afficher un déploiement, consultez la section Afficher un fichier manifeste.

Étapes suivantes