Verweise 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. Wenn Sie z. B. einen Instanzgruppenmanager erstellen möchten, der eine Instanzvorlage aus derselben Bereitstellung verwendet, können Sie anstelle des vollständigen Links für die Instanzvorlage einen Verweis mit der Syntax $(ref.instance-template.selfLink) verwenden.

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 bereitzustellen, können Sie mithilfe 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 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 network-a vor sandbox-vm, damit der Verweis aufgelöst werden kann. Wenn Verweise nicht erfolgreich aufgelöst werden, kommt es zu einem Fehler bei der Bereitstellung.

Sie können Verweise in Konfigurationen und Vorlagen verwenden.

Hinweis

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-11
    networkInterfaces:
    # The resource's "network value" has been replaced with a
    # reference to the new network's "selfLink" property. The network 
    # resource has been added to the end of this file.
    - 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-11
    networkInterfaces:
    # As in the resource above, the "network" value has been replaced with 
    # the new network's "selfLink" property. 
    - network: $(ref.a-new-network.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT
# The following network is a new resource added to the "two-vms.yaml" file.
- name: a-new-network
  type: compute.v1.network
  properties:
    routingConfig:
      routingMode: REGIONAL
    autoCreateSubnetworks: true

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 parst, 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