Definir propiedades de la plantilla

Una de las ventajas de usar plantillas es la posibilidad de crear y definir propiedades de plantillas personalizadas. Las propiedades de la plantilla son variables arbitrarias que defines en los archivos de plantilla. Cualquier archivo de configuración o archivo de plantilla que utilice la plantilla en cuestión puede proporcionar un valor para la propiedad de la plantilla sin cambiar la plantilla directamente. Esto te permite abstraer la propiedad a fin de que puedas cambiar el valor de la propiedad para cada configuración única sin actualizar la plantilla subyacente.

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

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

En una configuración que usa esta plantilla, puedes establecer 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á pasar el valor de zone a la plantilla subyacente.

Antes de comenzar

Crea una propiedad de la plantilla

Para crear una propiedad de la plantilla, haz lo siguiente:

Jinja

En Jinja, define una propiedad con el uso de 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-9
    networkInterfaces:
    - network: global/networks/default

Python

En Python, define una propiedad con el uso de 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-9'
            }
        }],
        'networkInterfaces': [{
            'network': 'global/networks/default'
        }]
    }

})

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

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

En la configuración de nivel superior, puedes establecer los valores de las propiedades de la plantilla con el uso de la sintaxis:

imports:
- path: vm_template.jinja

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

Debes establecer valores para todas las propiedades de la plantilla en la plantilla. Por ejemplo, si una plantilla tiene propiedades de plantilla zone, image, network, debes definir valores para todas ellas en la configuración de nivel superior.

Si determinadas propiedades de la plantilla tienen valores predeterminados, considera utilizar esquemas para establecer estos valores predeterminados. Una propiedad de la plantilla con un valor predeterminado puede omitirse en la configuración de nivel superior si el valor predeterminado es adecuado para la implementación.

Establece valores para las propiedades de la 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 establecer estos valores directamente en la herramienta de línea de comandos de gcloud. Puedes omitir la creación del archivo YAML de nivel superior; Deployment Manager generará automáticamente una configuración de nivel superior para la implementación según la información en la solicitud.

Por ejemplo, supón que tienes la siguiente plantilla que tiene una propiedad de la plantilla denominada 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-9
    networkInterfaces:
    - network: global/networks/default

Con la herramienta de línea de comandos de gcloud, puedes pasar este archivo de plantilla directamente y proporcionar los valores para las propiedades de plantilla en la línea de comandos. Por ejemplo, la siguiente solicitud pasa 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 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ó la plantilla. 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 \
    --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 una implementación con la plantilla que proporcionaste. Puedes confirmar que la implementación se creó con Google Cloud Platform Console o la herramienta de gcloud. Para obtener más información sobre cómo ver una implementación, lee Ver un manifiesto.

Próximos pasos