Añadir una plantilla como un tipo compuesto

En esta página se describe cómo crear un tipo compuesto con Deployment Manager. Después de crear un tipo compuesto, puedes llamar a ese tipo en tu configuración y crear implementaciones.

Un tipo compuesto es una o varias plantillas configuradas para funcionar conjuntamente que se han añadido permanentemente a Deployment Manager. Una vez que lo hayas añadido, podrás usar un tipo compuesto como si fuera un tipo propiedad de Google. Para obtener más información sobre los tipos, consulta el artículo Tipos: descripción general.

Por ejemplo, puedes crear un conjunto de plantillas que desplieguen un grupo de instancias gestionado con balanceo de carga de red. Puede añadir esas plantillas como un tipo compuesto a Deployment Manager y, después, usar la plantilla en configuraciones futuras como lo haría con otros tipos.

También podría interesarte Compartir tipos entre proyectos.

Antes de empezar

Componentes de un tipo compuesto

Para crear un tipo compuesto, debes tener una plantilla de Jinja o Python de nivel superior y, opcionalmente, un conjunto de archivos auxiliares que se resuelvan en tipos básicos. Los tipos compuestos pueden estar formados por recursos que, a su vez, sean otros tipos compuestos. Deployment Manager expandirá estos tipos de forma recursiva durante la implementación.

Un tipo compuesto consta de los siguientes elementos:

  • Plantilla de nivel superior: la plantilla de Jinja o Python de nivel superior que se ejecuta durante la expansión cuando se llama al tipo.
  • Un esquema: el archivo JSON Schema que describe información sobre la plantilla de nivel superior y cualquier subimportación definida.
  • Archivos importados: cualquier archivo adicional necesario para la ejecución, como archivos auxiliares, subplantillas y esquemas relevantes para las subplantillas, si procede. Sin embargo, es opcional. Tu tipo compuesto también puede contener una sola plantilla de nivel superior.

Crear un tipo compuesto

Para crear un tipo compuesto, registra la plantilla de nivel superior de una configuración y sus importaciones y esquema asociados. Crea un tipo compuesto con gcloud o con la API.

También te puede interesar el ejemplo que describe cómo crear y llamar a un tipo compuesto.

gcloud

Para ejecutar este comando, debes estar en el directorio en el que hayas almacenado la plantilla de nivel superior y las subplantillas que forman parte de este tipo compuesto.

Con la CLI de gcloud, haz una solicitud types create y especifica la plantilla de nivel superior y el nombre de tipo que quieras para llamar a este tipo compuesto. Ejecuta este comando en el directorio local donde tengas los archivos de plantilla.

$ gcloud beta deployment-manager types create [TYPE_NAME] --template=[TOP_LEVEL_TEMPLATE]

donde:

  • [TYPE_NAME] es el nombre que quieres asignar a este tipo
  • [TOP_LEVEL_TEMPLATE] es la ruta relativa a la plantilla de nivel superior que describe este tipo.

API

En la API, haz una solicitud POST que contenga los campos composite y name. En el campo composite, define lo siguiente:

  • El esquema de nivel superior
  • El contenido de las plantillas importadas
  • El contenido de tu plantilla de nivel superior

El cuerpo de la solicitud a la API tiene la siguiente estructura:

POST https://www.googleapis.com/deploymentmanager/v2beta/projects/[PROJECT_ID]/global/compositeTypes

{
 "composite": {
  "files": {
   "schema": "[CONTENTS_OF_SCHEMA]",
   "imports": [
    {
     "name": "[TEMPLATE_FILE]",
     "content": "[CONTENTS_OF_TEMPLATE_FILE]"
    },
    {
     "name": "[ANOTHER_TEMPLATE_IF_NECESSARY]",
     "content": "[CONTENTS_OF_TEMPLATES]"
    }
   ],
   "template": "[TOP-LEVEL_TEMPLATE_CONTENTS]",
   "templateFileType": "[FILE_TYPE]"
  }
 },
 "name": "[TYPE_NAME]"
}

Para ver un ejemplo de cómo crear estas solicitudes, consulta Crear un tipo compuesto de grupo de instancias gestionado con escalado automático. Para obtener más información, consulta la documentación del método insert.

Desplegar un tipo compuesto

Los tipos son un recurso por proyecto y se puede acceder a ellos según los permisos descritos en la documentación de control de acceso. Es decir:

  • Los editores y lectores de proyectos, así como los editores de tipos, pueden crear y usar los tipos disponibles en ese proyecto.
  • Los usuarios con permiso de lectura de tipos pueden obtener una lista de tipos y usar los tipos disponibles para ese proyecto.

También puedes añadir otro proyecto como visor de tipos para que pueda acceder a tus tipos. Consulta Compartir tipos entre proyectos.

Una vez que hayas registrado un tipo compuesto, podrás desplegarlo de la misma forma que llamarías a los tipos gestionados por Google:

