定義範本屬性

能夠建立和定義自訂範本屬性是使用範本的優點之一。範本屬性是您在範本檔案中定義的任意變數。使用範本的任何設定檔或範本檔都可以提供範本屬性值,因此無需直接變更範本。如此一來,您就能提取屬性,進而變更每個專屬設定的屬性值,而不用更新基礎範本。

舉例來說,下列指令會在機器類型的網址中指定範本屬性:

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

在使用此範本的設定中,您可以在範本的 properties 區段設定 zone 的值。

imports: - path: vm_template.jinja  resources: - name: my-vm   type: vm_template.jinja   properties:     zone: us-central1-a

Deployment Manager 會將 zone 的值傳入基礎範本。

事前準備

建立範本屬性

如何建立範本屬性:

Jinja

在 Jinja 中,使用下列語法來定義屬性:

{{ properties["PROJECT_NAME"] }}

例如:

- name: vm-{{ env["deployment"] }}   type: compute.v1.instance   properties:     zone: us-central1-a     machineType: zones/{{ properties["zone"] }}/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

在 Python 中,使用下列語法來定義屬性:

  context.properties["PROPERTY_NAME"] 

例如:

resources.append({     'name': 'vm-' + context.env['deployment'],     'type': 'compute.v1.instance',     'properties': {         'zone': 'us-central1-a',         'machineType': ''.join(['zones/', context.properties['zone'],                                 '/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 範例,請參閱 Deployment Manager GitHub 存放區

在頂層設定中為範本屬性設定值

在頂層設定中,您可以使用下列語法來設定範本屬性值:

imports: - path: vm_template.jinja  resources: - name: my-vm   type: vm_template.jinja   properties:     zone: us-central1-a

您必須為範本中的所有範本屬性設定值。舉例來說,如果範本含有 zoneimagenetwork 範本屬性,則您必須在頂層設定中定義這三項屬性的值。

如果某些範本屬性含有預設值,請考慮使用結構定義來設定這些預設值。如果預設值適用於部署作業,則可以在頂層設定中略過具有預設值的範本屬性。

在指令列中設定範本屬性的值

Deployment Manager 可讓您在 Google Cloud CLI 中直接設定這些值,因此無需在匯入範本的上層檔案中提供範本屬性的值。您可以略過建立頂層 YAML 檔案;Deployment Manager 會根據要求中的資訊自動為部署作業產生頂層設定。

比方說,假設您擁有下列範本,其中的範本屬性名為 zone

- name: vm-{{ env["deployment"] }}   type: compute.v1.instance   properties:     zone: us-central1-a     machineType: zones/{{ properties["zone"] }}/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

您可以使用 Google Cloud CLI 直接傳入此範本檔案,並在指令列中提供範本屬性的值。比方說,下列要求會傳入範本,並直接在指令列中指定 zone 屬性:

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

請注意下列事項:

  • 系統會將所有值剖析為 YAML 值,例如 version: 3 會以整數的形式傳入。如要將值指定為字串,請在值的前後加上逸出單引號,即 version: \'3\'

  • 布林值不區分大小寫,因此系統會將 TRUEtrueTrue 視為相同的值。

  • 您必須傳入範本定義的所有必要屬性。您不能只提供屬性的子集。如果某些屬性具有預設值,則可以從指令列中省略該屬性。

如要指定多個屬性,請提供以逗號分隔的鍵/值組合。指定組合的順序並不影響結果。例如:

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

在您執行這個指令之後,Deployment Manager 會使用您提供的範本來建立部署作業。您可以透過 Google Cloud 控制台或 gcloud CLI 確認是否已建立部署。如要瞭解如何查看部署作業,請參閱查看資訊清單

相關資源