Referência de sintaxe

Esta página descreve a sintaxe usada pelo Deployment Manager. Use este guia como referência para a sintaxe que será usada em configurações e modelos.

Sintaxe de configurações e modelos

Sintaxe básica

  • resources: um conjunto de recursos para criação.
    • name - o nome da instanciação deste recurso.
    • type - o tipo de recurso. Pode ser um tipo de base como compute.v1.instance, um provedor de tipos como gcp-types/compute-v1:addresses ou um modelo importado. Consulte a lista de provedores de tipos compatíveis.
    • properties - as propriedades deste recurso. Para ver a introdução, consulte Propriedades do modelo.
    • metadata - configuração extra para este recurso. Consulte uma lista de campos em Metadados.

Exemplo

resources:
- name: vm-instance
  type: compute.v1.instance
  properties:
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    ...

Controle de acesso

Se você quiser definir políticas de IAM nos seus recursos, use uma seção accessControl:

  1. Adicione a seção accessControl à configuração de nível superior de cada recurso em que você quiser aplicar políticas de controle de acesso.

  2. Especifique o gcpIamPolicy pretendido para o recurso. Cada política do IAM pode conter uma lista de vinculações. Cada vinculação associa uma lista de principal a um papel.

Para informações detalhadas sobre como controlar o acesso a recursos, consulte Como definir o controle de acesso em uma configuração.

Por exemplo, a seção accessControl a seguir adiciona vinculações que fazem a concessão destes papéis aos usuários:

User Papel
alice@example.com roles/pubsub.editor
  • my-other-app@appspot.gserviceaccount.com
  • jane@example.com
roles/pubsub.publisher
resources:
- name: a-new-pubsub-topic
  type: pubsub.v1.topic
  properties:
    ...

  accessControl:
    gcpIamPolicy:
      bindings:
      - role: roles/pubsub.editor
        members:
        - "user:alice@example.com"
      - role: roles/pubsub.publisher
        members:
        - "user:jane@example.com"
        - "serviceAccount:my-other-app@appspot.gserviceaccount.com"

Referências

Para ver mais exemplos e informações sobre quando usar referências, saiba mais sobre criar referências .

É possível usar references às propriedades de outros recursos em vez de fornecer valores diretamente. Por exemplo, se você quiser criar um gerenciador de grupo de instâncias que use um modelo da mesma implantação, em vez de digitar explicitamente o link completo do modelo de instância, use uma referência com a sintaxe $(ref.instance-template.selfLink).

Para ver as propriedades com que é possível criar referências, consulte o método get para a API do recurso. Por exemplo, para ver uma lista de todas as propriedades de uma instância de VM, consulte a resposta para o método instances.get().

Para declarar referências, use uma sintaxe semelhante à notação de "ponto" JSONPath. Use a seguinte sintaxe para declarar uma referência:

$(ref.RESOURCE_NAME.PATH_TO_PROPERTY)

Para propriedades que estão em formato de listas, como as interfaces de rede de instâncias do Compute Engine, use a seguinte sintaxe:

$(ref.RESOURCE_NAME.LIST_PROPERTY[index].ITEM)

Exemplos

$(ref.exampleInstance.networkInterfaces[0].natIp)
$(ref.exampleInstance.serviceAccounts[0].email)

Variáveis de ambiente específicas à implantação

Quando você cria uma implantação, o Deployment Manager cria variáveis de ambiente contendo informações sobre sua implantação, como o nome do projeto atual, o nome da implantação e assim por diante.

Para ver uma lista completa de variáveis de ambiente disponíveis, consulte Variáveis de ambiente.

Para usar uma variável de ambiente:

{{ env["deployment"] }} # Jinja

context.env["deployment"] # Python

Exemplo

- type: compute.v1.instance
  name: vm-{{ env["deployment"] }}

Propriedades do modelo

Uma propriedade de modelo é uma propriedade arbitrária criada por você. Em vez de embutir um valor em código, você pode declarar uma propriedade de modelo e definir seu valor na configuração de nível superior, o que é diferente de fornecer estaticamente a propriedade e o valor diretamente no modelo. Para criar uma propriedade de modelo, use a sintaxe:

