Gestione di operazioni a lunga esecuzione con l'API Deployment Manager

Quando invii una richiesta API a Deployment Manager, questo fa richieste corrispondenti ad altre Google Cloud API. Ad esempio, quando crei un deployment che include un'istanza Compute Engine, Deployment Manager invia una richiesta instances.insert all'API Compute Engine.

Quando crei, aggiorni o elimini deployment o utilizzi altri metodi API che potrebbero richiedere diversi minuti o più per essere completati, le richieste API a Deployment Manager restituiscono operazioni di lunga durata.

Questa pagina descrive le linee guida per la gestione delle operazioni a lunga esecuzione con l'API Deployment Manager.

Prima di iniziare

I metodi che potrebbero avviare operazioni a lunga esecuzione includono:

In queste richieste, la risposta è una risorsa Operation, che ha il seguente aspetto:

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

Recuperare lo stato di un'operazione

Per controllare lo stato di un'operazione, utilizza il campo name dell'operazione per effettuare una richiesta operations.get() e controlla il valore status o progress dell'operazione.

Quando status è DONE, progress è 100 e l'oggetto error è vuoto, il deployment è completato e le risorse sono pronte per l'uso.

Se si verificano errori durante l'operazione, vengono elencati nell'oggetto error nel seguente formato:

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

Come best practice, ti consigliamo di eseguire il polling dello stato dell'operazione con un backoff esponenziale. Ad esempio, invia la prima richiesta dopo 5 secondi, la successiva dopo 10 secondi, la terza dopo 20 secondi e così via. Ti consigliamo di impostare un tempo di backoff massimo di alcuni minuti. Una volta raggiunta la durata massima del backoff, non è necessario continuare ad aumentarla.