Quando define as propriedades da sua configuração ou modelos, pode usar referências às propriedades de outros recursos em vez de fornecer diretamente valores. Por exemplo, se quiser criar um grupo de gestores de instâncias que use um modelo de instância da mesma implementação, em vez de escrever explicitamente o link completo para o modelo de instância, pode usar uma referência com a sintaxe $(ref.instance-template.selfLink)
.
Com as referências, pode:
Aceda a propriedades que não estão definidas até o recurso ser criado. Por exemplo, quando define uma máquina virtual na sua configuração, ainda não sabe o respetivo endereço IP. No entanto, ainda pode usar uma referência ao endereço IP. Quando implementa a configuração, a VM é criada primeiro e o Deployment Manager recebe o endereço IP externo quando estiver disponível.
Facilitar a leitura e a resolução de problemas das suas configurações ou modelos. Por exemplo, se precisar de configurar várias regras de encaminhamento, também tem de especificar uma rede a usar. Em vez de fornecer um link para a rede para cada regra de encaminhamento, pode criar uma referência à propriedade
selfLink
da rede através da seguinte sintaxe:$(ref.network-name.selfLink)
Se precisar de resolver problemas da sua configuração, a referência facilita a identificação da rede que está a ser usada na regra de encaminhamento.
Quando cria uma referência a um recurso, também cria uma dependência entre recursos. Por exemplo, considere o seguinte fragmento, em que sandbox-vm
usa uma referência 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:
...
Quando implementa esta configuração, o Deployment Manager cria network-a
antes de sandbox-vm
, para que a referência possa ser resolvida. Se alguma referência não for resolvida com êxito, a implementação falha.
Pode usar referências em configurações e modelos.
Antes de começar
- Se quiser usar os exemplos de linhas de comando neste guia, instale a ferramenta de linhas de comando`gcloud`.
- Se quiser usar os exemplos de API neste guia, configure o acesso à API.
- Familiarize-se com a criação de uma configuração.
- Familiarize-se com a criação de um modelo básico.
Fazer referências em ficheiros de configuração
Declare referências na sua configuração através do seguinte formato:
$(ref.RESOURCE_NAME.PROPERTY)
O exemplo seguinte cria uma rede e, em seguida, cria duas instâncias que usam referências à rede recém-criada. Neste exemplo, a referência é:
$(ref.a-new-network.selfLink)
Quando implementa esta configuração, a rede é criada antes das duas instâncias e a referência é resolvida para o selfLink
do recurso de rede.
Fazer referências em modelos
Nos ficheiros de modelos, toda a referência tem de ser precedida por $
e, em seguida, estar
contida num conjunto de parênteses:
$(ref.RESOURCE_NAME.PROPERTY)
Pode combinar referências com outras funcionalidades, como propriedades de modelos e variáveis de ambiente. Para se certificar de que o Deployment Manager analisa a referência corretamente, é importante lembrar-se de manter toda a string de referência entre parênteses.
Seguem-se alguns exemplos de declaração de referências nos seus modelos:
Jinja
Referência que inclui uma variável de ambiente
network: $(ref.{{ env["deployment"] }}-network.selfLink)
Referência a um valor numa matriz
subnetwork: $(ref.{{ env["deployment"] }}-vm.networkInterfaces[2].subnetwork)
Referência que inclui uma propriedade de modelo
network: $(ref.{{ properties["network"] }}.selfLink)
Faça referência através de um parâmetro Jinja
network: $(ref.{{ NETWORK_NAME }}.selfLink)
Referência em saídas
outputs: - name: UrlToService value: http://$(ref.{{ env["deployment"] }}-network.networkInterfaces[0].accessConfigs[0].natIp):8080/
Python
Referência que inclui uma variável de ambiente
'network': '$(ref.' + context.env['deployment'] + '-network.selfLink)'
Referência a um valor numa matriz
'subnetwork': '$(ref.' + context.env['deployment'] + '-vm.networkInterfaces[2].subnetwork)'
Referência que inclui uma propriedade de modelo
'network': '$(ref.' + context.properties['network'] + '.selfLink)'
Referência através de um parâmetro Python
'value': '$(ref.' + base_name + '.networkInterfaces[0].networkIP)'
Referência em saídas
outputs = [{'name': 'UrlToService', 'value': '$(ref.' + context.env['deployment'] + '-network.networkInterfaces[0].accessConfigs[0].natIP):8080'}]
O que se segue?
- Pré-visualize a sua configuração antes de se comprometer a implementá-la.
- Crie uma implementação.
- Saiba mais acerca dos modelos.