Menetapkan properti template dan menggunakan variabel lingkungan

Salah satu keuntungan menggunakan template untuk deployment adalah kemampuan untuk membuat dan menentukan properti kustom, yang memungkinkan Anda menggunakan kembali template di seluruh zona, wilayah, dan project.

Properti template adalah variabel arbitrer. Setiap file konfigurasi atau file template dapat memberikan nilai untuk properti template tanpa mengubah template. Oleh karena itu, Anda dapat mengubah nilai properti untuk berbagai konfigurasi tanpa mengubah template itu sendiri.

Untuk mereferensikan nilai arbitrer, gunakan sintaksis ini dalam template:

context.properties["property-name"]

Selain properti template, Anda juga dapat menggunakan variabel lingkungan khusus untuk deployment, yang diisi otomatis dengan informasi tentang deployment. Anda dapat menggunakan variabel lingkungan dalam template untuk mendapatkan informasi unik tentang deployment.

Anda memanggil variabel lingkungan menggunakan sintaksis ini:

context.env['variable-name']

Variabel lingkungan yang valid mencakup nama deployment, project ID, properti nama resource, dan jenis konfigurasi Anda. Pelajari variabel lingkungan lebih lanjut.

Properti template dan variabel lingkungan dalam template

Pada langkah ini, vm-template.py menunjukkan manfaat properti template dan variabel lingkungan. Buka vm-template.py:

cd deploymentmanager-samples/examples/v2/step_by_step_guide/step7_use_environment_variables/python

nano vm-template.py  # use your preferred text editor

Berbagai bagian template telah diganti dengan properti template dan variabel lingkungan. Misalnya, project ID diganti dengan context.env[project], sehingga Anda tidak perlu mengganti project ID secara manual di template.

Komentar dalam file menjelaskan perubahan lain pada template.

# 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.

"""Creates the virtual machine."""

COMPUTE_URL_BASE = 'https://www.googleapis.com/compute/v1/'


def GenerateConfig(context):
  """Creates the virtual machine with environment variables."""

  resources = [{
      # `the-first-vm` is replaced with `context.env[`name`]`
      'name': context.env['name'],
      'type': 'compute.v1.instance',
      'properties': {
          # All occurrences of `us-central1-f` are replaced with
          # `context.properties[`zone`]. 
          # All occurrences of the project ID are replaced with 
          # `context.env[`project`]`.
          # `f1-micro` is replaced with `context.properties["machineType"].  
          'zone': context.properties['zone'],
          'machineType': ''.join([COMPUTE_URL_BASE, 'projects/',
                                  context.env['project'], '/zones/',
                                  context.properties['zone'], '/machineTypes/',
                                  context.properties['machineType']]),
          'disks': [{
              'deviceName': 'boot',
              'type': 'PERSISTENT',
              'boot': True,
              'autoDelete': True,
              'initializeParams': {
                  'sourceImage': ''.join([COMPUTE_URL_BASE, 'projects/',
                                          'debian-cloud/global/',
                                          'images/family/debian-11'])
              }
          }],
          # `$(ref.a-new-network.selfLink)` is replaced with 
          # `$(ref.` + context.properties[`network`] + `selfLink)`.
          'networkInterfaces': [{
              'network': '$(ref.' + context.properties['network']
                         + '.selfLink)',
              'accessConfigs': [{
                  'name': 'External NAT',
                  'type': 'ONE_TO_ONE_NAT'
              }]
          }]
      }
  }]
  return {'resources': resources}

Demikian pula, network-template.py dan firewall-template.py menggunakan nama deployment dalam definisinya, dengan memanggil context.env['name'].

Men-deploy konfigurasi

Untuk melihat file konfigurasi deployment ini, jalankan perintah berikut:

nano config-with-many-templates.yaml

Simpan perubahan dan deploy ulang konfigurasi untuk mengonfirmasi bahwa variabel berfungsi.

gcloud deployment-manager deployments create deployment-with-template-properties --config config-with-many-templates.yaml

Menghapus deployment

Sebaiknya hapus deployment untuk menghindari tagihan. Anda tidak memerlukan deployment ini untuk langkah berikutnya. Jalankan perintah berikut untuk menghapus deployment:

gcloud deployment-manager deployments delete deployment-with-template-properties

Menjelang masa mendatang: skrip helper

Selanjutnya, pelajari skrip helper untuk melakukan tugas berulang secara efisien.