Referencia de sintaxis

Esta página describe la sintaxis que utiliza Deployment Manager. Usa esta guía como referencia para saber qué sintaxis emplear en tus configuraciones y plantillas.

Sintaxis para las configuraciones y plantillas

Sintaxis básica

  • resources: un conjunto de recursos para crear.
    • name: el nombre de esta instanciación de este recurso.
    • type: el tipo de recurso. Puede ser un tipo de base, como compute.v1.instance, un proveedor de tipos, como gcp-types/compute-v1:addresses, o una plantilla importada. Consulta la lista de proveedores de tipos compatibles.
    • properties: las propiedades de este recurso. Para obtener una introducción, lee Propiedades de la plantilla.
    • metadata: configuración adicional para este recurso. Encuentra una lista de campos en Metadatos.

Ejemplo

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

Control de acceso

Si deseas establecer políticas de IAM en tus recursos, usa una sección accessControl:

  1. Agrega la sección accessControl a la configuración de nivel superior para cada recurso en el que deseas aplicar las políticas de control de acceso.

  2. Especifica la gcpIamPolicy deseada para el recurso. Cada política de IAM puede contener una lista de vínculos. Cada vínculo une a cada principal de una lista a una función.

Para obtener información más detallada sobre cómo controlar el acceso a los recursos, lee Define el control de acceso en una configuración.

Por ejemplo, la siguiente sección accessControl agrega vinculaciones que otorgan estas funciones a los usuarios:

User Rol
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"

Referencias

Para obtener información sobre cuándo usar referencias y más ejemplos, consulta cómo crear referencias.

Puedes usar references a las propiedades de otros recursos en lugar de proporcionar valores de manera directa. Por ejemplo, si deseas crear un administrador de grupo de instancias que usa una plantilla de instancias de la misma implementación, puedes usar una referencia con la sintaxis $(ref.instance-template.selfLink) en vez de escribir el vínculo completo de manera explícita.

Si deseas ver para qué propiedades puedes crear referencias, consulta el método get para la API del recurso. Por ejemplo, para una lista de todas las propiedades de una instancia de VM, consulta la respuesta del método instances.get().

Tú declaras las referencias con una sintaxis similar a la notación de puntos de JSONPath. Usa la siguiente sintaxis para declarar una referencia:

$(ref.RESOURCE_NAME.PATH_TO_PROPERTY)

Para las propiedades que son listas, como las interfaces de red para instancias de Compute Engine, usa la siguiente sintaxis:

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

Ejemplos

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

Variables de entorno específicas de la implementación

Cuando creas una implementación, Deployment Manager crea variables de entorno que contienen información sobre tu implementación, como el nombre del proyecto actual, el nombre de la implementación y demás.

Para ver la lista completa de las variables de entorno, consulta las variables de entorno.

Para usar una variable de entorno:

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

context.env["deployment"] # Python

Ejemplo

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

Propiedades de la plantilla

Una propiedad de una plantilla es una propiedad arbitraria que creas. En lugar codificar un valor específico, puedes declarar la propiedad en la plantilla y determinar su valor en la configuración del nivel superior, en lugar de proveer los datos estáticos de la propiedad y del valor directamente en la plantilla. Para crear una propiedad de una plantilla, usa la siguiente sintaxis:

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

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

Luego, en tu configuración del nivel superior o en una plantilla madre, determina el valor de la propiedad:

imports:
- path: vm_template.jinja

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

Conoce más sobre las Propiedades de las plantillas.

Resultados

En la sección de resultados, puedes definir pares arbitrarios de claves y valores que expongan una determinada información sobre la implementación. Proporcionas la clave y determinas el valor como una string estática, una referencia a una propiedad, una variable de plantilla o una variable de entorno.

  • outputs: declara una lista de resultados a los que los usuarios pueden llamar en las propiedades de sus recursos.
    • name: nombre de la propiedad de resultado.
    • value: valor de la propiedad de resultado.

Ejemplo

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

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

Conoce más acerca de los Resultados.

Metadata

La sección metadata contiene metadatos especiales que puedes aplicar por recurso. Deployment Manager tiene metadatos únicos que activan ciertos atributos. Por ejemplo, la función dependsOn se basa en una entrada de metadatos.

dependsOn

La propiedad dependsOn crea dependencias explícitas entre tus recursos. Por ejemplo, si especificas que un Recurso A depende de un Recurso B, te aseguras de que siempre se cree el Recurso B antes que el A.

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

Ejemplo

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

Conoce más acerca de cómo crear dependencias explícitas.

Sintaxis para esquemas

Un esquema es la manera en la que puedes controlar la forma en la que los usuarios interactúan con tus plantillas. Puedes usar la siguiente sintaxis en tu archivo de esquema. Conoce más acerca de los esquemas.

info

La propiedad info contiene metainformación sobre el esquema. Esta incluye información como el título, el número de versión, una descripción, etcétera.

Como mínimo, proporciona el título y una descripción en esta propiedad.

Ejemplo

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

imports

El campo imports contiene una lista de los archivos correspondientes que se requieren para las plantillas que usan este esquema. Cuando subes una plantilla con un esquema que tiene una lista de imports, Deployment Manager controla que todos los archivos en la propiedad imports se hayan subido con la plantilla.

Ejemplo

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

required

El campo required contiene una lista de los elementos del campo de propiedades que se necesitan en la plantilla que usa el esquema. Cualquier elemento que no se especifique en el campo required es opcional.

Ejemplo

required:
  - name

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

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

properties

El campo properties contiene las reglas del esquema en JSON para este documento. Los usuarios de la plantilla pueden determinar los elementos que se describen en el campo properties. Puedes usar todas las validaciones de los esquemas en JSON para estas propiedades, 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

Como mínimo, es una buena práctica incluir un tipo y una descripción del campo, para que los usuarios sepan cuál es un valor aceptable para la propiedad. Para propiedades opcionales, resulta útil incluir un valor predeterminado.

Lee la documentación sobre la Validación del Esquema en JSON para ver la lista de palabras clave para la validación.

Ejemplo

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

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

¿Qué sigue?