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 beliebig viele Vorlagen in Ihrer Konfiguration verwenden. Deployment Manager erweitert alle importierten Vorlagen rekursiv und erstellt so Ihre gesamte Konfiguration.

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.

Vorbereitung

Vorlagensyntax

Vorlagen können entweder in Jinja 2.8 oder Python 2.7 geschrieben werden. 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 beide Dateitypen, Jinja und Python. Daher können Sie wählen, welche Syntax Sie vorziehen. Sie können auch verschiedene Vorlagen kombinieren, diese in Jinja oder Python schreiben und beide Vorlagen in der gleichen Konfiguration verwenden.

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

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-9
    networkInterfaces:
    - network: global/networks/default

Python

Für Python-Vorlagen gelten nur zwei Voraussetzungen:

  • Die Vorlage muss eine Methode mit dem Namen GenerateConfig() oder generate_config() definieren. Wenn Sie beide Methodennamen in der gleichen Vorlage verwenden, hat generate_config() den Vorrang.
  • Die Methode muss eine gültige YAML-Konfiguration zurückgeben.

Ansonsten liegt es an Ihnen, den Inhalt Ihrer Vorlage zu erstellen.

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-9'
            }
        }],
        '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 imports-Abschnitt in Ihre Konfiguration einfügen, auf den der relative oder absolute Pfad des aktuellen Verzeichnisses folgt. 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

Bei einem langen Dateipfad können Sie auch eine name-Eigenschaft als Alias für die Datei angeben. Sie können diesen Namen dann später zur Referenz auf die Vorlage verwenden. Wenn Sie den Namen nicht angeben, kann die Vorlage über path referenziert werden.

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

Sie können Importe von mehreren 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

Deployment Manager bietet die Möglichkeit, eine Vorlage anstatt in einer Konfigurationsdatei auch direkt im Befehlszeilentool gcloud bereitzustellen.

Beispiel: Die folgende Anfrage stellt eine Vorlage namens vm_template.jinja bereit:

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

Wenn Ihre Vorlage Vorlagen-Properties enthält, können Sie diese 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 Folgendes:

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

  • Bei booleschen Werten spielt die Groß- und Kleinschreibung keine Rolle, sodass TRUE, true und True gleich behandelt werden.

  • Sie müssen alle erforderlichen Eigenschaften übergeben, die von der Vorlage definiert werden. Sie können nicht nur einen Teil der Eigenschaften bereitstellen. Wenn bestimmte Eigenschaften Standardwerte haben, können Sie diese Eigenschaften in der Befehlszeile weglassen.

Wenn Sie mehrere Eigenschaften angeben 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. Mit Google Cloud Platform Console oder dem gcloud-Tool können Sie prüfen, ob die Bereitstellung erstellt wurde. Weitere Informationen zur Anzeige einer Bereitstellung finden Sie unter Manifest anzeigen.

Nächste Schritte

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Cloud Deployment Manager-Dokumentation