{{ properties["property-name"] }} # Jinja

context.properties["property-name"] # Python

Em seguida, na configuração de nível superior ou no modelo pai, defina o valor da propriedade:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
   property-name: example-value

Saiba mais sobre Propriedades do modelo.

Outputs

Na seção "outputs", você pode definir pares chave/valor arbitrários que expõem determinadas informações sobre a implantação. Você fornece a chave e define o valor como uma string estática, uma referência a uma propriedade, uma variável de modelo ou uma variável de ambiente.

  • outputs - declara uma lista de saídas que os usuários podem chamar nas propriedades do recurso.
    • name - nome da propriedade de saída.
    • value - valor da propriedade de saída.

Exemplo

resources:
- name: vm-instance
  type: compute.v1.instance
  ...

outputs:
- name: databaseIp
  value: $(ref.vm-instance.networkInterfaces[0].natIp)
- name: databaseName
  value: example-database

Saiba mais sobre Saídas.

Metadados

A seção metadata contém metadados especiais que podem ser aplicados por recurso. O Deployment Manager tem metadados únicos que acionam determinados recursos. Por exemplo, o recurso dependsOn depende de uma entrada de metadados.

Depends on

A propriedade dependsOn cria dependências explícitas entre seus recursos. Por exemplo, especificar que o Recurso A depende do Recurso B assegura que o segundo seja sempre criado antes do primeiro.

metadata: the metadata for this resource
  dependsOn: Any explicit dependencies to another resource.

Exemplo

resources:
- name: vm-instance
  type: compute.v1.instance
  properties:
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    ...
  metadata:
    dependsOn:
    - persistent-disk-1
    - a-new-network-1

Saiba mais sobre a criação de dependências explícitas.

Sintaxe de esquemas

Esquema é uma maneira de controlar como os usuários podem interagir com os modelos. A sintaxe a seguir pode ser usada no arquivo de esquema. Saiba mais sobre Esquemas.

info

A propriedade info contém meta informações sobre o esquema. Isso inclui informações como título, número da versão, descrição etc.

Forneça pelo menos um título e uma descrição nesta propriedade.

Exemplo

info:
  title: MongoDB Template
  author: Jane
  description: Creates a MongoDB cluster
  version: 1.0

imports

O campo imports contém uma lista de arquivos correspondentes, obrigatórios para modelos que usam este esquema. Quando você faz upload de um modelo com um esquema que tem uma lista de importações, o Deployment Manager verifica se o upload de todos os arquivos na propriedade imports foi feito com o modelo.

Exemplo

imports:
  - path: helper.py
    name: mongodb_helper.py

required

O campo required contém uma lista de elementos do campo properties obrigatórios no modelo que usa o esquema. Qualquer elemento não especificado no campo required é considerado opcional.

Exemplo

required:
  - name

properties:
  name:
    type: string
    description: Name of your Mongo Cluster

  size:
    type: integer
    default: 2
    description: Number of Mongo Secondaries

properties

O campo properties contém as regras de esquema JSON deste documento. Os elementos descritos no campo properties podem ser definidos pelos usuários do modelo. Use todas as validações de esquema JSON compatíveis com essas propriedades, como:

  • type (string, boolean, integer, number, ...)
  • default
  • minimum / exclusiveMinimum / maximum / exclusiveMaximum
  • minLength / maxLength
  • pattern
  • not X / allOf X, Y / anyOf X, Y / oneOf X, Y

É prática recomendada incluir pelo menos um tipo e uma descrição do campo para que os usuários saibam o que é um valor aceitável para a propriedade. Para propriedades opcionais, também é prática recomendada incluir um valor padrão.

Leia a documentação sobre Validação do esquema JSON para ver uma lista de palavras-chave de validação.

Exemplo

properties:
  name:
    type: string
    description: Name of your Mongo Cluster

  size:
    type: integer
    default: 2
    description: Number of Mongo Secondaries
    minimum: 1

A seguir