Menggunakan referensi

Saat menentukan properti untuk konfigurasi atau template, Anda dapat menggunakan referensi ke properti resource lain, bukan menyediakan nilai secara langsung. Misalnya, jika ingin membuat pengelola grup instance yang menggunakan template instance dari deployment yang sama, Anda dapat menggunakan referensi dengan sintaksis $(ref.instance-template.selfLink), bukan mengetik link lengkap untuk template instance secara eksplisit.

Dengan referensi, Anda dapat:

  • Mengakses properti yang tidak ditentukan hingga resource dibuat. Misalnya, saat menentukan virtual machine dalam konfigurasi, Anda belum mengetahui alamat IP-nya. Namun, Anda tetap dapat menggunakan referensi ke alamat IP. Saat Anda men-deploy konfigurasi, VM akan dibuat terlebih dahulu, dan Deployment Manager akan mendapatkan alamat IP eksternal saat tersedia.

  • Buat konfigurasi atau template Anda lebih mudah dibaca dan dipecahkan masalahnya. Misalnya, jika perlu mengonfigurasi beberapa aturan penerusan, Anda juga harus menentukan jaringan yang akan digunakan. Daripada memberikan link ke jaringan untuk setiap aturan penerusan, Anda dapat membuat referensi ke properti selfLink jaringan menggunakan sintaksis berikut:

    $(ref.network-name.selfLink)
    

    Jika Anda perlu memecahkan masalah konfigurasi, referensi ini akan memudahkan untuk mengetahui jaringan mana yang digunakan dalam aturan penerusan.

Saat membuat referensi ke resource, Anda juga membuat dependensi antar-resource. Misalnya, pertimbangkan cuplikan berikut, dengan sandbox-vm menggunakan referensi ke network-a:

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

Saat Anda men-deploy konfigurasi ini, Deployment Manager akan membuat network-a sebelum sandbox-vm, sehingga referensi dapat di-resolve. Jika referensi tidak berhasil di-resolve, deployment Anda akan gagal.

Anda dapat menggunakan referensi dalam konfigurasi dan template.

Sebelum memulai

Membuat referensi dalam file konfigurasi

Deklarasikan referensi dalam konfigurasi Anda menggunakan format berikut:

$(ref.RESOURCE_NAME.PROPERTY)

Contoh berikut membuat jaringan, lalu membuat dua instance yang menggunakan referensi ke jaringan yang baru dibuat. Dalam contoh ini, referensinya adalah:

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

Saat Anda men-deploy konfigurasi ini, jaringan dibuat sebelum dua instance, dan referensi di-resolve ke selfLink resource jaringan.

Membuat referensi dalam template

Dalam file template, seluruh referensi harus didahului dengan $, lalu berisi dalam sepasang tanda kurung:

$(ref.RESOURCE_NAME.PROPERTY)

Anda dapat menggabungkan referensi dengan fitur lain seperti properti template dan variabel lingkungan. Untuk memastikan Deployment Manager mengurai referensi dengan benar, Anda harus mengingat untuk menyimpan seluruh string referensi dalam tanda kurung.

Berikut beberapa contoh deklarasi referensi dalam template Anda:

Jinja

  • Referensi yang menyertakan variabel lingkungan

    network: $(ref.{{ env["deployment"] }}-network.selfLink)
    
  • Referensi ke nilai dalam array

    subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
    
  • Referensi yang menyertakan properti template

    network: $(ref.{{ properties["network"] }}.selfLink)
    
  • Referensi menggunakan parameter Jinja

    network: $(ref.{{ NETWORK_NAME }}.selfLink)
    
  • Referensi dalam output

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

Python

  • Referensi yang menyertakan variabel lingkungan

    'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
    
  • Referensi ke nilai dalam array

    'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
    
  • Referensi yang menyertakan properti template

    'network': '$(ref.' + context.properties['network'] + '.selfLink)'
    
  • Referensi menggunakan parameter Python

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

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

Langkah selanjutnya