Definir propriedades do modelo

Uma das vantagens de usar modelos é a capacidade de criar e definir propriedades de modelos personalizados. As propriedades do modelo são variáveis arbitrárias que define nos ficheiros de modelo. Qualquer ficheiro de configuração ou ficheiro de modelo que use o modelo em questão pode fornecer um valor para a propriedade do modelo sem alterar o modelo diretamente. Isto permite-lhe abstrair a propriedade para que possa alterar o valor da propriedade para cada configuração única sem atualizar o modelo subjacente.

Por exemplo, a linha seguinte especifica uma propriedade do modelo no URL do tipo de máquina:

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

Numa configuração que usa este modelo, pode definir o valor de zone na secção properties do modelo:

imports:
- path: vm_template.jinja

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

O Deployment Manager sabe que tem de transmitir o valor de zone ao modelo subjacente.

Antes de começar

Criar uma propriedade de modelo

Para criar uma propriedade de modelo:

Jinja

No Jinja, defina uma propriedade com a seguinte sintaxe:

{{ properties["PROJECT_NAME"] }}

Por exemplo:

- 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

Em Python, defina uma propriedade com a seguinte sintaxe:

  context.properties["PROPERTY_NAME"]

Por exemplo:

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'
        }]
    }

})

Para ver o exemplo completo em Python, consulte o repositório do GitHub do Deployment Manager.

Definir valores para propriedades de modelos na configuração de nível superior

Na configuração de nível superior, pode definir valores para propriedades de modelos através da sintaxe:

imports:
- path: vm_template.jinja

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

Tem de definir valores para todas as propriedades do modelo no modelo. Por exemplo, se um modelo tiver propriedades do modelo zone, image e network, tem de definir valores para todas essas propriedades na configuração de nível superior.

Se determinadas propriedades do modelo tiverem valores predefinidos, considere usar esquemas para definir estes valores predefinidos. Uma propriedade de modelo com um valor predefinido pode ser omitida da configuração de nível superior se o valor predefinido for adequado para a implementação.

Definir valores para propriedades de modelos na linha de comandos

Em vez de fornecer valores para as propriedades do modelo no ficheiro principal que importa o modelo, o Deployment Manager oferece a capacidade de definir estes valores diretamente na Google Cloud CLI. Pode ignorar a criação do ficheiro YAML de nível superior. O Deployment Manager gera automaticamente uma configuração de nível superior para a sua implementação com base nas informações do seu pedido.

Por exemplo, suponha que tem o seguinte modelo com uma propriedade do modelo denominada 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

Com a CLI do Google Cloud, pode transmitir este ficheiro de modelo diretamente e fornecer os valores para as propriedades do modelo na linha de comandos. Por exemplo, o pedido seguinte é transmitido no modelo e especifica a propriedade zone diretamente na linha de comandos:

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

Tenha em atenção o seguinte:

  • Todos os valores são analisados como valores YAML. Por exemplo, version: 3 é transmitido como um número inteiro. Se quiser especificá-lo como uma string, coloque aspas simples escapadas à volta do valor, version: \'3\'.

  • Os valores booleanos não são sensíveis a maiúsculas e minúsculas, pelo que TRUE, true e True são tratados da mesma forma.

  • Tem de transmitir todas as propriedades necessárias definidas pelo modelo. Não pode fornecer apenas um subconjunto das propriedades. Se determinadas propriedades tiverem valores predefinidos, pode omitir a propriedade da linha de comandos.

Para especificar várias propriedades, indique pares de chave:valor separados por vírgulas. A ordem pela qual especifica os pares não importa. Por exemplo:

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

Depois de executar este comando, o Deployment Manager cria uma implementação com o modelo que forneceu. Pode confirmar que a implementação foi criada através da Google Cloud consola ou da CLI gcloud. Para ver informações sobre a visualização de uma implementação, leia o artigo Visualizar um manifesto.

O que se segue?