Crear una plantilla básica

Un archivo de configuración básico puede ser suficiente para cargas de trabajo sencillas, pero, en el caso de arquitecturas más complejas o configuraciones que quieras reutilizar, puedes dividir la configuración en plantillas.

Una plantilla es un archivo independiente que se importa y se usa como tipo en una configuración. Puedes usar todas las plantillas que quieras en una configuración.

Las plantillas te permiten separar la configuración en diferentes partes que puedes usar y reutilizar en distintas implementaciones. Las plantillas pueden ser tan generales o específicas como necesites. Con las plantillas, también puedes aprovechar funciones como las propiedades de las plantillas, las variables de entorno, los módulos y otras funciones de las plantillas para crear archivos de configuración y de plantillas dinámicos.

Para ver ejemplos de plantillas que puedes usar en tus propias implementaciones, consulta el repositorio de GitHub de Deployment Manager.

Antes de empezar

Sintaxis de las plantillas

Las plantillas se pueden escribir en Jinja 2.10.x o Python 3.x. Jinja se ajusta más a la sintaxis de YAML, por lo que puede ser más fácil escribir plantillas en Jinja si estás más familiarizado con YAML.

También puedes escribir archivos de plantilla en Python y aprovechar este lenguaje para generar de forma programática partes de tus plantillas. Por ejemplo, puedes usar bibliotecas de Python para dar formato a las definiciones de plantillas. Si conoces Python, este formato puede ser más adecuado para ti.

Deployment Manager acepta plantillas Jinja y Python. Puedes importar plantillas en ambos idiomas con la misma configuración.

Crear una plantilla básica

Una plantilla es un archivo que creas y que está escrito en Jinja o Python. Por ejemplo, supongamos que tiene el siguiente archivo de configuración:

# Copyright 2016 Google Inc. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

resources:
- name: vm-created-by-deployment-manager
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Esta configuración es válida, pero puedes simplificarla aún más dividiendo las diferentes partes en archivos de plantilla individuales que puedes reutilizar. Para crear una plantilla basada en la configuración anterior, extrae la sección del recurso en cuestión y crea un archivo Jinja o Python.

En los siguientes fragmentos se muestran las secciones de las plantillas que pueden simplificar tu implementación. Para ver las plantillas completas, haz clic en Ver en GitHub.

Jinja

- name: vm-template
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/n1-standard-1
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-11
    networkInterfaces:
    - network: global/networks/default

Python

Tus plantillas de Python deben cumplir estos requisitos:

Aparte de eso, tú eres quien debe generar el contenido de la plantilla.

Ejemplo

resources.append({
    'name': 'vm-template',
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': 'zones/us-central1-a/machineTypes/n1-standard-1',
        'disks': [{
            'deviceName': 'boot',
            'type': 'PERSISTENT',
            'boot': True,
            'autoDelete': True,
            'initializeParams': {
                'sourceImage':
                    'projects/debian-cloud/global/images/family/debian-11'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }
})

Para ver el ejemplo completo de Python, consulta el repositorio de GitHub de Deployment Manager.

Importar la plantilla

Después de crear una plantilla, impórtala en el archivo de configuración para usarla. Para importar una plantilla, añade una sección imports a tu configuración, seguida de la ruta relativa o absoluta desde el directorio actual. Por ejemplo, puedes importar tu plantilla de máquina virtual del paso anterior añadiendo la siguiente línea en la parte superior de tu configuración:

imports:
  - path: path/to/my_vm_template.jinja

Si tienes una ruta de archivo larga, puedes proporcionar una propiedad name opcional como alias del archivo. Puedes usar este nombre para hacer referencia a la plantilla más adelante. Si no proporcionas el nombre, se puede hacer referencia a la plantilla mediante el path.

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja

Puedes combinar importaciones de varias plantillas, independientemente de si son de Jinja o de Python:

imports:
  - path: path/to/my_vm_template.jinja
    name: my_renamed_template.jinja
  - path: special_vm.py

Si tu plantilla usa otras plantillas como dependencias, importa también las plantillas dependientes en tu configuración:

imports:
  - path: path/to/my_vm_template.jinja
  - path: special_vm.py
  - path: base_vm.jinja

También puedes importar archivos de texto para insertar el contenido. Por ejemplo, si crea un archivo llamado resource_type.txt con la siguiente cadena:

compute.v1.instance

Importa el archivo en tu configuración y proporciona el contenido insertado de la siguiente manera:

imports:
- path: resource_type.txt

resources:
- name: my-vm
  type: {{ imports["resource_type.txt"] }} # Resolves to "compute.v1.instance"
  properties:
    zone: us-central1-a
    machineType: zones/us-central1-a/machineTypes/f1-micro
    disks:
    - deviceName: boot
      type: PERSISTENT
      boot: true
      autoDelete: true
      initializeParams:
        sourceImage: projects/debian-cloud/global/images/family/debian-9
    networkInterfaces:
    - network: global/networks/default
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

Desplegar plantillas

Una vez que hayas importado una plantilla, úsala como tipo en tu configuración:

Jinja

imports:
- path: vm-template.jinja

resources:
- name: my-vm
  type: vm-template.jinja

Python

imports:
- path: vm-template.py

resources:
- name: my-vm
  type: vm-template.py

Si no has asignado un nombre a la plantilla, llama a la plantilla mediante la ruta de la plantilla:

imports:
- path: path/to/my_vm_template.jinja

resources:
- name: my-first-virtual-machine
  type: path/to/my_vm_template.jinja

Desplegar plantillas directamente con la herramienta de línea de comandos

En lugar de crear un archivo de configuración de nivel superior, Deployment Manager ofrece la posibilidad de desplegar una plantilla directamente en la CLI de Google Cloud.

Por ejemplo, la siguiente solicitud implementa una plantilla llamada vm-template.jinja:

gcloud deployment-manager deployments create a-single-vm --template vm-template.jinja

Si tu plantilla tiene propiedades de plantilla, también puedes definirlas en la línea de comandos mediante la marca --properties:

gcloud deployment-manager deployments create my-igm \
    --template vm-template.jinja \
    --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 en la plantilla. 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 
--template vm-template.jinja
--properties zone:us-central1-a,machineType:n1-standard-1,image:debian-9

Después de ejecutar este comando, Deployment Manager crea un despliegue con la plantilla 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.

Siguientes pasos