Referenzen verwenden

Wenn Sie die Attribute für Ihre Konfiguration oder Ihre Vorlagen definieren, können Sie Verweise auf die Attribute anderer Ressourcen verwenden, anstatt Werte direkt bereitzustellen. Sie möchten beispielsweise einen Instanzgruppenmanager erstellen, der eine Instanzvorlage aus derselben Bereitstellung verwendet, anstatt den vollständigen Link für die Vorlage auszuschreiben. Dann können Sie einen Verweis mit der Syntax $(ref.instance-template.selfLink) nutzen.

Mit Verweisen können Sie Folgendes tun:

  • Auf Attribute zugreifen, die erst beim Erstellen der Ressource definiert werden. Wenn Sie beispielsweise in Ihrer Konfiguration eine virtuelle Maschine definieren, kennen Sie deren IP-Adresse noch nicht. Sie können aber eine Referenz für die IP-Adresse verwenden. Wenn Sie Ihre Konfiguration bereitstellen, wird die VM zuerst erstellt und Deployment Manager ruft die externe IP-Adresse ab, wenn sie verfügbar ist.

  • Die Konfigurationen oder Vorlagen so umgestalten, dass sie einfacher zu lesen und Fehler leichter zu beheben sind. Wenn Sie beispielsweise mehrere Weiterleitungsregeln konfigurieren müssen, müssen Sie auch ein zu verwendendes Netzwerk angeben. Anstatt für jede Weiterleitungsregel einen Link zum Netzwerk anzugeben, können Sie auch mit der folgenden Syntax einen Verweis auf das Attribut selfLink des Netzwerks erstellen:

    $(ref.network-name.selfLink)
    

    Wenn Sie Probleme mit Ihrer Konfiguration beheben müssen, können Sie anhand des Verweises leichter feststellen, welches Netzwerk in der Weiterleitungsregel verwendet wird.

Wenn Sie einen Verweis auf eine Ressource erstellen, erstellen Sie auch eine Abhängigkeit zwischen den Ressourcen. Betrachten Sie beispielsweise das folgende Snippet, in dem sandbox-vm einen Verweis auf network-a verwendet:

resources:
- name: sandbox-vm
  type: compute.v1.instance
  properties:
    network: $(ref.network-a.selfLink)
    ...
...
- name: network-a
  type: compute.v1.network
  properties:
    ...

Wenn Sie diese Konfiguration bereitstellen, erstellt Deployment Manager erst network-a und dann sandbox-vm, sodass der Verweis aufgelöst werden kann. Wenn Verweise nicht erfolgreich aufgelöst werden, schlägt Ihre Bereitstellung fehl.

Sie können Verweise in Konfigurationen und Vorlagen verwenden.

Vorbereitung

Verweise in Konfigurationsdateien erstellen

Geben Sie Verweise in Ihrer Konfiguration im folgenden Format an:

$(ref.RESOURCE_NAME.PROPERTY)

Im folgenden Beispiel werden zuerst ein Netzwerk und dann zwei Instanzen erstellt, die Verweise auf das neue Netzwerk verwenden. In diesem Beispiel lautet der Verweis:

$(ref.a-new-network.selfLink)
# 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: the-first-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/[MY_PROJECT]/zones/us-central1-f/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
- name: the-second-vm
  type: compute.v1.instance
  properties:
    zone: us-central1-f
    machineType: https://www.googleapis.com/compute/v1/projects/[MY_PROJECT]/zones/us-central1-f/machineTypes/g1-small
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
- name: a-new-network
  type: compute.v1.network
  properties:
    IPv4Range: 10.0.0.0/16

Wenn Sie diese Konfiguration bereitstellen, wird das Netzwerk vor den beiden Instanzen erstellt und der Verweis wird in den selfLink der Netzwerkressource aufgelöst.

Verweise in Vorlagen erstellen

In Vorlagendateien muss dem gesamten Verweis ein $ vorangestellt werden. Der Verweis selbst wird in Klammern gesetzt:

$(ref.RESOURCE_NAME.PROPERTY)

Sie können Verweise mit anderen Funktionen wie Vorlagenattributen und Umgebungsvariablen kombinieren. Damit Deployment Manager den Verweis korrekt analysiert, muss der gesamte Verweisstring unbedingt in Klammern stehen.

Nachstehend finden Sie einige Beispiele für die Angabe von Verweisen.

Jinja

  • Verweis, der eine Umgebungsvariable enthält

    network: $(ref.{{ env["deployment"] }}-network.selfLink)
    
  • Verweis auf einen Wert in einem Array

    subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
    
  • Verweis, der ein Vorlagenattribut enthält

    network: $(ref.{{ properties["network"] }}.selfLink)
    
  • Verweis mit einem Jinja-Parameter

    network: $(ref.{{ NETWORK_NAME }}.selfLink)
    
  • Verweis in Ausgaben

      outputs:
      - name: UrlToService
        value: http://$(ref.{{ env["deployment"] }}-network.networkInterfaces[0].accessConfigs[0].natIp):8080/
    

Python

  • Verweis, der eine Umgebungsvariable enthält

    'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
    
  • Verweis auf einen Wert in einem Array

    'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
    
  • Verweis, der ein Vorlagenattribut enthält

    'network': '$(ref.' + context.properties['network'] + '.selfLink)'
    
  • Verweis mit einem Python-Parameter

    'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
    
  • Verweis in Ausgaben

    outputs = [{'name': 'UrlToService',
                'value': '$(ref.' + context.env['deployment'] + '-network.networkInterfaces[0].accessConfigs[0].natIP):8080'}]
    

Weitere Informationen

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

Feedback geben zu...

Cloud Deployment Manager-Dokumentation