Waiter erstellen

Auf dieser Seite wird beschrieben, wie eine Waiter-Ressource erstellt wird. Weitere Informationen über Waiter erfahren Sie unter Grundlagen des Runtime Configurators.

Eine Waiter-Ressource wartet auf eine bestimmte Bedingung für den Erfolg oder das Fehlschlagen, bevor sie eine Antwort zurückgibt. Sie legen sowohl für den Erfolg als auch für den Fehlschlag eine Kardinalitätsbedingung fest, bei der der Waiter wartet, bis eine Anzahl an Variablen unter einem gewissen Pfadpräfix erstellt wurden. Nachdem die Variablen erstellt wurden, antwortet der Waiter. Ihr App-Code kann dann auf den Erfolg oder Fehlschlag antworten. Falls der aktuelle Status Ihrer Variablen bereits entweder der Bedingung für den Erfolg oder Fehlschlag entspricht, gibt der Waiter sofort Erfolg oder Fehlschlag zurück.

Vorbereitung

Einen Waiter erstellen

So erstellen Sie einen Waiter:

  1. Legen Sie die Bedingung für den Erfolg, und optional das Fehlschlagen, des Waiters fest.

    Der folgende Beispielcode legt beispielsweise die Bedingungen für Erfolg und Fehlschlagen so fest, dass der Waiter erfolgreich antwortet, wenn die Anzahl von Pfaden unter /status/success drei ist und fehlschlägt, wenn die Anzahl von Pfaden unter /status/failure zwei beträgt:

    {
        '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 Practices zum Definieren eines Waiters:

    • Nur eine Bedingung für den Erfolg und eine für das Fehlschlagen ist pro Waiter möglich.
    • Sie sollten einen Waiter pro Pfad aufrechterhalten.
    • Bedingungen für das Fehlschlagen werden immer vor Bedingungen für den Erfolg evaluiert.
    • Vermeiden Sie Überschneidungen von Präfixen der Bedingungen.
  2. Erstellen Sie den Waiter.

    Deployment Manager

    Legen Sie den Waitertyp fest, wenn Sie einen Waiter in Deployment Manager erstellen:

    runtimeconfig.v1beta1.waiter
    

    Geben Sie in den Eigenschaften des Waiters name, location und timeout sowie die Endbedingung des Waiters an:

    - name: [NAME]
      type: runtimeconfig.v1beta1.waiter
      properties:
        parent: $(ref.[CONFIG_NAME].name)
        waiter: [WAITER_NAME]
        timeout: [TIMEOUT_SEC]
        success:
          cardinality:
            path: [SUCCESS_PATH_PREFIX]
            number: [SUCCESS_NUMBER]
    

    Dabei gilt:

    • [NAME] ist der Name der Ressource.
    • [CONFIG_NAME] ist die Config-Ressource für diese Anfrage.
    • [WAITER_NAME] ist der Name für diesen Waiter.
    • [TIMEOUT_SECS] ist die Anzahl an Sekunden, die gewartet wird, bis eine Zeitüberschreitung des Waiters eintritt. Verwenden Sie beispielsweise 300s für 300 Sekunden.
    • [SUCCESS_PATH_PREFIX] ist das Pfadpräfix, das für eine Erfolgsbedingung beobachtet wird.
    • [SUCCESS_NUMBER] ist die Anzahl an Variablen, die bei einem Pfad vorhanden sein müssen, um erfolgreich zu sein.

    gcloud

    Mit dem Befehlszeilentool gcloud:

    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]
    

    Dabei gilt:

    • [WAITER_NAME] ist der Name für diesen Waiter.
    • [CONFIG_NAME] ist die Config-Ressource für diese Anfrage.
    • [SUCCESS_PATH_PREFIX] ist das Pfadpräfix, das für eine Erfolgsbedingung beobachtet wird.
    • [SUCCESS_NUMBER] ist die Anzahl an Variablen, die bei einem Pfad vorhanden sein müssen, um erfolgreich zu sein.
    • [TIMEOUT_SECS] ist die Anzahl an Sekunden, die gewartet wird, bis eine Zeitüberschreitung des Waiters eintritt.

    Das gcloud gibt eine Antwort zurück, die so aussieht:

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

    Nachdem Sie den Waiter erstellt haben, fragt das Tool die verknüpfte Vorgangsressource ab bis der Waiter eine der möglichen Antworten zurückgibt.

    Eine vollständige Referenz zu diesem gcloud-Befehl finden Sie in der runtime-config configs waiters-Referenzdokumentation.

    API

    Stellen Sie in der API eine POST-Anfrage an den folgenden URI:

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

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID für diese Anfrage.
    • [CONFIG_NAME] ist der Name der Konfiguration für diese Anfrage.

    Die Nutzlast der Anfrage muss den Namen des Waiters, die Erfolgsbedingung und das Zeitlimit beinhalten:

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

    Dabei gilt:

    • [PROJECT_ID] ist die Projekt-ID für diese Anfrage.
    • [CONFIG_NAME] ist der Name der Konfiguration für diese Anfrage.
    • [WAITER_NAME] ist der Name des zu erstellenden Waiters.
    • [TIMEOUT_SECS] ist die Anzahl an Sekunden, die gewartet wird, bis eine Zeitüberschreitung des Waiters eintritt.
    • [SUCCESS_PATH_PREFIX] ist das Pfadpräfix, das für eine Erfolgsbedingung beobachtet wird.
    • [SUCCESS_NUMBER] ist die Anzahl an Variablen, die bei einem Pfad vorhanden sein müssen, um erfolgreich zu sein.

    Bei Erfolg gibt die Anfrage den Namen der Vorgangsobjekte zurück, die Sie zum Abschluss prüfen:

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

    Fragen Sie dann den Waiter ab, um regelmäßig zu testen, wann der Waiter antwortet.

    Weitere Informationen zu der Methode finden Sie in der waiters().create-Dokumentation.

