Referência de sintaxe

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

Sintaxe para configurações e modelos

Sintaxe básica

  • resources: um conjunto de recursos a criar.
    • name - O nome desta instanciação deste recurso.
    • type - O tipo de recurso. Pode ser um tipo base, como compute.v1.instance, um fornecedor de tipos, como gcp-types/compute-v1:addresses, ou um modelo importado. Consulte a lista de fornecedores de tipos suportados.
    • properties - As propriedades deste recurso. Para uma introdução, consulte o artigo Propriedades do modelo.
    • metadata – Configuração adicional para este recurso. Veja uma lista dos campos em Metadados.

Exemplo

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

Controlo de acesso

Se quiser definir políticas IAM nos seus recursos, usa uma accessControl secção:

  1. Adicione a secção accessControl à configuração de nível superior para cada recurso ao qual quer aplicar políticas de controlo de acesso.

  2. Especifique o gcpIamPolicy pretendido para o recurso. Cada política IAM pode conter uma lista de associações. Cada associação associa uma lista de responsáveis a uma função.

Para obter informações detalhadas sobre o controlo do acesso aos recursos, consulte o artigo Definir o controlo de acesso numa configuração.

Por exemplo, a secção accessControl seguinte adiciona associações que concedem estas funções aos utilizadores:

Utilizador Função
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 informações sobre quando usar referências e mais exemplos, saiba mais sobre como criar referências.

Pode usar referências às propriedades de outros recursos em vez de fornecer valores diretamente. Por exemplo, se quiser criar um gestor de grupos de instâncias que use um modelo de instância da mesma implementação, em vez de escrever explicitamente o link completo do modelo de instância, pode usar uma referência com a sintaxe $(ref.instance-template.selfLink).

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

Declara referências com uma sintaxe semelhante à notação "ponto" JSONPath. Use a seguinte sintaxe para declarar uma referência:

$(ref.RESOURCE_NAME.PATH_TO_PROPERTY)

Para propriedades que são listas, como as interfaces de rede para 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 da implementação

Quando cria uma implementação, o Deployment Manager cria variáveis de ambiente que contêm informações sobre a sua implementação, como o nome do projeto atual, o nome da implementação, etc.

Para ver uma lista completa das variáveis de ambiente disponíveis, consulte o artigo 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 que cria. Em vez de codificar um valor, pode declarar uma propriedade do modelo e definir o valor da propriedade na configuração de nível superior, em oposição a 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 principal, 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 acerca das propriedades dos modelos.

Resultados

Na secção de resultados, pode definir pares de chave/valor arbitrários que exponham determinadas informações sobre a sua implementação. 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 resultados que os utilizadores podem chamar nas propriedades dos respetivos recursos.
    • 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 as saídas.

Metadados

A secção metadata contém metadados especiais que pode aplicar por recurso. O Deployment Manager tem metadados únicos que acionam determinadas funcionalidades. Por exemplo, a funcionalidade dependsOn baseia-se numa entrada de metadados.

Depende de

A propriedade dependsOn cria dependências explícitas entre os seus recursos. Por exemplo, especificar que o recurso A depende do recurso B garante que o recurso B é sempre criado antes do recurso A.

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 acerca da criação de dependências explícitas.

Sintaxe para esquemas

Um esquema é uma forma de controlar como os utilizadores podem interagir com os seus modelos. Pode usar a seguinte sintaxe no seu ficheiro de esquema. Saiba mais acerca dos esquemas.

informação

A propriedade info contém metainformações sobre o esquema. Isto inclui informações como um título, um número de versão, uma descrição, etc.

No mínimo, indique um título e uma descrição nesta propriedade.

Exemplo

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

importações

O campo imports contém uma lista de ficheiros correspondentes que são necessários para modelos que usam este esquema. Quando carrega um modelo com um esquema que tem uma lista de importações, o Deployment Manager verifica se todos os ficheiros na propriedade de importações foram carregados juntamente com o modelo.

Exemplo

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

obrigatório

O campo obrigatório contém uma lista de elementos do campo de propriedades que são obrigatórios no modelo que usa o esquema. Todos os elementos não especificados neste campo obrigatório são considerados opcionais.

Exemplo

required:
  - name

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

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

propriedades

O campo properties contém as regras do esquema JSON para este documento. Os elementos descritos no campo de propriedades podem ser definidos pelos utilizadores do modelo. Pode usar todas as validações de esquemas JSON suportadas para estas propriedades, como:

  • type (string, booleano, número inteiro, número, ...)
  • default
  • minimum / exclusiveMinimum / maximum / exclusiveMaximum
  • minLength / maxLength
  • pattern
  • not X / allOf X, Y / anyOf X, Y / oneOf X, Y

No mínimo, é uma boa prática incluir um tipo e uma descrição do campo para que os utilizadores saibam qual é um valor aceitável para a propriedade. Para propriedades opcionais, também é recomendável incluir um valor predefinido.

Leia a documentação de 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

O que se segue?