Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update endpoint spec #1306

Merged
merged 1 commit into from
Nov 7, 2024
Merged

Update endpoint spec #1306

merged 1 commit into from
Nov 7, 2024

Conversation

ashdavies
Copy link
Owner

No description provided.

Copy link
Contributor

github-actions bot commented Nov 7, 2024

Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  ~ update in-place
-/+ destroy and then create replacement
+/- create replacement and then destroy

Terraform will perform the following actions:

  # google_project_service.main must be replaced
-/+ resource "google_project_service" "main" {
      ~ id                 = "playground-1a136/playground.ashdavies.dev" -> (known after apply)
      ~ service            = "playground.ashdavies.dev" -> "api.ashdavies.dev" # forces replacement
        # (2 unchanged attributes hidden)
    }

  # module.api-gateway.google_api_gateway_api_config.main must be replaced
+/- resource "google_api_gateway_api_config" "main" {
      ~ api_config_id        = "terraform-20240806165742887100000001" -> (known after apply)
      + api_config_id_prefix = (known after apply)
      ~ display_name         = "terraform-20240806165742887100000001" -> (known after apply)
      ~ effective_labels     = {
          + "goog-terraform-provisioned" = "true"
        }
      ~ id                   = "projects/playground-1a136/locations/global/apis/playground-api/configs/terraform-20240806165742887100000001" -> (known after apply)
      - labels               = {} -> null
      ~ name                 = "projects/279861227938/locations/global/apis/playground-api/configs/terraform-20240806165742887100000001" -> (known after apply)
      ~ service_config_id    = "terraform-20240806165742887100000001-0zoiwokm5he04" -> (known after apply)
      ~ terraform_labels     = {
          + "goog-terraform-provisioned" = "true"
        }
        # (2 unchanged attributes hidden)

      ~ openapi_documents {
          ~ document {
              ~ contents = "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogInBsYXlncm91bmQtYXBpIFBsYXlncm91bmQgU2VydmljZSIKICBkZXNjcmlwdGlvbjogIlBsYXlncm91bmQgU2VydmljZSBkZWZpbml0aW9uIGhvc3RlZCBieSBDbG91ZCBFbmRwb2ludHMgd2l0aCBhIENsb3VkIFJ1biBiYWNrZW5kIgogIHZlcnNpb246ICIxLjAuMCIKaG9zdDogcGxheWdyb3VuZC5hc2hkYXZpZXMuZGV2CnNjaGVtZXM6CiAgLSAiaHR0cHMiCmNvbnN1bWVzOgogIC0gImFwcGxpY2F0aW9uL2pzb24iCnByb2R1Y2VzOgogIC0gImFwcGxpY2F0aW9uL2pzb24iCnBhdGhzOgogIC8ud2VsbC1rbm93bi9hc3NldGxpbmtzLmpzb246CiAgICBnZXQ6CiAgICAgIHRhZ3M6IFsgInN0YXRpYyIgXQogICAgICBzdW1tYXJ5OiAiUmV0dXJucyBBc3NldExpbmtzIHByb3RvY29sIGZpbGUiCiAgICAgIG9wZXJhdGlvbklkOiAiZ2V0QXNzZXRMaW5rcyIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246ICJPSyIKICAgICAgc2VjdXJpdHk6IFtdCiAgL2V2ZW50cy91cGNvbWluZzoKICAgIGdldDoKICAgICAgdGFnczogWyAiZXZlbnRzIiBdCiAgICAgIHN1bW1hcnk6ICJSZXR1cm4gdXBjb21pbmcgZXZlbnRzIGJ5IHN0YXJ0IGRhdGUiCiAgICAgIG9wZXJhdGlvbklkOiAiZ2V0VXBjb21pbmdFdmVudHMiCiAgICAgIHBhcmFtZXRlcnM6CiAgICAgICAgLSBuYW1lOiAic3RhcnRBdCIKICAgICAgICAgIGluOiAicXVlcnkiCiAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgZm9ybWF0OiAiZGF0ZSIKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVGhlIHN0YXJ0IGRhdGUgdG8gc3RhcnQgdGhpcyBxdWVyeSBhdC4iCiAgICAgICAgLSBuYW1lOiAibGltaXQiCiAgICAgICAgICBpbjogInF1ZXJ5IgogICAgICAgICAgdHlwZTogImludGVnZXIiCiAgICAgICAgICBmb3JtYXQ6ICJpbnQzMiIKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHVybi4iCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiT0siCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6ICJhcnJheSIKICAgICAgICAgICAgaXRlbXM6CiAgICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvRXZlbnQiCiAgICAgIHNlY3VyaXR5OgogICAgICAgIC0gQXBpS2V5QXV0aDogWyBdCiAgICAgICAgICBBcHBDaGVja0F1dGg6IFsgXQogIC9ldmVudHM6YWdncmVnYXRlOgogICAgcG9zdDoKICAgICAgdGFnczogWyAiZXZlbnRzIiBdCiAgICAgIHN1bW1hcnk6ICJBZ2dyZWdhdGUgZXZlbnRzIGZyb20gZGF0YSBzb3VyY2VzIgogICAgICBvcGVyYXRpb25JZDogImFnZ3JlZ2F0ZUV2ZW50cyIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246ICJPSyIKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBBcGlLZXlBdXRoOiBbIF0KICAgICAgICAgIEFwcENoZWNrQXV0aDogWyBdCiAgL2ZpcmViYXNlL2F1dGg6CiAgICBwb3N0OgogICAgICB0YWdzOiBbICJmaXJlYmFzZSIgXQogICAgICBzdW1tYXJ5OiAiU2lnbnMgaW4gb3Igc2lnbnMgdXAgYSB1c2VyIgogICAgICBkZXNjcmlwdGlvbjogPgogICAgICAgIFNpZ25zIGluIG9yIHNpZ25zIHVwIGEgdXNlciBieSBleGNoYW5naW5nIGEgY3VzdG9tIEF1dGggdG9rZW4gZm9yIHRoZSBnaXZlbiBVSUQuIFVwb24gYSAKICAgICAgICBzdWNjZXNzZnVsIHNpZ24taW4gb3Igc2lnbi11cCwgYSBuZXcgSWRlbnRpdHkgUGxhdGZvcm0gSUQgdG9rZW4gYW5kIHJlZnJlc2ggdG9rZW4gYXJlCiAgICAgICAgaXNzdWVkIGZvciB0aGUgdXNlci4KICAgICAgb3BlcmF0aW9uSWQ6ICJzaWduSW4iCiAgICAgIHBhcmFtZXRlcnM6CiAgICAgICAgLSBuYW1lOiAiYm9keSIKICAgICAgICAgIGluOiAiYm9keSIKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgIHR5cGU6ICJvYmplY3QiCiAgICAgICAgICAgIHJlcXVpcmVkOgogICAgICAgICAgICAgIC0gInVpZCIKICAgICAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgICAgICB1aWQ6CiAgICAgICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgICAgICAgICAgVGhlIFVJRCB0byBzdG9yZSBpbiB0aGUgdG9rZW4uIFRoaXMgaWRlbnRpZmllcyB0aGUgdXNlciB0byBvdGhlciBGaXJlYmFzZQogICAgICAgICAgICAgICAgICBzZXJ2aWNlcyAoUmVhbHRpbWUgRGF0YWJhc2UsIEZpcmViYXNlIEF1dGgsIGV0Yy4pLiBTaG91bGQgYmUgbGVzcyB0aGFuIDEyOAogICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLgogICAgICAgICAgICAgICAgZXhhbXBsZTogImphbmUuc21pdGhAZXhhbXBsZS5jb20iCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiT0siCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL0F1dGhSZXN1bHQiCiAgL2ZpcmViYXNlL3Rva2VuOgogICAgcG9zdDoKICAgICAgdGFnczogWyAiZmlyZWJhc2UiIF0KICAgICAgc3VtbWFyeTogIkNyZWF0ZXMgYSBuZXcgQXBwIENoZWNrIHRva2VuIgogICAgICBvcGVyYXRpb25JZDogImNyZWF0ZVRva2VuIgogICAgICBwYXJhbWV0ZXJzOgogICAgICAgIC0gbmFtZTogImJvZHkiCiAgICAgICAgICBpbjogImJvZHkiCiAgICAgICAgICByZXF1aXJlZDogdHJ1ZQogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmOiAiIy9kZWZpbml0aW9ucy9GaXJlYmFzZUFwcCIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246ICJPSyIKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvQXBwQ2hlY2tUb2tlbiIKICAvZmlyZWJhc2UvdG9rZW46dmVyaWZ5OgogICAgcHV0OgogICAgICB0YWdzOiBbICJmaXJlYmFzZSIgXQogICAgICBzdW1tYXJ5OiAiVmVyaWZpZXMgYW4gQXBwIENoZWNrIHRva2VuIgogICAgICBkZXNjcmlwdGlvbjogPgogICAgICAgIFZlcmlmaWVzIGEgRmlyZWJhc2UgQXBwIENoZWNrIHRva2VuIChKV1QpLiBJZiB0aGUgdG9rZW4gaXMgdmFsaWQsIHRoZSBwcm9taXNlIGlzIGZ1bGZpbGxlZAogICAgICAgIHdpdGggdGhlIHRva2VuJ3MgZGVjb2RlZCBjbGFpbXM7IG90aGVyd2lzZSwgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAgICAgIG9wZXJhdGlvbklkOiAidmVyaWZ5VG9rZW4iCiAgICAgIHBhcmFtZXRlcnM6CiAgICAgICAgLSBuYW1lOiAiWC1GaXJlYmFzZS1BcHBDaGVjayIKICAgICAgICAgIGluOiAiaGVhZGVyIgogICAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgQXBwIENoZWNrIHRva2VuIHRvIHZlcmlmeSIKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogIk9LIgogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmOiAiIy9kZWZpbml0aW9ucy9EZWNvZGVkVG9rZW4iCiAgICAgICAgIjQwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogIlJlcXVlc3QgaXMgbWlzc2luZyBhcHAgY2hlY2sgdG9rZW4gaGVhZGVyIgogIC9oZWxsbzoKICAgIGdldDoKICAgICAgdGFnczogWyAiaGVsbG8iIF0KICAgICAgc3VtbWFyeTogIkdyZWV0IHRoZSB1c2VyIgogICAgICBvcGVyYXRpb25JZDogImhlbGxvV29ybGQiCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiT0siCmRlZmluaXRpb25zOgogIEFwcENoZWNrVG9rZW46CiAgICB0eXBlOiAib2JqZWN0IgogICAgcmVxdWlyZWQ6CiAgICAgIC0gInR0bE1pbGxpcyIKICAgICAgLSAidG9rZW4iCiAgICBwcm9wZXJ0aWVzOgogICAgICB0dGxNaWxsaXM6CiAgICAgICAgdHlwZTogImludGVnZXIiCiAgICAgICAgZm9ybWF0OiAiaW50NjQiCiAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgdGltZS10by1saXZlIGR1cmF0aW9uIG9mIHRoZSB0b2tlbiBpbiBtaWxsaXNlY29uZHMiCiAgICAgIHRva2VuOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgRmlyZWJhc2UgQXBwIENoZWNrIHRva2VuIgogIEF1dGhSZXN1bHQ6CiAgICB0eXBlOiAib2JqZWN0IgogICAgcHJvcGVydGllczoKICAgICAgaWRUb2tlbjoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGRlc2NyaXB0aW9uOiAiQSBGaXJlYmFzZSBBdXRoIElEIHRva2VuIGdlbmVyYXRlZCBmcm9tIHRoZSBwcm92aWRlZCBjdXN0b20gdG9rZW4uIgogICAgICByZWZyZXNoVG9rZW46CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgICBkZXNjcmlwdGlvbjogIkEgRmlyZWJhc2UgQXV0aCByZWZyZXNoIHRva2VuIGdlbmVyYXRlZCBmcm9tIHRoZSBwcm92aWRlZCBjdXN0b20gdG9rZW4uIgogICAgICBleHBpcmVzSW46CiAgICAgICAgdHlwZTogImludGVnZXIiCiAgICAgICAgZm9ybWF0OiAiaW50NjQiCiAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgbnVtYmVyIG9mIHNlY29uZHMgaW4gd2hpY2ggdGhlIElEIHRva2VuIGV4cGlyZXMuIgogICAgICAgIGV4YW1wbGU6IDM2MDAKICBEZWNvZGVkVG9rZW46CiAgICB0eXBlOiAib2JqZWN0IgogICAgcmVxdWlyZWQ6CiAgICAgIC0gImF1ZGllbmNlIgogICAgICAtICJleHBpcmVzQXQiCiAgICAgIC0gImlzc3VlZEF0IgogICAgICAtICJzdWJqZWN0IgogICAgICAtICJpc3N1ZXIiCiAgICAgIC0gImFwcElkIgogICAgcHJvcGVydGllczoKICAgICAgYXVkaWVuY2U6CiAgICAgICAgdHlwZTogImFycmF5IgogICAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgICBUaGUgYXVkaWVuY2UgZm9yIHdoaWNoIHRoaXMgdG9rZW4gaXMgaW50ZW5kZWQuIFRoaXMgdmFsdWUgaXMgYSBKU09OIGFycmF5IG9mIHR3byBzdHJpbmdzLAogICAgICAgICAgdGhlIGZpcnN0IGlzIHRoZSBwcm9qZWN0IG51bWJlciBvZiB5b3VyIEZpcmViYXNlIHByb2plY3QsIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBwcm9qZWN0CiAgICAgICAgICBJRCBvZiB0aGUgc2FtZSBwcm9qZWN0LgogICAgICAgIGl0ZW1zOgogICAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgZXhwaXJlc0F0OgogICAgICAgIHR5cGU6ICJpbnRlZ2VyIgogICAgICAgIGZvcm1hdDogImludDY0IgogICAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgICBUaGUgQXBwIENoZWNrIHRva2VuJ3MgZXhwaXJhdGlvbiB0aW1lLCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IGVwb2NoLiBUaGF0IGlzLCB0aGUgdGltZQogICAgICAgICAgYXQgd2hpY2ggdGhpcyBBcHAgQ2hlY2sgdG9rZW4gZXhwaXJlcyBhbmQgc2hvdWxkIG5vIGxvbmdlciBiZSBjb25zaWRlcmVkIHZhbGlkLgogICAgICAgIGV4YW1wbGU6ICIxNjcyNDk3MTE2IgogICAgICBpc3N1ZWRBdDoKICAgICAgICB0eXBlOiAiaW50ZWdlciIKICAgICAgICBmb3JtYXQ6ICJpbnQ2NCIKICAgICAgICBkZXNjcmlwdGlvbjogPgogICAgICAgICAgVGhlIEFwcCBDaGVjayB0b2tlbidzIGlzc3VlZC1hdCB0aW1lLCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVbml4IGVwb2NoLiBUaGF0IGlzLCB0aGUgdGltZQogICAgICAgICAgYXQgd2hpY2ggdGhpcyBBcHAgQ2hlY2sgdG9rZW4gd2FzIGlzc3VlZCBhbmQgc2hvdWxkIHN0YXJ0IHRvIGJlIGNvbnNpZGVyZWQgdmFsaWQuCiAgICAgICAgZXhhbXBsZTogIjE2NzI0OTM1MTYiCiAgICAgIHN1YmplY3Q6CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgICBkZXNjcmlwdGlvbjogPgogICAgICAgICAgVGhlIEZpcmViYXNlIEFwcCBJRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBhcHAgdGhlIHRva2VuIGJlbG9uZ2VkIHRvLiBBcyBhIGNvbnZlbmllbmNlLAogICAgICAgICAgdGhpcyB2YWx1ZSBpcyBjb3BpZWQgb3ZlciB0byB0aGUgfCBhcHBfaWQgcHJvcGVydHkuCiAgICAgICAgZXhhbXBsZTogIjE6MTIzNDU2Nzg5MDphbmRyb2lkOjMyMWFiYzQ1NmRlZjc4OTAiCiAgICAgIGlzc3VlcjoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgICBUaGUgaXNzdWVyIGlkZW50aWZpZXIgZm9yIHRoZSBpc3N1ZXIgb2YgdGhlIHJlc3BvbnNlLiBUaGlzIHZhbHVlIGlzIGEgVVJMIHdpdGggdGhlIGZvcm1hdAogICAgICAgICAgaHR0cHM6Ly9maXJlYmFzZWFwcGNoZWNrLmdvb2dsZWFwaXMuY29tLzxQUk9KRUNUX05VTUJFUj4sIHdoZXJlIDxQUk9KRUNUX05VTUJFUj4gaXMgdGhlCiAgICAgICAgICBzYW1lIHByb2plY3QgbnVtYmVyIHNwZWNpZmllZCBpbiB0aGUgfCBhdWQgcHJvcGVydHkuCiAgICAgICAgZXhhbXBsZTogImh0dHBzOi8vZmlyZWJhc2VhcHBjaGVjay5nb29nbGVhcGlzLmNvbS8xMjM0NTY3ODkwIgogICAgICBhcHBJZDoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgICBUaGUgQXBwIElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIEFwcCB0aGUgQXBwIENoZWNrIHRva2VuIGJlbG9uZ2VkIHRvLiBUaGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgYWN0dWFsbHkgb25lIG9mIHRoZSBKV1QgdG9rZW4gY2xhaW1zLiBJdCBpcyBhZGRlZCBhcyBhIGNvbnZlbmllbmNlLCBhbmQgaXMgc2V0IGFzIHRoZQogICAgICAgICAgdmFsdWUgb2YgdGhlIHwgc3ViIHByb3BlcnR5LgogICAgICAgIGV4YW1wbGU6ICIxOjEyMzQ1Njc4OTA6YW5kcm9pZDozMjFhYmM0NTZkZWY3ODkwIgogIEV2ZW50OgogICAgdHlwZTogIm9iamVjdCIKICAgIHJlcXVpcmVkOgogICAgICAtICJpZCIKICAgICAgLSAibmFtZSIKICAgICAgLSAid2Vic2l0ZSIKICAgICAgLSAibG9jYXRpb24iCiAgICAgIC0gImRhdGVTdGFydCIKICAgICAgLSAiZGF0ZUVuZCIKICAgIHByb3BlcnRpZXM6CiAgICAgIGlkOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgIG5hbWU6CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgd2Vic2l0ZToKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICBsb2NhdGlvbjoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICBpbWFnZVVybDoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICBzdGF0dXM6CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgb25saW5lOgogICAgICAgIHR5cGU6ICJib29sZWFuIgogICAgICBkYXRlU3RhcnQ6CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgICBmb3JtYXQ6ICJkYXRlIgogICAgICBkYXRlRW5kOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgZm9ybWF0OiAiZGF0ZSIKICAgICAgY2ZwOgogICAgICAgIHR5cGU6ICJvYmplY3QiCiAgICAgICAgcHJvcGVydGllczoKICAgICAgICAgIHN0YXJ0OgogICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICBmb3JtYXQ6ICJkYXRlIgogICAgICAgICAgZW5kOgogICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgICAgICBmb3JtYXQ6ICJkYXRlIgogICAgICAgICAgc2l0ZToKICAgICAgICAgICAgdHlwZTogInN0cmluZyIKICBGaXJlYmFzZUFwcDoKICAgIHR5cGU6ICJvYmplY3QiCiAgICByZXF1aXJlZDoKICAgICAgLSAiYXBwSWQiCiAgICBwcm9wZXJ0aWVzOgogICAgICBhcHBJZDoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGRlc2NyaXB0aW9uOiAiVGhlIGFwcCBJRCB0byB1c2UgYXMgdGhlIEpXVCBhcHBfaWQiCiAgICAgICAgZXhhbXBsZTogIjE6MTIzNDU2Nzg5MDphbmRyb2lkOjMyMWFiYzQ1NmRlZjc4OTAiCnNlY3VyaXR5RGVmaW5pdGlvbnM6CiAgQXBpS2V5QXV0aDoKICAgIG5hbWU6ICJYLUFQSS1LZXkiCiAgICB0eXBlOiAiYXBpS2V5IgogICAgaW46ICJoZWFkZXIiCiAgQXBwQ2hlY2tBdXRoOgogICAgbmFtZTogIlgtRmlyZWJhc2UtQXBwQ2hlY2siCiAgICB0eXBlOiAiYXBpS2V5IgogICAgaW46ICJoZWFkZXIiCnNlY3VyaXR5OgogIC0gQXBpS2V5QXV0aDogWyBdCngtZ29vZ2xlLWJhY2tlbmQ6CiAgYWRkcmVzczogImh0dHBzOi8vcGxheWdyb3VuZC1zZXJ2aWNlLXA1b3lmZjdrcXEtZXcuYS5ydW4uYXBwIgogIHByb3RvY29sOiAiaDIiCg==" -> "c3dhZ2dlcjogIjIuMCIKaW5mbzoKICB0aXRsZTogInBsYXlncm91bmQtYXBpIFBsYXlncm91bmQgU2VydmljZSIKICBkZXNjcmlwdGlvbjogIlBsYXlncm91bmQgU2VydmljZSBkZWZpbml0aW9uIGhvc3RlZCBieSBDbG91ZCBFbmRwb2ludHMgd2l0aCBhIENsb3VkIFJ1biBiYWNrZW5kIgogIHZlcnNpb246ICIxLjAuMCIKaG9zdDogYXBpLmFzaGRhdmllcy5kZXYKc2NoZW1lczoKICAtICJodHRwcyIKY29uc3VtZXM6CiAgLSAiYXBwbGljYXRpb24vanNvbiIKcHJvZHVjZXM6CiAgLSAiYXBwbGljYXRpb24vanNvbiIKcGF0aHM6CiAgLy53ZWxsLWtub3duL2Fzc2V0bGlua3MuanNvbjoKICAgIGdldDoKICAgICAgdGFnczogWyAic3RhdGljIiBdCiAgICAgIHN1bW1hcnk6ICJSZXR1cm5zIEFzc2V0TGlua3MgcHJvdG9jb2wgZmlsZSIKICAgICAgb3BlcmF0aW9uSWQ6ICJnZXRBc3NldExpbmtzIgogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogIk9LIgogICAgICBzZWN1cml0eTogW10KICAvZXZlbnRzL3VwY29taW5nOgogICAgZ2V0OgogICAgICB0YWdzOiBbICJldmVudHMiIF0KICAgICAgc3VtbWFyeTogIlJldHVybiB1cGNvbWluZyBldmVudHMgYnkgc3RhcnQgZGF0ZSIKICAgICAgb3BlcmF0aW9uSWQ6ICJnZXRVcGNvbWluZ0V2ZW50cyIKICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6ICJzdGFydEF0IgogICAgICAgICAgaW46ICJxdWVyeSIKICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICBmb3JtYXQ6ICJkYXRlIgogICAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgc3RhcnQgZGF0ZSB0byBzdGFydCB0aGlzIHF1ZXJ5IGF0LiIKICAgICAgICAtIG5hbWU6ICJsaW1pdCIKICAgICAgICAgIGluOiAicXVlcnkiCiAgICAgICAgICB0eXBlOiAiaW50ZWdlciIKICAgICAgICAgIGZvcm1hdDogImludDMyIgogICAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0dXJuLiIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246ICJPSyIKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogImFycmF5IgogICAgICAgICAgICBpdGVtczoKICAgICAgICAgICAgICAkcmVmOiAiIy9kZWZpbml0aW9ucy9FdmVudCIKICAgICAgc2VjdXJpdHk6CiAgICAgICAgLSBBcGlLZXlBdXRoOiBbIF0KICAgICAgICAgIEFwcENoZWNrQXV0aDogWyBdCiAgL2V2ZW50czphZ2dyZWdhdGU6CiAgICBwb3N0OgogICAgICB0YWdzOiBbICJldmVudHMiIF0KICAgICAgc3VtbWFyeTogIkFnZ3JlZ2F0ZSBldmVudHMgZnJvbSBkYXRhIHNvdXJjZXMiCiAgICAgIG9wZXJhdGlvbklkOiAiYWdncmVnYXRlRXZlbnRzIgogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogIk9LIgogICAgICBzZWN1cml0eToKICAgICAgICAtIEFwaUtleUF1dGg6IFsgXQogICAgICAgICAgQXBwQ2hlY2tBdXRoOiBbIF0KICAvZmlyZWJhc2UvYXV0aDoKICAgIHBvc3Q6CiAgICAgIHRhZ3M6IFsgImZpcmViYXNlIiBdCiAgICAgIHN1bW1hcnk6ICJTaWducyBpbiBvciBzaWducyB1cCBhIHVzZXIiCiAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgU2lnbnMgaW4gb3Igc2lnbnMgdXAgYSB1c2VyIGJ5IGV4Y2hhbmdpbmcgYSBjdXN0b20gQXV0aCB0b2tlbiBmb3IgdGhlIGdpdmVuIFVJRC4gVXBvbiBhIAogICAgICAgIHN1Y2Nlc3NmdWwgc2lnbi1pbiBvciBzaWduLXVwLCBhIG5ldyBJZGVudGl0eSBQbGF0Zm9ybSBJRCB0b2tlbiBhbmQgcmVmcmVzaCB0b2tlbiBhcmUKICAgICAgICBpc3N1ZWQgZm9yIHRoZSB1c2VyLgogICAgICBvcGVyYXRpb25JZDogInNpZ25JbiIKICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6ICJib2R5IgogICAgICAgICAgaW46ICJib2R5IgogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgdHlwZTogIm9iamVjdCIKICAgICAgICAgICAgcmVxdWlyZWQ6CiAgICAgICAgICAgICAgLSAidWlkIgogICAgICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgICAgIHVpZDoKICAgICAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogPgogICAgICAgICAgICAgICAgICBUaGUgVUlEIHRvIHN0b3JlIGluIHRoZSB0b2tlbi4gVGhpcyBpZGVudGlmaWVzIHRoZSB1c2VyIHRvIG90aGVyIEZpcmViYXNlCiAgICAgICAgICAgICAgICAgIHNlcnZpY2VzIChSZWFsdGltZSBEYXRhYmFzZSwgRmlyZWJhc2UgQXV0aCwgZXRjLikuIFNob3VsZCBiZSBsZXNzIHRoYW4gMTI4CiAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuCiAgICAgICAgICAgICAgICBleGFtcGxlOiAiamFuZS5zbWl0aEBleGFtcGxlLmNvbSIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246ICJPSyIKICAgICAgICAgIHNjaGVtYToKICAgICAgICAgICAgJHJlZjogIiMvZGVmaW5pdGlvbnMvQXV0aFJlc3VsdCIKICAvZmlyZWJhc2UvdG9rZW46CiAgICBwb3N0OgogICAgICB0YWdzOiBbICJmaXJlYmFzZSIgXQogICAgICBzdW1tYXJ5OiAiQ3JlYXRlcyBhIG5ldyBBcHAgQ2hlY2sgdG9rZW4iCiAgICAgIG9wZXJhdGlvbklkOiAiY3JlYXRlVG9rZW4iCiAgICAgIHBhcmFtZXRlcnM6CiAgICAgICAgLSBuYW1lOiAiYm9keSIKICAgICAgICAgIGluOiAiYm9keSIKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL0ZpcmViYXNlQXBwIgogICAgICByZXNwb25zZXM6CiAgICAgICAgIjIwMCI6CiAgICAgICAgICBkZXNjcmlwdGlvbjogIk9LIgogICAgICAgICAgc2NoZW1hOgogICAgICAgICAgICAkcmVmOiAiIy9kZWZpbml0aW9ucy9BcHBDaGVja1Rva2VuIgogIC9maXJlYmFzZS90b2tlbjp2ZXJpZnk6CiAgICBwdXQ6CiAgICAgIHRhZ3M6IFsgImZpcmViYXNlIiBdCiAgICAgIHN1bW1hcnk6ICJWZXJpZmllcyBhbiBBcHAgQ2hlY2sgdG9rZW4iCiAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgVmVyaWZpZXMgYSBGaXJlYmFzZSBBcHAgQ2hlY2sgdG9rZW4gKEpXVCkuIElmIHRoZSB0b2tlbiBpcyB2YWxpZCwgdGhlIHByb21pc2UgaXMgZnVsZmlsbGVkCiAgICAgICAgd2l0aCB0aGUgdG9rZW4ncyBkZWNvZGVkIGNsYWltczsgb3RoZXJ3aXNlLCB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KICAgICAgb3BlcmF0aW9uSWQ6ICJ2ZXJpZnlUb2tlbiIKICAgICAgcGFyYW1ldGVyczoKICAgICAgICAtIG5hbWU6ICJYLUZpcmViYXNlLUFwcENoZWNrIgogICAgICAgICAgaW46ICJoZWFkZXIiCiAgICAgICAgICBkZXNjcmlwdGlvbjogIlRoZSBBcHAgQ2hlY2sgdG9rZW4gdG8gdmVyaWZ5IgogICAgICAgICAgcmVxdWlyZWQ6IHRydWUKICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgIHJlc3BvbnNlczoKICAgICAgICAiMjAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiT0siCiAgICAgICAgICBzY2hlbWE6CiAgICAgICAgICAgICRyZWY6ICIjL2RlZmluaXRpb25zL0RlY29kZWRUb2tlbiIKICAgICAgICAiNDAwIjoKICAgICAgICAgIGRlc2NyaXB0aW9uOiAiUmVxdWVzdCBpcyBtaXNzaW5nIGFwcCBjaGVjayB0b2tlbiBoZWFkZXIiCiAgL2hlbGxvOgogICAgZ2V0OgogICAgICB0YWdzOiBbICJoZWxsbyIgXQogICAgICBzdW1tYXJ5OiAiR3JlZXQgdGhlIHVzZXIiCiAgICAgIG9wZXJhdGlvbklkOiAiaGVsbG9Xb3JsZCIKICAgICAgcmVzcG9uc2VzOgogICAgICAgICIyMDAiOgogICAgICAgICAgZGVzY3JpcHRpb246ICJPSyIKZGVmaW5pdGlvbnM6CiAgQXBwQ2hlY2tUb2tlbjoKICAgIHR5cGU6ICJvYmplY3QiCiAgICByZXF1aXJlZDoKICAgICAgLSAidHRsTWlsbGlzIgogICAgICAtICJ0b2tlbiIKICAgIHByb3BlcnRpZXM6CiAgICAgIHR0bE1pbGxpczoKICAgICAgICB0eXBlOiAiaW50ZWdlciIKICAgICAgICBmb3JtYXQ6ICJpbnQ2NCIKICAgICAgICBkZXNjcmlwdGlvbjogIlRoZSB0aW1lLXRvLWxpdmUgZHVyYXRpb24gb2YgdGhlIHRva2VuIGluIG1pbGxpc2Vjb25kcyIKICAgICAgdG9rZW46CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgICBkZXNjcmlwdGlvbjogIlRoZSBGaXJlYmFzZSBBcHAgQ2hlY2sgdG9rZW4iCiAgQXV0aFJlc3VsdDoKICAgIHR5cGU6ICJvYmplY3QiCiAgICBwcm9wZXJ0aWVzOgogICAgICBpZFRva2VuOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgZGVzY3JpcHRpb246ICJBIEZpcmViYXNlIEF1dGggSUQgdG9rZW4gZ2VuZXJhdGVkIGZyb20gdGhlIHByb3ZpZGVkIGN1c3RvbSB0b2tlbi4iCiAgICAgIHJlZnJlc2hUb2tlbjoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGRlc2NyaXB0aW9uOiAiQSBGaXJlYmFzZSBBdXRoIHJlZnJlc2ggdG9rZW4gZ2VuZXJhdGVkIGZyb20gdGhlIHByb3ZpZGVkIGN1c3RvbSB0b2tlbi4iCiAgICAgIGV4cGlyZXNJbjoKICAgICAgICB0eXBlOiAiaW50ZWdlciIKICAgICAgICBmb3JtYXQ6ICJpbnQ2NCIKICAgICAgICBkZXNjcmlwdGlvbjogIlRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiB3aGljaCB0aGUgSUQgdG9rZW4gZXhwaXJlcy4iCiAgICAgICAgZXhhbXBsZTogMzYwMAogIERlY29kZWRUb2tlbjoKICAgIHR5cGU6ICJvYmplY3QiCiAgICByZXF1aXJlZDoKICAgICAgLSAiYXVkaWVuY2UiCiAgICAgIC0gImV4cGlyZXNBdCIKICAgICAgLSAiaXNzdWVkQXQiCiAgICAgIC0gInN1YmplY3QiCiAgICAgIC0gImlzc3VlciIKICAgICAgLSAiYXBwSWQiCiAgICBwcm9wZXJ0aWVzOgogICAgICBhdWRpZW5jZToKICAgICAgICB0eXBlOiAiYXJyYXkiCiAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgIFRoZSBhdWRpZW5jZSBmb3Igd2hpY2ggdGhpcyB0b2tlbiBpcyBpbnRlbmRlZC4gVGhpcyB2YWx1ZSBpcyBhIEpTT04gYXJyYXkgb2YgdHdvIHN0cmluZ3MsCiAgICAgICAgICB0aGUgZmlyc3QgaXMgdGhlIHByb2plY3QgbnVtYmVyIG9mIHlvdXIgRmlyZWJhc2UgcHJvamVjdCwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIHByb2plY3QKICAgICAgICAgIElEIG9mIHRoZSBzYW1lIHByb2plY3QuCiAgICAgICAgaXRlbXM6CiAgICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICBleHBpcmVzQXQ6CiAgICAgICAgdHlwZTogImludGVnZXIiCiAgICAgICAgZm9ybWF0OiAiaW50NjQiCiAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgIFRoZSBBcHAgQ2hlY2sgdG9rZW4ncyBleHBpcmF0aW9uIHRpbWUsIGluIHNlY29uZHMgc2luY2UgdGhlIFVuaXggZXBvY2guIFRoYXQgaXMsIHRoZSB0aW1lCiAgICAgICAgICBhdCB3aGljaCB0aGlzIEFwcCBDaGVjayB0b2tlbiBleHBpcmVzIGFuZCBzaG91bGQgbm8gbG9uZ2VyIGJlIGNvbnNpZGVyZWQgdmFsaWQuCiAgICAgICAgZXhhbXBsZTogIjE2NzI0OTcxMTYiCiAgICAgIGlzc3VlZEF0OgogICAgICAgIHR5cGU6ICJpbnRlZ2VyIgogICAgICAgIGZvcm1hdDogImludDY0IgogICAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgICBUaGUgQXBwIENoZWNrIHRva2VuJ3MgaXNzdWVkLWF0IHRpbWUsIGluIHNlY29uZHMgc2luY2UgdGhlIFVuaXggZXBvY2guIFRoYXQgaXMsIHRoZSB0aW1lCiAgICAgICAgICBhdCB3aGljaCB0aGlzIEFwcCBDaGVjayB0b2tlbiB3YXMgaXNzdWVkIGFuZCBzaG91bGQgc3RhcnQgdG8gYmUgY29uc2lkZXJlZCB2YWxpZC4KICAgICAgICBleGFtcGxlOiAiMTY3MjQ5MzUxNiIKICAgICAgc3ViamVjdDoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgICAgICBUaGUgRmlyZWJhc2UgQXBwIElEIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFwcCB0aGUgdG9rZW4gYmVsb25nZWQgdG8uIEFzIGEgY29udmVuaWVuY2UsCiAgICAgICAgICB0aGlzIHZhbHVlIGlzIGNvcGllZCBvdmVyIHRvIHRoZSB8IGFwcF9pZCBwcm9wZXJ0eS4KICAgICAgICBleGFtcGxlOiAiMToxMjM0NTY3ODkwOmFuZHJvaWQ6MzIxYWJjNDU2ZGVmNzg5MCIKICAgICAgaXNzdWVyOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgIFRoZSBpc3N1ZXIgaWRlbnRpZmllciBmb3IgdGhlIGlzc3VlciBvZiB0aGUgcmVzcG9uc2UuIFRoaXMgdmFsdWUgaXMgYSBVUkwgd2l0aCB0aGUgZm9ybWF0CiAgICAgICAgICBodHRwczovL2ZpcmViYXNlYXBwY2hlY2suZ29vZ2xlYXBpcy5jb20vPFBST0pFQ1RfTlVNQkVSPiwgd2hlcmUgPFBST0pFQ1RfTlVNQkVSPiBpcyB0aGUKICAgICAgICAgIHNhbWUgcHJvamVjdCBudW1iZXIgc3BlY2lmaWVkIGluIHRoZSB8IGF1ZCBwcm9wZXJ0eS4KICAgICAgICBleGFtcGxlOiAiaHR0cHM6Ly9maXJlYmFzZWFwcGNoZWNrLmdvb2dsZWFwaXMuY29tLzEyMzQ1Njc4OTAiCiAgICAgIGFwcElkOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICAgIFRoZSBBcHAgSUQgY29ycmVzcG9uZGluZyB0byB0aGUgQXBwIHRoZSBBcHAgQ2hlY2sgdG9rZW4gYmVsb25nZWQgdG8uIFRoaXMgdmFsdWUgaXMgbm90CiAgICAgICAgICBhY3R1YWxseSBvbmUgb2YgdGhlIEpXVCB0b2tlbiBjbGFpbXMuIEl0IGlzIGFkZGVkIGFzIGEgY29udmVuaWVuY2UsIGFuZCBpcyBzZXQgYXMgdGhlCiAgICAgICAgICB2YWx1ZSBvZiB0aGUgfCBzdWIgcHJvcGVydHkuCiAgICAgICAgZXhhbXBsZTogIjE6MTIzNDU2Nzg5MDphbmRyb2lkOjMyMWFiYzQ1NmRlZjc4OTAiCiAgRXZlbnQ6CiAgICB0eXBlOiAib2JqZWN0IgogICAgcmVxdWlyZWQ6CiAgICAgIC0gImlkIgogICAgICAtICJuYW1lIgogICAgICAtICJ3ZWJzaXRlIgogICAgICAtICJsb2NhdGlvbiIKICAgICAgLSAiZGF0ZVN0YXJ0IgogICAgICAtICJkYXRlRW5kIgogICAgcHJvcGVydGllczoKICAgICAgaWQ6CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgbmFtZToKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICB3ZWJzaXRlOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgIGxvY2F0aW9uOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgIGltYWdlVXJsOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgIHN0YXR1czoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICBvbmxpbmU6CiAgICAgICAgdHlwZTogImJvb2xlYW4iCiAgICAgIGRhdGVTdGFydDoKICAgICAgICB0eXBlOiAic3RyaW5nIgogICAgICAgIGZvcm1hdDogImRhdGUiCiAgICAgIGRhdGVFbmQ6CiAgICAgICAgdHlwZTogInN0cmluZyIKICAgICAgICBmb3JtYXQ6ICJkYXRlIgogICAgICBjZnA6CiAgICAgICAgdHlwZTogIm9iamVjdCIKICAgICAgICBwcm9wZXJ0aWVzOgogICAgICAgICAgc3RhcnQ6CiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIGZvcm1hdDogImRhdGUiCiAgICAgICAgICBlbmQ6CiAgICAgICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgICAgIGZvcm1hdDogImRhdGUiCiAgICAgICAgICBzaXRlOgogICAgICAgICAgICB0eXBlOiAic3RyaW5nIgogIEZpcmViYXNlQXBwOgogICAgdHlwZTogIm9iamVjdCIKICAgIHJlcXVpcmVkOgogICAgICAtICJhcHBJZCIKICAgIHByb3BlcnRpZXM6CiAgICAgIGFwcElkOgogICAgICAgIHR5cGU6ICJzdHJpbmciCiAgICAgICAgZGVzY3JpcHRpb246ICJUaGUgYXBwIElEIHRvIHVzZSBhcyB0aGUgSldUIGFwcF9pZCIKICAgICAgICBleGFtcGxlOiAiMToxMjM0NTY3ODkwOmFuZHJvaWQ6MzIxYWJjNDU2ZGVmNzg5MCIKc2VjdXJpdHlEZWZpbml0aW9uczoKICBBcGlLZXlBdXRoOgogICAgbmFtZTogIlgtQVBJLUtleSIKICAgIHR5cGU6ICJhcGlLZXkiCiAgICBpbjogImhlYWRlciIKICBBcHBDaGVja0F1dGg6CiAgICBuYW1lOiAiWC1GaXJlYmFzZS1BcHBDaGVjayIKICAgIHR5cGU6ICJhcGlLZXkiCiAgICBpbjogImhlYWRlciIKc2VjdXJpdHk6CiAgLSBBcGlLZXlBdXRoOiBbIF0KeC1nb29nbGUtYmFja2VuZDoKICBhZGRyZXNzOiAiaHR0cHM6Ly9wbGF5Z3JvdW5kLXNlcnZpY2UtcDVveWZmN2txcS1ldy5hLnJ1bi5hcHAiCiAgcHJvdG9jb2w6ICJoMiIK" # forces replacement
                # (1 unchanged attribute hidden)
            }
        }
    }

  # module.api-gateway.google_api_gateway_gateway.main will be updated in-place
  ~ resource "google_api_gateway_gateway" "main" {
      ~ api_config       = "projects/279861227938/locations/global/apis/playground-api/configs/terraform-20240806165742887100000001" -> (known after apply)
        id               = "projects/playground-1a136/locations/europe-west1/gateways/playground-api-gateway"
        name             = "projects/playground-1a136/locations/europe-west1/gateways/playground-api-gateway"
        # (8 unchanged attributes hidden)
    }

  # module.cloud-run-endpoint.google_endpoints_service.main must be replaced
