Utilizzo di riferimenti

Quando definisci le proprietà della configurazione o dei modelli, puoi: Utilizzare i riferimenti alle proprietà di altre risorse anziché direttamente che forniscono valori. Ad esempio, se vuoi creare un gestore di gruppi di istanze che utilizza un modello di istanza dello stesso deployment, anziché utilizzare digitando il link completo per il modello di istanza, puoi utilizzare un riferimento con sintassi $(ref.instance-template.selfLink).

Con i riferimenti puoi:

  • Accedi a proprietà che non sono definite fino alla creazione della risorsa. Ad esempio, quando definisci una macchina virtuale nella configurazione, non ne conosci ancora l'indirizzo IP. Tuttavia, puoi sempre utilizzare un riferimento all'IP . Quando esegui il deployment della configurazione, la VM viene creata prima Deployment Manager ottiene l'indirizzo IP esterno quando è disponibile.

  • Semplifica la lettura delle configurazioni o dei modelli e la risoluzione dei problemi. Ad esempio, se devi configurare più regole di forwarding, devi specificare anche una rete da utilizzare. Invece di fornire un link alla rete per ogni regola di inoltro, puoi creare un riferimento alla proprietà selfLink della rete utilizzando la seguente sintassi:

    $(ref.network-name.selfLink)
    

    Se devi risolvere i problemi di configurazione, il riferimento ti consente per capire quale rete viene utilizzata nella regola di forwarding.

Quando crei un riferimento a una risorsa, crei anche una dipendenza tra Google Cloud. Ad esempio, considera il seguente snippet, dove sandbox-vm utilizza un riferimento a network-a:

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

Quando esegui il deployment di questa configurazione, Deployment Manager crea network-a prima di sandbox-vm, in modo che il riferimento possa essere risolto. Se i riferimenti non vengono risolti correttamente, il deployment non va a buon fine.

Puoi utilizzare i riferimenti sia nelle configurazioni sia nei modelli.

Prima di iniziare

Creazione di riferimenti nei file di configurazione

Dichiara i riferimenti nella tua configurazione utilizzando il seguente formato:

$(ref.RESOURCE_NAME.PROPERTY)

L'esempio seguente crea una rete e poi due istanza che utilizzano i riferimenti alla rete appena creata. In questo esempio, il riferimento è:

$(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

Quando esegui il deployment di questa configurazione, la rete viene creata prima e le istanze di rete e il riferimento si risolve in selfLink della risorsa di rete.

Fare riferimenti nei modelli

Nei file modello, l'intero riferimento deve essere preceduto da $ e poi essere incluso tra parentesi:

$(ref.RESOURCE_NAME.PROPERTY)

Puoi combinare i riferimenti con altre funzionalità come le proprietà del modello e variabili di ambiente. Per assicurarti che Deployment Manager analizzi riferimento, è importante ricordare di conservare l'intero riferimento tra parentesi.

Ecco alcuni esempi di dichiarazione dei riferimenti nei modelli:

Jinja

  • Riferimento che include una variabile di ambiente

    network: $(ref.{{ env["deployment"] }}-network.selfLink)
    
  • Riferimento a un valore in un array

    subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
    
  • Riferimento che include una proprietà modello

    network: $(ref.{{ properties["network"] }}.selfLink)
    
  • Riferimento mediante un parametro Jinja

    network: $(ref.{{ NETWORK_NAME }}.selfLink)
    
  • Riferimento in outputs

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

Python

  • Riferimento che include una variabile di ambiente

    'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
    
  • Riferimento a un valore in un array

    'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
    
  • Riferimento che include una proprietà di modello

    'network': '$(ref.' + context.properties['network'] + '.selfLink)'
    
  • Riferimento tramite l'uso di un parametro Python

    'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
    
  • Riferimento negli output

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

Passaggi successivi