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

Un vantaggio dei modelli per l'implementazione è la possibilità di creare e definire proprietà personalizzate, che ti consentono di riutilizzare i modelli in più 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 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 anche usare le variabili di ambiente specifiche per il tuo deployment, che sono precompilate con informazioni sul e deployment continuo. Puoi utilizzare le variabili di ambiente nei modelli per ottenere informazioni sul deployment.

Puoi chiamare una variabile di ambiente utilizzando questa sintassi:

context.env['variable-name']

Le variabili di ambiente valide includono il nome del deployment, l'ID progetto, 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

Varie parti del modello sono state sostituite con proprietà 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}

Allo stesso modo, network-template.py e firewall-template.py utilizzano nome nella sua definizione, chiamando context.env['name'].

Deployment della configurazione

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

nano config-with-many-templates.yaml

Salva le modifiche ed esegui di nuovo il deployment della configurazione per verificare che le variabili funzionino.

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

Eliminazione del deployment in corso...

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.