Cómo administrar operaciones de larga duración con la API de Deployment Manager

Cuando realizas una solicitud a la API de Deployment Manager, este hace las solicitudes correspondientes a otras APIs de Google Cloud . Por ejemplo, cuando creas una implementación que incluye una instancia de Compute Engine, Deployment Manager envía una solicitud instances.insert a la API de Compute Engine.

Cuando creas, actualizas o borras implementaciones, o usas otros métodos de la API que pueden tardar varios minutos o más en completarse, las solicitudes a la API a Deployment Manager muestran operaciones de larga duración.

En esta página, se describen los lineamientos para administrar operaciones de larga duración con la API de Deployment Manager.

Antes de comenzar

Estos son algunos de los métodos que podrían iniciar operaciones de larga duración:

En estas solicitudes, la respuesta es un recurso de operación, que se ve como en el siguiente ejemplo:

{
 "kind": "deploymentmanager#operation",
 "id": "7123423453456654321",  # generated ID
 "name": "operation-11233234311678-587af2c0xyz9c-0987fa54-baccd59f",  # generated name
 "operationType": "insert",
 "targetLink": "https://www.googleapis.com/deploymentmanager/v2/projects/example-project/global/deployments/wordpress-1",
 "targetId": "5123321654456321123",
 "status": "DONE",  # possible values: RUNNING, PENDING, DONE
 "user": "example@example.com",
 "progress": 100,
 "insertTime": "2019-04-29T11:08:32.190-07:00",
 "startTime": "2019-04-29T11:08:32.200-07:00",
 "endTime": "2019-04-29T11:09:38.176-07:00",
 "selfLink": "https://www.googleapis.com/deploymentmanager/v2/projects/example-project/global/operations/operation-11233234311678-587af2c0xyz9c-0987fa54-baccd59f"
}

Obtén el estado de una operación

Para verificar el estado de una operación, usa el campo name de la operación para hacer una solicitud operations.get() y verifica el status o progress de la operación.

Cuando status sea DONE, progress sea 100 y el objeto error esté vacío, la implementación estará completa y tus recursos estarán listos para usarse.

Si hay errores durante la operación, se enumeran en el objeto error, en el siguiente formato:

"error": {
  "errors": [
    {
      "code": "error code"  # string,
      "location": "location of the error"  # string,
      "message": "error message"   # string
    },
    ...
  ]
}

Como práctica recomendada, te sugerimos que sondees el estado de la operación con una retirada exponencial. Por ejemplo, realiza la primera solicitud después de 5 segundos, la siguiente después de 10 segundos, la tercera después de 20 segundos, y así sucesivamente. Te recomendamos configurar un tiempo de recuperación máximo de unos minutos. Después de alcanzar el tiempo de retirada máximo, no es necesario que sigas aumentando el tiempo de retirada.