Einen Waiter abfragen

Fragen Sie die verknüpften Vorgangsressourcen ab, nachdem Sie einen Waiter erstellt haben, um zu überprüfen, ob der Waiter eine Endbedingung erfüllt hat. Wenn der Waiter eine Endbedingung erfüllt oder das Zeitlimit überschritten hat, gibt der Vorgang done und eine Antwort basierend auf dem Ergebnis des Waiters zurück.

Verwenden Sie gcloud oder die API, um den Waiter abzufragen.

gcloud

Wenn Sie mit dem Befehlszeilentool gcloud eine Anfrage stellen, um einen Waiter zu erstellen, führt das Tool automatisch eine Abfrage durch und wartet auf die Antwort des Waiters. Das Tool gibt eine Antwort wie die folgende aus, während es den Waiter abfragt:

Waiting for waiter [WAITER_NAME] to finish...

Wenn Sie nicht wollen, dass das Tool den Waiter abfragt, nachdem es den Waiter erstellt hat, geben Sie das --async-Flag in Ihrer Anfrage zur Erstellung an.

API

Stellen Sie in der REST API eine GET-Anfrage an den folgenden URI, um den Status des Waiter-Vorgangs zu erhalten:

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

Dabei gilt:

  • [PROJECT_ID] ist die Projekt-ID für diese Anfrage.
  • [CONFIG_NAME] ist der Name der Konfiguration für diese Anfrage.
  • [WAITER_NAME] ist der Name des abzufragenden Waiters.

Wenn der Vorgang noch läuft, gibt die API eine Antwort wie die folgende, ohne Status, aus:

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

Wenn der Vorgang abgeschlossen ist, wird der Vorgang als done gekennzeichnet und gibt eine der im Abschnitt Waiter-Antworten beschriebenen Antworten zurück.

Weitere Informationen zu der Methode finden Sie in der waiters().create-Dokumentation.

Waiter-Antworten

Erfolgreiche Endbedingung

Wenn der Waiter eine erfolgreiche Endbedingung erfüllt, gibt der Vorgang folgende Waiter-Ressource zurück:

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

Fehlerbedingung

Wenn der Waiter eine fehlgeschlagene Endbedingung erfüllt, gibt der Vorgang einen Fehler zurück:

Fehlerbedingung wurde erfüllt

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

Zeitüberschreitung des Waiters

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

Nächste Schritte

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Cloud Deployment Manager-Dokumentation