Creazione di un processo waiter

Questa pagina spiega come creare una risorsa Waiter. Per scoprire di più sui camerieri, consulta Runtime Configurator Fundamentals.

Una risorsa Waiter attende una determinata condizione di operazione riuscita o di errore prima di restituire una risposta. Sia per l'esito positivo che per quello negativo, devi impostare una condizione di cardinalità, in cui il cameriere attende la creazione di un certo numero di variabili in un prefisso di percorso specifico. Dopo aver creato le variabili, il cameriere restituisce. Il codice dell'applicazione può quindi reagire all'esito positivo o negativo. Se lo stato attuale delle variabili corrisponde già alle condizioni di fine riuscita o non riuscita, il cameriere restituirà immediatamente l'esito positivo o negativo.

Prima di iniziare

Creazione di una risorsa waiter

Per creare un cameriere:

  1. Determina il successo e, facoltativamente, la condizione di errore per il cameriere.

    Ad esempio, il seguente codice campione imposta le condizioni per l'esito positivo e negativo, in cui il cameriere restituisce correttamente se il numero di percorsi in /status/success è tre e ha esito negativo se il percorso in /status/failure è due:

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

    Best practice per la definizione di un cameriere:

    • Sono consentite una sola condizione di operazione riuscita e una sola condizione di errore per cameriere.
    • Devi avere un cameriere per percorso.
    • Le condizioni di errore vengono sempre valutate prima di quelle di successo.
    • Non sovrapporre i prefissi del percorso tra le condizioni.
  2. Crea il cameriere.

    Deployment Manager

    Per creare un cameriere in Deployment Manager, specifica il tipo di cameriere:

    runtimeconfig.v1beta1.waiter
    

    Nelle proprietà del cameriere, specifica name, location, timeout e le condizioni di fine del cameriere:

    - 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]
    

    dove:

    • [NAME] è il nome della risorsa.
    • [CONFIG_NAME] è la risorsa di configurazione per questa richiesta.
    • [WAITER_NAME] è il nome di questo cameriere.
    • [TIMEOUT_SECS] è il numero di secondi di attesa prima del timeout del cameriere. Ad esempio, per 300 secondi, usa 300s.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da verificare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili presenti in questo percorso che devono essere considerate riuscite.

    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]
    

    dove:

    • [WAITER_NAME] è il nome di questo cameriere.
    • [CONFIG_NAME] è la risorsa RuntimeConfig per questa richiesta.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da verificare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili presenti in questo percorso che devono essere considerate riuscite.
    • [TIMEOUT_SECS] il numero di secondi di attesa prima del timeout del cameriere.

      gcloud CLI restituisce una risposta simile a:

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

      Dopo aver creato il cameriere, lo strumento esegue il polling della risorsa Operations correlata fino a quando il cameriere non torna con una delle risposte applicabili.

      Per un riferimento completo per questo comando gcloud, leggi la documentazione di riferimento di runtime-config configs waiters.

    API

    Nell'API, effettua una richiesta POST al seguente URI:

    https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters
    

    dove:

    • [PROJECT_ID] è l'ID progetto per questa richiesta.
    • [CONFIG_NAME] è il nome della configurazione per questa richiesta.

    Il payload della richiesta deve contenere il nome del cameriere, la condizione di operazione riuscita e la durata del timeout:

    {
     'name': 'projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]',
     'timeout': '[TIMEOUT_SEC]',
     'success': {
        'cardinality': {
           'path': '[SUCCESS_PATH_PREFIX]',
           'number': '[SUCCESS_NUMBER]'
        }
      }
    }
    

    dove:

    • [PROJECT_ID] è l'ID progetto per questa richiesta.
    • [CONFIG_NAME] è il nome della configurazione per questa richiesta.
    • [WAITER_NAME] è il nome del cameriere da creare.
    • [TIMEOUT_SECS] il numero di secondi di attesa prima del timeout del cameriere.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da verificare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili presenti in questo percorso che devono essere considerate riuscite.

    In caso di esito positivo, la richiesta restituisce il nome dell'oggetto operazioni di cui esegui il polling per il completamento:

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

    Quindi, fai un sondaggio con il cameriere per controllare periodicamente quando il cameriere è di ritorno.

    Per saperne di più sul metodo, consulta la documentazione di waiters().create.

Fa il pollice a un cameriere

Dopo aver creato un cameriere, esegui il polling della risorsa operativa correlata per verificare se il cameriere ha soddisfatto una delle condizioni di fine. Se il cameriere ha soddisfatto una condizione di fine o è scaduto, l'operazione restituisce done e restituisce una risposta in base ai risultati del cameriere.

Utilizza gcloud o l'API per chiedere a un cameriere.

gcloud

Con Google Cloud CLI, quando effettui una richiesta per creare un waiter, lo strumento esegue automaticamente il polling e attende il ritorno del cameriere. Lo strumento stampa una risposta come la seguente mentre fa il pollice al cameriere:

Waiting for waiter [WAITER_NAME] to finish...

Se non vuoi che lo strumento esegua il polling del cameriere dopo averlo creato, fornisci il flag --async alla richiesta di creazione.

API

Nell'API REST, effettua una richiesta GET al seguente URI per ottenere lo stato dell'operazione Waiter:

https://runtimeconfig.googleapis.com/v1beta1/projects/[PROJECT_ID]/configs/[CONFIG_NAME]/operations/waiters/[WAITER_NAME]

dove:

  • [PROJECT_ID] è l'ID progetto per questa richiesta.
  • [CONFIG_NAME] è il nome della configurazione per questa richiesta.
  • [WAITER_NAME] è il nome del cameriere per il sondaggio.

Se l'operazione è ancora in corso, l'API restituisce una risposta come la seguente, priva di stato:

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

Una volta completata, l'operazione viene contrassegnata come done e restituisce una delle risposte descritte nella sezione Risposte del cameriere.

Per saperne di più sul metodo, consulta la documentazione di waiters().create.

Risposte del cameriere

Condizione di fine riuscita

Se il cameriere ha soddisfatto una condizione di fine successful, l'operazione restituisce la risorsa Waiter:

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

Condizione di errore

Se il cameriere soddisfa la condizione di fine failure o è scaduto, l'operazione restituisce un errore.

La condizione dell'errore è stata soddisfatta

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

Timeout del cameriere

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

Passaggi successivi