Definir propiedades de plantillas

Una de las ventajas de usar plantillas es la posibilidad de crear y definir propiedades de plantilla personalizadas. Las propiedades de plantilla son variables arbitrarias que se definen en los archivos de plantilla. Cualquier archivo de configuración o plantilla que use la plantilla en cuestión puede proporcionar un valor para la propiedad de la plantilla sin cambiarla directamente. De esta forma, puede abstraer la propiedad para cambiar su valor en cada configuración única sin tener que actualizar la plantilla subyacente.

Por ejemplo, la siguiente línea especifica una propiedad de plantilla en la URL del tipo de máquina:

machineType: zones/{{ properties["zone"] }}/machineTypes/n1-standard-1

En una configuración que use esta plantilla, puedes definir el valor de zone en la sección properties de la plantilla:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Deployment Manager sabrá que debe transferir el valor de zone a la plantilla subyacente.

Antes de empezar

Crear una propiedad de plantilla

Para crear una propiedad de plantilla, siga estos pasos:

Jinja

En Jinja, define una propiedad con la siguiente sintaxis:

{{ properties["PROJECT_NAME"] }}

Por ejemplo:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/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

En Python, define una propiedad con la siguiente sintaxis:

  context.properties["PROPERTY_NAME"]

Por ejemplo:

resources.append({
    'name': 'vm-' + context.env['deployment'],
    'type': 'compute.v1.instance',
    'properties': {
        'zone': 'us-central1-a',
        'machineType': ''.join(['zones/', context.properties['zone'],
                                '/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.

Definir valores para las propiedades de plantilla en la configuración de nivel superior

En la configuración de nivel superior, puede definir valores para las propiedades de la plantilla con la siguiente sintaxis:

imports:
- path: vm_template.jinja

resources:
- name: my-vm
  type: vm_template.jinja
  properties:
    zone: us-central1-a

Debe asignar valores a todas las propiedades de la plantilla. Por ejemplo, si una plantilla tiene las propiedades zone, image y network, debes definir valores para todas esas propiedades en la configuración de nivel superior.

Si algunas propiedades de la plantilla tienen valores predeterminados, puedes usar esquemas para definir estos valores. Una propiedad de plantilla con un valor predeterminado se puede omitir de la configuración de nivel superior si el valor predeterminado es adecuado para la implementación.

Definir valores para las propiedades de plantilla en la línea de comandos

En lugar de proporcionar valores para las propiedades de la plantilla en el archivo principal que importa la plantilla, Deployment Manager ofrece la posibilidad de definir estos valores directamente en la CLI de Google Cloud. Puedes omitir la creación del archivo YAML de nivel superior. Deployment Manager generará automáticamente una configuración de nivel superior para tu implementación en función de la información de tu solicitud.

Por ejemplo, supongamos que tienes la siguiente plantilla, que tiene una propiedad de plantilla llamada zone:

- name: vm-{{ env["deployment"] }}
  type: compute.v1.instance
  properties:
    zone: us-central1-a
    machineType: zones/{{ properties["zone"] }}/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

Con Google Cloud CLI, puedes introducir este archivo de plantilla directamente y proporcionar los valores de las propiedades de la plantilla en la línea de comandos. Por ejemplo, la siguiente solicitud se envía en la plantilla y especifica la propiedad zone directamente en la línea de comandos:

gcloud deployment-manager deployments create a-single-vm --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