Vorlagenattribute definieren

Einer der Vorteile von Vorlagen ist die Möglichkeit, benutzerdefinierte Vorlageneigenschaften zu erstellen und zu definieren. Vorlageneigenschaften sind beliebige Variablen, die Sie in Vorlagendateien definieren. Jede Konfigurationsdatei oder Vorlagendatei, die die betreffende Vorlage verwendet, kann einen Wert für die Vorlageneigenschaft bereitstellen, ohne die Vorlage direkt zu ändern. Dadurch können Sie die Eigenschaft abstrahieren, sodass Sie den Wert der Eigenschaft für jede eindeutige Konfiguration ändern können, ohne die zugrunde liegende Vorlage zu aktualisieren.

Die folgende Zeile gibt beispielsweise ein Vorlagenattribut in der URL des Maschinentyps an:

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

In einer Konfiguration, in der diese Vorlage verwendet wird, können Sie den Wert von zone im Abschnitt properties der Vorlage festlegen:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Deployment Manager kann den Wert von zone an die zugrunde liegende Vorlage übergeben.

Hinweis

Vorlageneigenschaften erstellen

So erstellen Sie eine Vorlageneigenschaft:

Jinja

In Jinja definieren Sie eine Property mit der folgenden Syntax:

{{ properties["PROJECT_NAME"] }}

Beispiel:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

In Python definieren Sie eine Property mit der folgenden Syntax:

  context.properties["PROPERTY_NAME"]

Beispiel:

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/machineTypes/n1-standard-1']),
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

Das vollständige Python-Beispiel finden Sie im GitHub-Repository von Deployment Manager.

Vorlageneigenschaftswerte in übergeordneter Konfiguration festlegen

In der übergeordneten Konfiguration können Sie Werte für Vorlageneigenschaften mithilfe der folgenden Syntax festlegen:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Sie müssen Werte für alle Vorlagenattribute in der Vorlage festlegen. Wenn eine Vorlage beispielsweise die Vorlagenattribute zone, image, network hat, müssen Sie Werte für alle diese Attribute in der übergeordneten Konfiguration definieren.

Wenn bestimmte Eigenschaften Standardwerte haben, können Sie diese auch in Schemas festlegen. Ein Vorlagenattribut mit einem Standardwert kann in der übergeordneten Konfiguration ausgelassen werden, wenn der Standardwert für die Bereitstellung geeignet ist.

Werte für Vorlagenattribute in der Befehlszeile festlegen

Anstatt Werte für Vorlagenattribute in der übergeordneten Datei anzugeben, mit der die Vorlage importiert wird, bietet Deployment Manager die Möglichkeit, diese Werte direkt in der Google Cloud CLI festzulegen. Dank dieser Funktion können Sie das Erstellen der YAML-Datei der obersten Ebene überspringen. Deployment Manager generiert die übergeordnete Konfiguration für Ihre Bereitstellung automatisch anhand der Informationen in Ihrer Anfrage.

Angenommen, Sie haben die folgende Vorlage mit einem Vorlagenattribut namens zone:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Mit der Google Cloud CLI können Sie diese Vorlagendatei direkt übergeben und die Werte für Ihre Vorlagenattribute in der Befehlszeile angeben. Mit der folgenden Anfrage wird beispielsweise die Vorlage übergeben und das Attribut zone direkt in der Befehlszeile angegeben:

gcloud deployment-manager deployments create a-single-vm --template vm_template.jinja \
    --properties zone:us-central1-a

Beachten Sie:

  • Alle Werte werden als YAML-Werte geparst. Beispiel: version: 3 wird als Ganzzahl übergeben. Wenn Sie den Wert als String angeben möchten, setzen Sie den Wert version: \'3\' in einfache Anführungszeichen mit Escapezeichen.

  • Bei booleschen Werten wird die Groß- und Kleinschreibung nicht berücksichtigt. TRUE, true und True werden also gleich behandelt.

  • Sie müssen alle erforderlichen Attribute übergeben, die von der Vorlage definiert werden, d. h, Sie können nicht nur eine Teilmenge der Attribute bereitstellen. Wenn bestimmte Attribute Standardwerte haben, können Sie das jeweilige Attribut in der Befehlszeile weglassen.

Wenn Sie mehrere Attribute festlegen möchten, geben Sie durch Kommas getrennte Schlüssel/Wert-Paare an. Die Reihenfolge, in der die Paare angegeben sind, spielt keine Rolle. Beispiel:

gcloud deployment-manager deployments create my-igm \
    --template vm_template.jinja \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

Nach der Ausführung dieses Befehls erstellt Deployment Manager eine Bereitstellung mit der von Ihnen angegebenen Vorlage. Sie können feststellen, ob die Bereitstellung mit der Google Cloud Console oder der gcloud CLI erstellt wurde. Weitere Informationen zur Anzeige einer Bereitstellung finden Sie unter Manifest anzeigen.

Weitere Informationen