Menggunakan referensi

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

Dengan referensi, Anda dapat:

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

  • Buat konfigurasi atau template Anda lebih mudah dibaca dan memecahkan masalah. 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 akan mempermudah untuk mengetahui jaringan mana yang sedang digunakan dalam aturan penerusan.

Saat membuat referensi ke suatu resource, Anda juga membuat dependensi antar-resource. Misalnya, perhatikan cuplikan berikut, saat 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 ada referensi yang tidak berhasil diselesaikan, deployment Anda akan gagal.

Anda dapat menggunakan referensi baik dalam konfigurasi maupun 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 akan dibuat sebelum kedua instance, dan referensi ditetapkan ke selfLink resource jaringan.

Membuat referensi dalam {i>template<i}

Dalam file template, seluruh referensi harus didahului dengan $, lalu dimuat dalam kumpulan 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, penting untuk mengingat untuk menyimpan seluruh string referensi Anda dalam tanda kurung.

Berikut adalah beberapa contoh mendeklarasikan referensi dalam template Anda:

Jinja

  • Referensi yang mencakup variabel lingkungan

    network: $(ref.{{ env["deployment"] }}-network.selfLink)
    
  • Rujukan 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 mencakup variabel lingkungan

    'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
    
  • Rujukan 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