Impostazione delle proprietà del modello e utilizzo delle variabili di ambiente

Un vantaggio dell'utilizzo dei modelli per il deployment è la possibilità di creare e definire proprietà personalizzate, che ti consentono di riutilizzare i modelli in zone, regioni e progetti.

Le proprietà del modello sono variabili arbitrarie. Qualsiasi file di configurazione o file modello può fornire un valore per una proprietà del modello senza modificarlo. Di conseguenza, puoi modificare il valore di una proprietà per varie configurazioni senza modificare il modello stesso.

Per fare riferimento a un valore arbitrario, utilizza questa sintassi in un modello:

context.properties["property-name"]

Oltre alle proprietà del modello, puoi utilizzare anche le variabili di ambiente specifiche per il tuo deployment, che sono precompilate con informazioni sul deployment. Puoi utilizzare le variabili di ambiente nei modelli per ottenere informazioni univoche sul tuo deployment.

Per chiamare una variabile di ambiente, utilizza questa sintassi:

context.env['variable-name']

Le variabili di ambiente valide includono il nome del deployment, l'ID progetto, la proprietà name della risorsa e il tipo di configurazione. Scopri di più sulle variabili di ambiente.

Proprietà del modello e variabili di ambiente in un modello

In questo passaggio, vm-template.py mostra i vantaggi delle proprietà del modello e delle variabili di ambiente. Apri 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

Diverse parti del modello sono state sostituite con proprietà del modello e variabili di ambiente. Ad esempio, l'ID progetto viene sostituito con context.env[project], quindi non devi sostituire manualmente l'ID progetto nei tuoi modelli.

I commenti nel file descrivono altre modifiche al modello.

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

Analogamente, network-template.py e firewall-template.py utilizzano il nome del deployment nella loro definizione chiamando context.env['name'].

Deployment della configurazione

Per visualizzare il file di configurazione di questo deployment, esegui il comando seguente:

nano config-with-many-templates.yaml

Salva le modifiche e ridistribuisci la configurazione per verificare il funzionamento delle variabili.

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

Eliminazione del deployment

Ti consigliamo di eliminare l'implementazione per evitare addebiti. Non hai bisogno di questo deployment per il passaggio successivo. Esegui questo comando per eliminare il deployment:

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

Prospettive future: script di supporto

Ora scopri gli script di supporto per eseguire in modo efficiente attività ripetute.