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 Features wie Vorlageneigenschaften, Umgebungsvariablen, Module und andere Vorlagenfunktionen 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.

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 Anforderungen:

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

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-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 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 im gcloud-Befehlszeilentool 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 Folgendes:

  • Alle Werte werden als YAML-Werte geparst. Beispiel: version: 3 wird als Ganzzahl übergeben. Wenn der Wert als String übergeben werden soll, setzen Sie ihn in einfache Anführungszeichen mit Escapezeichen: version: \'3\'.

  • 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 mit der Google Cloud Platform Console oder dem gcloud-Tool überprüfen, ob die Bereitstellung erstellt wurde. Weitere Informationen zum Ansehen einer Bereitstellung finden Sie unter Manifest ansehen.

Weitere Informationen

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

Feedback geben zu...

Cloud Deployment Manager-Dokumentation