Vorlagenattribute festlegen und Umgebungsvariablen verwenden

Ein Vorteil der Verwendung von Vorlagen für Ihre Bereitstellung ist die Möglichkeit, benutzerdefinierte Attribute zu erstellen und zu definieren, mit denen Sie Vorlagen für Zonen, Regionen und Projekte wiederverwenden können.

Vorlagenattribute sind willkürliche Variablen. Jede Konfigurationsdatei oder Vorlagendatei kann einen Wert für ein Vorlagenattribut bereitstellen, ohne die Vorlage zu ändern. Daher können Sie den Wert eines Attributs für verschiedene Konfigurationen ändern, ohne die Vorlage selbst zu ändern.

Verwenden Sie die folgende Syntax in einer Vorlage, um auf einen beliebigen Wert zu verweisen:

context.properties["property-name"]

Zusätzlich zu den Vorlagenattributen können Sie auch Umgebungsvariablen verwenden, die für Ihre Bereitstellung spezifisch sind und die bereits Informationen zur Bereitstellung enthalten. Sie können Umgebungsvariablen in Vorlagen verwenden, um eindeutige Informationen über Ihre Bereitstellung zu erhalten.

Mit dieser Syntax rufen Sie eine Umgebungsvariable auf:

context.env['variable-name']

Zu den gültigen Umgebungsvariablen zählen der Name der Bereitstellung, die Projekt-ID, die name-Eigenschaft Ihrer Ressource und der Typ der Konfiguration. Informieren Sie sich über Umgebungsvariablen.

Vorlagenattribute und Umgebungsvariablen in einer Vorlage

In diesem Schritt zeigt vm-template.py die Vorteile von Vorlagenattributen und Umgebungsvariablen. Öffnen Sie 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

Verschiedene Teile der Vorlage wurden durch Vorlagenattribute und Umgebungsvariablen ersetzt. Beispiel: Die Projekt-ID wird durch context.env[project] ersetzt, sodass Sie die Projekt-ID in Ihren Vorlagen nicht manuell ersetzen müssen.

Die Kommentare in der Datei beschreiben andere Änderungen an der Vorlage.

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

Ebenso verwenden network-template.py und firewall-template.py den Bereitstellungsnamen in ihrer Definition, indem sie context.env['name'] aufrufen.

Konfiguration bereitstellen

Führen Sie den folgenden Befehl aus, um sich die Konfigurationsdatei für diese Bereitstellung anzusehen:

nano config-with-many-templates.yaml

Speichern Sie die Änderungen und stellen Sie die Konfiguration noch einmal bereit, um sicherzustellen, dass die Variablen funktionieren.

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

Bereitstellung löschen

Sie sollten die Bereitstellung löschen, um Kosten zu vermeiden. Diese Bereitstellung benötigen Sie für den nächsten Schritt nicht. Führen Sie den folgenden Befehl aus, um die Bereitstellung zu löschen:

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

Nächstes Thema: Hilfsskripts

Als Nächstes erfahren Sie mehr über die Verwendung von Hilfsskripts zur effizienten Ausführung von wiederkehrenden Aufgaben.