テンプレート プロパティの定義

テンプレートを使用する利点の 1 つは、カスタム テンプレート プロパティを作成して定義できる点です。テンプレート プロパティは、テンプレート ファイルに定義する任意の変数です。テンプレートを使用する設定ファイルやテンプレート ファイルで、テンプレート プロパティの値を設定できます。テンプレートを直接変更する必要はありません。プロパティを抽象化して、元のテンプレートを更新することなく、設定ごとにプロパティの値を変更できます。

たとえば、次の行は、マシンタイプの URL でテンプレート プロパティを指定しています。

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 は同じ値として処理されます。

  • テンプレートで定義されたすべての必須プロパティを渡す必要があります。プロパティのサブセットだけを渡すことはできません。特定のプロパティにデフォルト値がある場合は、コマンドラインでそのプロパティを省略できます。

複数のプロパティを指定するには、Key-Value ペアをカンマ区切りで指定します。ペアは任意の順序で指定できます。次に例を示します。

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 Console または gcloud CLI を使用して、デプロイが作成されたことを確認できます。デプロイの表示については、マニフェストの表示をご覧ください。

次のステップ