Esta página explica como criar um recurso Waiter. Para saber mais sobre os waiters, leia o artigo Noções básicas do Runtime Configurator.
Um recurso Waiter aguarda uma determinada condição de êxito ou falha antes de devolver uma resposta. Tanto para o êxito como para a falha, define uma condição de cardinalidade, em que o waiter aguarda a criação de um determinado número de variáveis num prefixo de caminho específico. Depois de criadas as variáveis, o waiter é devolvido. Em seguida, o código da aplicação pode responder ao sucesso ou à falha. Se o estado atual das suas variáveis já corresponder às condições de conclusão de êxito ou falha, o waiter devolve êxito ou falha imediatamente.
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.
- Leia o artigo Fundamentos do Runtime Configurator.
- Leia o artigo Criar e eliminar recursos do RuntimeConfig.
- Leia o artigo Definir e obter dados.
Criar um empregado de mesa
Para criar um waiter:
Determine a condição de sucesso e, opcionalmente, de falha para o waiter.
Por exemplo, o seguinte código de exemplo define as condições de êxito e falha, em que o waiter é devolvido com êxito se o número de caminhos em
/status/success
for três e falha se o caminho em/status/failure
for dois:{ 'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]', 'timeout': '360s', 'success': { 'cardinality': { 'path': '/status/success', 'number': 3 } }, 'failure': { 'cardinality': { 'path': '/status/failure', 'number': 2 } } }
Práticas recomendadas para definir um waiter:
- Só é permitida uma condição de êxito e uma condição de falha por waiter.
- Deve manter um waiter por caminho.
- As condições de falha são sempre avaliadas antes das condições de êxito.
- Não sobreponha prefixos de caminhos entre condições.
Crie o waiter.
Deployment Manager
Para criar um waiter no Deployment Manager, especifique o tipo de waiter:
runtimeconfig.v1beta1.waiter
Nas propriedades do waiter, indique o
name
, olocation
, otimeout
e as condições de conclusão do waiter:- name: [NAME] type: runtimeconfig.v1beta1.waiter properties: parent: $(ref.[CONFIG_NAME].name) waiter: [WAITER_NAME] timeout: [TIMEOUT_SECS] success: cardinality: path: [SUCCESS_PATH_PREFIX] number: [SUCCESS_NUMBER]
where:
[NAME]
é o nome do recurso.[CONFIG_NAME]
é o recurso de configuração para este pedido.[WAITER_NAME]
é o nome deste empregado de mesa.[TIMEOUT_SECS]
é o número de segundos a aguardar antes de o waiter expirar. Por exemplo, para 300 segundos, use300s
.[SUCCESS_PATH_PREFIX]
é o prefixo do caminho a observar para uma condição de sucesso.[SUCCESS_NUMBER]
é o número de variáveis que existem neste caminho a considerar bem-sucedidas.
gcloud
Com a CLI do Google Cloud:
gcloud beta runtime-config configs waiters create [WAITER_NAME] \ --config-name [CONFIG_NAME] \ --success-cardinality-path [SUCCESS_PATH_PREFIX] \ --success-cardinality-number [SUCCESS_NUMBER] --timeout [TIMEOUT_SECS]
where:
[WAITER_NAME]
é o nome deste empregado de mesa.[CONFIG_NAME]
é o recurso RuntimeConfig para este pedido.[SUCCESS_PATH_PREFIX]
é o prefixo do caminho a observar para uma condição de sucesso.[SUCCESS_NUMBER]
é o número de variáveis que existem neste caminho a considerar bem-sucedidas.[TIMEOUT_SECS]
o número de segundos a aguardar antes de o tempo limite de espera expirar.A CLI gcloud devolve uma resposta como:
Created [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/example-waiter]].
Depois de criar o waiter, a ferramenta sonda o recurso Operations relacionado até que o waiter retorne com uma das respostas aplicáveis.
Para uma referência completa deste comando
gcloud
, leia a documentação de referênciaruntime-config configs waiters
.
API
Na API, faça um pedido
POST
para o seguinte URI:https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters
where:
[PROJECT_ID]
é o ID do projeto para este pedido.[CONFIG_NAME]
é o nome da configuração para este pedido.
O payload do pedido tem de conter o nome do waiter, a condição de êxito e a duração do limite de tempo:
{ 'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]', 'timeout': '[TIMEOUT_SEC]', 'success': { 'cardinality': { 'path': '[SUCCESS_PATH_PREFIX]', 'number': '[SUCCESS_NUMBER]' } } }
where:
[PROJECT_ID]
é o ID do projeto para este pedido.[CONFIG_NAME]
é o nome da configuração para este pedido.[WAITER_NAME]
é o nome do waiter a criar.[TIMEOUT_SECS]
o número de segundos a aguardar antes de o tempo limite de espera expirar.[SUCCESS_PATH_PREFIX]
é o prefixo do caminho a observar para uma condição de sucesso.[SUCCESS_NUMBER]
é o número de variáveis que existem neste caminho a considerar bem-sucedidas.
Se for bem-sucedido, o pedido devolve o nome do objeto operations que consulta para saber se está concluído:
{ "name": "projects/[PROJECT_ID]/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]" }
Em seguida, sondar o waiter para verificar periodicamente quando o waiter regressa.
Para saber mais sobre o método, leia a
waiters().create
documentação.
Pedir um empregado de mesa
Depois de criar um waiter, sondar o recurso Operations relacionado para verificar se o waiter cumpriu uma das condições de conclusão. Se o processo de espera tiver cumprido uma condição final ou tiver excedido o tempo limite, a operação é devolvida como done
e devolve uma resposta com base nos resultados do processo de espera.
Use gcloud
ou a API para chamar um empregado de mesa.
gcloud
Com a CLI do Google Cloud, quando faz um pedido para criar um waiter, a ferramenta faz automaticamente a sondagem e aguarda que o waiter seja devolvido. A ferramenta imprime uma resposta semelhante à seguinte enquanto sondar o waiter:
Waiting for waiter [WAITER_NAME] to finish...
Se não quiser que a ferramenta consulte o waiter após a criação, forneça a flag --async
com o seu pedido de criação.
API
Na API REST, faça um pedido GET
ao seguinte URI para obter o estado da operação de espera:
https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]
where:
[PROJECT_ID]
é o ID do projeto para este pedido.[CONFIG_NAME]
é o nome da configuração para este pedido.[WAITER_NAME]
é o nome do waiter a sondar.
Se a operação ainda estiver em curso, a API devolve uma resposta semelhante à seguinte, sem um estado:
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
}
Se a operação estiver concluída, é marcada como done
e devolve
uma das respostas descritas na secção Respostas do Waiter.
Para saber mais sobre o método, leia a
waiters().create
documentação.
Respostas do empregado de mesa
Condição de conclusão bem-sucedida
Se o waiter tiver cumprido uma condição de conclusão bem-sucedida, a operação devolve o recurso Waiter:
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.runtimeconfig.v1beta1.Waiter",
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]",
"timeout": "360.000s",
"failure": {
"cardinality": {
"path": "[SUCCESS_PATH_PREFIX]",
"number": "[SUCCESS_NUMBER]"
}
},
"success": {
"cardinality": {
"path": "[FAILURE_PATH_PREFIX]",
"number": [FAILURE_NUMBER]
}
},
"createTime": "2016-04-12T18:02:13.316695490Z",
"done": true
}
}
Condição de falha
Se o waiter cumprir a condição de fim failure ou exceder o tempo limite, a operação devolve um erro.
A condição de falha foi cumprida
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
"done": true,
"error": {
"code": 9,
"message": "Failure condition satisfied."
}
}
O tempo limite do waiter foi excedido
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
"done": true,
"error": {
"code": 4,
"message": "Timeout expired."
}
}
O que se segue?
- Saiba mais sobre o Runtime Configurator.
- Saiba como definir e obter variáveis.
- Defina um observador para uma variável específica.
- Criar e eliminar recursos do RuntimeConfig.
- Consulte a referência v1beta1.
- Consulte as quotas do Runtime Configurator.