Gérer les opérations de longue durée avec l'API Deployment Manager

Lorsque vous envoyez une requête API à Deployment Manager, il envoie les requêtes correspondantes aux autres API Google Cloud . Par exemple, lorsque vous créez un déploiement qui inclut une instance Compute Engine, Deployment Manager envoie une requête instances.insert à l'API Compute Engine.

Lorsque vous créez, mettez à jour ou supprimez des déploiements, ou que vous utilisez d'autres méthodes d'API qui peuvent prendre plusieurs minutes ou plus, les requêtes d'API envoyées à Deployment Manager renvoient des opérations de longue durée.

Cette page décrit les consignes à suivre pour gérer les opérations de longue durée avec l'API Deployment Manager.

Avant de commencer

Voici quelques méthodes pouvant lancer des opérations de longue durée:

Dans ces requêtes, la réponse est une ressource d'opération, qui ressemble à l'exemple suivant:

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

Obtenir l'état d'une opération

Pour vérifier l'état d'une opération, utilisez le champ name de l'opération pour effectuer une requête operations.get(), puis vérifiez le status ou le progress de l'opération.

Lorsque status est DONE, progress est 100 et que l'objet error est vide, le déploiement est terminé et vos ressources sont prêtes à l'emploi.

En cas d'erreurs pendant l'opération, elles sont listées dans l'objet error, au format suivant:

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

Nous vous recommandons de surveiller l'état de l'opération avec un délai avant expiration exponentiel. Par exemple, effectuez la première requête au bout de cinq secondes, la suivante au bout de 10 secondes, la troisième au bout de 20 secondes, et ainsi de suite. Nous vous recommandons de définir un délai de retour maximal de quelques minutes. Une fois que vous avez atteint la durée maximale entre les tentatives, vous n'avez pas besoin de continuer à l'augmenter.