Agrega una plantilla como un tipo compuesto

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

Un tipo compuesto son una o más plantillas configuradas para trabajar juntas que se han agregado de forma permanente a Deployment Manager. Una vez que agregas un tipo compuesto, lo puedes utilizar del mismo modo que un tipo propiedad de Google. Si deseas obtener más información acerca de los tipos, lee la Descripción general de tipos.

Por ejemplo, puedes crear un conjunto de plantillas que implementen un grupo de instancias administrado con balanceo de cargas de la red. Agregas esas plantillas como tipo compuesto a Deployment Manager y, a continuación, puedes utilizar la plantilla en configuraciones futuras de la misma manera que utilizarías otros tipos.

También te puede interesar Compartir tipos entre proyectos.

Antes de comenzar

Componentes de un tipo compuesto

Para crear un tipo compuesto, debes contar con una plantilla Jinja o Python de nivel superior y, opcionalmente, un conjunto de archivos de asistencia que resuelvan en tipos de base. Los tipos compuestos pueden estar conformados por recursos que también son tipos compuestos. Deployment Manager expandirá recurrentemente estos tipos durante la implementación.

Un tipo compuesto está conformado por los siguientes elementos:

  • Una plantilla de nivel superior: la plantilla Jinja o Python de nivel superior ejecutada durante la expansión cuando se llama al tipo.
  • Un esquema: el archivo de esquema JSON que describe información acerca de la plantilla de nivel superior y todas las importaciones inferiores.
  • Archivos importados: cualquier archivo adicional necesario para la ejecución, como archivos auxiliares, sub-templates y esquemas relevantes de las subplantillas, si corresponde. Sin embargo, esto es opcional. Tu tipo compuesto también puede contener solamente una 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 la API.

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

gcloud

Debes encontrarte en el directorio en el que almacenaste las plantillas de nivel superior y las subplantillas que forman parte de este tipo compuesto para poder ejecutar este comando.

Con gcloud CLI, realiza una solicitud types create y especifica la plantilla de nivel superior y el nombre del tipo deseado para llamar a este tipo compuesto. Ejecuta este comando en el directorio local en el que tienes tus archivos de plantillas.

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

Donde:

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

API

En la API, realiza una solicitud POST que contega los campos composite y name. En el campo composite, define lo que se indica a continuación:

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

El cuerpo de la solicitud de 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]"
}

Si deseas obtener un ejemplo sobre cómo construir estas solicitudes, consulta Crear un tipo compuesto por un grupo de instancias administrado con escala automática. Para obtener más información, consulta la documentación del método insert.

Implementar un tipo compuesto

Los tipos son un recurso por proyecto y son accesibles de acuerdo con los permisos descritos en la documentación de Control de acceso. Es decir:

  • Los editores y lectores de proyectos, y editores de tipos pueden crear y utilizar tipos disponibles para ese proyecto.
  • Los lectores de tipos pueden obtener una lista de tipos y utilizar tipos disponibles para ese proyecto.

Además, puedes agregar otro proyecto como lector de tipo para que pueda acceder a tus tipos. Lee Compartir tipos en todos los proyectos.

Una vez que registraste un tipo compuesto, puedes implementar ese tipo de la misma manera que llamarías tipos administrados por Google:

types: [PROJECT_ID]/composite:[TYPE_NAME]

Por ejemplo:

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

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

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

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 establecer 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 de YAML. Por ejemplo, version: 3 se pasa como un número entero. Si deseas especificarlo como una string, agrega comillas simples escapadas alrededor del valor, version: \'3\'.

  • Los valores booleanos no distinguen entre mayúsculas y minúsculas, por lo que TRUE, true y True se tratan de la misma manera.

  • Debes pasar todas las propiedades obligatorias que definió el tipo compuesto. No puedes proporcionar solo un subconjunto de las propiedades. Si determinadas propiedades tienen valores predeterminados, puedes omitir la propiedad en la línea de comandos.

Para especificar varias propiedades, proporciona pares clave-valor separados por comas. No importa en qué orden 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 una implementación con el tipo compuesto que proporcionaste. Puedes confirmar que la implementación se creó con la consola de Google Cloud o gcloud CLI. Para obtener más información sobre cómo ver una implementación, lee Ve un manifiesto.

Ejemplo: Crear un tipo compuesto

Deployment Manager ofrece diferentes configuraciones de ejemplo del repositorio de GitHub de Deployment Manager que puedes utilizar como tipos compuestos. Para este ejemplo, agregarás un tipo compuesto que implementa un servicio con disponibilidad alta y balanceo de cargas en varias zonas, a una sola región. Para obtener más información, consulta el ejemplo completo.

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

  1. Descarga los archivos de Python y de esquema desde el directorio de GitHub. Omite todos los archivos en un subdirectorio y los archivos de diagramas.
  2. En el directorio local en el que descargaste todos los archivos, ejecuta el siguiente comando para crear un tipo compuesto nuevo 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 crearon de manera correcta:

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

    gcloud beta deployment-manager types describe ha-service-example --provider composite
    
  5. Crea una configuración nueva que implemente tu tipo. Reemplaza [PROJECT_ID] con 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 tuviste que importar plantillas en tu configuración.

  6. Implementa tu nuevo tipo compuesto:

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

    La API muestra 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  []

¡Felicitaciones, creaste tu primer tipo compuesto!

¿Qué sigue?