Definição de propriedades do modelo

Uma das vantagens de usar modelos é a capacidade de criar e definir propriedades de modelo personalizadas. As propriedades de modelo são variáveis arbitrárias definíveis nos arquivos de modelo. Qualquer arquivo de configuração ou de modelo que usa o modelo em questão pode fornecer um valor para a propriedade sem alterar diretamente o modelo. Dessa forma, é possível abstrair a propriedade, a fim de alterar o valor dela para cada configuração exclusiva, sem a necessidade de atualizar o modelo subjacente.

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

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

Em uma configuração que usa esse modelo, é possível definir o valor de zone na seçã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 saberá transferir o valor de zone para o modelo de base.

Antes de começar

Como criar uma propriedade de modelo

Para criar uma propriedade de modelo:

Jinja

No Jinja, defina uma propriedade usando 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-9
    networkInterfaces:
    - network: global/networks/default

Python

No Python, defina uma propriedade usando 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-9'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

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

Como configurar valores de propriedades de modelo na configuração de nível superior

Na configuração de nível superior, é possível definir os valores das propriedades de modelo usando a sintaxe:

imports:
- path: vm_template.jinja

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

É necessário definir os valores de todas as propriedades no modelo. Por exemplo, se um modelo tiver as propriedades de modelo zone, image, network, você precisará definir valores para todas elas na configuração de nível superior.

Se determinadas propriedades de modelo tiverem valores padrão, pense em usar esquemas para definir tais valores. Uma propriedade de modelo com valor padrão pode ser omitida da configuração de nível superior se esse valor for apropriado para a implantação.

Como configurar valores para propriedades de modelo na linha de comando

Em vez de fornecer valores para propriedades de modelo no arquivo pai que importa o modelo, o Deployment Manager permite definir esses valores diretamente na ferramenta de linha de comando gcloud. É possível ignorar a criação do arquivo YAML de nível superior. O Deployment Manager gerará automaticamente uma configuração de nível superior para a implantação com base nas informações da solicitação.

Por exemplo, suponha que você tenha o seguinte modelo com uma propriedade de modelo chamada 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-9
    networkInterfaces:
    - network: global/networks/default

Com a ferramenta de linha de comando gcloud, é possível transferir esse arquivo de modelo diretamente e fornecer os valores para as propriedades do modelo na linha de comando. Por exemplo, a seguinte solicitação é transferida no modelo e especifica a propriedade zone diretamente na linha de comando:

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

Lembre-se:

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

  • Os valores booleanos não diferenciam maiúsculas de minúsculas, por isso, TRUE, true e True são tratados da mesma maneira.

  • É preciso que todas as propriedades obrigatórias sejam definidas pelo modelo. Não é possível fornecer apenas um subconjunto de propriedades. Se algumas propriedades tiverem valores padrão, será possível omiti-las da linha de comando.

Para especificar várias propriedades, forneça pares de chave-valor separados por vírgulas. A ordem na qual os pares são especificados não é importante. 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

Após executar esse comando, o Deployment Manager cria uma implantação usando o modelo que você forneceu. Você pode confirmar que a implantação foi criada usando o Console do Google Cloud ou a ferramenta gcloud. Para mais informações sobre como visualizar a implantação, leia Como visualizar um manifesto.

A seguir