Crear un recurso de espera

En esta página se explica cómo crear un recurso de espera. Para obtener más información sobre los recursos de espera, lee los Conceptos básicos de Runtime Configurator.

Un recurso de espera demora hasta que se produzca una determinada condición de éxito o falla antes de mostrar una respuesta. Tanto en caso de éxito como de falla, se establece una condición de cordialidad, en la que el recurso de espera demora hasta que se cree un número de variables en un prefijo de ruta de acceso específico. Una vez creadas las variables, se muestra el recurso de espera. El código de la aplicación responde a la condición de éxito o falla. Si el estado actual de las variables ya coincide con las condiciones finales de éxito o falla, el recurso de espera mostrará el éxito o la falla de inmediato.

Antes de comenzar

Crear un recurso de espera

Para crear un recurso de espera:

  1. Determina la condición de éxito y, de manera opcional, la condición de falla para el recurso de espera.

    Por ejemplo, el siguiente código de muestra establece las condiciones de éxito y fracaso, en las que el recurso de espera se muestra de manera correcta si la cantidad de rutas en /status/success es tres y falla si la ruta en /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
           }
         }
    }
    

    Recomendaciones para definir un recurso de espera:

    • Solo se permite una condición de éxito y una condición de falla por recurso de espera.
    • Debes mantener un recurso de espera por ruta de acceso.
    • Las condiciones de falla siempre se evalúan antes de que las condiciones de éxito.
    • No superpongas los prefijos de ruta de acceso entre condiciones.
  2. Crea el recurso de espera.

    Deployment Manager

    Para crear un recurso de espera en Deployment Manager, especifica el tipo de recurso de espera:

    runtimeconfig.v1beta1.waiter
    

    En las propiedades del recurso de espera, proporciona name, location, timeout y las condiciones finales del recurso de espera:

    - 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 de configuración para esta solicitud.
    • [WAITER_NAME] es el nombre para este recurso de espera.
    • [TIMEOUT_SECS] es la cantidad de segundos que se debe esperar antes de que se agote el tiempo de espera del recurso de espera. Por ejemplo, para 300 segundos, usa 300s.
    • [SUCCESS_PATH_PREFIX] es el prefijo de la ruta de acceso para detectar una condición de éxito.
    • [SUCCESS_NUMBER] es la cantidad de variables que existen en esta ruta de acceso para que se considere correcta.

    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 para este recurso de espera.
    • [CONFIG_NAME] es el recurso RuntimeConfig para esta solicitud.
    • [SUCCESS_PATH_PREFIX] es el prefijo de la ruta de acceso para detectar una condición de éxito.
    • [SUCCESS_NUMBER] es la cantidad de variables que existen en esta ruta de acceso para que se considere correcta.
    • [TIMEOUT_SECS] es la cantidad de segundos que se debe esperar antes de que se agote el tiempo de espera del recurso de espera.

      Gcloud CLI muestra una respuesta como la siguiente:

      Se creó [https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/example-waiter].

      Después de crear el recurso de espera, la herramienta sondea el recurso de operaciones relacionado hasta que el recurso de espera se muestre con una de las respuestas aplicables.

      Para obtener una referencia completa de este comando gcloud, lee la documentación de referencia de runtime-config configs waiters.

    API

    En la API, realiza 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 para esta solicitud.

    La carga útil de la solicitud debe contener el nombre del recurso de espera, 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 para esta solicitud.
    • [WAITER_NAME] es el nombre del recurso de espera que se creará.
    • [TIMEOUT_SECS] es la cantidad de segundos que se espera antes de que se agote el tiempo de espera del recurso de espera.
    • [SUCCESS_PATH_PREFIX] es el prefijo de la ruta de acceso para detectar una condición de éxito.
    • [SUCCESS_NUMBER] es el número de variables que existen en esta ruta de acceso para que se considere correcta.

    Si se considera correcta, la solicitud muestra el nombre del objeto de operaciones que se completó.

    {
        "name": "projects/[PROJECT_ID]/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
    }
    

    A continuación, sondea el recurso de espera para verificar periódicamente cuándo se muestra el recurso de espera.

    Para obtener más información sobre el método, lee la documentación de waiters().create.

Sondear un recurso de espera

Después de crear el recurso de espera, sondea el recurso de operaciones relacionado para verificar si el recurso de espera cumplió alguna de las condiciones finales. Si el recurso de espera cumplió una condición de finalización o se agotó el tiempo de espera, la operación se muestra como done y muestra una respuesta en función de los resultados del recurso de espera.

Usa gcloud o la API para sondear un recurso de espera.

gcloud

Con Google Cloud CLI, cuando realizas una solicitud para crear un recurso de espera, la herramienta realiza un sondeo automáticamente y espera a que se muestre el recurso de espera. La herramienta imprime una respuesta como la siguiente, al tiempo que se sondea el recurso de espera:

Waiting for waiter [WAITER_NAME] to finish...

Si no deseas que la herramienta sondee el recurso de espera después de crearlo, proporciona la marca --async con la solicitud de creación.

API

En la API de REST, realiza una solicitud GET al siguiente URI para obtener el estado de la operación del recurso 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 para esta solicitud.
  • [WAITER_NAME] es el nombre del recurso de espera que se sondear.

Si la operación aún está en curso, la API muestra una respuesta como la siguiente, sin un estado:

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]"
}

Si la operación se completa, se marca como done y muestra una de las respuestas descritas en la sección Respuestas del recurso de espera.

Para obtener más información sobre el método, lee la documentación de waiters().create.

Respuestas del recurso de espera

Condición final de éxito

Si el recurso de espera ha cumplido una condición final de éxito, la operación muestra el recurso de espera:

{
  "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 falla

Si el recurso de espera cumple una condición final de falla o se agota el tiempo de espera, la operación muestra un error.

Se cumplió la condición de falla

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 9,
    "message": "Failure condition satisfied."
  }
}

Se agotó el tiempo de espera del recurso de espera

{
  "name": "projects/[PROJECT_NAME]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]",
  "done": true,
  "error": {
    "code": 4,
    "message": "Timeout expired."
  }
}

¿Qué sigue?