Creazione di un processo waiter

Questa pagina spiega come creare una risorsa Waiter. Per saperne di più sui waiter, leggi i Concetti fondamentali di Runtime Configurator.

Una risorsa Waiter attende una determinata condizione di successo o errore prima di restituire una risposta. Sia per il successo che per l'errore, imposti una condizione di cardinalità, in cui il waiter attende la creazione di un certo numero di variabili in un prefisso di percorso specifico. Una volta create le variabili, il waiter viene restituito. Il codice dell'applicazione può quindi rispondere al successo o all'errore. Se lo stato attuale delle variabili corrisponde già alle condizioni finali di successo o errore, il waiter restituirà immediatamente il successo o l'errore.

Prima di iniziare

Creazione di una risorsa waiter

Per creare una risorsa waiter:

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

    Ad esempio, il seguente codice campione imposta le condizioni di successo ed errore, in cui il waiter viene restituito correttamente se il numero di percorsi in /status/success è tre e non riesce 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 una risorsa waiter:

    • È consentita una sola condizione di successo e una sola condizione di errore per waiter.
    • Devi mantenere una risorsa waiter per percorso.
    • Le condizioni di errore vengono sempre valutate prima delle condizioni di successo.
    • Non sovrapporre i prefissi di percorso tra le condizioni.
  2. Crea la risorsa waiter.

    Deployment Manager

    Per creare una risorsa waiter in Deployment Manager, specifica il tipo di waiter:

    runtimeconfig.v1beta1.waiter
    

    Nelle proprietà della risorsa waiter, fornisci name, location, timeout e le condizioni finali della risorsa waiter:

    - 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 Config per questa richiesta.
    • [WAITER_NAME] è il nome di questa risorsa waiter.
    • [TIMEOUT_SECS] è il numero di secondi di attesa prima che la risorsa waiter vada in timeout. Ad esempio, per 300 secondi, utilizza 300s.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da monitorare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili che esistono in questo percorso da considerare 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 questa risorsa waiter.
    • [CONFIG_NAME] è la risorsa RuntimeConfig per questa richiesta.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da monitorare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili che esistono in questo percorso da considerare riuscite.
    • [TIMEOUT_SECS] è il numero di secondi di attesa prima che la risorsa waiter vada in timeout.

      gcloud CLI restituisce una risposta simile alla seguente:

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

      Dopo aver creato la risorsa waiter, lo strumento esegue il polling della risorsa Operations correlata finché la risorsa waiter non restituisce una delle risposte applicabili.

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

    API

    Nell'API, invia 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 della risorsa waiter, la condizione di successo 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 della risorsa waiter da creare.
    • [TIMEOUT_SECS] è il numero di secondi di attesa prima che la risorsa waiter vada in timeout.
    • [SUCCESS_PATH_PREFIX] è il prefisso del percorso da monitorare per una condizione di successo.
    • [SUCCESS_NUMBER] è il numero di variabili che esistono in questo percorso da considerare riuscite.

    Se la richiesta ha esito positivo, restituisce il nome dell'oggetto delle operazioni che esegui il polling per il completamento:

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

    Poi, esegui il polling della risorsa waiter per verificare periodicamente quando viene restituita.

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

Esecuzione del polling di una risorsa waiter

Dopo aver creato una risorsa waiter, esegui il polling della risorsa Operations correlata per verificare se la risorsa waiter ha soddisfatto una delle condizioni finali. Se la risorsa waiter ha soddisfatto una condizione finale o è andata in timeout, l'operazione viene restituita come done e restituisce una risposta in base ai risultati della risorsa waiter.

Utilizza gcloud o l'API per eseguire il polling di una risorsa waiter.

gcloud

Con Google Cloud CLI, quando invii una richiesta per creare una risorsa waiter, lo strumento esegue automaticamente il polling e attende che la risorsa waiter venga restituita. Durante il polling della risorsa waiter, lo strumento stampa una risposta simile alla seguente:

Waiting for waiter [WAITER_NAME] to finish...

Se non vuoi che lo strumento esegua il polling della risorsa waiter dopo la creazione, fornisci il flag --async con la richiesta di creazione.

API

Nell'API REST, invia una richiesta GET al seguente URI per ottenere lo stato dell'operazione della risorsa 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 della risorsa waiter di cui eseguire il polling.

Se l'operazione è ancora in corso, l'API restituisce una risposta simile alla seguente, senza uno stato:

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

Se l'operazione è completata, viene contrassegnata come done e restituisce una delle risposte descritte nella sezione Risposte della risorsa waiter.

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

Risposte della risorsa waiter

Condizione finale riuscita

Se la risorsa waiter ha soddisfatto una condizione finale riuscita, 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 la risorsa waiter soddisfa la condizione finale di errore o va in timeout, l'operazione restituisce un errore.

La condizione di errore è stata soddisfatta

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

Timeout della risorsa waiter

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

Passaggi successivi