-/+ resource "google_endpoints_service" "main" {
      ~ apis           = [
          - {
              - methods = [
                  - {
                      - name          = "GetAssetLinks"
                      - request_type  = "type.googleapis.com/google.protobuf.Empty"
                      - response_type = "type.googleapis.com/google.protobuf.Value"
                        # (1 unchanged attribute hidden)
                    },
                  - {
                      - name          = "GetUpcomingEvents"
                      - request_type  = "type.googleapis.com/GetUpcomingEventsRequest"
                      - response_type = "type.googleapis.com/google.protobuf.ListValue"
                        # (1 unchanged attribute hidden)
                    },
                  - {
                      - name          = "AggregateEvents"
                      - request_type  = "type.googleapis.com/google.protobuf.Empty"
                      - response_type = "type.googleapis.com/google.protobuf.Value"
                        # (1 unchanged attribute hidden)
                    },
                  - {
                      - name          = "SignIn"
                      - request_type  = "type.googleapis.com/SignInRequest"
                      - response_type = "type.googleapis.com/AuthResult"
                        # (1 unchanged attribute hidden)
                    },
                  - {
                      - name          = "CreateToken"
                      - request_type  = "type.googleapis.com/CreateTokenRequest"
                      - response_type = "type.googleapis.com/AppCheckToken"
                        # (1 unchanged attribute hidden)
                    },
                  - {
                      - name          = "VerifyToken"
                      - request_type  = "type.googleapis.com/VerifyTokenRequest"
                      - response_type = "type.googleapis.com/DecodedToken"
                        # (1 unchanged attribute hidden)
                    },
                  - {
                      - name          = "HelloWorld"
                      - request_type  = "type.googleapis.com/google.protobuf.Empty"
                      - response_type = "type.googleapis.com/google.protobuf.Value"
                        # (1 unchanged attribute hidden)
                    },
                ]
              - name    = "1.playground_ashdavies_dev"
              - version = "1.0.0"
                # (1 unchanged attribute hidden)
            },
        ] -> (known after apply)
      ~ config_id      = "2024-08-06r0" -> (known after apply)
      ~ dns_address    = "playground.ashdavies.dev" -> (known after apply)
      ~ endpoints      = [
          - {
              - name    = "playground.ashdavies.dev"
                # (1 unchanged attribute hidden)
            },
        ] -> (known after apply)
      ~ id             = "playground.ashdavies.dev" -> (known after apply)
      ~ openapi_config = <<-EOT
            swagger: "2.0"
            info:
              title: "playground-api Playground Service"
              description: "Playground Service definition hosted by Cloud Endpoints with a Cloud Run backend"
              version: "1.0.0"
          - host: playground.ashdavies.dev
          + host: api.ashdavies.dev
            schemes:
              - "https"
            consumes:
              - "application/json"
            produces:
              - "application/json"
            paths:
              /.well-known/assetlinks.json:
                get:
                  tags: [ "static" ]
                  summary: "Returns AssetLinks protocol file"
                  operationId: "getAssetLinks"
                  responses:
                    "200":
                      description: "OK"
                  security: []
              /events/upcoming:
                get:
                  tags: [ "events" ]
                  summary: "Return upcoming events by start date"
                  operationId: "getUpcomingEvents"
                  parameters:
                    - name: "startAt"
                      in: "query"
                      type: "string"
                      format: "date"
                      description: "The start date to start this query at."
                    - name: "limit"
                      in: "query"
                      type: "integer"
                      format: "int32"
                      description: "The maximum number of items to return."
                  responses:
                    "200":
                      description: "OK"
                      schema:
                        type: "array"
                        items:
                          $ref: "#/definitions/Event"
                  security:
                    - ApiKeyAuth: [ ]
                      AppCheckAuth: [ ]
              /events:aggregate:
                post:
                  tags: [ "events" ]
                  summary: "Aggregate events from data sources"
                  operationId: "aggregateEvents"
                  responses:
                    "200":
                      description: "OK"
                  security:
                    - ApiKeyAuth: [ ]
                      AppCheckAuth: [ ]
              /firebase/auth:
                post:
                  tags: [ "firebase" ]
                  summary: "Signs in or signs up a user"
                  description: >
                    Signs in or signs up a user by exchanging a custom Auth token for the given UID. Upon a 
                    successful sign-in or sign-up, a new Identity Platform ID token and refresh token are
                    issued for the user.
                  operationId: "signIn"
                  parameters:
                    - name: "body"
                      in: "body"
                      required: true
                      schema:
                        type: "object"
                        required:
                          - "uid"
                        properties:
                          uid:
                            type: "string"
                            description: >
                              The UID to store in the token. This identifies the user to other Firebase
                              services (Realtime Database, Firebase Auth, etc.). Should be less than 128
                              characters.
                            example: "[email protected]"
                  responses:
                    "200":
                      description: "OK"
                      schema:
                        $ref: "#/definitions/AuthResult"
              /firebase/token:
                post:
                  tags: [ "firebase" ]
                  summary: "Creates a new App Check token"
                  operationId: "createToken"
                  parameters:
                    - name: "body"
                      in: "body"
                      required: true
                      schema:
                        $ref: "#/definitions/FirebaseApp"
                  responses:
                    "200":
                      description: "OK"
                      schema:
                        $ref: "#/definitions/AppCheckToken"
              /firebase/token:verify:
                put:
                  tags: [ "firebase" ]
                  summary: "Verifies an App Check token"
                  description: >
                    Verifies a Firebase App Check token (JWT). If the token is valid, the promise is fulfilled
                    with the token's decoded claims; otherwise, the promise is rejected.
                  operationId: "verifyToken"
                  parameters:
                    - name: "X-Firebase-AppCheck"
                      in: "header"
                      description: "The App Check token to verify"
                      required: true
                      type: "string"
                  responses:
                    "200":
                      description: "OK"
                      schema:
                        $ref: "#/definitions/DecodedToken"
                    "400":
                      description: "Request is missing app check token header"
              /hello:
                get:
                  tags: [ "hello" ]
                  summary: "Greet the user"
                  operationId: "helloWorld"
                  responses:
                    "200":
                      description: "OK"
            definitions:
              AppCheckToken:
                type: "object"
                required:
                  - "ttlMillis"
                  - "token"
                properties:
                  ttlMillis:
                    type: "integer"
                    format: "int64"
                    description: "The time-to-live duration of the token in milliseconds"
                  token:
                    type: "string"
                    description: "The Firebase App Check token"
              AuthResult:
                type: "object"
                properties:
                  idToken:
                    type: "string"
                    description: "A Firebase Auth ID token generated from the provided custom token."
                  refreshToken:
                    type: "string"
                    description: "A Firebase Auth refresh token generated from the provided custom token."
                  expiresIn:
                    type: "integer"
                    format: "int64"
                    description: "The number of seconds in which the ID token expires."
                    example: 3600
              DecodedToken:
                type: "object"
                required:
                  - "audience"
                  - "expiresAt"
                  - "issuedAt"
                  - "subject"
                  - "issuer"
                  - "appId"
                properties:
                  audience:
                    type: "array"
                    description: >
                      The audience for which this token is intended. This value is a JSON array of two strings,
                      the first is the project number of your Firebase project, and the second is the project
                      ID of the same project.
                    items:
                      type: "string"
                  expiresAt:
                    type: "integer"
                    format: "int64"
                    description: >
                      The App Check token's expiration time, in seconds since the Unix epoch. That is, the time
                      at which this App Check token expires and should no longer be considered valid.
                    example: "1672497116"
                  issuedAt:
                    type: "integer"
                    format: "int64"
                    description: >
                      The App Check token's issued-at time, in seconds since the Unix epoch. That is, the time
                      at which this App Check token was issued and should start to be considered valid.
                    example: "1672493516"
                  subject:
                    type: "string"
                    description: >
                      The Firebase App ID corresponding to the app the token belonged to. As a convenience,
                      this value is copied over to the | app_id property.
                    example: "1:1234567890:android:321abc456def7890"
                  issuer:
                    type: "string"
                    description: >
                      The issuer identifier for the issuer of the response. This value is a URL with the format
                      https://firebaseappcheck.googleapis.com/<PROJECT_NUMBER>, where <PROJECT_NUMBER> is the
                      same project number specified in the | aud property.
                    example: "https://firebaseappcheck.googleapis.com/1234567890"
                  appId:
                    type: "string"
                    description: >
                      The App ID corresponding to the App the App Check token belonged to. This value is not
                      actually one of the JWT token claims. It is added as a convenience, and is set as the
                      value of the | sub property.
                    example: "1:1234567890:android:321abc456def7890"
              Event:
                type: "object"
                required:
                  - "id"
                  - "name"
                  - "website"
                  - "location"
                  - "dateStart"
                  - "dateEnd"
                properties:
                  id:
                    type: "string"
                  name:
                    type: "string"
                  website:
                    type: "string"
                  location:
                    type: "string"
                  imageUrl:
                    type: "string"
                  status:
                    type: "string"
                  online:
                    type: "boolean"
                  dateStart:
                    type: "string"
                    format: "date"
                  dateEnd:
                    type: "string"
                    format: "date"
                  cfp:
                    type: "object"
                    properties:
                      start:
                        type: "string"
                        format: "date"
                      end:
                        type: "string"
                        format: "date"
                      site:
                        type: "string"
              FirebaseApp:
                type: "object"
                required:
                  - "appId"
                properties:
                  appId:
                    type: "string"
                    description: "The app ID to use as the JWT app_id"
                    example: "1:1234567890:android:321abc456def7890"
            securityDefinitions:
              ApiKeyAuth:
                name: "X-API-Key"
                type: "apiKey"
                in: "header"
              AppCheckAuth:
                name: "X-Firebase-AppCheck"
                type: "apiKey"
                in: "header"
            security:
              - ApiKeyAuth: [ ]
            x-google-backend:
              address: "https://playground-service-p5oyff7kqq-ew.a.run.app"
              protocol: "h2"
        EOT
      ~ service_name   = "playground.ashdavies.dev" -> "api.ashdavies.dev" # forces replacement
        # (1 unchanged attribute hidden)
    }

  # module.cloud-run-endpoint.null_resource.main must be replaced
-/+ resource "null_resource" "main" {
      ~ id       = "4475904511356956256" -> (known after apply)
      ~ triggers = { # forces replacement
          ~ "config_id"   = "2024-08-06r0" -> (known after apply)
            # (1 unchanged element hidden)
        }
    }

Plan: 4 to add, 1 to change, 4 to destroy.

Copy link
Contributor

github-actions bot commented Nov 7, 2024

Build scan published to https://gradle.com/s/dwdhuirykcwiq

@ashdavies ashdavies merged commit c5ef207 into main Nov 7, 2024
2 checks passed
@ashdavies ashdavies deleted the fix/openapi-spec-endpoint branch November 7, 2024 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant