Cuando defina las propiedades de su configuración o plantillas, puede usar referencias a las propiedades de otros recursos en lugar de proporcionar valores directamente. Por ejemplo, si quieres crear un gestor de grupos de instancias que use una plantilla de instancia de la misma implementación, en lugar de escribir explícitamente el enlace completo de la plantilla de instancia, puedes usar una referencia con la sintaxis $(ref.instance-template.selfLink)
.
Con las referencias, puedes hacer lo siguiente:
Acceder a propiedades que no se definen hasta que se crea el recurso. Por ejemplo, cuando defines una máquina virtual en tu configuración, aún no conoces su dirección IP. Sin embargo, puedes seguir usando una referencia a la dirección IP. Cuando despliega la configuración, primero se crea la VM y Deployment Manager obtiene la dirección IP externa cuando está disponible.
Facilita la lectura y la resolución de problemas de tus configuraciones o plantillas. Por ejemplo, si necesitas configurar varias reglas de reenvío, también debes especificar una red que se vaya a usar. En lugar de proporcionar un enlace a la red para cada regla de reenvío, puede crear una referencia a la propiedad
selfLink
de la red con la siguiente sintaxis:$(ref.network-name.selfLink)
Si necesitas solucionar problemas con tu configuración, la referencia te ayudará a saber qué red se está usando en la regla de reenvío.
Cuando creas una referencia a un recurso, también creas una dependencia entre recursos. Por ejemplo, considera el siguiente fragmento, en el que sandbox-vm
usa una referencia a network-a
:
resources:
- name: sandbox-vm
type: compute.v1.instance
properties:
network: $(ref.network-a.selfLink)
...
...
- name: network-a
type: compute.v1.network
properties:
...
Cuando despliegues esta configuración, Deployment Manager creará network-a
antes de sandbox-vm
para que se pueda resolver la referencia. Si alguna referencia no se resuelve correctamente, la implementación fallará.
Puedes usar referencias tanto en configuraciones como en plantillas.
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.
- Familiarízate con el proceso para crear una configuración.
- Familiarízate con el proceso para crear una plantilla básica.
Crear referencias en archivos de configuración
Declara las referencias en tu configuración con el siguiente formato:
$(ref.RESOURCE_NAME.PROPERTY)
En el siguiente ejemplo se crea una red y, a continuación, se crean dos instancias que usan referencias a la red recién creada. En este ejemplo, la referencia es:
$(ref.a-new-network.selfLink)
Cuando despliegues esta configuración, la red se creará antes que las dos instancias y la referencia se resolverá en el selfLink
del recurso de red.
Hacer referencias en plantillas
En los archivos de plantilla, toda la referencia debe ir precedida de un $
y, a continuación, incluirse entre paréntesis:
$(ref.RESOURCE_NAME.PROPERTY)
Puedes combinar referencias con otras funciones, como propiedades de plantilla y variables de entorno. Para asegurarse de que Deployment Manager analiza la referencia correctamente, es importante recordar que debe mantener toda la cadena de referencia entre paréntesis.
Estos son algunos ejemplos de cómo declarar referencias en tus plantillas:
Jinja
Referencia que incluye una variable de entorno
network: $(ref.{{ env["deployment"] }}-network.selfLink)
Referencia a un valor de una matriz
subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
Referencia que incluye una propiedad de plantilla
network: $(ref.{{ properties["network"] }}.selfLink)
Referencia mediante un parámetro de Jinja
network: $(ref.{{ NETWORK_NAME }}.selfLink)
Referencia en salidas
outputs: - name: UrlToService value: http://$(ref.{{ env["deployment"] }}-network.networkInterfaces[0].accessConfigs[0].natIp):8080/
Python
Referencia que incluye una variable de entorno
'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
Referencia a un valor de una matriz
'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
Referencia que incluye una propiedad de plantilla
'network': '$(ref.' + context.properties['network'] + '.selfLink)'
Referencia mediante un parámetro de Python
'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
Referencia en salidas
outputs = [{'name': 'UrlToService', 'value': '$(ref.' + context.env['deployment'] + '-network.networkInterfaces[0].accessConfigs[0].natIP):8080'}]
Siguientes pasos
- Obtén una vista previa de la configuración antes de confirmar la implementación.
- Crea una implementación.
- Consulta más información sobre las plantillas.