Membuat Template Dasar

File konfigurasi dasar mungkin cukup untuk beban kerja sederhana, tetapi untuk arsitektur yang lebih kompleks atau untuk konfigurasi yang akan digunakan kembali, Anda dapat memecah konfigurasi menjadi template.

Template adalah file terpisah yang diimpor dan digunakan sebagai jenis dalam konfigurasi. Anda dapat menggunakan template sebanyak yang diinginkan dalam konfigurasi.

Dengan template, Anda dapat memisahkan konfigurasi menjadi beberapa bagian yang dapat digunakan dan digunakan kembali di berbagai deployment. Template dapat digeneralisasi atau spesifik sesuai kebutuhan. Dengan template, Anda juga dapat memanfaatkan fitur seperti properti template, variabel lingkungan, modul, dan fungsi template lainnya untuk membuat file template dan konfigurasi dinamis.

Untuk mengetahui contoh template yang dapat digunakan di deployment Anda sendiri, lihat Repositori GitHub Deployment Manager.

Sebelum memulai

Sintaksis template

Template dapat ditulis dalam Jinja 2.10.x atau Python 3.x. Jinja memetakan lebih dekat ke sintaksis YAML, sehingga akan lebih mudah untuk menulis template dalam Jinja jika Anda lebih familier dengan YAML.

Anda juga dapat menulis file template di Python dan memanfaatkan Python untuk membuat bagian dari template Anda secara terprogram. Misalnya, Anda dapat menggunakan library Python untuk memformat definisi template. Jika Anda sudah terbiasa dengan Python, ini mungkin format yang lebih baik untuk Anda.

Deployment Manager menerima template Jinja dan Python. Anda dapat mengimpor template di kedua bahasa dengan konfigurasi yang sama.

Membuat template dasar

{i>Template<i} adalah {i>file<i} yang Anda buat, yang ditulis dalam Jinja atau Python. Misalnya, pertimbangkan file konfigurasi berikut:

# 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: vm-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Konfigurasi ini valid, tetapi Anda dapat lebih menyederhanakan konfigurasi dengan membagi bagian yang berbeda sebagai file template individual yang dapat digunakan kembali. Untuk membuat template berdasarkan konfigurasi di atas, tarik bagian untuk resource yang dimaksud dan buat file Jinja atau Python baru.

Cuplikan berikut menunjukkan bagian template yang dapat menyederhanakan deployment Anda. Untuk template lengkap, klik View on GitHub.

Jinja

- name: vm-template
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

Template Python Anda harus memenuhi persyaratan berikut:

  • Template harus menentukan metode yang disebut GenerateConfig(context) atau generate_config(context). Jika Anda menggunakan kedua nama metode dalam template yang sama, metode generate_config() akan diprioritaskan.

    Objek context berisi metadata tentang deployment dan lingkungan Anda, seperti nama deployment, project saat ini, dan sebagainya. Pelajari lebih lanjut cara menggunakan variabel lingkungan khusus deployment.

  • Metode tersebut harus menampilkan kamus Python.

Selain itu, terserah Anda untuk membuat konten {i>template<i} Anda.

Contoh

resources.append({
    'name': 'vm-template',
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': 'zones/us-central1-a/machineTypes/n1-standard-1',
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }
})

Untuk contoh lengkap Python, lihat repositori GitHub Deployment Manager.

Mengimpor template

Setelah membuat template, impor template ke file konfigurasi Anda untuk menggunakannya. Untuk mengimpor template, tambahkan bagian imports di konfigurasi Anda, diikuti dengan jalur relatif atau absolut dari direktori saat ini. Misalnya, Anda dapat mengimpor template virtual machine dari langkah sebelumnya dengan menambahkan baris berikut ke bagian atas konfigurasi:

imports:
  - path: path/to/my_vm_template.jinja

Jika memiliki jalur file yang panjang, Anda dapat memberikan properti name opsional sebagai alias untuk file tersebut. Anda dapat menggunakan nama ini untuk mereferensikan template nanti. Jika Anda tidak memberikan nama, template dapat direferensikan menggunakan path.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja

Anda dapat mencampur dan mencocokkan impor beberapa template, terlepas dari apakah template tersebut Jinja atau Python:

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja
  - path: special_vm.py

Jika template Anda menggunakan template lain sebagai dependensi, impor juga template dependen dalam konfigurasi Anda:

imports:
  - path: path/to/my_vm_template.jinja
  - path: special_vm.py
  - path: base_vm.jinja

Anda juga dapat mengimpor file teks agar konten menjadi inline. Misalnya, jika Anda membuat file bernama resource_type.txt dengan string berikut:

compute.v1.instance

Impor ke dalam konfigurasi Anda dan berikan konten inline seperti ini:

imports:
- path: resource_type.txt

resources:
- name: my-vm
  type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance"
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

Men-deploy template

Setelah Anda mengimpor template, gunakan template tersebut sebagai jenis dalam konfigurasi Anda:

Jinja

imports:
- path: vm-template.jinja

resources:
- name: my-vm
  type: vm-template.jinja

Python

imports:
- path: vm-template.py

resources:
- name: my-vm
  type: vm-template.py

Jika Anda tidak memberikan nama untuk template, panggil template menggunakan jalur template:

imports:
- path: path/to/my_vm_template.jinja

resources:
- name: my-first-virtual-machine
  type: path/to/my_vm_template.jinja

Men-deploy template secara langsung dengan alat command line

Deployment Manager tidak dapat membuat file konfigurasi level teratas, tetapi menawarkan kemampuan untuk men-deploy template secara langsung di Google Cloud CLI.

Misalnya, permintaan berikut men-deploy template yang disebut vm-template.jinja:

gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja

Jika template memiliki properti template, Anda juga dapat menetapkan properti ini pada command line menggunakan tanda --properties:

gcloud deployment-manager deployments create my-igm \
    --template vm-template.jinja \
    --properties zone:us-central1-a

Perlu diperhatikan bahwa:

  • Semua nilai diuraikan sebagai nilai YAML. Misalnya, version: 3 diteruskan sebagai bilangan bulat. Jika ingin menentukannya sebagai string, tempatkan tanda kutip tunggal yang di-escape di sekitar nilai, version: \'3\'.

  • Nilai boolean tidak peka huruf besar/kecil, sehingga TRUE, true, dan True diperlakukan sama.

  • Anda harus meneruskan semua properti wajib yang ditentukan oleh template. Anda tidak dapat memberikan subset properti saja. Jika properti tertentu memiliki nilai default, Anda dapat menghilangkan properti ini dari command line.

Untuk menentukan beberapa properti, berikan key:value pair yang dipisahkan koma. Tidak masalah dalam urutan apa pun Anda menentukan pasangan tersebut. Contoh:

gcloud deployment-manager deployments create my-igm 
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

Setelah menjalankan perintah ini, Deployment Manager akan membuat deployment menggunakan template yang Anda berikan. Anda dapat mengonfirmasi bahwa deployment telah dibuat menggunakan Google Cloud Console atau gcloud CLI. Untuk informasi tentang cara melihat deployment, baca Melihat manifes.

Langkah selanjutnya