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
- Si quieres usar los ejemplos de línea de comandos de esta guía, instala la herramienta de línea de comandos`gcloud`.
- Si quieres usar los ejemplos de API de esta guía, configura el acceso a la API.
- Consulta cómo crear una configuración básica.
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:
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
Python
Tus plantillas de Python deben cumplir estos requisitos:
La plantilla debe definir un método llamado
GenerateConfig(context)
ogenerate_config(context)
. Si usas ambos nombres de método en la misma plantilla, el métodogenerate_config()
tiene prioridad.El objeto
context
contiene metadatos sobre la implementación y tu entorno, como el nombre de la implementación, el proyecto actual, etc. Más información sobre cómo usar variables de entorno específicas para el despliegueEl método debe devolver un diccionario de Python.
Aparte de eso, tú eres quien debe generar el contenido de la plantilla.
Ejemplo
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
Python
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
yTrue
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
- Para ver ejemplos de plantillas listas para producción, consulta los ejemplos de Cloud Foundation Toolkit en GitHub.
- Usa las propiedades de plantilla para abstraer aún más el contenido.
- Rellena la información sobre tus proyectos e implementaciones con variables de entorno.
- Añade una plantilla de forma permanente a tu proyecto como tipo compuesto.