Basisvorlage erstellen

Eine grundlegende Konfigurationsdatei kann für einfache Arbeitslasten ausreichend sein. Für komplexere Architekturen oder für wiederverwendbare Konfigurationen sollten Sie Ihre Konfiguration in Vorlagen aufteilen.

Eine Vorlage ist eine separate Datei, die importiert und als Typ in einer Konfiguration verwendet wird. Sie können in einer Konfiguration beliebig viele Vorlagen verwenden.

Mit Vorlagen können Sie Ihre Konfiguration in verschiedene Teile aufteilen, die Sie für verschiedene Bereitstellungen verwenden und wiederverwenden können. Vorlagen können so allgemein oder spezifisch sein wie nötig. Mit Vorlagen können Sie auch Funktionen wie Vorlageneigenschaften, Umgebungsvariablen, Module und andere Vorlagenfunktionalitäten nutzen, um dynamische Konfigurations- und Vorlagendateien zu erstellen.

Im Deployment Manager-GitHub-Repository finden Sie Beispiele für Vorlagen, die Sie in Ihren eigenen Bereitstellungen verwenden können.

Hinweis

Vorlagensyntax

Vorlagen können auf Jinja 2.10.x oder Python 3.x. Jinja lässt sich eher der YAML-Syntax zuordnen, daher ist es möglicherweise einfacher, Vorlagen in Jinja zu schreiben, wenn Sie mit YAML vertrauter sind.

Sie können Vorlagendateien auch in Python schreiben und Python dazu nutzen, Teile Ihrer Vorlagen programmgesteuert zu erstellen. Wenn Sie Python-Vorlagen verwenden, können Sie die Python-Bibliotheken nutzen, um Vorlagendefinitionen zu formatieren. Wenn Sie mit Python vertraut sind, ist dies möglicherweise das bessere Format für Sie.

Deployment Manager akzeptiert sowohl Jinja-Vorlagen als auch Python-Vorlagen. Sie können sowohl Jinja-Vorlagen als auch Python-Vorlagen in dieselbe Konfiguration importieren.

Basisvorlage erstellen

Eine Vorlage ist eine Datei, die Sie in Jinja oder Python erstellen. Angenommen, Sie haben folgende Konfigurationsdatei:

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

resources:
- name: vm-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/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

Die Konfiguration ist gültig. Sie können die Konfiguration aber weiter vereinfachen, indem Sie verschiedene Teile daraus als einzelne Vorlagen erstellen, die sich wiederverwenden lassen. Aus der obigen Beispielkonfiguration können Sie eine Vorlage erstellen, indem Sie einen Abschnitt für die betreffende Ressource herausnehmen und daraus eine neue Jinja- oder Python-Datei erstellen.

Die folgenden Snippets zeigen die Bereiche von Vorlagen, die die Bereitstellung vereinfachen können. Die vollständigen Vorlagen finden Sie unter Auf GitHub ansehen.

Jinja

- name: vm-template
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/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

Ihre Python-Vorlagen müssen folgende Anforderungen erfüllen:

Ansonsten können Sie den Inhalt Ihrer Vorlage selbst bestimmen.

Beispiel

resources.append({
    'name': 'vm-template',
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': 'zones/us-central1-a/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.

Vorlagen importieren

Nachdem Sie eine Vorlage erstellt haben, importieren Sie sie in Ihre Konfigurationsdatei, um sie zu verwenden. Zum Importieren einer Vorlage müssen Sie einen Abschnitt imports in Ihre Konfiguration einfügen, der den relativen oder absoluten Pfad des aktuellen Verzeichnisses enthält. Beispiel: Sie können die VM-Vorlage aus dem vorherigen Schritt importieren, indem Sie die folgende Zeile oben in Ihre Konfiguration einfügen.

imports:
  - path: path/to/my_vm_template.jinja

Wenn Sie einen langen Dateipfad haben, können Sie ein optionales name-Attribut als Alias für die Datei angeben. Sie können diesen Namen dann später verwenden, um auf die Vorlage zu verweisen. Wenn Sie den Namen nicht angeben, kann über den path auf die Vorlage verwiesen werden.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja

Sie können den Import mehrerer Vorlagen kombinieren. Dabei ist es egal, ob die Vorlagen in Jinja oder Python geschrieben wurden.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja
  - path: special_vm.py

Wenn Ihre Vorlage andere Vorlagen als Abhängigkeiten verwendet, importieren Sie auch die abhängigen Vorlagen in Ihre Konfiguration:

imports:
  - path: path/to/my_vm_template.jinja
  - path: special_vm.py
  - path: base_vm.jinja

Sie können auch Textdateien importieren, um den Inhalt direkt einzufügen. Wenn Sie beispielsweise eine Datei mit dem Namen resource_type.txt mit dem folgenden String erstellt haben:

compute.v1.instance

Importieren Sie sie in Ihre Konfiguration und geben Sie den Inhalt direkt an:

imports:
- path: resource_type.txt

resources:
- name: my-vm
  type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance"
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

Vorlagen bereitstellen

Sobald Sie eine Vorlage importieren, verwenden Sie diese als Typ in Ihrer Konfiguration:

Jinja

imports:
- path: vm-template.jinja

resources:
- name: my-vm
  type: vm-template.jinja

Python

imports:
- path: vm-template.py

resources:
- name: my-vm
  type: vm-template.py

Wenn Sie keinen Namen für Ihre Vorlage angegeben haben, rufen Sie die Vorlage über den Vorlagenpfad auf:

imports:
- path: path/to/my_vm_template.jinja

resources:
- name: my-first-virtual-machine
  type: path/to/my_vm_template.jinja

Vorlagen direkt mit dem Befehlszeilentool bereitstellen

Anstatt eine übergeordnete Konfigurationsdatei zu erstellen, bietet Deployment Manager die Möglichkeit, eine Vorlage direkt in der Google Cloud CLI bereitzustellen.

Mit der folgenden Anfrage wird beispielsweise eine Vorlage namens vm-template.jinja bereitgestellt:

gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja

Wenn Ihre Vorlage Vorlagenattribute hat, können Sie diese Attribute auch in der Befehlszeile mit dem Flag --properties festlegen:

gcloud deployment-manager deployments create my-igm \
    --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