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

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

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, aree geografiche e progetti diversi.

Le proprietà del modello sono variabili arbitrarie. Qualsiasi file di configurazione o file di modello può fornire un valore per una proprietà di modello senza modificare il modello. 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 anche utilizzare variabili di ambiente specifiche del deployment, che vengono precompilate con informazioni sul deployment. Puoi utilizzare le variabili di ambiente nei modelli per ottenere informazioni uniche 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à name della risorsa e il tipo di configurazione. Scopri di più sulle variabili di ambiente.

Proprietà dei modelli e variabili di ambiente in un modello

In questo passaggio, vm-template.py mostra i vantaggi delle proprietà dei modelli 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à modello e variabili di ambiente. Ad esempio, l'ID progetto viene sostituito con context.env[project], quindi non devi sostituirlo manualmente nei 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 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 che le variabili funzionino.

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 hai bisogno di questo deployment per il prossimo passaggio. Esegui questo comando per eliminare il deployment:

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

Prospettive: script di supporto

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