Como gerenciar operações de longa duração com a API Deployment Manager

Quando você faz uma solicitação de API ao Deployment Manager, ele faz solicitações correspondentes a outras Google Cloud APIs. Por exemplo, quando você cria uma implantação que inclui uma instância do Compute Engine, o Deployment Manager envia uma solicitação instances.insert para a API Compute Engine.

Ao criar, atualizar ou excluir implantações ou usar outros métodos de API que podem levar vários minutos ou mais para serem concluídos, as solicitações de API para o Deployment Manager retornam operações de longa duração.

Esta página descreve as diretrizes para gerenciar operações de longa duração com a API Deployment Manager.

Antes de começar

Os métodos que podem iniciar operações de longa duração incluem:

Nessas solicitações, a resposta é um recurso de operação, que é semelhante a este exemplo:

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

Conferir o status de uma operação

Para verificar o status de uma operação, use o campo name da operação para fazer uma solicitação operations.get() e verificar o status ou progress da operação.

Quando o status for DONE, o progress for 100 e o objeto error estiver vazio, a implantação será concluída e os recursos estarão prontos para uso.

Se houver erros durante a operação, eles serão listados no objeto error, neste formato:

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

Como prática recomendada, recomendamos consultar o status da operação com uma espera exponencial. Por exemplo, faça a primeira solicitação após 5 segundos, a próxima após 10 segundos, a terceira após 20 segundos e assim por diante. Recomendamos definir um tempo de espera máximo de alguns minutos. Depois de atingir o tempo máximo de espera, não é necessário continuar aumentando o tempo de espera.