Referencia de sintaxis

En esta página se describe la sintaxis que usa Deployment Manager. Usa esta guía como referencia para saber qué sintaxis usar en tus configuraciones y plantillas.

Sintaxis de las configuraciones y las plantillas

Sintaxis básica

  • resources: conjunto de recursos que se van a crear.
    • name: nombre de esta instanciación de este recurso.
    • type: el tipo de recurso. Puede ser un tipo 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 admitidos.
    • properties: las propiedades de este recurso. Para obtener una introducción, consulta Propiedades de las plantillas.
    • metadata: configuración adicional de este recurso. Consulta la lista de campos de Metadatos.

Ejemplo

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

Control de acceso

Si quieres definir políticas de gestión de identidades y accesos en tus recursos, utiliza una accessControl sección:

  1. Añade la sección accessControl a la configuración de nivel superior de cada recurso al que quieras aplicar políticas de control de acceso.

  2. Especifica el gcpIamPolicy que quieras para el recurso. Cada política de gestión de identidades y accesos puede contener una lista de vinculaciones. Cada enlace vincula una lista de principales a un rol.

Para obtener información detallada sobre cómo controlar el acceso a los recursos, consulta Configurar el control de acceso en una configuración.

Por ejemplo, en la siguiente sección accessControl se añaden enlaces que conceden estos roles a los usuarios:

Usuario 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 ver más ejemplos, consulta el artículo sobre cómo crear referencias.

Puedes usar referencias a las propiedades de otros recursos en lugar de proporcionar valores directamente. Por ejemplo, si quieres crear un gestor de grupos de instancias que use una plantilla de instancia de la misma implementación, en lugar de escribir explícitamente el enlace completo de la plantilla de instancia, puedes usar una referencia con la sintaxis $(ref.instance-template.selfLink).

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

Las referencias se declaran 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)

En el caso de las propiedades que son listas, como las interfaces de red de las instancias de Compute Engine, utiliza 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 para el despliegue

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, etc.

Para ver una lista completa de las variables de entorno disponibles, consulta el artículo Variables de entorno.

Para usar una variable de entorno, sigue estos pasos:

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

context.env["deployment"] # Python

Ejemplo

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

Propiedades de la plantilla

Una propiedad de plantilla es una propiedad arbitraria que usted crea. En lugar de codificar un valor, puedes declarar una propiedad de plantilla y definir el valor de la propiedad en la configuración de nivel superior, en lugar de proporcionar la propiedad y el valor de forma estática directamente en la plantilla. Para crear una propiedad de plantilla, usa la siguiente sintaxis:

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

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

A continuación, en la configuración de nivel superior o en la plantilla principal, define el valor de la propiedad:

imports:
- path: vm_template.jinja

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

Más información sobre las propiedades de las plantillas

Resultados

En la sección de resultados, puedes definir pares clave-valor arbitrarios que expongan cierta información sobre tu implementación. Usted proporciona la clave y define el valor como una cadena estática, una referencia a una propiedad, una variable de plantilla o una variable de entorno.

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

Ejemplo

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

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

Más información sobre las salidas

Metadatos

La sección metadata contiene metadatos especiales que puede aplicar a cada recurso. Deployment Manager tiene metadatos únicos que activan determinadas funciones. Por ejemplo, la función dependsOn se basa en una entrada de metadatos.

Depende de

La propiedad dependsOn crea dependencias explícitas entre tus recursos. Por ejemplo, si se especifica que el recurso A depende del recurso B, se asegura de que el recurso B se cree siempre antes que el recurso 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

Más información sobre cómo crear dependencias explícitas

Sintaxis de los esquemas

Un esquema es una forma de controlar cómo pueden interactuar los usuarios con tus plantillas. Puede usar la siguiente sintaxis en su archivo de esquema. Consulta más información sobre los esquemas.

información

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

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

Ejemplo

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

importaciones

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

Ejemplo

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

obligatorio

El campo obligatorio contiene una lista de elementos del campo de propiedades que son obligatorios en la plantilla que usa el esquema. Los elementos que no se especifiquen en este campo obligatorio se considerarán opcionales.

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 JSON de este documento. Los usuarios de la plantilla pueden definir los elementos descritos en el campo de propiedades. Puedes usar todas las validaciones de esquemas JSON admitidas para estas propiedades, como las siguientes:

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

Como mínimo, es recomendable incluir un tipo y una descripción del campo para que los usuarios sepan qué valor es aceptable para la propiedad. En el caso de las propiedades opcionales, también es recomendable incluir un valor predeterminado.

Consulta la documentación de validación de esquemas JSON para ver una lista de palabras clave de 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

Siguientes pasos