Cuando defines las propiedades para la configuración o las plantillas, puedes usar referencias a las propiedades de otros recursos en lugar de proporcionar valores de manera directa. Por ejemplo, si deseas crear un administrador de grupo de instancias que usa una plantilla de instancias de la misma implementación, puedes usar una referencia con la sintaxis $(ref.instance-template.selfLink)
en vez de escribir el vínculo completo de manera explícita.
Con referencias, puedes:
Acceder a propiedades que no se definen hasta que se crea el recurso. Por ejemplo, cuando defines una máquina virtual en la configuración, aún no conoces su dirección IP. Sin embargo, todavía puedes usar una referencia a la dirección IP. Cuando implementas la configuración, primero se crea la VM y Deployment Manager obtiene la dirección IP externa cuando está disponible.
Haz que la lectura y la solución de problemas de las configuraciones o las plantillas sean más fáciles. Por ejemplo, si necesitas configurar varias reglas de reenvío, también debes especificar la red que se usará. En lugar de proporcionar un vínculo a la red para cada regla de reenvío, puedes crear una referencia a la propiedad
selfLink
de la red con la siguiente sintaxis:$(ref.network-name.selfLink)
Si necesitas solucionar problemas de configuración, la referencia permite saber con mayor facilidad qué red se usa 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 implementas esta configuración, Deployment Manager crea network-a
antes de sandbox-vm
para que la referencia pueda resolverse. Si las referencias no se resuelven de manera correcta, se produce un error en la implementación.
Puedes utilizar referencias en configuraciones y plantillas.
Antes de comenzar
- Si deseas usar los ejemplos de línea de comandos de esta guía, instala la herramienta de línea de comandos de gcloud.
- Si deseas usar los ejemplos de la API en esta guía, configura el acceso a la API.
- Familiarízate con la creación de una configuración.
- Familiarízate con la creación de una plantilla básica.
Establecer referencias en los archivos de configuración
Anuncia las referencias en la configuración con el uso del siguiente formato:
$(ref.RESOURCE_NAME.PROPERTY)
En el siguiente ejemplo se crea una red y, a continuación, se crean dos instancias que utilizan referencias a la red recién creada. En este ejemplo, la referencia es:
$(ref.a-new-network.selfLink)
Cuando implementas esta configuración, la red se crea antes de las dos instancias y la referencia se resuelve en el selfLink
del recurso de red.
Establecer referencias en las plantillas
En los archivos de plantilla, toda la referencia debe ir precedida por $
y, a continuación, debe estar dentro de un conjunto de paréntesis:
$(ref.RESOURCE_NAME.PROPERTY)
Puedes combinar referencias con otras características como propiedades de plantilla y variables de entorno. Para asegurarte de que Deployment Manager analiza la referencia de manera correcta, es importante recordar mantener toda la string de referencia entre paréntesis.
Estos son algunos ejemplos sobre el anuncio de referencias en las plantillas:
Jinja
Referencia que incluye una variable del entorno
network: $(ref.{{ env["deployment"] }}-network.selfLink)
Referencia a un valor en un arreglo
subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
Referencia que incluye una propiedad de una plantilla
network: $(ref.{{ properties["network"] }}.selfLink)
Referencia con el uso de 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 del entorno
'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
Referencia a un valor en un arreglo
'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
Referencia que incluye una propiedad de una plantilla
'network': '$(ref.' + context.properties['network'] + '.selfLink)'
Referencia con el uso de 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'}]
Pasos siguientes
- Obtén vista previa de la configuración antes de que confirmes su implementación.
- Crea una implementación.
- Aprende acerca de las plantillas.