types: [PROJECT_ID]/composite:[TYPE_NAME]

Por ejemplo:

resources:
- name: my example-resource
  type: example-project/composite:autoscaled-igm
  properties:
  ...

Desplegar un tipo compuesto directamente con la herramienta de línea de comandos

Deployment Manager ofrece la posibilidad de desplegar un tipo compuesto directamente con la CLI de Google Cloud. En lugar de crear un archivo de configuración de nivel superior, la CLI de gcloud generará automáticamente uno.

Por ejemplo, el siguiente comando implementa un tipo compuesto llamado autoscaled-igm:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm

También puedes definir las propiedades de tu tipo compuesto con la marca --properties:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a

Ten en cuenta lo siguiente:

  • Todos los valores se analizan como valores YAML. Por ejemplo, version: 3 se pasa como un número entero. Si quieres especificarlo como una cadena, incluye comillas simples escapadas alrededor del valor, version: \'3\'.

  • En los valores booleanos no se distingue entre mayúsculas y minúsculas, por lo que TRUE, true y True se tratan de la misma forma.

  • Debes incluir todas las propiedades obligatorias definidas por el tipo compuesto. No puedes proporcionar solo un subconjunto de las propiedades. Si determinadas propiedades tienen valores predeterminados, puede omitir la propiedad de la línea de comandos.

Para especificar varias propiedades, proporcione pares clave:valor separados por comas. No importa el orden en el que especifiques los pares. Por ejemplo:

gcloud deployment-manager deployments create my-igm \
    --composite-type example-project/composite:autoscaled-igm \
    --properties zone:us-central1-a,machineType:n1-standard-1,image:debian-8

Después de ejecutar este comando, Deployment Manager crea un despliegue con el tipo compuesto que has proporcionado. Puedes confirmar que se ha creado el despliegue mediante la Google Cloud consola o la CLI de gcloud. Para obtener información sobre cómo ver una implementación, consulta el artículo Ver un manifiesto.

Ejemplo: Crear un tipo compuesto

Deployment Manager ofrece muchas configuraciones de ejemplo del repositorio de GitHub de Deployment Manager que puedes usar como tipos compuestos. En este ejemplo, añadirás un tipo compuesto que despliega un servicio de alta disponibilidad con balanceo de carga en varias zonas de una misma región. Para obtener más información, consulta el ejemplo completo.

En este ejemplo, el archivo de configuración de nivel superior es ha-service.py. Todas las subplantillas se importan en los archivos de esquema.

  1. Descarga los archivos de Python y de esquema del directorio de GitHub. Omitir los archivos de un subdirectorio y los archivos de diagrama.
  2. En el directorio local donde has descargado todos los archivos, ejecuta el siguiente comando para crear un tipo compuesto llamado ha-service-example:

    gcloud beta deployment-manager types create ha-service-example --template=ha-service.py
    
  3. Obtén una lista de tipos para confirmar que se ha creado correctamente:

    gcloud beta deployment-manager types list --provider composite
    
  4. Describe el nuevo tipo:

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. Crea una configuración que implemente tu tipo. Sustituye [PROJECT_ID] por el ID de tu proyecto:

    resources:
    - name: ha-service-example
      type: [PROJECT_ID]/composite:ha-service-example
      properties:
        dockerImage: gcr.io/deployment-manager-examples/nodejsservicestatic
        zones:
        - us-central1-b
        - us-central1-a
    

    Guarda la configuración como example-config.yaml. Ten en cuenta que no has tenido que importar ninguna plantilla en tu configuración.

  6. Despliega el nuevo tipo compuesto:

    gcloud deployment-manager deployments create ha-service-deployment --config example-config.yaml
    

    La API devuelve una lista de recursos creados a partir del tipo:

    Waiting for create [operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5]...done.
    Create operation operation-1488254932422-5498f5a950d71-2bd3b8c8-b13ddab5 completed successfully.
    NAME                                            TYPE                             STATE      ERRORS  INTENT
    ha-service-deployment-lb-fr                      compute.v1.forwardingRule        COMPLETED  []
    ha-service-deployment-lb-hc                      compute.v1.httpHealthCheck       COMPLETED  []
    ha-service-deployment-lb-tp                      compute.v1.targetPool            COMPLETED  []
    ha-service-deployment-service-us-central1-a-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-a-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-a-it   compute.v1.instanceTemplate      COMPLETED  []
    ha-service-deployment-service-us-central1-b-as   compute.v1.autoscaler            COMPLETED  []
    ha-service-deployment-service-us-central1-b-igm  compute.v1.instanceGroupManager  COMPLETED  []
    ha-service-deployment-service-us-central1-b-it   compute.v1.instanceTemplate      COMPLETED  []

¡Enhorabuena! Has creado tu primer tipo compuesto.

Siguientes pasos