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

Un vantaggio dell'utilizzo dei modelli per l'implementazione è la possibilità di creare e definire proprietà personalizzate, che 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à modello senza modificare il modello. Pertanto, 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 deployment, che vengono precompilate con informazioni sul deployment. Puoi utilizzare le variabili di ambiente nei modelli per ottenere informazioni univoche 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, la proprietà del nome 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 è necessario sostituire manualmente l'ID progetto nei modelli.

I commenti nel file descrivono altre modifiche apportate 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 il nome del deployment nella loro 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 nuovamente il deployment della configurazione per confermare 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 il deployment per evitare addebiti. Non è necessario questo deployment per il passaggio successivo. Esegui questo comando per eliminare il deployment:

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

In futuro: script di supporto

Ora scoprirai gli script helper per eseguire in modo efficiente attività ripetute.