En esta página se explica cómo crear un recurso Waiter. Para obtener más información sobre los elementos de espera, consulta el artículo Fundamentos de Runtime Configurator.
Un recurso Waiter espera una condición de éxito o de error antes de devolver una respuesta. Tanto en el caso de éxito como en el de error, se define una condición Cardinality en la que el elemento de espera espera a que se cree un número determinado de variables en un prefijo de ruta específico. Una vez creadas las variables, vuelve el camarero. El código de tu aplicación puede responder si se ha completado correctamente o no. Si el estado actual de tus variables ya coincide con las condiciones finales de éxito o de error, el waiter devolverá el éxito o el error inmediatamente.
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.
- Consulta el artículo Fundamentos de Runtime Configurator.
- Consulta el artículo Crear y eliminar recursos RuntimeConfig.
- Consulta Configurar y obtener datos.
Crear un recurso de espera
Para crear un recurso de espera, sigue estos pasos:
Determina la condición de éxito y, opcionalmente, la de error del waiter.
Por ejemplo, el siguiente código de muestra define las condiciones para que se produzca un error o un éxito. En este caso, el waiter devuelve un resultado correcto si el número de rutas de
/status/success
es tres y devuelve un error si la ruta de/status/failure
es dos:{ '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ácticas recomendadas para definir un waiter:
- Solo se permite una condición de éxito y una condición de error por cada waiter.
- Debes mantener un waiter por cada ruta.
- Las condiciones de error siempre se evalúan antes que las de éxito.
- No solapes prefijos de ruta entre condiciones.
Crea el recurso de espera.
Deployment Manager
Para crear un recurso de espera en Deployment Manager, especifique el tipo de recurso de espera:
runtimeconfig.v1beta1.waiter
En las propiedades del waiter, proporciona
name
,location
,timeout
y las condiciones de finalización del 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]
donde:
[NAME]
es el nombre del recurso.[CONFIG_NAME]
es el recurso Config de esta solicitud.[WAITER_NAME]
es el nombre de este camarero.[TIMEOUT_SECS]
es el número de segundos que se espera antes de que se agote el tiempo de espera. Por ejemplo, para 300 segundos, usa300s
.[SUCCESS_PATH_PREFIX]
es el prefijo de ruta que se debe observar para una condición de éxito.[SUCCESS_NUMBER]
es el número de variables que hay en esta ruta y que se consideran correctas.
gcloud
Con Google Cloud CLI:
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]
donde:
[WAITER_NAME]
es el nombre de este camarero.[CONFIG_NAME]
es el recurso RuntimeConfig de esta solicitud.[SUCCESS_PATH_PREFIX]
es el prefijo de ruta que se debe observar para una condición de éxito.[SUCCESS_NUMBER]
es el número de variables que hay en esta ruta y que se consideran correctas.[TIMEOUT_SECS]
el número de segundos que se debe esperar antes de que se agote el tiempo de espera.La CLI de gcloud devuelve una respuesta como la siguiente:
Se ha creado [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/example-waiter].
Después de crear el waiter, la herramienta sondea el recurso Operations relacionado hasta que el waiter devuelve una de las respuestas aplicables.
Para obtener una referencia completa de este comando
gcloud
, consulta la documentación de referencia deruntime-config configs waiters
.
API
En la API, haz una solicitud
POST
al siguiente URI:https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters
donde:
[PROJECT_ID]
es el ID del proyecto de esta solicitud.[CONFIG_NAME]
es el nombre de la configuración de esta solicitud.
La carga útil de la solicitud debe contener el nombre del waiter, la condición de éxito y la duración del tiempo de espera:
{ 'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]', 'timeout': '[TIMEOUT_SEC]', 'success': { 'cardinality': { 'path': '[SUCCESS_PATH_PREFIX]', 'number': '[SUCCESS_NUMBER]' } } }
donde:
[PROJECT_ID]
es el ID del proyecto de esta solicitud.[CONFIG_NAME]
es el nombre de la configuración de esta solicitud.[WAITER_NAME]
es el nombre del waiter que se va a crear.[TIMEOUT_SECS]
El número de segundos que se debe esperar antes de que se agote el tiempo de espera.[SUCCESS_PATH_PREFIX]
es el prefijo de ruta que se debe observar para que se cumpla una condición de éxito.[SUCCESS_NUMBER]
es el número de variables que hay en esta ruta y que se consideran correctas.
Si la solicitud se realiza correctamente, devuelve el nombre del objeto de operaciones que consultas para comprobar si se ha completado:
{ "name": "projects/[PROJECT_ID]/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]" }
A continuación, pregunta al camarero para comprobar periódicamente cuándo vuelve.
Para obtener más información sobre este método, consulta la documentación de
waiters().create
.
Consultar un recurso de espera
Después de crear un waiter, sondea el recurso Operations relacionado para comprobar si el waiter ha cumplido alguna de las condiciones de finalización. Si el waiter ha alcanzado una condición final o ha agotado el tiempo de espera, la operación devuelve done
y una respuesta basada en los resultados del waiter.
Usa gcloud
o la API para sondear a un camarero.
gcloud
Con la CLI de Google Cloud, cuando haces una solicitud para crear un elemento de espera, la herramienta realiza automáticamente un sondeo y espera a que el elemento de espera devuelva un valor. La herramienta imprime una respuesta como la siguiente mientras sondea el waiter:
Waiting for waiter [WAITER_NAME] to finish...
Si no quieres que la herramienta sondee al camarero después de crearlo, proporciona la marca --async
con tu solicitud de creación.
API
En la API REST, haz una solicitud GET
al siguiente URI para obtener el estado de la operación de espera:
https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]
donde:
[PROJECT_ID]
es el ID del proyecto de esta solicitud.[CONFIG_NAME]
es el nombre de la configuración de esta solicitud.[WAITER_NAME]
es el nombre del waiter que se va a sondear.
Si la operación sigue en curso, la API devuelve una respuesta como la siguiente, sin estado:
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
}
Si la operación se completa, se marca como done
y devuelve una de las respuestas descritas en la sección Respuestas de Waiter.
Para obtener más información sobre este método, consulta la documentación de waiters().create
.
Respuestas de camarero
Condición de finalización correcta
Si el Waiter ha alcanzado una condición de finalización correcta, la operación devuelve el 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
}
}
Condición de error
Si el waiter cumple la condición final failure o se agota el tiempo de espera, la operación devuelve un error.
Se ha cumplido la condición de error
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
"done": true,
"error": {
"code": 9,
"message": "Failure condition satisfied."
}
}
Se ha agotado el tiempo de espera del camarero
{
"name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
"done": true,
"error": {
"code": 4,
"message": "Timeout expired."
}
}
Siguientes pasos
- Consulta información sobre Runtime Configurator.
- Consulta cómo definir y obtener variables.
- Define un observador para una variable específica.
- Crear y eliminar recursos de RuntimeConfig.
- Consulta la referencia de v1beta1.
- Consulta las cuotas de Runtime Configurator.