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 la creación de instancias del recurso.
    • type: el tipo de recurso. Este puede ser un tipo de base como compute.v1.instance o una plantilla importada. Encuentra una lista completa de los recursos que se aceptan en la documentación de los Tipos de recursos que se aceptan.
    • properties: las propiedades del recurso. Para ver una introducción, lee Propiedades de las plantillas.
    • metadata: configuración adicional para el 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 quieres utilizar políticas de IAM en tus recursos, usa una sección accessControl:

  1. Agrega la sección accessControl a la configuración del nivel superior para cada recurso al que quieras aplicar políticas de control de acceso.

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

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

Por ejemplo, la siguiente sección accessControl agrega vínculos que les dan estas funciones a los usuarios:

Usuario Función
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

Las referencias son una forma de hacer referencia al valor de otra propiedad en tu configuración. Especificar una referencia también crea una dependencia explícita entre los dos recursos, y el recurso que se referencia siempre se creará antes de que se cree el otro. Por ejemplo, si el recurso A tiene una referencia al recurso B, el recurso B siempre se creará antes que el recurso A.

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

Para declarar una referencia, usa la siguiente sintaxis para determinar el valor de una propiedad de una referencia.

$(ref.[RESOURCE_NAME].[PATH_TO_PROPERTY])

Ejemplos

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

Aprende más sobre Crear referencias.

Variables de entorno

Las variables de entorno son variables predefinidas que propagan automáticamente ciertos tipos de información que se infieren de tu implementación. Utiliza variables de entorno en tu plantilla para propagar información conocida que uses repetidas veces. Como los valores de las variables de entorno son únicos para cada implementación, también puedes utilizar estas variables para crear nombres únicos cuando implementas las mismas plantillas varias veces.

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: estipula una lista de resultados que los usuarios pueden llamar en las propiedades de sus recursos.
    • name: nombre de la propiedad del recurso.
    • value: valor de la propiedad del recurso.

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.

Metadatos

La sección metadata contiene metadatos especiales que puedes aplicar a cada recurso. Deployment Manager tiene metadatos únicos que activan ciertos atributos. Por ejemplo, el atributo dependsOn se basa en la 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 utilizar la siguiente sintaxis en tu archivo de esquema. Conoce más acerca de los Esquemas.

info

La propiedad info contiene información meta 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 necesitan para las plantillas que utilizan 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 Slaves

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, booleano, número 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 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 Slaves
    minimum: 1

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Deployment Manager