From f47bef0cd1f81b37855f519be91da60c16546349 Mon Sep 17 00:00:00 2001 From: Jye Cusch Date: Thu, 27 Jun 2024 13:02:01 +1000 Subject: [PATCH] feat: add terraform GCP provider (preview) (#632) Co-authored-by: Tim Holm Co-authored-by: David Moore --- cloud/common/deploy/provider/pulumi.go | 4 +- cloud/gcp/.gitignore | 4 +- cloud/gcp/.golangci.yml | 2 + cloud/gcp/.goreleaser.yaml | 31 +- cloud/gcp/Makefile | 33 +- cloud/gcp/cmd/deploy/main.go | 2 +- cloud/gcp/cmd/deploytf/main.go | 32 + cloud/gcp/{deploy => common}/config.go | 2 +- .../gcp/{deploy => common}/runtime/runtime.go | 0 cloud/gcp/deploy/api.go | 3 - cloud/gcp/deploy/deploy.go | 5 +- cloud/gcp/deploy/queue.go | 14 - cloud/gcp/deploy/schedule.go | 5 - .../gcp/deploytf/.nitric/modules/api/main.tf | 73 ++ .../deploytf/.nitric/modules/api/outputs.tf | 3 + .../deploytf/.nitric/modules/api/variables.tf | 19 + .../deploytf/.nitric/modules/bucket/main.tf | 91 +++ .../.nitric/modules/bucket/outputs.tf | 14 + .../.nitric/modules/bucket/variables.tf | 27 + .../.nitric/modules/http_proxy/main.tf | 46 ++ .../modules/http_proxy/openapi_template.json | 84 ++ .../.nitric/modules/http_proxy/outputs.tf | 0 .../.nitric/modules/http_proxy/variables.tf | 19 + .../.nitric/modules/keyvalue/readme.md | 1 + .../deploytf/.nitric/modules/policy/main.tf | 91 +++ .../.nitric/modules/policy/outputs.tf | 0 .../.nitric/modules/policy/variables.tf | 37 + .../deploytf/.nitric/modules/queue/main.tf | 24 + .../deploytf/.nitric/modules/queue/outputs.tf | 4 + .../.nitric/modules/queue/variables.tf | 9 + .../deploytf/.nitric/modules/roles/main.tf | 155 ++++ .../deploytf/.nitric/modules/roles/output.tf | 59 ++ .../.nitric/modules/roles/variables.tf | 0 .../deploytf/.nitric/modules/schedule/main.tf | 21 + .../.nitric/modules/schedule/outputs.tf | 0 .../.nitric/modules/schedule/variables.tf | 30 + .../deploytf/.nitric/modules/secret/main.tf | 14 + .../.nitric/modules/secret/outputs.tf | 4 + .../.nitric/modules/secret/variables.tf | 9 + .../deploytf/.nitric/modules/service/main.tf | 153 ++++ .../.nitric/modules/service/outputs.tf | 19 + .../.nitric/modules/service/variables.tf | 54 ++ .../deploytf/.nitric/modules/stack/main.tf | 98 +++ .../deploytf/.nitric/modules/stack/outputs.tf | 13 + .../.nitric/modules/stack/variables.tf | 4 + .../deploytf/.nitric/modules/topic/main.tf | 32 + .../deploytf/.nitric/modules/topic/outputs.tf | 5 + .../.nitric/modules/topic/variables.tf | 19 + cloud/gcp/deploytf/README.md | 1 + cloud/gcp/deploytf/api.go | 230 ++++++ cloud/gcp/deploytf/bucket.go | 72 ++ cloud/gcp/deploytf/cdktf.json | 51 ++ cloud/gcp/deploytf/deploy.go | 147 ++++ cloud/gcp/deploytf/generated/api/Api.go | 545 +++++++++++++ cloud/gcp/deploytf/generated/api/ApiConfig.go | 24 + .../gcp/deploytf/generated/api/Api__checks.go | 142 ++++ .../deploytf/generated/api/Api__no_checks.go | 54 ++ .../deploytf/generated/api/internal/types.go | 7 + .../deploytf/generated/api/jsii/api-0.0.0.tgz | Bin 0 -> 17230 bytes cloud/gcp/deploytf/generated/api/jsii/jsii.go | 28 + cloud/gcp/deploytf/generated/api/main.go | 55 ++ cloud/gcp/deploytf/generated/api/version | 1 + cloud/gcp/deploytf/generated/bucket/Bucket.go | 564 ++++++++++++++ .../deploytf/generated/bucket/BucketConfig.go | 29 + .../generated/bucket/Bucket__checks.go | 134 ++++ .../generated/bucket/Bucket__no_checks.go | 50 ++ .../generated/bucket/internal/types.go | 7 + .../generated/bucket/jsii/bucket-0.0.0.tgz | Bin 0 -> 17313 bytes .../deploytf/generated/bucket/jsii/jsii.go | 28 + cloud/gcp/deploytf/generated/bucket/main.go | 57 ++ cloud/gcp/deploytf/generated/bucket/version | 1 + cloud/gcp/deploytf/generated/constraints.json | 4 + .../generated/http_proxy/HttpProxy.go | 534 +++++++++++++ .../generated/http_proxy/HttpProxyConfig.go | 24 + .../generated/http_proxy/HttpProxy__checks.go | 142 ++++ .../http_proxy/HttpProxy__no_checks.go | 54 ++ .../generated/http_proxy/internal/types.go | 7 + .../http_proxy/jsii/http_proxy-0.0.0.tgz | Bin 0 -> 17099 bytes .../generated/http_proxy/jsii/jsii.go | 28 + .../gcp/deploytf/generated/http_proxy/main.go | 54 ++ .../gcp/deploytf/generated/http_proxy/version | 1 + .../deploytf/generated/keyvalue/Keyvalue.go | 513 +++++++++++++ .../generated/keyvalue/KeyvalueConfig.go | 34 + .../generated/keyvalue/Keyvalue__checks.go | 140 ++++ .../generated/keyvalue/Keyvalue__no_checks.go | 60 ++ .../generated/keyvalue/internal/types.go | 21 + .../deploytf/generated/keyvalue/jsii/jsii.go | 42 + .../keyvalue/jsii/keyvalue-0.0.0.tgz | Bin 0 -> 17819 bytes cloud/gcp/deploytf/generated/keyvalue/main.go | 67 ++ cloud/gcp/deploytf/generated/keyvalue/version | 1 + cloud/gcp/deploytf/generated/policy/Policy.go | 557 ++++++++++++++ .../deploytf/generated/policy/PolicyConfig.go | 26 + .../generated/policy/Policy__checks.go | 150 ++++ .../generated/policy/Policy__no_checks.go | 58 ++ .../generated/policy/internal/types.go | 7 + .../deploytf/generated/policy/jsii/jsii.go | 28 + .../generated/policy/jsii/policy-0.0.0.tgz | Bin 0 -> 17296 bytes cloud/gcp/deploytf/generated/policy/main.go | 55 ++ cloud/gcp/deploytf/generated/policy/version | 1 + cloud/gcp/deploytf/generated/queue/Queue.go | 499 ++++++++++++ .../deploytf/generated/queue/QueueConfig.go | 20 + .../deploytf/generated/queue/Queue__checks.go | 126 +++ .../generated/queue/Queue__no_checks.go | 46 ++ .../generated/queue/internal/types.go | 7 + .../gcp/deploytf/generated/queue/jsii/jsii.go | 28 + .../generated/queue/jsii/queue-0.0.0.tgz | Bin 0 -> 17041 bytes cloud/gcp/deploytf/generated/queue/main.go | 53 ++ cloud/gcp/deploytf/generated/queue/version | 1 + .../deploytf/generated/schedule/Schedule.go | 580 ++++++++++++++ .../generated/schedule/ScheduleConfig.go | 28 + .../generated/schedule/Schedule__checks.go | 158 ++++ .../generated/schedule/Schedule__no_checks.go | 62 ++ .../generated/schedule/internal/types.go | 7 + .../deploytf/generated/schedule/jsii/jsii.go | 28 + .../schedule/jsii/schedule-0.0.0.tgz | Bin 0 -> 16849 bytes cloud/gcp/deploytf/generated/schedule/main.go | 56 ++ cloud/gcp/deploytf/generated/schedule/version | 1 + cloud/gcp/deploytf/generated/secret/Secret.go | 499 ++++++++++++ .../deploytf/generated/secret/SecretConfig.go | 20 + .../generated/secret/Secret__checks.go | 126 +++ .../generated/secret/Secret__no_checks.go | 46 ++ .../generated/secret/internal/types.go | 7 + .../deploytf/generated/secret/jsii/jsii.go | 28 + .../generated/secret/jsii/secret-0.0.0.tgz | Bin 0 -> 17376 bytes cloud/gcp/deploytf/generated/secret/main.go | 53 ++ cloud/gcp/deploytf/generated/secret/version | 1 + .../gcp/deploytf/generated/service/Service.go | 718 ++++++++++++++++++ .../generated/service/ServiceConfig.go | 36 + .../generated/service/Service__checks.go | 166 ++++ .../generated/service/Service__no_checks.go | 66 ++ .../generated/service/internal/types.go | 7 + .../deploytf/generated/service/jsii/jsii.go | 28 + .../generated/service/jsii/service-0.0.0.tgz | Bin 0 -> 17110 bytes cloud/gcp/deploytf/generated/service/main.go | 65 ++ cloud/gcp/deploytf/generated/service/version | 1 + cloud/gcp/deploytf/generated/stack/Stack.go | 498 ++++++++++++ .../deploytf/generated/stack/StackConfig.go | 18 + .../deploytf/generated/stack/Stack__checks.go | 118 +++ .../generated/stack/Stack__no_checks.go | 42 + .../generated/stack/internal/types.go | 7 + .../gcp/deploytf/generated/stack/jsii/jsii.go | 28 + .../generated/stack/jsii/stack-0.0.0.tgz | Bin 0 -> 16914 bytes cloud/gcp/deploytf/generated/stack/main.go | 54 ++ cloud/gcp/deploytf/generated/stack/version | 1 + cloud/gcp/deploytf/generated/topic/Topic.go | 522 +++++++++++++ .../deploytf/generated/topic/TopicConfig.go | 24 + .../deploytf/generated/topic/Topic__checks.go | 134 ++++ .../generated/topic/Topic__no_checks.go | 50 ++ .../generated/topic/internal/types.go | 7 + .../gcp/deploytf/generated/topic/jsii/jsii.go | 28 + .../generated/topic/jsii/topic-0.0.0.tgz | Bin 0 -> 16897 bytes cloud/gcp/deploytf/generated/topic/main.go | 54 ++ cloud/gcp/deploytf/generated/topic/version | 1 + cloud/gcp/deploytf/generated/versions.json | 1 + .../deploytf/generated/websocket/Websocket.go | 593 +++++++++++++++ .../generated/websocket/WebsocketConfig.go | 40 + .../generated/websocket/Websocket__checks.go | 164 ++++ .../websocket/Websocket__no_checks.go | 72 ++ .../generated/websocket/internal/types.go | 21 + .../deploytf/generated/websocket/jsii/jsii.go | 42 + .../websocket/jsii/websocket-0.0.0.tgz | Bin 0 -> 18223 bytes .../gcp/deploytf/generated/websocket/main.go | 71 ++ .../gcp/deploytf/generated/websocket/version | 1 + cloud/gcp/deploytf/http.go | 33 + cloud/gcp/deploytf/keyvalue.go | 25 + cloud/gcp/deploytf/policy.go | 89 +++ cloud/gcp/deploytf/queue.go | 32 + cloud/gcp/deploytf/schedule.go | 72 ++ cloud/gcp/deploytf/secret.go | 32 + cloud/gcp/deploytf/service.go | 95 +++ cloud/gcp/deploytf/sql.go | 27 + cloud/gcp/deploytf/topic.go | 60 ++ cloud/gcp/deploytf/websocket.go | 26 + cloud/gcp/go.mod | 66 +- cloud/gcp/go.sum | 232 +++--- go.work.sum | 11 +- 176 files changed, 12953 insertions(+), 208 deletions(-) create mode 100644 cloud/gcp/cmd/deploytf/main.go rename cloud/gcp/{deploy => common}/config.go (99%) rename cloud/gcp/{deploy => common}/runtime/runtime.go (100%) create mode 100644 cloud/gcp/deploytf/.nitric/modules/api/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/api/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/api/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/bucket/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/bucket/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/bucket/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/http_proxy/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/http_proxy/openapi_template.json create mode 100644 cloud/gcp/deploytf/.nitric/modules/http_proxy/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/http_proxy/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/keyvalue/readme.md create mode 100644 cloud/gcp/deploytf/.nitric/modules/policy/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/policy/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/policy/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/queue/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/queue/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/queue/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/roles/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/roles/output.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/roles/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/schedule/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/schedule/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/schedule/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/secret/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/secret/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/secret/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/service/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/service/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/service/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/stack/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/stack/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/stack/variables.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/topic/main.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/topic/outputs.tf create mode 100644 cloud/gcp/deploytf/.nitric/modules/topic/variables.tf create mode 100644 cloud/gcp/deploytf/README.md create mode 100644 cloud/gcp/deploytf/api.go create mode 100644 cloud/gcp/deploytf/bucket.go create mode 100644 cloud/gcp/deploytf/cdktf.json create mode 100644 cloud/gcp/deploytf/deploy.go create mode 100644 cloud/gcp/deploytf/generated/api/Api.go create mode 100644 cloud/gcp/deploytf/generated/api/ApiConfig.go create mode 100644 cloud/gcp/deploytf/generated/api/Api__checks.go create mode 100644 cloud/gcp/deploytf/generated/api/Api__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/api/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/api/jsii/api-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/api/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/api/main.go create mode 100644 cloud/gcp/deploytf/generated/api/version create mode 100644 cloud/gcp/deploytf/generated/bucket/Bucket.go create mode 100644 cloud/gcp/deploytf/generated/bucket/BucketConfig.go create mode 100644 cloud/gcp/deploytf/generated/bucket/Bucket__checks.go create mode 100644 cloud/gcp/deploytf/generated/bucket/Bucket__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/bucket/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/bucket/jsii/bucket-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/bucket/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/bucket/main.go create mode 100644 cloud/gcp/deploytf/generated/bucket/version create mode 100644 cloud/gcp/deploytf/generated/constraints.json create mode 100644 cloud/gcp/deploytf/generated/http_proxy/HttpProxy.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/HttpProxyConfig.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/HttpProxy__checks.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/HttpProxy__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/jsii/http_proxy-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/http_proxy/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/main.go create mode 100644 cloud/gcp/deploytf/generated/http_proxy/version create mode 100644 cloud/gcp/deploytf/generated/keyvalue/Keyvalue.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/KeyvalueConfig.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/Keyvalue__checks.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/Keyvalue__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/jsii/keyvalue-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/keyvalue/main.go create mode 100644 cloud/gcp/deploytf/generated/keyvalue/version create mode 100644 cloud/gcp/deploytf/generated/policy/Policy.go create mode 100644 cloud/gcp/deploytf/generated/policy/PolicyConfig.go create mode 100644 cloud/gcp/deploytf/generated/policy/Policy__checks.go create mode 100644 cloud/gcp/deploytf/generated/policy/Policy__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/policy/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/policy/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/policy/jsii/policy-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/policy/main.go create mode 100644 cloud/gcp/deploytf/generated/policy/version create mode 100644 cloud/gcp/deploytf/generated/queue/Queue.go create mode 100644 cloud/gcp/deploytf/generated/queue/QueueConfig.go create mode 100644 cloud/gcp/deploytf/generated/queue/Queue__checks.go create mode 100644 cloud/gcp/deploytf/generated/queue/Queue__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/queue/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/queue/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/queue/jsii/queue-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/queue/main.go create mode 100644 cloud/gcp/deploytf/generated/queue/version create mode 100644 cloud/gcp/deploytf/generated/schedule/Schedule.go create mode 100644 cloud/gcp/deploytf/generated/schedule/ScheduleConfig.go create mode 100644 cloud/gcp/deploytf/generated/schedule/Schedule__checks.go create mode 100644 cloud/gcp/deploytf/generated/schedule/Schedule__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/schedule/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/schedule/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/schedule/jsii/schedule-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/schedule/main.go create mode 100644 cloud/gcp/deploytf/generated/schedule/version create mode 100644 cloud/gcp/deploytf/generated/secret/Secret.go create mode 100644 cloud/gcp/deploytf/generated/secret/SecretConfig.go create mode 100644 cloud/gcp/deploytf/generated/secret/Secret__checks.go create mode 100644 cloud/gcp/deploytf/generated/secret/Secret__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/secret/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/secret/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/secret/jsii/secret-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/secret/main.go create mode 100644 cloud/gcp/deploytf/generated/secret/version create mode 100644 cloud/gcp/deploytf/generated/service/Service.go create mode 100644 cloud/gcp/deploytf/generated/service/ServiceConfig.go create mode 100644 cloud/gcp/deploytf/generated/service/Service__checks.go create mode 100644 cloud/gcp/deploytf/generated/service/Service__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/service/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/service/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/service/jsii/service-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/service/main.go create mode 100644 cloud/gcp/deploytf/generated/service/version create mode 100644 cloud/gcp/deploytf/generated/stack/Stack.go create mode 100644 cloud/gcp/deploytf/generated/stack/StackConfig.go create mode 100644 cloud/gcp/deploytf/generated/stack/Stack__checks.go create mode 100644 cloud/gcp/deploytf/generated/stack/Stack__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/stack/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/stack/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/stack/jsii/stack-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/stack/main.go create mode 100644 cloud/gcp/deploytf/generated/stack/version create mode 100644 cloud/gcp/deploytf/generated/topic/Topic.go create mode 100644 cloud/gcp/deploytf/generated/topic/TopicConfig.go create mode 100644 cloud/gcp/deploytf/generated/topic/Topic__checks.go create mode 100644 cloud/gcp/deploytf/generated/topic/Topic__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/topic/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/topic/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/topic/jsii/topic-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/topic/main.go create mode 100644 cloud/gcp/deploytf/generated/topic/version create mode 100644 cloud/gcp/deploytf/generated/versions.json create mode 100644 cloud/gcp/deploytf/generated/websocket/Websocket.go create mode 100644 cloud/gcp/deploytf/generated/websocket/WebsocketConfig.go create mode 100644 cloud/gcp/deploytf/generated/websocket/Websocket__checks.go create mode 100644 cloud/gcp/deploytf/generated/websocket/Websocket__no_checks.go create mode 100644 cloud/gcp/deploytf/generated/websocket/internal/types.go create mode 100644 cloud/gcp/deploytf/generated/websocket/jsii/jsii.go create mode 100644 cloud/gcp/deploytf/generated/websocket/jsii/websocket-0.0.0.tgz create mode 100644 cloud/gcp/deploytf/generated/websocket/main.go create mode 100644 cloud/gcp/deploytf/generated/websocket/version create mode 100644 cloud/gcp/deploytf/http.go create mode 100644 cloud/gcp/deploytf/keyvalue.go create mode 100644 cloud/gcp/deploytf/policy.go create mode 100644 cloud/gcp/deploytf/queue.go create mode 100644 cloud/gcp/deploytf/schedule.go create mode 100644 cloud/gcp/deploytf/secret.go create mode 100644 cloud/gcp/deploytf/service.go create mode 100644 cloud/gcp/deploytf/sql.go create mode 100644 cloud/gcp/deploytf/topic.go create mode 100644 cloud/gcp/deploytf/websocket.go diff --git a/cloud/common/deploy/provider/pulumi.go b/cloud/common/deploy/provider/pulumi.go index 6e4ab9427..b5ce8eb1e 100644 --- a/cloud/common/deploy/provider/pulumi.go +++ b/cloud/common/deploy/provider/pulumi.go @@ -142,12 +142,12 @@ func createPulumiProgramForNitricProvider(req *deploymentspb.DeploymentUpRequest func stackAndProjectFromAttributes(attributesMap map[string]interface{}) (string, string, error) { projectName, ok := attributesMap["project"].(string) if !ok { - return "", "", fmt.Errorf("") + return "", "", fmt.Errorf("project not found in attributes") } stackName, ok := attributesMap["stack"].(string) if !ok { - return "", "", fmt.Errorf("") + return "", "", fmt.Errorf("stack not found in attributes") } return projectName, stackName, nil diff --git a/cloud/gcp/.gitignore b/cloud/gcp/.gitignore index 9a6a84dee..711ca87d3 100644 --- a/cloud/gcp/.gitignore +++ b/cloud/gcp/.gitignore @@ -1,2 +1,4 @@ deploy/runtime-gcp -dist/ \ No newline at end of file +dist/ + +common/runtime/runtime-gcp \ No newline at end of file diff --git a/cloud/gcp/.golangci.yml b/cloud/gcp/.golangci.yml index 02b04f051..c1195681c 100644 --- a/cloud/gcp/.golangci.yml +++ b/cloud/gcp/.golangci.yml @@ -23,6 +23,8 @@ linters: issues: max-issues-per-linter: 0 max-same-issues: 0 + exclude-dirs: + - deploytf/generated linters-settings: govet: diff --git a/cloud/gcp/.goreleaser.yaml b/cloud/gcp/.goreleaser.yaml index 4972c0cee..f1ef6ec3a 100644 --- a/cloud/gcp/.goreleaser.yaml +++ b/cloud/gcp/.goreleaser.yaml @@ -7,10 +7,9 @@ before: - go work sync - make predeploybin builds: - - env: - # - GOWORK=on + - id: gcp + env: - CGO_ENABLED=0 - id: gcp binary: gcp main: ./cmd/deploy goos: @@ -20,12 +19,38 @@ builds: goarch: - amd64 - arm64 + - id: gcptf + env: + - CGO_ENABLED=0 + binary: gcp + main: ./cmd/deploytf + goos: + - linux + - windows + - darwin + goarch: + - amd64 + - arm64 archives: - name_template: >- {{ .ProjectName }}_ {{- tolower .Os }}_ {{- if eq .Arch "amd64" }}x86_64 {{- else }}{{ tolower .Arch }}{{ end }} + builds: + - gcp + format_overrides: + - goos: windows + format: zip + - name_template: >- + {{ .ProjectName }}tf_ + {{- tolower .Os }}_ + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ tolower .Arch }}{{ end }} + id: gcptf + builds: + - gcptf format_overrides: - goos: windows format: zip diff --git a/cloud/gcp/Makefile b/cloud/gcp/Makefile index 19f0cbc17..c8ea87e37 100644 --- a/cloud/gcp/Makefile +++ b/cloud/gcp/Makefile @@ -13,39 +13,45 @@ runtimebin: @CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/runtime-gcp -ldflags="-s -w -extldflags=-static" ./cmd/runtime predeploybin: runtimebin - @cp bin/runtime-gcp deploy/runtime/runtime-gcp + @cp bin/runtime-gcp common/runtime/runtime-gcp sec: - @touch deploy/runtime/runtime-gcp + @touch common/runtime/runtime-gcp @go run github.com/securego/gosec/v2/cmd/gosec@latest -exclude-dir=tools ./... - @rm deploy/runtime/runtime-gcp + @rm common/runtime/runtime-gcp # There appears to be an old namespace conflict with the protobuf definitions deploybin: predeploybin @echo Building GCP Deployment Server @CGO_ENABLED=0 go build -o bin/deploy-gcp -ldflags="-s -w -extldflags=-static" -ldflags="-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=ignore" ./cmd/deploy - @rm deploy/runtime/runtime-gcp + + +deploybintf: generate-terraform predeploybin + @echo Building AWS Terraform Deployment Server + @CGO_ENABLED=0 go build -o bin/deploy-gcptf -ldflags="-s -w -extldflags=-static" -ldflags="-X google.golang.org/protobuf/reflect/protoregistry.conflictPolicy=ignore" ./cmd/deploytf .PHONY: install -install: deploybin +install: deploybin deploybintf @echo installing gcp deployment server to ${HOME}/.nitric/providers/nitric/gcp-0.0.1 + @echo installing gcptf deployment server to ${HOME}/.nitric/providers/nitric/gcptf-0.0.1 @mkdir -p ${HOME}/.nitric/providers/nitric/ @rm -f ${HOME}/.nitric/providers/nitric/gcp-0.0.1 @cp bin/deploy-gcp ${HOME}/.nitric/providers/nitric/gcp-0.0.1 + @cp bin/deploy-gcptf ${HOME}/.nitric/providers/nitric/gcptf-0.0.1 sourcefiles := $(shell find . -type f -name "*.go" -o -name "*.dockerfile") fmt: - @go run github.com/google/addlicense -c "Nitric Technologies Pty Ltd." -y "2021" $(sourcefiles) - @touch deploy/runtime/runtime-gcp + @go run github.com/google/addlicense -ignore "./deploytf/generated/**" -c "Nitric Technologies Pty Ltd." -y "2021" $(sourcefiles) + @touch common/runtime/runtime-gcp $(GOLANGCI_LINT) run --fix - @rm deploy/runtime/runtime-gcp + @rm common/runtime/runtime-gcp lint: - @go run github.com/google/addlicense -check -c "Nitric Technologies Pty Ltd." -y "2021" $(sourcefiles) - @touch deploy/runtime/runtime-gcp + @go run github.com/google/addlicense -ignore "./deploytf/generated/**" -check -c "Nitric Technologies Pty Ltd." -y "2021" $(sourcefiles) + @touch common/runtime/runtime-gcp $(GOLANGCI_LINT) run - @rm deploy/runtime/runtime-gcp + @rm common/runtime/runtime-gcp license-check: runtimebin @echo Checking GCP Membrane OSS Licenses @@ -73,4 +79,7 @@ generate-mocks: @go run github.com/golang/mock/mockgen github.com/nitrictech/nitric/cloud/gcp/ifaces/cloudtasks CloudtasksClient > mocks/cloudtasks/mock.go @go run github.com/golang/mock/mockgen github.com/nitrictech/nitric/cloud/gcp/ifaces/gcloud_secret SecretManagerClient,SecretIterator > mocks/gcp_secret/mock.go -generate-sources: generate-mocks \ No newline at end of file +generate-sources: generate-mocks + +generate-terraform: + @cd deploytf && cdktf get \ No newline at end of file diff --git a/cloud/gcp/cmd/deploy/main.go b/cloud/gcp/cmd/deploy/main.go index 60149f3bb..d0f03bccf 100644 --- a/cloud/gcp/cmd/deploy/main.go +++ b/cloud/gcp/cmd/deploy/main.go @@ -18,8 +18,8 @@ package main import ( "github.com/nitrictech/nitric/cloud/common/deploy/provider" + "github.com/nitrictech/nitric/cloud/gcp/common/runtime" "github.com/nitrictech/nitric/cloud/gcp/deploy" - "github.com/nitrictech/nitric/cloud/gcp/deploy/runtime" ) // Start the deployment server diff --git a/cloud/gcp/cmd/deploytf/main.go b/cloud/gcp/cmd/deploytf/main.go new file mode 100644 index 000000000..c3ef2b64a --- /dev/null +++ b/cloud/gcp/cmd/deploytf/main.go @@ -0,0 +1,32 @@ +// Copyright Nitric Pty Ltd. +// +// SPDX-License-Identifier: Apache-2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at: +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "github.com/nitrictech/nitric/cloud/common/deploy/provider" + "github.com/nitrictech/nitric/cloud/gcp/common/runtime" + "github.com/nitrictech/nitric/cloud/gcp/deploytf" +) + +// Start the deployment server +func main() { + gcpStack := deploytf.NewNitricGcpProvider() + + providerServer := provider.NewTerraformProviderServer(gcpStack, runtime.NitricGcpRuntime) + + providerServer.Start() +} diff --git a/cloud/gcp/deploy/config.go b/cloud/gcp/common/config.go similarity index 99% rename from cloud/gcp/deploy/config.go rename to cloud/gcp/common/config.go index 7c5b9e192..d14d580fe 100644 --- a/cloud/gcp/deploy/config.go +++ b/cloud/gcp/common/config.go @@ -14,7 +14,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package deploy +package common import ( "github.com/imdario/mergo" diff --git a/cloud/gcp/deploy/runtime/runtime.go b/cloud/gcp/common/runtime/runtime.go similarity index 100% rename from cloud/gcp/deploy/runtime/runtime.go rename to cloud/gcp/common/runtime/runtime.go diff --git a/cloud/gcp/deploy/api.go b/cloud/gcp/deploy/api.go index 24576dad8..2896e3d78 100644 --- a/cloud/gcp/deploy/api.go +++ b/cloud/gcp/deploy/api.go @@ -250,9 +250,6 @@ func (p *NitricGcpPulumiProvider) Api(ctx *pulumi.Context, parent pulumi.Resourc return errors.WithMessage(err, "api gateway") } - // url := res.Gateway.DefaultHostname.ApplyT(func(hn string) string { return "https://" + hn }) - // ctx.Export("api:"+name, url) - return nil } diff --git a/cloud/gcp/deploy/deploy.go b/cloud/gcp/deploy/deploy.go index 3ed31ea48..a008cea44 100644 --- a/cloud/gcp/deploy/deploy.go +++ b/cloud/gcp/deploy/deploy.go @@ -30,6 +30,7 @@ import ( "github.com/nitrictech/nitric/cloud/common/deploy" "github.com/nitrictech/nitric/cloud/common/deploy/provider" "github.com/nitrictech/nitric/cloud/common/deploy/pulumix" + "github.com/nitrictech/nitric/cloud/gcp/common" deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" "github.com/pkg/errors" "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" @@ -55,7 +56,7 @@ type NitricGcpPulumiProvider struct { *deploy.CommonStackDetails StackId string - GcpConfig *GcpConfig + GcpConfig *common.GcpConfig DelayQueue *cloudtasks.Queue AuthToken *oauth2.Token @@ -105,7 +106,7 @@ func (a *NitricGcpPulumiProvider) Init(attributes map[string]interface{}) error return status.Errorf(codes.InvalidArgument, err.Error()) } - a.GcpConfig, err = ConfigFromAttributes(attributes) + a.GcpConfig, err = common.ConfigFromAttributes(attributes) if err != nil { return status.Errorf(codes.InvalidArgument, "Bad stack configuration: %s", err) } diff --git a/cloud/gcp/deploy/queue.go b/cloud/gcp/deploy/queue.go index b6ae22888..7fd4c64b5 100644 --- a/cloud/gcp/deploy/queue.go +++ b/cloud/gcp/deploy/queue.go @@ -27,20 +27,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// type PubSubTopic struct { -// pulumi.ResourceState - -// Name string -// PubSub *pubsub.Topic -// Subscription *pubsub.Subscription -// } - -// type PubSubTopicArgs struct { -// Location string -// StackID string -// Queue *v1.Queue -// } - func (p *NitricGcpPulumiProvider) Queue(ctx *pulumi.Context, parent pulumi.Resource, name string, config *deploymentspb.Queue) error { var err error opts := append([]pulumi.ResourceOption{}, pulumi.Parent(parent)) diff --git a/cloud/gcp/deploy/schedule.go b/cloud/gcp/deploy/schedule.go index 29221759a..a4c718b04 100644 --- a/cloud/gcp/deploy/schedule.go +++ b/cloud/gcp/deploy/schedule.go @@ -28,11 +28,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -type ScheduleEvent struct { - PayloadType string `yaml:"payloadType"` - Payload map[string]interface{} `yaml:"payload,omitempty"` -} - func (p *NitricGcpPulumiProvider) Schedule(ctx *pulumi.Context, parent pulumi.Resource, name string, config *deploymentspb.Schedule) error { opts := append([]pulumi.ResourceOption{}, pulumi.Parent(parent)) diff --git a/cloud/gcp/deploytf/.nitric/modules/api/main.tf b/cloud/gcp/deploytf/.nitric/modules/api/main.tf new file mode 100644 index 000000000..9dd660052 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/api/main.tf @@ -0,0 +1,73 @@ +resource "google_api_gateway_api" "api" { + provider = google-beta + api_id = var.name + labels = { + "x-nitric-${var.stack_id}-name" = var.name + "x-nitric-${var.stack_id}-type" = "api" + } +} + +# Create a random id that changes when the openapi_spec changes +# required to prevent name collisions on update +resource "random_string" "api_config_id" { + length = 4 + special = false + upper = false + + keepers = { + spec: var.openapi_spec + } +} + +resource "google_api_gateway_api_config" "api_config" { + provider = google-beta + api = google_api_gateway_api.api.api_id + # A random ID, along with 'create_before_destroy' lifecycle, is used to prevent errors when updating (replacing) the API config + api_config_id = "${var.name}-conf-${random_string.api_config_id.result}" + + openapi_documents { + document { + path = "openapi.json" + contents = base64encode(var.openapi_spec) + } + } + + gateway_config { + backend_config { + google_service_account = google_service_account.service_account.email + } + } + + labels = { + "x-nitric-${var.stack_id}-name" = var.name + "x-nitric-${var.stack_id}-type" = "api" + } + + lifecycle { + create_before_destroy = true + } +} + +resource "google_api_gateway_gateway" "gateway" { + provider = google-beta + gateway_id = "${var.name}-gateway" + api_config = google_api_gateway_api_config.api_config.id + + labels = { + "x-nitric-${var.stack_id}-name" = var.name + "x-nitric-${var.stack_id}-type" = "api" + } +} + +resource "google_service_account" "service_account" { + provider = google-beta + account_id = "${var.name}-api" +} + +resource "google_cloud_run_service_iam_member" "member" { + for_each = var.target_services + + service = each.value + role = "roles/run.invoker" + member = "serviceAccount:${google_service_account.service_account.email}" +} diff --git a/cloud/gcp/deploytf/.nitric/modules/api/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/api/outputs.tf new file mode 100644 index 000000000..4f7c94a72 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/api/outputs.tf @@ -0,0 +1,3 @@ +output "endpoint" { + value = "https://${google_api_gateway_gateway.gateway.default_hostname}" +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/api/variables.tf b/cloud/gcp/deploytf/.nitric/modules/api/variables.tf new file mode 100644 index 000000000..a3d313e48 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/api/variables.tf @@ -0,0 +1,19 @@ +variable "name" { + description = "The name of the API Gateway" + type = string +} + +variable "stack_id" { + description = "The ID of the stack" + type = string +} + +variable "openapi_spec" { + description = "The OpenAPI spec as a JSON string" + type = string +} + +variable "target_services" { + description = "The map of target service names" + type = map(string) +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/bucket/main.tf b/cloud/gcp/deploytf/.nitric/modules/bucket/main.tf new file mode 100644 index 000000000..eaa2c7dd9 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/bucket/main.tf @@ -0,0 +1,91 @@ +# Generate a random id for the bucket +resource "random_id" "bucket_id" { + byte_length = 8 + + keepers = { + # Generate a new id each time we switch to a new AMI id + bucket_name = var.bucket_name + } +} + +# Get the location from the provider +data "google_client_config" "this" { +} + +# Google Stora bucket +resource "google_storage_bucket" "bucket" { + name = "${var.bucket_name}-${random_id.bucket_id.hex}" + location = data.google_client_config.this.region + storage_class = var.storage_class + labels = { + "x-nitric-${var.stack_id}-name" = var.bucket_name + "x-nitric-${var.stack_id}-type" = "bucket" + } +} + +locals { + has_notification_targets = length(var.notification_targets) > 0 ? 1 : 0 +} + +# Create a pubsub topic here for storage notifications +resource "google_pubsub_topic" "bucket_notification_topic" { + count = local.has_notification_targets + name = "${var.bucket_name}-${random_id.bucket_id.hex}" +} + + +# Create a topic Iam binding for the storage notification topic +resource "google_pubsub_topic_iam_binding" "bucket_notification_topic_iam_binding" { + count = local.has_notification_targets + topic = google_pubsub_topic.bucket_notification_topic[0].id + role = "roles/pubsub.publisher" + members = [ + "serviceAccount:${data.google_storage_project_service_account.storage_service_account.email_address}" + ] +} + +# Create a gcs storage notification that publishes events to the topic +resource "google_storage_notification" "bucket_notification" { + for_each = var.notification_targets + bucket = google_storage_bucket.bucket.name + topic = google_pubsub_topic.bucket_notification_topic[0].id + event_types = each.value.events + payload_format = "JSON_API_V1" + object_name_prefix = each.value.prefix + custom_attributes = { + # The target is the notification target name + "target" = each.value.name + } + depends_on = [google_pubsub_topic_iam_binding.bucket_notification_topic_iam_binding] +} + +# For each notification target create a pubsub subscription +resource "google_pubsub_subscription" "bucket_notification_subscription" { + for_each = var.notification_targets + name = "${var.bucket_name}-${random_id.bucket_id.hex}" + topic = google_pubsub_topic.bucket_notification_topic[0].name + ack_deadline_seconds = 300 + + retry_policy { + minimum_backoff = "15s" + maximum_backoff = "600s" + } + + # Filter will only allow messages that match the target attribute for itself + filter = "attributes.target = \"${each.value.name}\"" + + push_config { + push_endpoint = "${each.value.url}/x-nitric-notification/bucket/${var.bucket_name}?token=${each.value.event_token}" + oidc_token { + service_account_email = each.value.invoker_service_account_email + } + } + + expiration_policy { + ttl = "" + } +} + +data "google_storage_project_service_account" "storage_service_account" { +} + diff --git a/cloud/gcp/deploytf/.nitric/modules/bucket/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/bucket/outputs.tf new file mode 100644 index 000000000..8a413d9d2 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/bucket/outputs.tf @@ -0,0 +1,14 @@ +output "name" { + description = "The name of the deployed bucket" + value = google_storage_bucket.bucket.name +} + +output "bucket_location" { + description = "The location of the bucket" + value = google_storage_bucket.bucket.location +} + +output "bucket_storage_class" { + description = "The storage class of the bucket" + value = google_storage_bucket.bucket.storage_class +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/bucket/variables.tf b/cloud/gcp/deploytf/.nitric/modules/bucket/variables.tf new file mode 100644 index 000000000..c3624aae3 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/bucket/variables.tf @@ -0,0 +1,27 @@ +variable "bucket_name" { + description = "The name of the bucket. This must be globally unique." + type = string +} + +variable "stack_id" { + description = "The ID of the Nitric stack" + type = string +} + +variable "notification_targets" { + description = "The notification target configurations" + type = map(object({ + name = string + url = string + event_token = string + invoker_service_account_email = string + prefix = string + events = list(string) + })) +} + +variable "storage_class" { + description = "The class of storage used to store the bucket's contents. This can be STANDARD, NEARLINE, COLDLINE, ARCHIVE, or MULTI_REGIONAL." + type = string + default = "STANDARD" +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/http_proxy/main.tf b/cloud/gcp/deploytf/.nitric/modules/http_proxy/main.tf new file mode 100644 index 000000000..e2ac65d5d --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/http_proxy/main.tf @@ -0,0 +1,46 @@ + +resource "google_api_gateway_api" "proxy_api" { + provider = google-beta + api_id = replace(var.name, "_", "-") + labels = { + "x-nitric-${var.stack_id}-name" = var.name + "x-nitric-${var.stack_id}-type" = "http-proxy" + } +} + +resource "google_api_gateway_api_config" "api_config" { + provider = google-beta + api = google_api_gateway_api.proxy_api.api_id + api_config_id = "${replace(var.name, "_", "-")}-config" + + openapi_documents { + document { + path = "openapi.json" + contents = base64encode(templatefile("${path.module}/openapi_template.json", { + name = var.name + target_service_url = var.target_service_url + })) + } + } + gateway_config { + backend_config { + google_service_account = var.invoker_email + } + } + + labels = { + "x-nitric-${var.stack_id}-name" = var.name + "x-nitric-${var.stack_id}-type" = "http-proxy" + } +} + +resource "google_api_gateway_gateway" "gateway" { + provider = google-beta + gateway_id = "${replace(var.name, "_", "-")}-gateway" + api_config = google_api_gateway_api_config.api_config.id + + labels = { + "x-nitric-${var.stack_id}-name" = var.name + "x-nitric-${var.stack_id}-type" = "http-proxy" + } +} diff --git a/cloud/gcp/deploytf/.nitric/modules/http_proxy/openapi_template.json b/cloud/gcp/deploytf/.nitric/modules/http_proxy/openapi_template.json new file mode 100644 index 000000000..c9326dcd1 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/http_proxy/openapi_template.json @@ -0,0 +1,84 @@ +{ + "swagger": "2.0", + "info": { + "title": "${name}", + "version": "v1" + }, + "securityDefinitions": {}, + "paths": { + "/**": { + "get": { + "operationId": "get", + "responses": { + "default": { + "description": "default description" + } + }, + "x-google-backend": { + "address": "${target_service_url}", + "path_translation": "APPEND_PATH_TO_ADDRESS" + } + }, + "post": { + "operationId": "post", + "responses": { + "default": { + "description": "default description" + } + }, + "x-google-backend": { + "address": "${target_service_url}", + "path_translation": "APPEND_PATH_TO_ADDRESS" + } + }, + "patch": { + "operationId": "patch", + "responses": { + "default": { + "description": "default description" + } + }, + "x-google-backend": { + "address": "${target_service_url}", + "path_translation": "APPEND_PATH_TO_ADDRESS" + } + }, + "put": { + "operationId": "put", + "responses": { + "default": { + "description": "default description" + } + }, + "x-google-backend": { + "address": "${target_service_url}", + "path_translation": "APPEND_PATH_TO_ADDRESS" + } + }, + "delete": { + "operationId": "delete", + "responses": { + "default": { + "description": "default description" + } + }, + "x-google-backend": { + "address": "${target_service_url}", + "path_translation": "APPEND_PATH_TO_ADDRESS" + } + }, + "options": { + "operationId": "options", + "responses": { + "default": { + "description": "default description" + } + }, + "x-google-backend": { + "address": "${target_service_url}", + "path_translation": "APPEND_PATH_TO_ADDRESS" + } + } + } + } +} diff --git a/cloud/gcp/deploytf/.nitric/modules/http_proxy/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/http_proxy/outputs.tf new file mode 100644 index 000000000..e69de29bb diff --git a/cloud/gcp/deploytf/.nitric/modules/http_proxy/variables.tf b/cloud/gcp/deploytf/.nitric/modules/http_proxy/variables.tf new file mode 100644 index 000000000..c9b377f15 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/http_proxy/variables.tf @@ -0,0 +1,19 @@ +variable "name" { + description = "The name of the API Gateway" + type = string +} + +variable "stack_id" { + description = "The ID of the stack" + type = string +} + +variable "target_service_url" { + description = "The URL of the service being proxied" + type = string +} + +variable "invoker_email" { + description = "The email of the service account that will invoke the API" + type = string +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/keyvalue/readme.md b/cloud/gcp/deploytf/.nitric/modules/keyvalue/readme.md new file mode 100644 index 000000000..bd9464790 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/keyvalue/readme.md @@ -0,0 +1 @@ +KeyValue stores are created at runtime in GCP, so no Terraform module is required. \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/policy/main.tf b/cloud/gcp/deploytf/.nitric/modules/policy/main.tf new file mode 100644 index 000000000..0a74836dd --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/policy/main.tf @@ -0,0 +1,91 @@ +data "google_project" "project" { +} + +locals { + is_bucket = var.resource_type == "Bucket" + is_secret = var.resource_type == "Secret" + is_kv = var.resource_type == "KeyValueStore" + is_queue = var.resource_type == "Queue" + is_topic = var.resource_type == "Topic" +} + +# Apply the IAM policy to the resource +resource "google_pubsub_topic_iam_member" "topic_iam_member_publish" { + count = local.is_topic && contains(var.actions, "TopicPublish") ? 1 : 0 + role = var.iam_roles.topic_publish + member = "serviceAccount:${var.service_account_email}" + topic = var.resource_name +} + +# Apply the IAM policy to the resource +resource "google_storage_bucket_iam_member" "bucket_iam_member_read" { + count = local.is_bucket && (contains(var.actions, "BucketFileGet") || contains(var.actions, "BucketFileList")) ? 1 : 0 + bucket = var.resource_name + role = var.iam_roles.bucket_read + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_storage_bucket_iam_member" "bucket_iam_member_write" { + count = local.is_bucket && contains(var.actions, "BucketFilePut") ? 1 : 0 + bucket = var.resource_name + role = var.iam_roles.bucket_write + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_storage_bucket_iam_member" "bucket_iam_member_delete" { + count = local.is_bucket && contains(var.actions, "BucketFileDelete") ? 1 : 0 + bucket = var.resource_name + role = var.iam_roles.bucket_delete + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_secret_manager_secret_iam_member" "secret_iam_member_put" { + count = local.is_secret && contains(var.actions, "SecretPut") ? 1 : 0 + secret_id = var.resource_name + role = var.iam_roles.secret_put + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_secret_manager_secret_iam_member" "secret_iam_member_access" { + count = local.is_secret && contains(var.actions, "SecretAccess") ? 1 : 0 + secret_id = var.resource_name + role = var.iam_roles.secret_access + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_project_iam_member" "kv_iam_member_read" { + project = data.google_project.project.project_id + count = local.is_kv && contains(var.actions, "KeyValueStoreRead") ? 1 : 0 + role = var.iam_roles.kv_read + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_project_iam_member" "kv_iam_member_delete" { + project = data.google_project.project.project_id + count = local.is_kv && contains(var.actions, "KeyValueStoreDelete") ? 1 : 0 + role = var.iam_roles.kv_delete + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_project_iam_member" "kv_iam_member_write" { + project = data.google_project.project.project_id + count = local.is_kv && contains(var.actions, "KeyValueStoreWrite") ? 1 : 0 + role = var.iam_roles.kv_write + member = "serviceAccount:${var.service_account_email}" +} + +resource "google_pubsub_topic_iam_member" "queue_iam_member_dequeue" { + project = data.google_project.project.project_id + count = local.is_queue && contains(var.actions, "QueueDequeue") ? 1 : 0 + role = var.iam_roles.queue_dequeue + member = "serviceAccount:${var.service_account_email}" + topic = var.resource_name +} + +resource "google_pubsub_topic_iam_member" "queue_iam_member_enqueue" { + project = data.google_project.project.project_id + count = local.is_queue && contains(var.actions, "QueueEnqueue") ? 1 : 0 + role = var.iam_roles.queue_enqueue + member = "serviceAccount:${var.service_account_email}" + topic = var.resource_name +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/policy/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/policy/outputs.tf new file mode 100644 index 000000000..e69de29bb diff --git a/cloud/gcp/deploytf/.nitric/modules/policy/variables.tf b/cloud/gcp/deploytf/.nitric/modules/policy/variables.tf new file mode 100644 index 000000000..866ba39be --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/policy/variables.tf @@ -0,0 +1,37 @@ +variable "resource_type" { + description = "The type of the resource (Bucket, Secret, KeyValueStore, Queue)" + type = string +} + +variable "resource_name" { + description = "The name of the resource" + type = string +} + +variable "service_account_email" { + description = "The service account to apply the policy to" + type = string +} + +variable "actions" { + description = "The actions to apply to the policy" + type = list(string) +} + +variable "iam_roles" { + description = "The IAM roles available to the policy" + type = object({ + base_compute_role = string + bucket_delete = string + bucket_read = string + bucket_write = string + kv_delete = string + kv_read = string + kv_write = string + queue_dequeue = string + queue_enqueue = string + secret_access = string + secret_put = string + topic_publish = string + }) +} diff --git a/cloud/gcp/deploytf/.nitric/modules/queue/main.tf b/cloud/gcp/deploytf/.nitric/modules/queue/main.tf new file mode 100644 index 000000000..9c1aabf06 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/queue/main.tf @@ -0,0 +1,24 @@ + +# Deploy a PubSub topic to serve as the queue +resource "google_pubsub_topic" "queue" { + name = "queue" + labels = { + "x-nitric-${var.stack_id}-name" = var.queue_name + "x-nitric-${var.stack_id}-type" = "queue" + } +} + +# Create a pull subscription for the topic to emulate a queue +resource "google_pubsub_subscription" "queue_subscription" { + name = "${var.queue_name}-nitricqueue" + topic = google_pubsub_topic.queue.name + expiration_policy { + # TODO: this is blank in the Pulumi provider - verify this is still correct + ttl = "" + } + + labels = { + "x-nitric-${var.stack_id}-name" = var.queue_name + "x-nitric-${var.stack_id}-type" = "queue" + } +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/queue/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/queue/outputs.tf new file mode 100644 index 000000000..aa731c119 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/queue/outputs.tf @@ -0,0 +1,4 @@ +output "name" { + description = "The name of the deployed queue." + value = google_pubsub_subscription.queue_subscription.name +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/queue/variables.tf b/cloud/gcp/deploytf/.nitric/modules/queue/variables.tf new file mode 100644 index 000000000..3a341e06d --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/queue/variables.tf @@ -0,0 +1,9 @@ +variable "queue_name" { + description = "The name of the queue" + type = string +} + +variable "stack_id" { + description = "The ID of the Nitric stack" + type = string +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/roles/main.tf b/cloud/gcp/deploytf/.nitric/modules/roles/main.tf new file mode 100644 index 000000000..cb273bb52 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/roles/main.tf @@ -0,0 +1,155 @@ +# Generate a set of known custom IAM roles +# That translate to nitric permissions +# For a given project this would only need to be done once for all nitric stacks deployed to that project + +# Generate a random id the nitric roles +resource "random_id" "role_id" { + byte_length = 4 +} + +# Permissions required for compute units to operate +resource "google_project_iam_custom_role" "base_compute_role" { + role_id = "NitricBaseCompute_${random_id.role_id.hex}" + title = "Nitric Base Compute" + description = "Custom role for base nitric compute permissions" + permissions = [ + "storage.buckets.list", + "storage.buckets.get", + "cloudtasks.queues.get", + "cloudtasks.tasks.create", + "cloudtrace.traces.patch", + "monitoring.timeSeries.create", + "iam.serviceAccounts.signBlob", + "pubsub.topics.list", + "pubsub.topics.get", + "pubsub.snapshots.list", + "pubsub.subscriptions.get", + "resourcemanager.projects.get", + "apigateway.gateways.list", + "secretmanager.secrets.list", + ] +} + +# Permissions required for reading from a bucket +resource "google_project_iam_custom_role" "bucket_reader_role" { + role_id = "NitricBucketReader_${random_id.role_id.hex}" + title = "Nitric Bucket Reader" + description = "Custom role that only allows reading from a bucket" + permissions = ["storage.objects.get", "storage.objects.list"] +} + +# Permissions required to publish to a topic +resource "google_project_iam_custom_role" "topic_publisher_role" { + role_id = "NitricTopicPublisher_${random_id.role_id.hex}" + title = "Nitric Topic Publisher" + description = "Custom role that only allows publishing to a topic" + permissions = ["pubsub.topics.publish"] +} + +# Permissions required to write to a bucket +resource "google_project_iam_custom_role" "bucket_writer_role" { + role_id = "NitricBucketWriter_${random_id.role_id.hex}" + title = "Nitric Bucket Writer" + description = "Custom role that only allows writing to a bucket" + permissions = ["storage.objects.create", "storage.objects.delete"] +} + +# Permissions required to delete an item from a bucket +resource "google_project_iam_custom_role" "bucket_deleter_role" { + role_id = "NitricBucketDeleter_${random_id.role_id.hex}" + title = "Nitric Bucket Deleter" + description = "Custom role that only allows deleting from a bucket" + permissions = ["storage.objects.delete"] +} + +# Permissions required to access a secret +resource "google_project_iam_custom_role" "secret_access_role" { + role_id = "SecretAccessRole_${random_id.role_id.hex}" + title = "Secret Access Role" + permissions = ["resourcemanager.projects.get", + "secretmanager.locations.get", + "secretmanager.locations.list", + "secretmanager.secrets.get", + "secretmanager.secrets.getIamPolicy", + "secretmanager.versions.get", + "secretmanager.versions.access", + "secretmanager.versions.list", + ] +} + +# Permissions required to put a secret +resource "google_project_iam_custom_role" "secret_put_role" { + role_id = "SecretPutRole_${random_id.role_id.hex}" + title = "Secret Put Role" + permissions = ["resourcemanager.projects.get", + "secretmanager.versions.add", + "secretmanager.versions.enable", + "secretmanager.versions.destroy", + "secretmanager.versions.disable", + "secretmanager.versions.get", + "secretmanager.versions.access", + "secretmanager.versions.list", + ] +} + +# Permissions required to delete a kv +resource "google_project_iam_custom_role" "kv_deleter_role" { + role_id = "KVDeleteRole_${random_id.role_id.hex}" + title = "KV Delete Role" + permissions = ["resourcemanager.projects.get", + "appengine.applications.get", + "datastore.databases.get", + "datastore.indexes.get", + "datastore.namespaces.get", + "datastore.entities.delete", + ] +} + +# Permissions required to read a kv +resource "google_project_iam_custom_role" "kv_reader_role" { + role_id = "KVReadRole_${random_id.role_id.hex}" + title = "KV Read Role" + permissions = ["resourcemanager.projects.get", + "appengine.applications.get", + "datastore.databases.get", + "datastore.entities.get", + "datastore.indexes.get", + "datastore.namespaces.get", + "datastore.entities.list", + ] +} + +# Permissions required to write a kv +resource "google_project_iam_custom_role" "kv_writer_role" { + role_id = "KVWriteRole_${random_id.role_id.hex}" + title = "KV Write Role" + permissions = ["resourcemanager.projects.get", + "appengine.applications.get", + "datastore.indexes.list", + "datastore.namespaces.list", + "datastore.entities.create", + "datastore.entities.update", + ] +} + +# Permissions required to enqueue to a queue +resource "google_project_iam_custom_role" "queue_enqueue_role" { + role_id = "QueueEnqueue_${random_id.role_id.hex}" + title = "Queue Enqueue" + permissions = [ + "pubsub.topics.get", + "pubsub.topics.publish", + ] +} + +# Permissions required to dequeue from a queue +resource "google_project_iam_custom_role" "queue_dequeue_role" { + role_id = "QueueDequeue_${random_id.role_id.hex}" + title = "Queue Dequeue" + permissions = [ + "pubsub.topics.get", + "pubsub.topics.attachSubscription", + "pubsub.snapshots.seek", + "pubsub.subscriptions.consume", + ] +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/roles/output.tf b/cloud/gcp/deploytf/.nitric/modules/roles/output.tf new file mode 100644 index 000000000..f4b73849f --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/roles/output.tf @@ -0,0 +1,59 @@ +output "base_compute_role" { + value = google_project_iam_custom_role.base_compute_role.id + description = "The role ID for the Nitric base compute role" +} + +output "bucket_read" { + value = google_project_iam_custom_role.bucket_reader_role.id + description = "The role ID for the Nitric bucket read role" +} + +output "topic_publish" { + value = google_project_iam_custom_role.topic_publisher_role.id + description = "The role ID for the Nitric topic publish role" +} + +output "bucket_write" { + value = google_project_iam_custom_role.bucket_writer_role.id + description = "The role ID for the Nitric bucket write role" +} + +output "bucket_delete" { + value = google_project_iam_custom_role.bucket_deleter_role.id + description = "The role ID for the Nitric bucket delete role" +} + +output "secret_access" { + value = google_project_iam_custom_role.secret_access_role.id + description = "The role ID for the Nitric secrete access role" +} + +output "secret_put" { + value = google_project_iam_custom_role.secret_put_role.id + description = "The role ID for the Nitric secrete put role" +} + +output "kv_read" { + value = google_project_iam_custom_role.kv_reader_role.id + description = "The role ID for the Nitric kv read role" +} + +output "kv_write" { + value = google_project_iam_custom_role.kv_writer_role.id + description = "The role ID for the Nitric kv write role" +} + +output "kv_delete" { + value = google_project_iam_custom_role.kv_deleter_role.id + description = "The role ID for the Nitric kv write role" +} + +output "queue_enqueue" { + value = google_project_iam_custom_role.queue_enqueue_role.id + description = "The role ID for the Nitric queue enqueue role" +} + +output "queue_dequeue" { + value = google_project_iam_custom_role.queue_dequeue_role.id + description = "The role ID for the Nitric queue dequeue role" +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/roles/variables.tf b/cloud/gcp/deploytf/.nitric/modules/roles/variables.tf new file mode 100644 index 000000000..e69de29bb diff --git a/cloud/gcp/deploytf/.nitric/modules/schedule/main.tf b/cloud/gcp/deploytf/.nitric/modules/schedule/main.tf new file mode 100644 index 000000000..1372579ac --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/schedule/main.tf @@ -0,0 +1,21 @@ +# Create a new cloud scheduler job +resource "google_cloud_scheduler_job" "schedule" { + name = var.schedule_name + time_zone = var.schedule_timezone + schedule = var.schedule_expression + + http_target { + uri = "${var.target_service_url}/x-nitric-schedule/${var.schedule_name}?token=${var.service_token}" + http_method = "POST" + headers = { + "Content-Type" = "application/json" + } + body = base64encode(jsonencode({ + // TODO: is this correct, it matches the Pulumi GCP provider, but not the AWS one. + "schedule": var.schedule_name + })) + oidc_token { + service_account_email = var.target_service_invoker_email + } + } +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/schedule/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/schedule/outputs.tf new file mode 100644 index 000000000..e69de29bb diff --git a/cloud/gcp/deploytf/.nitric/modules/schedule/variables.tf b/cloud/gcp/deploytf/.nitric/modules/schedule/variables.tf new file mode 100644 index 000000000..302a3e169 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/schedule/variables.tf @@ -0,0 +1,30 @@ +variable "schedule_name" { + description = "The name of the schedule" + type = string +} + +variable "target_service_url" { + description = "The URL of the target service" + type = string +} + +variable "target_service_invoker_email" { + description = "The email of the target service invoker" + type = string +} + +variable "service_token" { + description = "The token to authenticate with the target service" + type = string +} + +# TODO: ensure this is parsed in the code if it's a rate schedule. +variable "schedule_expression" { + description = "The schedule expression" + type = string +} + +variable "schedule_timezone" { + description = "The timezone for the schedule" + type = string +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/secret/main.tf b/cloud/gcp/deploytf/.nitric/modules/secret/main.tf new file mode 100644 index 000000000..d9e5d77b1 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/secret/main.tf @@ -0,0 +1,14 @@ +# Create a GCP Secret Manager secret +resource "google_secret_manager_secret" "secret" { + # project = var.project_id + secret_id = "${var.stack_id}-${var.secret_name}" + labels = { + "x-nitric-${var.stack_id}-name" = var.secret_name + "x-nitric-${var.stack_id}-type" = "secret" + } + + replication { + auto { + } + } +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/secret/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/secret/outputs.tf new file mode 100644 index 000000000..84af9f58c --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/secret/outputs.tf @@ -0,0 +1,4 @@ +output "name" { + description = "The name of the deployed secret." + value = google_secret_manager_secret.secret.name +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/secret/variables.tf b/cloud/gcp/deploytf/.nitric/modules/secret/variables.tf new file mode 100644 index 000000000..32418efee --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/secret/variables.tf @@ -0,0 +1,9 @@ +variable "secret_name" { + description = "The name of the secret." + type = string +} + +variable "stack_id" { + description = "The ID of the Nitric stack" + type = string +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/service/main.tf b/cloud/gcp/deploytf/.nitric/modules/service/main.tf new file mode 100644 index 000000000..336401f73 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/service/main.tf @@ -0,0 +1,153 @@ +terraform { + required_providers { + docker = { + source = "kreuzwerker/docker" + } + } +} + +# Create a GCR repository for the service image +data "google_container_registry_repository" "repo" { + project = var.project_id +} + +locals { + service_image_url = "${data.google_container_registry_repository.repo.repository_url}/${var.service_name}" +} + +# Tag the provided docker image with the repository url +resource "docker_tag" "tag" { + source_image = var.image + target_image = local.service_image_url +} + +# Push the tagged image to the repository +resource "docker_registry_image" "push" { + name = local.service_image_url + triggers = { + source_image_id = docker_tag.tag.source_image_id + } +} + +locals { + ids_prefix = "nitric-" +} + +# Create a random ID for the service name, so that it confirms to regex restrictions +resource "random_string" "service_account_id" { + length = 30 - length(local.ids_prefix) + special = false + upper = false +} + +# Create a service account for the google cloud run instance +resource "google_service_account" "service_account" { + account_id = "${local.ids_prefix}${random_string.service_account_id.id}" + project = var.project_id + display_name = "${var.service_name} service account" + description = "Service account which runs the ${var.service_name} service" +} + +# Create a random password for events that will target this service +resource "random_password" "event_token" { + length = 32 + special = false + keepers = { + "name" = var.service_name + } +} + +# Create a cloud run service +resource "google_cloud_run_service" "service" { + name = replace(var.service_name, "_", "-") + + location = var.region + project = var.project_id + + template { + metadata { + annotations = { + // TODO: Add configuration here + "autoscaling.knative.dev/minScale" = "0" + "autoscaling.knative.dev/maxScale" = "100" + } + } + spec { + service_account_name = google_service_account.service_account.email + container_concurrency = var.container_concurrency + timeout_seconds = var.timeout_seconds + containers { + env { + name = "EVENT_TOKEN" + value = random_password.event_token.result + } + env { + name = "SERVICE_ACCOUNT_EMAIL" + value = google_service_account.service_account.email + } + env { + name = "GCP_REGION" + value = var.region + } + + dynamic "env" { + for_each = var.environment + content { + name = env.key + value = env.value + } + } + image = "${local.service_image_url}@${docker_registry_image.push.sha256_digest}" + ports { + container_port = 9001 + } + resources { + limits = { + # TODO: enable cpu configuration + # cpu = "1000m" + memory = "${var.memory_mb}Mi" + } + } + } + } + } + + depends_on = [docker_registry_image.push] +} + +# Create a random ID for the service name, so that it confirms to regex restrictions +resource "random_string" "service_id" { + length = 30 - length(local.ids_prefix) + special = false + upper = false +} + +# Create an invoker service account for the google cloud run instance +resource "google_service_account" "invoker_service_account" { + project = var.project_id + account_id = "${local.ids_prefix}${random_string.service_id.id}" + display_name = "${var.service_name} invoker" + description = "Service account which allows other resources to invoke the ${var.service_name} service" +} + +# Give the above service account permissions to execute the CloudRun service +resource "google_cloud_run_service_iam_member" "invoker" { + service = google_cloud_run_service.service.name + location = google_cloud_run_service.service.location + role = "roles/run.invoker" + member = "serviceAccount:${google_service_account.invoker_service_account.email}" +} + +resource "google_project_iam_member" "project_member" { + project = var.project_id + member = "serviceAccount:${google_service_account.service_account.email}" + # p.BaseComputeRole.Name, + role = var.base_compute_role +} + +# Give the above service account permissions to act as itself +resource "google_service_account_iam_member" "account_member" { + service_account_id = google_service_account.invoker_service_account.name + role = "roles/iam.serviceAccountUser" + member = "serviceAccount:${google_service_account.invoker_service_account.email}" +} diff --git a/cloud/gcp/deploytf/.nitric/modules/service/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/service/outputs.tf new file mode 100644 index 000000000..b79980bc8 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/service/outputs.tf @@ -0,0 +1,19 @@ +output "service_endpoint" { + value = google_cloud_run_service.service.status[0].url +} + +output "service_account_email" { + value = google_service_account.service_account.email +} + +output "invoker_service_account_email" { + value = google_service_account.invoker_service_account.email +} + +output "event_token" { + value = random_password.event_token.result +} + +output "service_name" { + value = google_cloud_run_service.service.name +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/service/variables.tf b/cloud/gcp/deploytf/.nitric/modules/service/variables.tf new file mode 100644 index 000000000..0a97de4c3 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/service/variables.tf @@ -0,0 +1,54 @@ +variable "service_name" { + type = string + description = "The name of the service" +} + +variable "image" { + type = string + description = "The docker image to deploy" +} + +# environment variables +variable "environment" { + type = map(string) + description = "Environment variables to set on the lambda function" +} + +variable "project_id" { + description = "The ID of the Google Cloud project where the service is created." + type = string +} + +variable "stack_id" { + description = "The ID of the Nitric stack" + type = string +} + +# TODO: review defaults +variable "memory_mb" { + description = "The amount of memory to allocate to the CloudRun service in MB" + type = number + default = 512 +} + +variable "container_concurrency" { + description = "The number of concurrent requests the CloudRun service can handle" + type = number + default = 80 +} + +variable "timeout_seconds" { + description = "The timeout for the CloudRun service in seconds" + type = number + default = 10 +} + +variable "region" { + description = "The region the service is being deployed to" + type = string +} + +variable "base_compute_role" { + description = "The base compute role to use for the service" + type = string +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/stack/main.tf b/cloud/gcp/deploytf/.nitric/modules/stack/main.tf new file mode 100644 index 000000000..2b64b78c7 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/stack/main.tf @@ -0,0 +1,98 @@ +# Generate a random id for the bucket +resource "random_id" "stack_id" { + byte_length = 4 + + prefix = "${var.stack_name}-" +} + +module "iam_roles" { + source = "../roles" +} + +locals { + required_services = [ + # Enable the IAM API + "iam.googleapis.com", + # Enable cloud run + "run.googleapis.com", + # Enable pubsub + "pubsub.googleapis.com", + # Enable cloud scheduler + "cloudscheduler.googleapis.com", + # Enable cloud scheduler + "storage.googleapis.com", + # Enable Compute API (Networking/Load Balancing) + "compute.googleapis.com", + # Enable Container Registry API + "containerregistry.googleapis.com", + # Enable firestore API + "firestore.googleapis.com", + # Enable ApiGateway API + "apigateway.googleapis.com", + # Enable SecretManager API + "secretmanager.googleapis.com", + # Enable Cloud Tasks API + "cloudtasks.googleapis.com", + # Enable monitoring API + "monitoring.googleapis.com", + # Enable service usage API + "serviceusage.googleapis.com" + ] +} + +# Enable the required services +resource "google_project_service" "required_services" { + for_each = toset(local.required_services) + + service = each.key + # Leave API enabled on destroy + disable_on_destroy = false + disable_dependent_services = false +} + +# Get the GCP project number +data "google_project" "project" { +} + +resource "google_project_iam_member" "pubsub_token_creator" { + project = data.google_project.project.project_id + role = "roles/iam.serviceAccountTokenCreator" + member = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com" + depends_on = [google_project_service.required_services] +} + +locals { + base_compute_permissions = [ + "storage.buckets.list", + "storage.buckets.get", + "cloudtasks.queues.get", + "cloudtasks.tasks.create", + "cloudtrace.traces.patch", + "monitoring.timeSeries.create", + // permission for blob signing + // this is safe as only permissions this account has are delegated + "iam.serviceAccounts.signBlob", + // Basic list permissions + "pubsub.topics.list", + "pubsub.topics.get", + "pubsub.snapshots.list", + "pubsub.subscriptions.get", + "resourcemanager.projects.get", + "secretmanager.secrets.list", + "apigateway.gateways.list", + + // telemetry + "monitoring.metricDescriptors.create", + "monitoring.metricDescriptors.get", + "monitoring.metricDescriptors.list", + "monitoring.monitoredResourceDescriptors.get", + "monitoring.monitoredResourceDescriptors.list", + "monitoring.timeSeries.create", + ] +} + +resource "google_project_iam_custom_role" "base_role" { + role_id = "${replace(random_id.stack_id.hex, "-", "_")}_svc_base_role" + title = "${random_id.stack_id.hex} service base role" + permissions = local.base_compute_permissions +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/stack/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/stack/outputs.tf new file mode 100644 index 000000000..2b01adb5d --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/stack/outputs.tf @@ -0,0 +1,13 @@ +output "stack_id" { + value = random_id.stack_id.hex + description = "A unique id for this deployment" +} + +output "base_compute_role" { + value = google_project_iam_custom_role.base_role.id + description = "The base compute role to use for the service" +} + +output "iam_roles" { + value = module.iam_roles +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/stack/variables.tf b/cloud/gcp/deploytf/.nitric/modules/stack/variables.tf new file mode 100644 index 000000000..5c6c585e5 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/stack/variables.tf @@ -0,0 +1,4 @@ +variable "stack_name" { + description = "The name of the nitric stack" + type = string +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/topic/main.tf b/cloud/gcp/deploytf/.nitric/modules/topic/main.tf new file mode 100644 index 000000000..a31edfd62 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/topic/main.tf @@ -0,0 +1,32 @@ +# Create a new pubsub topic +resource "google_pubsub_topic" "topic" { + name = var.topic_name + labels = { + "x-nitric-${var.stack_id}-name" = var.topic_name + "x-nitric-${var.stack_id}-type" = "topic" + } +} + +# Create all CloudRun service subscriptions +resource "google_pubsub_subscription" "topic_subscriptions" { + count = length(var.subscriber_services) + name = "${var.subscriber_services[count.index].name}" + topic = google_pubsub_topic.topic.name + ack_deadline_seconds = 300 + + retry_policy { + minimum_backoff = "15s" + maximum_backoff = "600s" + } + + push_config { + push_endpoint = "${var.subscriber_services[count.index].url}/x-nitric-topic/${var.topic_name}?token=${var.subscriber_services[count.index].event_token}" + oidc_token { + service_account_email = var.subscriber_services[count.index].invoker_service_account_email + } + } + + expiration_policy { + ttl = "" + } +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/.nitric/modules/topic/outputs.tf b/cloud/gcp/deploytf/.nitric/modules/topic/outputs.tf new file mode 100644 index 000000000..98f6a7ac6 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/topic/outputs.tf @@ -0,0 +1,5 @@ +# TODO: confirm outputs +output "topic_name" { + description = "The name of the topic." + value = google_pubsub_topic.topic.name +} diff --git a/cloud/gcp/deploytf/.nitric/modules/topic/variables.tf b/cloud/gcp/deploytf/.nitric/modules/topic/variables.tf new file mode 100644 index 000000000..55aa04b46 --- /dev/null +++ b/cloud/gcp/deploytf/.nitric/modules/topic/variables.tf @@ -0,0 +1,19 @@ +variable "topic_name" { + description = "The name of the bucket. This must be globally unique." + type = string +} + +variable "stack_id" { + description = "The ID of the Nitric stack" + type = string +} + +variable "subscriber_services" { + description = "The services to create subscriptions for" + type = list(object({ + name = string + url = string + invoker_service_account_email = string + event_token = string + })) +} diff --git a/cloud/gcp/deploytf/README.md b/cloud/gcp/deploytf/README.md new file mode 100644 index 000000000..d8fc3ef60 --- /dev/null +++ b/cloud/gcp/deploytf/README.md @@ -0,0 +1 @@ +# Nitric AWS Terraform Provider \ No newline at end of file diff --git a/cloud/gcp/deploytf/api.go b/cloud/gcp/deploytf/api.go new file mode 100644 index 000000000..289b70ce3 --- /dev/null +++ b/cloud/gcp/deploytf/api.go @@ -0,0 +1,230 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "fmt" + "net/http" + "strings" + + "github.com/aws/jsii-runtime-go" + "github.com/getkin/kin-openapi/openapi2" + "github.com/getkin/kin-openapi/openapi2conv" + "github.com/getkin/kin-openapi/openapi3" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/common/deploy/utils" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/api" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/service" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +type nameUrlPair struct { + name string + invokeUrl *string + timeoutSeconds *float64 +} + +func keepOperation(opExt map[string]interface{}) (string, bool) { + if opExt == nil { + return "", false + } + + name := "" + + if v, ok := opExt["x-nitric-target"]; ok { + targetMap, isMap := v.(map[string]interface{}) + if isMap { + name, _ = targetMap["name"].(string) + } + } + + if name == "" { + return "", false + } + + return name, true +} + +func (n *NitricGcpTerraformProvider) Api(stack cdktf.TerraformStack, name string, config *deploymentspb.Api) error { + if config.GetOpenapi() == "" { + return fmt.Errorf("gcp provider can only deploy OpenAPI specs") + } + + openapiDoc := &openapi3.T{} + err := openapiDoc.UnmarshalJSON([]byte(config.GetOpenapi())) + if err != nil { + return fmt.Errorf("invalid document supplied for api: %s", name) + } + + // augment document with security definitions + for sn, sd := range openapiDoc.Components.SecuritySchemes { + if sd.Value.Type == "openIdConnect" { + // We need to extract audience values from the extensions + // the extension is type of []interface and cannot be converted to []string directly + audiences, err := utils.GetAudiencesFromExtension(sd.Value.Extensions) + if err != nil { + return err + } + + oidConf, err := utils.GetOpenIdConnectConfig(sd.Value.OpenIdConnectUrl) + if err != nil { + return err + } + + openapiDoc.Components.SecuritySchemes[sn] = &openapi3.SecuritySchemeRef{ + Value: &openapi3.SecurityScheme{ + Type: "oauth2", + Flows: &openapi3.OAuthFlows{ + Implicit: &openapi3.OAuthFlow{ + AuthorizationURL: oidConf.AuthEndpoint, + }, + }, + Extensions: map[string]interface{}{ + "x-google-issuer": oidConf.Issuer, + "x-google-jwks_uri": oidConf.JwksUri, + "x-google-audiences": strings.Join(audiences, ","), + }, + }, + } + } else { + return fmt.Errorf("unsupported security definition supplied") + } + } + + v2doc, err := openapi2conv.FromV3(openapiDoc) + if err != nil { + return err + } + + // Get service targets for IAM binding + services := map[string]service.Service{} + + for _, pi := range v2doc.Paths { + for _, m := range []string{http.MethodGet, http.MethodPatch, http.MethodDelete, http.MethodPost, http.MethodPut} { + if pi.GetOperation(m) == nil { + continue + } + + name, ok := keepOperation(pi.GetOperation(m).Extensions) + if !ok { + return fmt.Errorf("found operation missing nitric target property: %+v", pi.GetOperation(m).Extensions) + } + + if _, ok := n.Services[name]; !ok { + return fmt.Errorf("unable to find target service %s in %+v", name, n.Services) + } + + services[name] = n.Services[name] + + break + } + } + + nameUrlPairs := make([]nameUrlPair, 0, len(services)) + + // collect name arn pairs for output iteration + for k, v := range services { + nameUrlPairs = append(nameUrlPairs, nameUrlPair{ + name: k, + invokeUrl: v.ServiceEndpointOutput(), + timeoutSeconds: v.TimeoutSeconds(), + }) + } + + naps := make(map[string]*string) + timeouts := make(map[string]*float64) + + for _, p := range nameUrlPairs { + naps[p.name] = p.invokeUrl + timeouts[p.name] = p.timeoutSeconds + } + + for k, p := range v2doc.Paths { + p.Get = gcpOperation(name, p.Get, naps, timeouts) + p.Post = gcpOperation(name, p.Post, naps, timeouts) + p.Patch = gcpOperation(name, p.Patch, naps, timeouts) + p.Put = gcpOperation(name, p.Put, naps, timeouts) + p.Delete = gcpOperation(name, p.Delete, naps, timeouts) + p.Options = gcpOperation(name, p.Options, naps, timeouts) + v2doc.Paths[k] = p + } + + b, err := v2doc.MarshalJSON() + if err != nil { + return err + } + + serviceNames := map[string]*string{} + for k, v := range services { + serviceNames[k] = v.ServiceNameOutput() + } + + dependableServices := []cdktf.ITerraformDependable{} + for _, v := range services { + dependableServices = append(dependableServices, v) + } + + n.Apis[name] = api.NewApi(stack, jsii.Sprintf("api_%s", name), &api.ApiConfig{ + Name: jsii.String(name), + OpenapiSpec: jsii.String(string(b)), + TargetServices: &serviceNames, + StackId: n.Stack.StackIdOutput(), + // DependsOn: &dependableServices, + }) + + return nil +} + +func gcpOperation(apiName string, op *openapi2.Operation, urls map[string]*string, timeouts map[string]*float64) *openapi2.Operation { + if op == nil { + return nil + } + + name, ok := keepOperation(op.Extensions) + if !ok { + return nil + } + + if _, ok := urls[name]; !ok { + return nil + } + + if s, ok := op.Extensions["x-nitric-security"]; ok { + secName, isString := s.(string) + + if isString { + op.Security = &openapi2.SecurityRequirements{ + { + secName: {}, + }, + } + } + } + + for i, r := range op.Responses { + if r.Description == "" { + op.Responses[i].Description = name + } + } + + op.Extensions["x-google-backend"] = map[string]any{ + // Append the name of the target origin api gateway to the target address + "address": fmt.Sprintf("%s/x-nitric-api/%s", *urls[name], apiName), + "path_translation": "APPEND_PATH_TO_ADDRESS", + "deadline": timeouts[name], + } + + return op +} diff --git a/cloud/gcp/deploytf/bucket.go b/cloud/gcp/deploytf/bucket.go new file mode 100644 index 000000000..a7de23e4b --- /dev/null +++ b/cloud/gcp/deploytf/bucket.go @@ -0,0 +1,72 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/bucket" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" + storagepb "github.com/nitrictech/nitric/core/pkg/proto/storage/v1" +) + +func eventsForBlobEventType(blobEventType storagepb.BlobEventType) []string { + switch blobEventType { + case storagepb.BlobEventType_Created: + return []string{ + "OBJECT_FINALIZE", + } + case storagepb.BlobEventType_Deleted: + return []string{ + "OBJECT_DELETE", + } + default: + return []string{} + } +} + +type NotifiedService struct { + // Explicit JSON names required for JSII serialization + Name string `json:"name"` + Url string `json:"url"` + InvokerServiceAccountEmail string `json:"invoker_service_account_email"` + EventToken string `json:"event_token"` + Prefix string `json:"prefix"` + Events []string `json:"events"` +} + +// Bucket - Deploy a Storage Bucket +func (n *NitricGcpTerraformProvider) Bucket(stack cdktf.TerraformStack, name string, config *deploymentspb.Bucket) error { + notificationTargets := map[string]*NotifiedService{} + + for _, target := range config.Listeners { + notificationTargets[target.GetService()] = &NotifiedService{ + Name: target.GetService(), + Url: *n.Services[target.GetService()].ServiceEndpointOutput(), + InvokerServiceAccountEmail: *n.Services[target.GetService()].InvokerServiceAccountEmailOutput(), + EventToken: *n.Services[target.GetService()].EventTokenOutput(), + Events: eventsForBlobEventType(target.Config.BlobEventType), + Prefix: target.Config.KeyPrefixFilter, + } + } + + n.Buckets[name] = bucket.NewBucket(stack, jsii.Sprintf("bucket_%s", name), &bucket.BucketConfig{ + BucketName: &name, + StackId: n.Stack.StackIdOutput(), + NotificationTargets: ¬ificationTargets, + }) + + return nil +} diff --git a/cloud/gcp/deploytf/cdktf.json b/cloud/gcp/deploytf/cdktf.json new file mode 100644 index 000000000..aa52c3e65 --- /dev/null +++ b/cloud/gcp/deploytf/cdktf.json @@ -0,0 +1,51 @@ +{ + "language": "go", + "app": "go run main.go", + "codeMakerOutput": "generated", + "projectId": "9dd52596-b288-4c68-92d1-2318c376a415", + "sendCrashReports": "false", + "terraformProviders": [], + "terraformModules": [ + { + "name": "bucket", + "source": "./.nitric/modules/bucket" + }, + { + "name": "topic", + "source": "./.nitric/modules/topic" + }, + { + "name": "service", + "source": "./.nitric/modules/service" + }, + { + "name": "api", + "source": "./.nitric/modules/api" + }, + { + "name": "schedule", + "source": "./.nitric/modules/schedule" + }, + { + "name": "queue", + "source": "./.nitric/modules/queue" + }, + { + "name": "secret", + "source": "./.nitric/modules/secret" + }, + { + "name": "policy", + "source": "./.nitric/modules/policy" + }, + { + "name": "http_proxy", + "source": "./.nitric/modules/http_proxy" + }, + { + "name": "stack", + "source": "./.nitric/modules/stack" + } + ], + "context": {} +} \ No newline at end of file diff --git a/cloud/gcp/deploytf/deploy.go b/cloud/gcp/deploytf/deploy.go new file mode 100644 index 000000000..9cf032c56 --- /dev/null +++ b/cloud/gcp/deploytf/deploy.go @@ -0,0 +1,147 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "embed" + "io/fs" + + "github.com/aws/jsii-runtime-go" + dockerprovider "github.com/cdktf/cdktf-provider-docker-go/docker/v11/provider" + "github.com/cdktf/cdktf-provider-google-go/google/v13/datagoogleclientconfig" + gcpprovider "github.com/cdktf/cdktf-provider-google-go/google/v13/provider" + gcpbetaprovider "github.com/cdktf/cdktf-provider-googlebeta-go/googlebeta/v13/provider" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/common/deploy" + "github.com/nitrictech/nitric/cloud/common/deploy/provider" + "github.com/nitrictech/nitric/cloud/gcp/common" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/api" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/bucket" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/keyvalue" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/queue" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/schedule" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/secret" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/service" + tfstack "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/stack" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/topic" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/websocket" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +type NitricGcpTerraformProvider struct { + *deploy.CommonStackDetails + Stack tfstack.Stack + + GcpConfig *common.GcpConfig + Apis map[string]api.Api + Buckets map[string]bucket.Bucket + Topics map[string]topic.Topic + Schedules map[string]schedule.Schedule + Services map[string]service.Service + Secrets map[string]secret.Secret + Queues map[string]queue.Queue + KeyValueStores map[string]keyvalue.Keyvalue + Websockets map[string]websocket.Websocket + + provider.NitricDefaultOrder +} + +var _ provider.NitricTerraformProvider = (*NitricGcpTerraformProvider)(nil) + +func (a *NitricGcpTerraformProvider) Init(attributes map[string]interface{}) error { + var err error + + a.CommonStackDetails, err = deploy.CommonStackDetailsFromAttributes(attributes) + if err != nil { + return status.Errorf(codes.InvalidArgument, err.Error()) + } + + a.GcpConfig, err = common.ConfigFromAttributes(attributes) + if err != nil { + return status.Errorf(codes.InvalidArgument, "Bad stack configuration: %s", err) + } + + return nil +} + +// embed the modules directory here +// +//go:embed .nitric/modules/**/* +var modules embed.FS + +func (a *NitricGcpTerraformProvider) CdkTfModules() (string, fs.FS, error) { + return ".nitric/modules", modules, nil +} + +func (a *NitricGcpTerraformProvider) Pre(stack cdktf.TerraformStack, resources []*deploymentspb.Resource) error { + tfRegion := cdktf.NewTerraformVariable(stack, jsii.String("region"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("string"), + Default: jsii.String(a.Region), + Description: jsii.String("The GCP region to deploy resources to"), + }) + + gcpprovider.NewGoogleProvider(stack, jsii.String("gcp"), &gcpprovider.GoogleProviderConfig{ + Region: tfRegion.StringValue(), + Project: jsii.String(a.GcpConfig.ProjectId), + }) + + gcpbetaprovider.NewGoogleBetaProvider(stack, jsii.String("gcp_beta"), &gcpbetaprovider.GoogleBetaProviderConfig{ + Region: tfRegion.StringValue(), + Project: jsii.String(a.GcpConfig.ProjectId), + }) + + googleConf := datagoogleclientconfig.NewDataGoogleClientConfig(stack, jsii.String("gcp_client_config"), &datagoogleclientconfig.DataGoogleClientConfigConfig{}) + + var registryAuths []dockerprovider.DockerProviderRegistryAuth = []dockerprovider.DockerProviderRegistryAuth{ + { + Address: jsii.String("https://gcr.io"), + Username: jsii.String("oauth2accesstoken"), + Password: googleConf.AccessToken(), + }, + } + + dockerprovider.NewDockerProvider(stack, jsii.String("docker"), &dockerprovider.DockerProviderConfig{ + RegistryAuth: registryAuths, + }) + + a.Stack = tfstack.NewStack(stack, jsii.String("stack"), &tfstack.StackConfig{ + StackName: jsii.String(a.StackName), + }) + + return nil +} + +func (a *NitricGcpTerraformProvider) Post(stack cdktf.TerraformStack) error { + return nil +} + +// // Post - Called after all resources have been created, before the Pulumi Context is concluded +// Post(stack cdktf.TerraformStack) error + +func NewNitricGcpProvider() *NitricGcpTerraformProvider { + return &NitricGcpTerraformProvider{ + Apis: make(map[string]api.Api), + Buckets: make(map[string]bucket.Bucket), + Services: make(map[string]service.Service), + Topics: make(map[string]topic.Topic), + Schedules: make(map[string]schedule.Schedule), + Secrets: make(map[string]secret.Secret), + Queues: make(map[string]queue.Queue), + KeyValueStores: make(map[string]keyvalue.Keyvalue), + Websockets: make(map[string]websocket.Websocket), + } +} diff --git a/cloud/gcp/deploytf/generated/api/Api.go b/cloud/gcp/deploytf/generated/api/Api.go new file mode 100644 index 000000000..579530ec8 --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/Api.go @@ -0,0 +1,545 @@ +package api + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/api/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/api/internal" +) + +// Defines an Api based on a Terraform module. +// +// Source at ./.nitric/modules/api +type Api interface { + cdktf.TerraformModule + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + EndpointOutput() *string + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + Name() *string + SetName(val *string) + // The tree node. + Node() constructs.Node + OpenapiSpec() *string + SetOpenapiSpec(val *string) + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + StackId() *string + SetStackId(val *string) + TargetServices() *map[string]*string + SetTargetServices(val *map[string]*string) + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Api +type jsiiProxy_Api struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Api) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) EndpointOutput() *string { + var returns *string + _jsii_.Get( + j, + "endpointOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) Name() *string { + var returns *string + _jsii_.Get( + j, + "name", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) OpenapiSpec() *string { + var returns *string + _jsii_.Get( + j, + "openapiSpec", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) StackId() *string { + var returns *string + _jsii_.Get( + j, + "stackId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) TargetServices() *map[string]*string { + var returns *map[string]*string + _jsii_.Get( + j, + "targetServices", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Api) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewApi(scope constructs.Construct, id *string, config *ApiConfig) Api { + _init_.Initialize() + + if err := validateNewApiParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Api{} + + _jsii_.Create( + "api.Api", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewApi_Override(a Api, scope constructs.Construct, id *string, config *ApiConfig) { + _init_.Initialize() + + _jsii_.Create( + "api.Api", + []interface{}{scope, id, config}, + a, + ) +} + +func (j *jsiiProxy_Api) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Api) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Api) SetName(val *string) { + if err := j.validateSetNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "name", + val, + ) +} + +func (j *jsiiProxy_Api) SetOpenapiSpec(val *string) { + if err := j.validateSetOpenapiSpecParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "openapiSpec", + val, + ) +} + +func (j *jsiiProxy_Api) SetStackId(val *string) { + if err := j.validateSetStackIdParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "stackId", + val, + ) +} + +func (j *jsiiProxy_Api) SetTargetServices(val *map[string]*string) { + if err := j.validateSetTargetServicesParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "targetServices", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Api_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateApi_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "api.Api", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Api_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateApi_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "api.Api", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) AddOverride(path *string, value interface{}) { + if err := a.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + a, + "addOverride", + []interface{}{path, value}, + ) +} + +func (a *jsiiProxy_Api) AddProvider(provider interface{}) { + if err := a.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + a, + "addProvider", + []interface{}{provider}, + ) +} + +func (a *jsiiProxy_Api) GetString(output *string) *string { + if err := a.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + a, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := a.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + a, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) OverrideLogicalId(newLogicalId *string) { + if err := a.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + a, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (a *jsiiProxy_Api) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + a, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (a *jsiiProxy_Api) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + a, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + a, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + a, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + a, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) ToString() *string { + var returns *string + + _jsii_.Invoke( + a, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (a *jsiiProxy_Api) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + a, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/api/ApiConfig.go b/cloud/gcp/deploytf/generated/api/ApiConfig.go new file mode 100644 index 000000000..66b76ba91 --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/ApiConfig.go @@ -0,0 +1,24 @@ +package api + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type ApiConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The name of the API Gateway. + Name *string `field:"required" json:"name" yaml:"name"` + // The OpenAPI spec as a JSON string. + OpenapiSpec *string `field:"required" json:"openapiSpec" yaml:"openapiSpec"` + // The ID of the stack. + StackId *string `field:"required" json:"stackId" yaml:"stackId"` + // The map of target service names The property type contains a map, they have special handling, please see {@link cdk.tf /module-map-inputs the docs}. + TargetServices *map[string]*string `field:"required" json:"targetServices" yaml:"targetServices"` +} diff --git a/cloud/gcp/deploytf/generated/api/Api__checks.go b/cloud/gcp/deploytf/generated/api/Api__checks.go new file mode 100644 index 000000000..1ffdb638e --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/Api__checks.go @@ -0,0 +1,142 @@ +//go:build !no_runtime_type_checking + +package api + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (a *jsiiProxy_Api) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (a *jsiiProxy_Api) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (a *jsiiProxy_Api) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (a *jsiiProxy_Api) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (a *jsiiProxy_Api) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateApi_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateApi_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Api) validateSetNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Api) validateSetOpenapiSpecParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Api) validateSetStackIdParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Api) validateSetTargetServicesParameters(val *map[string]*string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewApiParameters(scope constructs.Construct, id *string, config *ApiConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/api/Api__no_checks.go b/cloud/gcp/deploytf/generated/api/Api__no_checks.go new file mode 100644 index 000000000..c6910e5ac --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/Api__no_checks.go @@ -0,0 +1,54 @@ +//go:build no_runtime_type_checking + +package api + +// Building without runtime type checking enabled, so all the below just return nil + +func (a *jsiiProxy_Api) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (a *jsiiProxy_Api) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (a *jsiiProxy_Api) validateGetStringParameters(output *string) error { + return nil +} + +func (a *jsiiProxy_Api) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (a *jsiiProxy_Api) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateApi_IsConstructParameters(x interface{}) error { + return nil +} + +func validateApi_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Api) validateSetNameParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Api) validateSetOpenapiSpecParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Api) validateSetStackIdParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Api) validateSetTargetServicesParameters(val *map[string]*string) error { + return nil +} + +func validateNewApiParameters(scope constructs.Construct, id *string, config *ApiConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/api/internal/types.go b/cloud/gcp/deploytf/generated/api/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/api/jsii/api-0.0.0.tgz b/cloud/gcp/deploytf/generated/api/jsii/api-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fbcbd3dba000ad70378199107175591a1262188c GIT binary patch literal 17230 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�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 literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/api/jsii/jsii.go b/cloud/gcp/deploytf/generated/api/jsii/jsii.go new file mode 100644 index 000000000..c9d934b89 --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed api-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("api", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/api/main.go b/cloud/gcp/deploytf/generated/api/main.go new file mode 100644 index 000000000..508642dbb --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/main.go @@ -0,0 +1,55 @@ +// api +package api + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "api.Api", + reflect.TypeOf((*Api)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "endpointOutput", GoGetter: "EndpointOutput"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "name", GoGetter: "Name"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberProperty{JsiiProperty: "openapiSpec", GoGetter: "OpenapiSpec"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberProperty{JsiiProperty: "targetServices", GoGetter: "TargetServices"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_Api{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "api.ApiConfig", + reflect.TypeOf((*ApiConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/api/version b/cloud/gcp/deploytf/generated/api/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/api/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/bucket/Bucket.go b/cloud/gcp/deploytf/generated/bucket/Bucket.go new file mode 100644 index 000000000..24ecdaf41 --- /dev/null +++ b/cloud/gcp/deploytf/generated/bucket/Bucket.go @@ -0,0 +1,564 @@ +package bucket + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/bucket/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/bucket/internal" +) + +// Defines an Bucket based on a Terraform module. +// +// Source at ./.nitric/modules/bucket +type Bucket interface { + cdktf.TerraformModule + BucketLocationOutput() *string + BucketName() *string + SetBucketName(val *string) + BucketStorageClassOutput() *string + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + NameOutput() *string + // The tree node. + Node() constructs.Node + NotificationTargets() interface{} + SetNotificationTargets(val interface{}) + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + StackId() *string + SetStackId(val *string) + StorageClass() *string + SetStorageClass(val *string) + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Bucket +type jsiiProxy_Bucket struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Bucket) BucketLocationOutput() *string { + var returns *string + _jsii_.Get( + j, + "bucketLocationOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) BucketName() *string { + var returns *string + _jsii_.Get( + j, + "bucketName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) BucketStorageClassOutput() *string { + var returns *string + _jsii_.Get( + j, + "bucketStorageClassOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) NameOutput() *string { + var returns *string + _jsii_.Get( + j, + "nameOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) NotificationTargets() interface{} { + var returns interface{} + _jsii_.Get( + j, + "notificationTargets", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) StackId() *string { + var returns *string + _jsii_.Get( + j, + "stackId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) StorageClass() *string { + var returns *string + _jsii_.Get( + j, + "storageClass", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Bucket) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewBucket(scope constructs.Construct, id *string, config *BucketConfig) Bucket { + _init_.Initialize() + + if err := validateNewBucketParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Bucket{} + + _jsii_.Create( + "bucket.Bucket", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewBucket_Override(b Bucket, scope constructs.Construct, id *string, config *BucketConfig) { + _init_.Initialize() + + _jsii_.Create( + "bucket.Bucket", + []interface{}{scope, id, config}, + b, + ) +} + +func (j *jsiiProxy_Bucket) SetBucketName(val *string) { + if err := j.validateSetBucketNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "bucketName", + val, + ) +} + +func (j *jsiiProxy_Bucket) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Bucket) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Bucket) SetNotificationTargets(val interface{}) { + if err := j.validateSetNotificationTargetsParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "notificationTargets", + val, + ) +} + +func (j *jsiiProxy_Bucket) SetStackId(val *string) { + if err := j.validateSetStackIdParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "stackId", + val, + ) +} + +func (j *jsiiProxy_Bucket) SetStorageClass(val *string) { + _jsii_.Set( + j, + "storageClass", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Bucket_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateBucket_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "bucket.Bucket", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Bucket_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateBucket_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "bucket.Bucket", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) AddOverride(path *string, value interface{}) { + if err := b.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + b, + "addOverride", + []interface{}{path, value}, + ) +} + +func (b *jsiiProxy_Bucket) AddProvider(provider interface{}) { + if err := b.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + b, + "addProvider", + []interface{}{provider}, + ) +} + +func (b *jsiiProxy_Bucket) GetString(output *string) *string { + if err := b.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + b, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := b.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + b, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) OverrideLogicalId(newLogicalId *string) { + if err := b.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + b, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (b *jsiiProxy_Bucket) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + b, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (b *jsiiProxy_Bucket) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + b, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + b, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + b, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + b, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) ToString() *string { + var returns *string + + _jsii_.Invoke( + b, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (b *jsiiProxy_Bucket) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + b, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/bucket/BucketConfig.go b/cloud/gcp/deploytf/generated/bucket/BucketConfig.go new file mode 100644 index 000000000..9a73f01d6 --- /dev/null +++ b/cloud/gcp/deploytf/generated/bucket/BucketConfig.go @@ -0,0 +1,29 @@ +package bucket + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type BucketConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The name of the bucket. + // + // This must be globally unique. + BucketName *string `field:"required" json:"bucketName" yaml:"bucketName"` + // The notification target configurations. + NotificationTargets interface{} `field:"required" json:"notificationTargets" yaml:"notificationTargets"` + // The ID of the Nitric stack. + StackId *string `field:"required" json:"stackId" yaml:"stackId"` + // The class of storage used to store the bucket's contents. + // + // This can be STANDARD, NEARLINE, COLDLINE, ARCHIVE, or MULTI_REGIONAL. + // STANDARD. + StorageClass *string `field:"optional" json:"storageClass" yaml:"storageClass"` +} diff --git a/cloud/gcp/deploytf/generated/bucket/Bucket__checks.go b/cloud/gcp/deploytf/generated/bucket/Bucket__checks.go new file mode 100644 index 000000000..8e84f7b64 --- /dev/null +++ b/cloud/gcp/deploytf/generated/bucket/Bucket__checks.go @@ -0,0 +1,134 @@ +//go:build !no_runtime_type_checking + +package bucket + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (b *jsiiProxy_Bucket) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (b *jsiiProxy_Bucket) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (b *jsiiProxy_Bucket) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (b *jsiiProxy_Bucket) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (b *jsiiProxy_Bucket) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateBucket_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateBucket_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Bucket) validateSetBucketNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Bucket) validateSetNotificationTargetsParameters(val interface{}) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Bucket) validateSetStackIdParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewBucketParameters(scope constructs.Construct, id *string, config *BucketConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/bucket/Bucket__no_checks.go b/cloud/gcp/deploytf/generated/bucket/Bucket__no_checks.go new file mode 100644 index 000000000..f13b5347c --- /dev/null +++ b/cloud/gcp/deploytf/generated/bucket/Bucket__no_checks.go @@ -0,0 +1,50 @@ +//go:build no_runtime_type_checking + +package bucket + +// Building without runtime type checking enabled, so all the below just return nil + +func (b *jsiiProxy_Bucket) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (b *jsiiProxy_Bucket) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (b *jsiiProxy_Bucket) validateGetStringParameters(output *string) error { + return nil +} + +func (b *jsiiProxy_Bucket) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (b *jsiiProxy_Bucket) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateBucket_IsConstructParameters(x interface{}) error { + return nil +} + +func validateBucket_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Bucket) validateSetBucketNameParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Bucket) validateSetNotificationTargetsParameters(val interface{}) error { + return nil +} + +func (j *jsiiProxy_Bucket) validateSetStackIdParameters(val *string) error { + return nil +} + +func validateNewBucketParameters(scope constructs.Construct, id *string, config *BucketConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/bucket/internal/types.go b/cloud/gcp/deploytf/generated/bucket/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/bucket/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/bucket/jsii/bucket-0.0.0.tgz b/cloud/gcp/deploytf/generated/bucket/jsii/bucket-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3a043c2213cc2f59b9c04cc86ec4fdad4d926a0f GIT binary patch literal 17313 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 G(g6T0HP?3l literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/http_proxy/jsii/jsii.go b/cloud/gcp/deploytf/generated/http_proxy/jsii/jsii.go new file mode 100644 index 000000000..493146adb --- /dev/null +++ b/cloud/gcp/deploytf/generated/http_proxy/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed http_proxy-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("http_proxy", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/http_proxy/main.go b/cloud/gcp/deploytf/generated/http_proxy/main.go new file mode 100644 index 000000000..2cd201d46 --- /dev/null +++ b/cloud/gcp/deploytf/generated/http_proxy/main.go @@ -0,0 +1,54 @@ +// http_proxy +package http_proxy + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "http_proxy.HttpProxy", + reflect.TypeOf((*HttpProxy)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "invokerEmail", GoGetter: "InvokerEmail"}, + _jsii_.MemberProperty{JsiiProperty: "name", GoGetter: "Name"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberProperty{JsiiProperty: "targetServiceUrl", GoGetter: "TargetServiceUrl"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_HttpProxy{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "http_proxy.HttpProxyConfig", + reflect.TypeOf((*HttpProxyConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/http_proxy/version b/cloud/gcp/deploytf/generated/http_proxy/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/http_proxy/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/keyvalue/Keyvalue.go b/cloud/gcp/deploytf/generated/keyvalue/Keyvalue.go new file mode 100644 index 000000000..3848b0153 --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/Keyvalue.go @@ -0,0 +1,513 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package keyvalue + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/keyvalue/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/keyvalue/internal" +) + +// Defines an Keyvalue based on a Terraform module. +// +// Source at ./.nitric/modules/keyvalue +type Keyvalue interface { + cdktf.TerraformModule + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + KvArnOutput() *string + KvstoreName() *string + SetKvstoreName(val *string) + // The tree node. + Node() constructs.Node + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + StackId() *string + SetStackId(val *string) + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Keyvalue +type jsiiProxy_Keyvalue struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Keyvalue) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) KvArnOutput() *string { + var returns *string + _jsii_.Get( + j, + "kvArnOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) KvstoreName() *string { + var returns *string + _jsii_.Get( + j, + "kvstoreName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) StackId() *string { + var returns *string + _jsii_.Get( + j, + "stackId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Keyvalue) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewKeyvalue(scope constructs.Construct, id *string, config *KeyvalueConfig) Keyvalue { + _init_.Initialize() + + if err := validateNewKeyvalueParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Keyvalue{} + + _jsii_.Create( + "keyvalue.Keyvalue", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewKeyvalue_Override(k Keyvalue, scope constructs.Construct, id *string, config *KeyvalueConfig) { + _init_.Initialize() + + _jsii_.Create( + "keyvalue.Keyvalue", + []interface{}{scope, id, config}, + k, + ) +} + +func (j *jsiiProxy_Keyvalue) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Keyvalue) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Keyvalue) SetKvstoreName(val *string) { + if err := j.validateSetKvstoreNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "kvstoreName", + val, + ) +} + +func (j *jsiiProxy_Keyvalue) SetStackId(val *string) { + if err := j.validateSetStackIdParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "stackId", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Keyvalue_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateKeyvalue_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "keyvalue.Keyvalue", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Keyvalue_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateKeyvalue_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "keyvalue.Keyvalue", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) AddOverride(path *string, value interface{}) { + if err := k.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + k, + "addOverride", + []interface{}{path, value}, + ) +} + +func (k *jsiiProxy_Keyvalue) AddProvider(provider interface{}) { + if err := k.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + k, + "addProvider", + []interface{}{provider}, + ) +} + +func (k *jsiiProxy_Keyvalue) GetString(output *string) *string { + if err := k.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + k, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := k.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + k, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) OverrideLogicalId(newLogicalId *string) { + if err := k.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + k, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (k *jsiiProxy_Keyvalue) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + k, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (k *jsiiProxy_Keyvalue) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + k, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + k, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + k, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + k, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) ToString() *string { + var returns *string + + _jsii_.Invoke( + k, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (k *jsiiProxy_Keyvalue) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + k, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/keyvalue/KeyvalueConfig.go b/cloud/gcp/deploytf/generated/keyvalue/KeyvalueConfig.go new file mode 100644 index 000000000..314399e18 --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/KeyvalueConfig.go @@ -0,0 +1,34 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package keyvalue + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type KeyvalueConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The name of the kv store. + KvstoreName *string `field:"required" json:"kvstoreName" yaml:"kvstoreName"` + // The ID of the Nitric stack. + StackId *string `field:"required" json:"stackId" yaml:"stackId"` +} diff --git a/cloud/gcp/deploytf/generated/keyvalue/Keyvalue__checks.go b/cloud/gcp/deploytf/generated/keyvalue/Keyvalue__checks.go new file mode 100644 index 000000000..3b53f92dd --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/Keyvalue__checks.go @@ -0,0 +1,140 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !no_runtime_type_checking + +package keyvalue + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (k *jsiiProxy_Keyvalue) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (k *jsiiProxy_Keyvalue) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (k *jsiiProxy_Keyvalue) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (k *jsiiProxy_Keyvalue) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (k *jsiiProxy_Keyvalue) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateKeyvalue_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateKeyvalue_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Keyvalue) validateSetKvstoreNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Keyvalue) validateSetStackIdParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewKeyvalueParameters(scope constructs.Construct, id *string, config *KeyvalueConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/keyvalue/Keyvalue__no_checks.go b/cloud/gcp/deploytf/generated/keyvalue/Keyvalue__no_checks.go new file mode 100644 index 000000000..404ff8a89 --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/Keyvalue__no_checks.go @@ -0,0 +1,60 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build no_runtime_type_checking + +package keyvalue + +// Building without runtime type checking enabled, so all the below just return nil + +func (k *jsiiProxy_Keyvalue) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (k *jsiiProxy_Keyvalue) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (k *jsiiProxy_Keyvalue) validateGetStringParameters(output *string) error { + return nil +} + +func (k *jsiiProxy_Keyvalue) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (k *jsiiProxy_Keyvalue) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateKeyvalue_IsConstructParameters(x interface{}) error { + return nil +} + +func validateKeyvalue_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Keyvalue) validateSetKvstoreNameParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Keyvalue) validateSetStackIdParameters(val *string) error { + return nil +} + +func validateNewKeyvalueParameters(scope constructs.Construct, id *string, config *KeyvalueConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/keyvalue/internal/types.go b/cloud/gcp/deploytf/generated/keyvalue/internal/types.go new file mode 100644 index 000000000..8c35acef2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/internal/types.go @@ -0,0 +1,21 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/keyvalue/jsii/jsii.go b/cloud/gcp/deploytf/generated/keyvalue/jsii/jsii.go new file mode 100644 index 000000000..af0528062 --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/jsii/jsii.go @@ -0,0 +1,42 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed keyvalue-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("keyvalue", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/keyvalue/jsii/keyvalue-0.0.0.tgz b/cloud/gcp/deploytf/generated/keyvalue/jsii/keyvalue-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b1e56400b6dadb93cbf4cdd6cd3296a574693749 GIT binary patch literal 17819 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 literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/keyvalue/main.go b/cloud/gcp/deploytf/generated/keyvalue/main.go new file mode 100644 index 000000000..7d7dd0b8e --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/main.go @@ -0,0 +1,67 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// keyvalue +package keyvalue + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "keyvalue.Keyvalue", + reflect.TypeOf((*Keyvalue)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "kvArnOutput", GoGetter: "KvArnOutput"}, + _jsii_.MemberProperty{JsiiProperty: "kvstoreName", GoGetter: "KvstoreName"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_Keyvalue{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "keyvalue.KeyvalueConfig", + reflect.TypeOf((*KeyvalueConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/keyvalue/version b/cloud/gcp/deploytf/generated/keyvalue/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/keyvalue/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/policy/Policy.go b/cloud/gcp/deploytf/generated/policy/Policy.go new file mode 100644 index 000000000..8365bf3c2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/policy/Policy.go @@ -0,0 +1,557 @@ +package policy + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/policy/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/policy/internal" +) + +// Defines an Policy based on a Terraform module. +// +// Source at ./.nitric/modules/policy +type Policy interface { + cdktf.TerraformModule + Actions() *[]*string + SetActions(val *[]*string) + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + IamRoles() interface{} + SetIamRoles(val interface{}) + // The tree node. + Node() constructs.Node + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + ResourceName() *string + SetResourceName(val *string) + ResourceType() *string + SetResourceType(val *string) + ServiceAccountEmail() *string + SetServiceAccountEmail(val *string) + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Policy +type jsiiProxy_Policy struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Policy) Actions() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "actions", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) IamRoles() interface{} { + var returns interface{} + _jsii_.Get( + j, + "iamRoles", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) ResourceName() *string { + var returns *string + _jsii_.Get( + j, + "resourceName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) ResourceType() *string { + var returns *string + _jsii_.Get( + j, + "resourceType", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) ServiceAccountEmail() *string { + var returns *string + _jsii_.Get( + j, + "serviceAccountEmail", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Policy) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewPolicy(scope constructs.Construct, id *string, config *PolicyConfig) Policy { + _init_.Initialize() + + if err := validateNewPolicyParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Policy{} + + _jsii_.Create( + "policy.Policy", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewPolicy_Override(p Policy, scope constructs.Construct, id *string, config *PolicyConfig) { + _init_.Initialize() + + _jsii_.Create( + "policy.Policy", + []interface{}{scope, id, config}, + p, + ) +} + +func (j *jsiiProxy_Policy) SetActions(val *[]*string) { + if err := j.validateSetActionsParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "actions", + val, + ) +} + +func (j *jsiiProxy_Policy) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Policy) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Policy) SetIamRoles(val interface{}) { + if err := j.validateSetIamRolesParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "iamRoles", + val, + ) +} + +func (j *jsiiProxy_Policy) SetResourceName(val *string) { + if err := j.validateSetResourceNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "resourceName", + val, + ) +} + +func (j *jsiiProxy_Policy) SetResourceType(val *string) { + if err := j.validateSetResourceTypeParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "resourceType", + val, + ) +} + +func (j *jsiiProxy_Policy) SetServiceAccountEmail(val *string) { + if err := j.validateSetServiceAccountEmailParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "serviceAccountEmail", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Policy_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validatePolicy_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "policy.Policy", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Policy_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validatePolicy_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "policy.Policy", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) AddOverride(path *string, value interface{}) { + if err := p.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + p, + "addOverride", + []interface{}{path, value}, + ) +} + +func (p *jsiiProxy_Policy) AddProvider(provider interface{}) { + if err := p.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + p, + "addProvider", + []interface{}{provider}, + ) +} + +func (p *jsiiProxy_Policy) GetString(output *string) *string { + if err := p.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + p, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := p.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + p, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) OverrideLogicalId(newLogicalId *string) { + if err := p.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + p, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (p *jsiiProxy_Policy) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + p, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (p *jsiiProxy_Policy) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + p, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + p, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + p, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + p, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) ToString() *string { + var returns *string + + _jsii_.Invoke( + p, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (p *jsiiProxy_Policy) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + p, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/policy/PolicyConfig.go b/cloud/gcp/deploytf/generated/policy/PolicyConfig.go new file mode 100644 index 000000000..7d1e50dae --- /dev/null +++ b/cloud/gcp/deploytf/generated/policy/PolicyConfig.go @@ -0,0 +1,26 @@ +package policy + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type PolicyConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The actions to apply to the policy. + Actions *[]*string `field:"required" json:"actions" yaml:"actions"` + // The IAM roles available to the policy. + IamRoles interface{} `field:"required" json:"iamRoles" yaml:"iamRoles"` + // The name of the resource. + ResourceName *string `field:"required" json:"resourceName" yaml:"resourceName"` + // The type of the resource (Bucket, Secret, KeyValueStore, Queue). + ResourceType *string `field:"required" json:"resourceType" yaml:"resourceType"` + // The service account to apply the policy to. + ServiceAccountEmail *string `field:"required" json:"serviceAccountEmail" yaml:"serviceAccountEmail"` +} diff --git a/cloud/gcp/deploytf/generated/policy/Policy__checks.go b/cloud/gcp/deploytf/generated/policy/Policy__checks.go new file mode 100644 index 000000000..a94741148 --- /dev/null +++ b/cloud/gcp/deploytf/generated/policy/Policy__checks.go @@ -0,0 +1,150 @@ +//go:build !no_runtime_type_checking + +package policy + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (p *jsiiProxy_Policy) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (p *jsiiProxy_Policy) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (p *jsiiProxy_Policy) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (p *jsiiProxy_Policy) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (p *jsiiProxy_Policy) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validatePolicy_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validatePolicy_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Policy) validateSetActionsParameters(val *[]*string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Policy) validateSetIamRolesParameters(val interface{}) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Policy) validateSetResourceNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Policy) validateSetResourceTypeParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Policy) validateSetServiceAccountEmailParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewPolicyParameters(scope constructs.Construct, id *string, config *PolicyConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/policy/Policy__no_checks.go b/cloud/gcp/deploytf/generated/policy/Policy__no_checks.go new file mode 100644 index 000000000..9a1d929d0 --- /dev/null +++ b/cloud/gcp/deploytf/generated/policy/Policy__no_checks.go @@ -0,0 +1,58 @@ +//go:build no_runtime_type_checking + +package policy + +// Building without runtime type checking enabled, so all the below just return nil + +func (p *jsiiProxy_Policy) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (p *jsiiProxy_Policy) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (p *jsiiProxy_Policy) validateGetStringParameters(output *string) error { + return nil +} + +func (p *jsiiProxy_Policy) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (p *jsiiProxy_Policy) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validatePolicy_IsConstructParameters(x interface{}) error { + return nil +} + +func validatePolicy_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Policy) validateSetActionsParameters(val *[]*string) error { + return nil +} + +func (j *jsiiProxy_Policy) validateSetIamRolesParameters(val interface{}) error { + return nil +} + +func (j *jsiiProxy_Policy) validateSetResourceNameParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Policy) validateSetResourceTypeParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Policy) validateSetServiceAccountEmailParameters(val *string) error { + return nil +} + +func validateNewPolicyParameters(scope constructs.Construct, id *string, config *PolicyConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/policy/internal/types.go b/cloud/gcp/deploytf/generated/policy/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/policy/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/policy/jsii/jsii.go b/cloud/gcp/deploytf/generated/policy/jsii/jsii.go new file mode 100644 index 000000000..47d4af6b5 --- /dev/null +++ b/cloud/gcp/deploytf/generated/policy/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed policy-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("policy", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/policy/jsii/policy-0.0.0.tgz b/cloud/gcp/deploytf/generated/policy/jsii/policy-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a236d117aa72afe7382c1cf9e4eb9b405a09e64e GIT binary patch literal 17296 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 AcK`qY literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/queue/main.go b/cloud/gcp/deploytf/generated/queue/main.go new file mode 100644 index 000000000..985d0d0c3 --- /dev/null +++ b/cloud/gcp/deploytf/generated/queue/main.go @@ -0,0 +1,53 @@ +// queue +package queue + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "queue.Queue", + reflect.TypeOf((*Queue)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "nameOutput", GoGetter: "NameOutput"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "queueName", GoGetter: "QueueName"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_Queue{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "queue.QueueConfig", + reflect.TypeOf((*QueueConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/queue/version b/cloud/gcp/deploytf/generated/queue/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/queue/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/schedule/Schedule.go b/cloud/gcp/deploytf/generated/schedule/Schedule.go new file mode 100644 index 000000000..10f179e19 --- /dev/null +++ b/cloud/gcp/deploytf/generated/schedule/Schedule.go @@ -0,0 +1,580 @@ +package schedule + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/schedule/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/schedule/internal" +) + +// Defines an Schedule based on a Terraform module. +// +// Source at ./.nitric/modules/schedule +type Schedule interface { + cdktf.TerraformModule + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + // The tree node. + Node() constructs.Node + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + ScheduleExpression() *string + SetScheduleExpression(val *string) + ScheduleName() *string + SetScheduleName(val *string) + ScheduleTimezone() *string + SetScheduleTimezone(val *string) + ServiceToken() *string + SetServiceToken(val *string) + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + TargetServiceInvokerEmail() *string + SetTargetServiceInvokerEmail(val *string) + TargetServiceUrl() *string + SetTargetServiceUrl(val *string) + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Schedule +type jsiiProxy_Schedule struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Schedule) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) ScheduleExpression() *string { + var returns *string + _jsii_.Get( + j, + "scheduleExpression", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) ScheduleName() *string { + var returns *string + _jsii_.Get( + j, + "scheduleName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) ScheduleTimezone() *string { + var returns *string + _jsii_.Get( + j, + "scheduleTimezone", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) ServiceToken() *string { + var returns *string + _jsii_.Get( + j, + "serviceToken", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) TargetServiceInvokerEmail() *string { + var returns *string + _jsii_.Get( + j, + "targetServiceInvokerEmail", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) TargetServiceUrl() *string { + var returns *string + _jsii_.Get( + j, + "targetServiceUrl", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Schedule) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewSchedule(scope constructs.Construct, id *string, config *ScheduleConfig) Schedule { + _init_.Initialize() + + if err := validateNewScheduleParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Schedule{} + + _jsii_.Create( + "schedule.Schedule", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewSchedule_Override(s Schedule, scope constructs.Construct, id *string, config *ScheduleConfig) { + _init_.Initialize() + + _jsii_.Create( + "schedule.Schedule", + []interface{}{scope, id, config}, + s, + ) +} + +func (j *jsiiProxy_Schedule) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetScheduleExpression(val *string) { + if err := j.validateSetScheduleExpressionParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "scheduleExpression", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetScheduleName(val *string) { + if err := j.validateSetScheduleNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "scheduleName", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetScheduleTimezone(val *string) { + if err := j.validateSetScheduleTimezoneParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "scheduleTimezone", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetServiceToken(val *string) { + if err := j.validateSetServiceTokenParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "serviceToken", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetTargetServiceInvokerEmail(val *string) { + if err := j.validateSetTargetServiceInvokerEmailParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "targetServiceInvokerEmail", + val, + ) +} + +func (j *jsiiProxy_Schedule) SetTargetServiceUrl(val *string) { + if err := j.validateSetTargetServiceUrlParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "targetServiceUrl", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Schedule_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateSchedule_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "schedule.Schedule", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Schedule_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateSchedule_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "schedule.Schedule", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) AddOverride(path *string, value interface{}) { + if err := s.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "addOverride", + []interface{}{path, value}, + ) +} + +func (s *jsiiProxy_Schedule) AddProvider(provider interface{}) { + if err := s.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "addProvider", + []interface{}{provider}, + ) +} + +func (s *jsiiProxy_Schedule) GetString(output *string) *string { + if err := s.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + s, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := s.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + s, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) OverrideLogicalId(newLogicalId *string) { + if err := s.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (s *jsiiProxy_Schedule) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + s, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (s *jsiiProxy_Schedule) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + s, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + s, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) ToString() *string { + var returns *string + + _jsii_.Invoke( + s, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Schedule) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/schedule/ScheduleConfig.go b/cloud/gcp/deploytf/generated/schedule/ScheduleConfig.go new file mode 100644 index 000000000..3601f51b0 --- /dev/null +++ b/cloud/gcp/deploytf/generated/schedule/ScheduleConfig.go @@ -0,0 +1,28 @@ +package schedule + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type ScheduleConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The schedule expression. + ScheduleExpression *string `field:"required" json:"scheduleExpression" yaml:"scheduleExpression"` + // The name of the schedule. + ScheduleName *string `field:"required" json:"scheduleName" yaml:"scheduleName"` + // The timezone for the schedule. + ScheduleTimezone *string `field:"required" json:"scheduleTimezone" yaml:"scheduleTimezone"` + // The token to authenticate with the target service. + ServiceToken *string `field:"required" json:"serviceToken" yaml:"serviceToken"` + // The email of the target service invoker. + TargetServiceInvokerEmail *string `field:"required" json:"targetServiceInvokerEmail" yaml:"targetServiceInvokerEmail"` + // The URL of the target service. + TargetServiceUrl *string `field:"required" json:"targetServiceUrl" yaml:"targetServiceUrl"` +} diff --git a/cloud/gcp/deploytf/generated/schedule/Schedule__checks.go b/cloud/gcp/deploytf/generated/schedule/Schedule__checks.go new file mode 100644 index 000000000..7dd5dc7d4 --- /dev/null +++ b/cloud/gcp/deploytf/generated/schedule/Schedule__checks.go @@ -0,0 +1,158 @@ +//go:build !no_runtime_type_checking + +package schedule + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (s *jsiiProxy_Schedule) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Schedule) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (s *jsiiProxy_Schedule) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Schedule) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Schedule) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateSchedule_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateSchedule_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Schedule) validateSetScheduleExpressionParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Schedule) validateSetScheduleNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Schedule) validateSetScheduleTimezoneParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Schedule) validateSetServiceTokenParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Schedule) validateSetTargetServiceInvokerEmailParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Schedule) validateSetTargetServiceUrlParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewScheduleParameters(scope constructs.Construct, id *string, config *ScheduleConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/schedule/Schedule__no_checks.go b/cloud/gcp/deploytf/generated/schedule/Schedule__no_checks.go new file mode 100644 index 000000000..00dc2edcb --- /dev/null +++ b/cloud/gcp/deploytf/generated/schedule/Schedule__no_checks.go @@ -0,0 +1,62 @@ +//go:build no_runtime_type_checking + +package schedule + +// Building without runtime type checking enabled, so all the below just return nil + +func (s *jsiiProxy_Schedule) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (s *jsiiProxy_Schedule) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (s *jsiiProxy_Schedule) validateGetStringParameters(output *string) error { + return nil +} + +func (s *jsiiProxy_Schedule) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (s *jsiiProxy_Schedule) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateSchedule_IsConstructParameters(x interface{}) error { + return nil +} + +func validateSchedule_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Schedule) validateSetScheduleExpressionParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Schedule) validateSetScheduleNameParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Schedule) validateSetScheduleTimezoneParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Schedule) validateSetServiceTokenParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Schedule) validateSetTargetServiceInvokerEmailParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Schedule) validateSetTargetServiceUrlParameters(val *string) error { + return nil +} + +func validateNewScheduleParameters(scope constructs.Construct, id *string, config *ScheduleConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/schedule/internal/types.go b/cloud/gcp/deploytf/generated/schedule/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/schedule/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/schedule/jsii/jsii.go b/cloud/gcp/deploytf/generated/schedule/jsii/jsii.go new file mode 100644 index 000000000..ce5ab6a42 --- /dev/null +++ b/cloud/gcp/deploytf/generated/schedule/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed schedule-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("schedule", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/schedule/jsii/schedule-0.0.0.tgz b/cloud/gcp/deploytf/generated/schedule/jsii/schedule-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..da6c116e00c0381b44d1a2a0c39f6ccc0c56342c GIT binary patch literal 16849 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 TpYzYx`uYC>(@_wR0LlRXJ|c^_ literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/secret/main.go b/cloud/gcp/deploytf/generated/secret/main.go new file mode 100644 index 000000000..2b0d491a0 --- /dev/null +++ b/cloud/gcp/deploytf/generated/secret/main.go @@ -0,0 +1,53 @@ +// secret +package secret + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "secret.Secret", + reflect.TypeOf((*Secret)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "nameOutput", GoGetter: "NameOutput"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "secretName", GoGetter: "SecretName"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_Secret{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "secret.SecretConfig", + reflect.TypeOf((*SecretConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/secret/version b/cloud/gcp/deploytf/generated/secret/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/secret/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/service/Service.go b/cloud/gcp/deploytf/generated/service/Service.go new file mode 100644 index 000000000..f0aaf3e18 --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/Service.go @@ -0,0 +1,718 @@ +package service + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/service/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/service/internal" +) + +// Defines an Service based on a Terraform module. +// +// Source at ./.nitric/modules/service +type Service interface { + cdktf.TerraformModule + BaseComputeRole() *string + SetBaseComputeRole(val *string) + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + ContainerConcurrency() *float64 + SetContainerConcurrency(val *float64) + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + Environment() *map[string]*string + SetEnvironment(val *map[string]*string) + EventTokenOutput() *string + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + Image() *string + SetImage(val *string) + InvokerServiceAccountEmailOutput() *string + MemoryMb() *float64 + SetMemoryMb(val *float64) + // The tree node. + Node() constructs.Node + ProjectId() *string + SetProjectId(val *string) + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + Region() *string + SetRegion(val *string) + ServiceAccountEmailOutput() *string + ServiceEndpointOutput() *string + ServiceName() *string + SetServiceName(val *string) + ServiceNameOutput() *string + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + StackId() *string + SetStackId(val *string) + TimeoutSeconds() *float64 + SetTimeoutSeconds(val *float64) + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Service +type jsiiProxy_Service struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Service) BaseComputeRole() *string { + var returns *string + _jsii_.Get( + j, + "baseComputeRole", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ContainerConcurrency() *float64 { + var returns *float64 + _jsii_.Get( + j, + "containerConcurrency", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Environment() *map[string]*string { + var returns *map[string]*string + _jsii_.Get( + j, + "environment", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) EventTokenOutput() *string { + var returns *string + _jsii_.Get( + j, + "eventTokenOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Image() *string { + var returns *string + _jsii_.Get( + j, + "image", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) InvokerServiceAccountEmailOutput() *string { + var returns *string + _jsii_.Get( + j, + "invokerServiceAccountEmailOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) MemoryMb() *float64 { + var returns *float64 + _jsii_.Get( + j, + "memoryMb", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ProjectId() *string { + var returns *string + _jsii_.Get( + j, + "projectId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Region() *string { + var returns *string + _jsii_.Get( + j, + "region", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ServiceAccountEmailOutput() *string { + var returns *string + _jsii_.Get( + j, + "serviceAccountEmailOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ServiceEndpointOutput() *string { + var returns *string + _jsii_.Get( + j, + "serviceEndpointOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ServiceName() *string { + var returns *string + _jsii_.Get( + j, + "serviceName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) ServiceNameOutput() *string { + var returns *string + _jsii_.Get( + j, + "serviceNameOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) StackId() *string { + var returns *string + _jsii_.Get( + j, + "stackId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) TimeoutSeconds() *float64 { + var returns *float64 + _jsii_.Get( + j, + "timeoutSeconds", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Service) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewService(scope constructs.Construct, id *string, config *ServiceConfig) Service { + _init_.Initialize() + + if err := validateNewServiceParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Service{} + + _jsii_.Create( + "service.Service", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewService_Override(s Service, scope constructs.Construct, id *string, config *ServiceConfig) { + _init_.Initialize() + + _jsii_.Create( + "service.Service", + []interface{}{scope, id, config}, + s, + ) +} + +func (j *jsiiProxy_Service) SetBaseComputeRole(val *string) { + if err := j.validateSetBaseComputeRoleParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "baseComputeRole", + val, + ) +} + +func (j *jsiiProxy_Service) SetContainerConcurrency(val *float64) { + _jsii_.Set( + j, + "containerConcurrency", + val, + ) +} + +func (j *jsiiProxy_Service) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Service) SetEnvironment(val *map[string]*string) { + if err := j.validateSetEnvironmentParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "environment", + val, + ) +} + +func (j *jsiiProxy_Service) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Service) SetImage(val *string) { + if err := j.validateSetImageParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "image", + val, + ) +} + +func (j *jsiiProxy_Service) SetMemoryMb(val *float64) { + _jsii_.Set( + j, + "memoryMb", + val, + ) +} + +func (j *jsiiProxy_Service) SetProjectId(val *string) { + if err := j.validateSetProjectIdParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "projectId", + val, + ) +} + +func (j *jsiiProxy_Service) SetRegion(val *string) { + if err := j.validateSetRegionParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "region", + val, + ) +} + +func (j *jsiiProxy_Service) SetServiceName(val *string) { + if err := j.validateSetServiceNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "serviceName", + val, + ) +} + +func (j *jsiiProxy_Service) SetStackId(val *string) { + if err := j.validateSetStackIdParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "stackId", + val, + ) +} + +func (j *jsiiProxy_Service) SetTimeoutSeconds(val *float64) { + _jsii_.Set( + j, + "timeoutSeconds", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Service_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateService_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "service.Service", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Service_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateService_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "service.Service", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) AddOverride(path *string, value interface{}) { + if err := s.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "addOverride", + []interface{}{path, value}, + ) +} + +func (s *jsiiProxy_Service) AddProvider(provider interface{}) { + if err := s.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "addProvider", + []interface{}{provider}, + ) +} + +func (s *jsiiProxy_Service) GetString(output *string) *string { + if err := s.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + s, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := s.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + s, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) OverrideLogicalId(newLogicalId *string) { + if err := s.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (s *jsiiProxy_Service) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + s, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (s *jsiiProxy_Service) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + s, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + s, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) ToString() *string { + var returns *string + + _jsii_.Invoke( + s, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Service) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/service/ServiceConfig.go b/cloud/gcp/deploytf/generated/service/ServiceConfig.go new file mode 100644 index 000000000..dc2b5f8e2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/ServiceConfig.go @@ -0,0 +1,36 @@ +package service + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type ServiceConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The base compute role to use for the service. + BaseComputeRole *string `field:"required" json:"baseComputeRole" yaml:"baseComputeRole"` + // Environment variables to set on the lambda function The property type contains a map, they have special handling, please see {@link cdk.tf /module-map-inputs the docs}. + Environment *map[string]*string `field:"required" json:"environment" yaml:"environment"` + // The docker image to deploy. + Image *string `field:"required" json:"image" yaml:"image"` + // The ID of the Google Cloud project where the service is created. + ProjectId *string `field:"required" json:"projectId" yaml:"projectId"` + // The region the service is being deployed to. + Region *string `field:"required" json:"region" yaml:"region"` + // The name of the service. + ServiceName *string `field:"required" json:"serviceName" yaml:"serviceName"` + // The ID of the Nitric stack. + StackId *string `field:"required" json:"stackId" yaml:"stackId"` + // The number of concurrent requests the CloudRun service can handle 80. + ContainerConcurrency *float64 `field:"optional" json:"containerConcurrency" yaml:"containerConcurrency"` + // The amount of memory to allocate to the CloudRun service in MB 512. + MemoryMb *float64 `field:"optional" json:"memoryMb" yaml:"memoryMb"` + // The timeout for the CloudRun service in seconds 10. + TimeoutSeconds *float64 `field:"optional" json:"timeoutSeconds" yaml:"timeoutSeconds"` +} diff --git a/cloud/gcp/deploytf/generated/service/Service__checks.go b/cloud/gcp/deploytf/generated/service/Service__checks.go new file mode 100644 index 000000000..b9cf7e6a6 --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/Service__checks.go @@ -0,0 +1,166 @@ +//go:build !no_runtime_type_checking + +package service + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (s *jsiiProxy_Service) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Service) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (s *jsiiProxy_Service) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Service) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Service) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateService_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateService_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetBaseComputeRoleParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetEnvironmentParameters(val *map[string]*string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetImageParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetProjectIdParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetRegionParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetServiceNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Service) validateSetStackIdParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewServiceParameters(scope constructs.Construct, id *string, config *ServiceConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/service/Service__no_checks.go b/cloud/gcp/deploytf/generated/service/Service__no_checks.go new file mode 100644 index 000000000..5efb04cda --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/Service__no_checks.go @@ -0,0 +1,66 @@ +//go:build no_runtime_type_checking + +package service + +// Building without runtime type checking enabled, so all the below just return nil + +func (s *jsiiProxy_Service) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (s *jsiiProxy_Service) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (s *jsiiProxy_Service) validateGetStringParameters(output *string) error { + return nil +} + +func (s *jsiiProxy_Service) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (s *jsiiProxy_Service) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateService_IsConstructParameters(x interface{}) error { + return nil +} + +func validateService_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetBaseComputeRoleParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetEnvironmentParameters(val *map[string]*string) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetImageParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetProjectIdParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetRegionParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetServiceNameParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Service) validateSetStackIdParameters(val *string) error { + return nil +} + +func validateNewServiceParameters(scope constructs.Construct, id *string, config *ServiceConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/service/internal/types.go b/cloud/gcp/deploytf/generated/service/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/service/jsii/jsii.go b/cloud/gcp/deploytf/generated/service/jsii/jsii.go new file mode 100644 index 000000000..798a713f1 --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed service-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("service", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/service/jsii/service-0.0.0.tgz b/cloud/gcp/deploytf/generated/service/jsii/service-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a32ebb7df4df3247f2ab20198bfe70b69259d81f GIT binary patch literal 17110 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 R$Dil=`TqvQA1VOm0RZ3C$zcEh literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/service/main.go b/cloud/gcp/deploytf/generated/service/main.go new file mode 100644 index 000000000..f8a6e65d3 --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/main.go @@ -0,0 +1,65 @@ +// service +package service + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "service.Service", + reflect.TypeOf((*Service)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "baseComputeRole", GoGetter: "BaseComputeRole"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "containerConcurrency", GoGetter: "ContainerConcurrency"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "environment", GoGetter: "Environment"}, + _jsii_.MemberProperty{JsiiProperty: "eventTokenOutput", GoGetter: "EventTokenOutput"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberProperty{JsiiProperty: "image", GoGetter: "Image"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "invokerServiceAccountEmailOutput", GoGetter: "InvokerServiceAccountEmailOutput"}, + _jsii_.MemberProperty{JsiiProperty: "memoryMb", GoGetter: "MemoryMb"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "projectId", GoGetter: "ProjectId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberProperty{JsiiProperty: "region", GoGetter: "Region"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "serviceAccountEmailOutput", GoGetter: "ServiceAccountEmailOutput"}, + _jsii_.MemberProperty{JsiiProperty: "serviceEndpointOutput", GoGetter: "ServiceEndpointOutput"}, + _jsii_.MemberProperty{JsiiProperty: "serviceName", GoGetter: "ServiceName"}, + _jsii_.MemberProperty{JsiiProperty: "serviceNameOutput", GoGetter: "ServiceNameOutput"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberProperty{JsiiProperty: "timeoutSeconds", GoGetter: "TimeoutSeconds"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_Service{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "service.ServiceConfig", + reflect.TypeOf((*ServiceConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/service/version b/cloud/gcp/deploytf/generated/service/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/service/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/stack/Stack.go b/cloud/gcp/deploytf/generated/stack/Stack.go new file mode 100644 index 000000000..a5080d38d --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/Stack.go @@ -0,0 +1,498 @@ +package stack + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/stack/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/stack/internal" +) + +// Defines an Stack based on a Terraform module. +// +// Source at ./.nitric/modules/stack +type Stack interface { + cdktf.TerraformModule + BaseComputeRoleOutput() *string + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + IamRolesOutput() *string + // The tree node. + Node() constructs.Node + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + StackIdOutput() *string + StackName() *string + SetStackName(val *string) + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Stack +type jsiiProxy_Stack struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Stack) BaseComputeRoleOutput() *string { + var returns *string + _jsii_.Get( + j, + "baseComputeRoleOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) IamRolesOutput() *string { + var returns *string + _jsii_.Get( + j, + "iamRolesOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) StackIdOutput() *string { + var returns *string + _jsii_.Get( + j, + "stackIdOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) StackName() *string { + var returns *string + _jsii_.Get( + j, + "stackName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Stack) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewStack(scope constructs.Construct, id *string, config *StackConfig) Stack { + _init_.Initialize() + + if err := validateNewStackParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Stack{} + + _jsii_.Create( + "stack.Stack", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewStack_Override(s Stack, scope constructs.Construct, id *string, config *StackConfig) { + _init_.Initialize() + + _jsii_.Create( + "stack.Stack", + []interface{}{scope, id, config}, + s, + ) +} + +func (j *jsiiProxy_Stack) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Stack) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Stack) SetStackName(val *string) { + if err := j.validateSetStackNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "stackName", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Stack_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateStack_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "stack.Stack", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Stack_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateStack_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "stack.Stack", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) AddOverride(path *string, value interface{}) { + if err := s.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "addOverride", + []interface{}{path, value}, + ) +} + +func (s *jsiiProxy_Stack) AddProvider(provider interface{}) { + if err := s.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "addProvider", + []interface{}{provider}, + ) +} + +func (s *jsiiProxy_Stack) GetString(output *string) *string { + if err := s.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + s, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := s.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + s, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) OverrideLogicalId(newLogicalId *string) { + if err := s.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + s, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (s *jsiiProxy_Stack) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + s, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (s *jsiiProxy_Stack) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + s, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + s, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) ToString() *string { + var returns *string + + _jsii_.Invoke( + s, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (s *jsiiProxy_Stack) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + s, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/stack/StackConfig.go b/cloud/gcp/deploytf/generated/stack/StackConfig.go new file mode 100644 index 000000000..43971ec0a --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/StackConfig.go @@ -0,0 +1,18 @@ +package stack + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type StackConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The name of the nitric stack. + StackName *string `field:"required" json:"stackName" yaml:"stackName"` +} diff --git a/cloud/gcp/deploytf/generated/stack/Stack__checks.go b/cloud/gcp/deploytf/generated/stack/Stack__checks.go new file mode 100644 index 000000000..cc7844b9f --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/Stack__checks.go @@ -0,0 +1,118 @@ +//go:build !no_runtime_type_checking + +package stack + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (s *jsiiProxy_Stack) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Stack) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (s *jsiiProxy_Stack) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Stack) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (s *jsiiProxy_Stack) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateStack_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateStack_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Stack) validateSetStackNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewStackParameters(scope constructs.Construct, id *string, config *StackConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/stack/Stack__no_checks.go b/cloud/gcp/deploytf/generated/stack/Stack__no_checks.go new file mode 100644 index 000000000..702985b17 --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/Stack__no_checks.go @@ -0,0 +1,42 @@ +//go:build no_runtime_type_checking + +package stack + +// Building without runtime type checking enabled, so all the below just return nil + +func (s *jsiiProxy_Stack) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (s *jsiiProxy_Stack) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (s *jsiiProxy_Stack) validateGetStringParameters(output *string) error { + return nil +} + +func (s *jsiiProxy_Stack) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (s *jsiiProxy_Stack) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateStack_IsConstructParameters(x interface{}) error { + return nil +} + +func validateStack_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Stack) validateSetStackNameParameters(val *string) error { + return nil +} + +func validateNewStackParameters(scope constructs.Construct, id *string, config *StackConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/stack/internal/types.go b/cloud/gcp/deploytf/generated/stack/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/stack/jsii/jsii.go b/cloud/gcp/deploytf/generated/stack/jsii/jsii.go new file mode 100644 index 000000000..6719f62e8 --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed stack-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("stack", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/stack/jsii/stack-0.0.0.tgz b/cloud/gcp/deploytf/generated/stack/jsii/stack-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..26bc31ea4fedb5d0d8d6d44b816ad7b353aa3301 GIT binary patch literal 16914 zcmV)!K#;#5iwFP!00002|LuKgbKAzY?fL9q!K?Qn$+pExYyTVmcBwkn#aonY<(Rs6 z@uBoP{48~X4VW62p=wM20TjYqa?IsTAX9a0&tI)oA0)kC znM?MPy}r3f3ft98$6K%Tq{Kf1b-cA=IojGJij5Lp`nu;E_Pi_m>Ox<^BwulwuWthp zzPy_2ek{M{__pp-&v2u8uB^hAYs%ijs5vY5vIez!OQv+um}_ZiDZ_+cqdXULCtez= zSTE=(!(Xfw&^PZEK%VNX+;_gdTFDR2%KDG0E&nrjQk4iKsM&=-${RURyu8uv*h63d zE8lpKRUcJNO;jCJW#z10{NAxHLv=5RWM9)XP2{-D)7eXOk82&Mr@QkPPP|eVn&J6$ zBfU-bLz?6_=fU5~EB#VU zsaTHf18<=dco~&19Y9oZAJ$0d5paM|!cg!WrTr#ML_^_mhO7<|Z4S!{*zOF9tukTdT zS!?g+s{2mUUDMh553&A8o03swsp*3<&A=?lbYZnXQxKZNG?zn|l8_*Ko^C1Tj&57{ zN|C*2TDu$tYe^SbYM4xO)Y!bW(k*$lgvSbycbB*+@QVD7E)K5NmLG(Rjdh4&NEJ;Ty7P?DZ9`w&|!c z7)dR=8w^Hj7(W=M9+)9jhs*e2HVqr3V&A7v67ov6bRX?Fekbz9X2#IuRmaui(;+r= zI!jdZXcD;$Xa5T-?boasGeZkQE2@IKGAzS4HrRw$hCP2?(W+xV81o}rfav=g%Ac)6 z`1>CTOIjK>T9{1Pi+VZVR*G6mXeZZ+VlCZYI2vsrlrbJK)?>^yQsj!sTt-7<+}Zv@ z_l&)M>-#H1S^Ij-_??ZuS{WLgdk)MU*jyZ6SHU!h769tyO83_*+e_9itM^sMG<6j( zi1D|j(uHp7mTvnQ*^~Aw+q;WIqOWh0f&)XbWH+ASYXQq6M1F&QE+5g)P1QVi^^0~j z{_T%&v z`?M*f_R689uCi*I-wEr+nemW#~M8&=Xz~>#-oHV8EjTW)hCO+Ms=p2N(48QƜ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 literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/stack/main.go b/cloud/gcp/deploytf/generated/stack/main.go new file mode 100644 index 000000000..988f79796 --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/main.go @@ -0,0 +1,54 @@ +// stack +package stack + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "stack.Stack", + reflect.TypeOf((*Stack)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "baseComputeRoleOutput", GoGetter: "BaseComputeRoleOutput"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberProperty{JsiiProperty: "iamRolesOutput", GoGetter: "IamRolesOutput"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackIdOutput", GoGetter: "StackIdOutput"}, + _jsii_.MemberProperty{JsiiProperty: "stackName", GoGetter: "StackName"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + }, + func() interface{} { + j := jsiiProxy_Stack{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "stack.StackConfig", + reflect.TypeOf((*StackConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/stack/version b/cloud/gcp/deploytf/generated/stack/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/stack/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/generated/topic/Topic.go b/cloud/gcp/deploytf/generated/topic/Topic.go new file mode 100644 index 000000000..90037708a --- /dev/null +++ b/cloud/gcp/deploytf/generated/topic/Topic.go @@ -0,0 +1,522 @@ +package topic + +import ( + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + _init_ "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/topic/jsii" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/topic/internal" +) + +// Defines an Topic based on a Terraform module. +// +// Source at ./.nitric/modules/topic +type Topic interface { + cdktf.TerraformModule + // Experimental. + CdktfStack() cdktf.TerraformStack + // Experimental. + ConstructNodeMetadata() *map[string]interface{} + // Experimental. + DependsOn() *[]*string + // Experimental. + SetDependsOn(val *[]*string) + // Experimental. + ForEach() cdktf.ITerraformIterator + // Experimental. + SetForEach(val cdktf.ITerraformIterator) + // Experimental. + Fqn() *string + // Experimental. + FriendlyUniqueId() *string + // The tree node. + Node() constructs.Node + // Experimental. + Providers() *[]interface{} + // Experimental. + RawOverrides() interface{} + // Experimental. + SkipAssetCreationFromLocalModules() *bool + // Experimental. + Source() *string + StackId() *string + SetStackId(val *string) + SubscriberServices() interface{} + SetSubscriberServices(val interface{}) + TopicName() *string + SetTopicName(val *string) + TopicNameOutput() *string + // Experimental. + Version() *string + // Experimental. + AddOverride(path *string, value interface{}) + // Experimental. + AddProvider(provider interface{}) + // Experimental. + GetString(output *string) *string + // Experimental. + InterpolationForOutput(moduleOutput *string) cdktf.IResolvable + // Overrides the auto-generated logical ID with a specific ID. + // Experimental. + OverrideLogicalId(newLogicalId *string) + // Resets a previously passed logical Id to use the auto-generated logical id again. + // Experimental. + ResetOverrideLogicalId() + SynthesizeAttributes() *map[string]interface{} + SynthesizeHclAttributes() *map[string]interface{} + // Experimental. + ToHclTerraform() interface{} + // Experimental. + ToMetadata() interface{} + // Returns a string representation of this construct. + ToString() *string + // Experimental. + ToTerraform() interface{} +} + +// The jsii proxy struct for Topic +type jsiiProxy_Topic struct { + internal.Type__cdktfTerraformModule +} + +func (j *jsiiProxy_Topic) CdktfStack() cdktf.TerraformStack { + var returns cdktf.TerraformStack + _jsii_.Get( + j, + "cdktfStack", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) ConstructNodeMetadata() *map[string]interface{} { + var returns *map[string]interface{} + _jsii_.Get( + j, + "constructNodeMetadata", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) DependsOn() *[]*string { + var returns *[]*string + _jsii_.Get( + j, + "dependsOn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) ForEach() cdktf.ITerraformIterator { + var returns cdktf.ITerraformIterator + _jsii_.Get( + j, + "forEach", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) Fqn() *string { + var returns *string + _jsii_.Get( + j, + "fqn", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) FriendlyUniqueId() *string { + var returns *string + _jsii_.Get( + j, + "friendlyUniqueId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) Node() constructs.Node { + var returns constructs.Node + _jsii_.Get( + j, + "node", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) Providers() *[]interface{} { + var returns *[]interface{} + _jsii_.Get( + j, + "providers", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) RawOverrides() interface{} { + var returns interface{} + _jsii_.Get( + j, + "rawOverrides", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) SkipAssetCreationFromLocalModules() *bool { + var returns *bool + _jsii_.Get( + j, + "skipAssetCreationFromLocalModules", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) Source() *string { + var returns *string + _jsii_.Get( + j, + "source", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) StackId() *string { + var returns *string + _jsii_.Get( + j, + "stackId", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) SubscriberServices() interface{} { + var returns interface{} + _jsii_.Get( + j, + "subscriberServices", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) TopicName() *string { + var returns *string + _jsii_.Get( + j, + "topicName", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) TopicNameOutput() *string { + var returns *string + _jsii_.Get( + j, + "topicNameOutput", + &returns, + ) + return returns +} + +func (j *jsiiProxy_Topic) Version() *string { + var returns *string + _jsii_.Get( + j, + "version", + &returns, + ) + return returns +} + +func NewTopic(scope constructs.Construct, id *string, config *TopicConfig) Topic { + _init_.Initialize() + + if err := validateNewTopicParameters(scope, id, config); err != nil { + panic(err) + } + j := jsiiProxy_Topic{} + + _jsii_.Create( + "topic.Topic", + []interface{}{scope, id, config}, + &j, + ) + + return &j +} + +func NewTopic_Override(t Topic, scope constructs.Construct, id *string, config *TopicConfig) { + _init_.Initialize() + + _jsii_.Create( + "topic.Topic", + []interface{}{scope, id, config}, + t, + ) +} + +func (j *jsiiProxy_Topic) SetDependsOn(val *[]*string) { + _jsii_.Set( + j, + "dependsOn", + val, + ) +} + +func (j *jsiiProxy_Topic) SetForEach(val cdktf.ITerraformIterator) { + _jsii_.Set( + j, + "forEach", + val, + ) +} + +func (j *jsiiProxy_Topic) SetStackId(val *string) { + if err := j.validateSetStackIdParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "stackId", + val, + ) +} + +func (j *jsiiProxy_Topic) SetSubscriberServices(val interface{}) { + if err := j.validateSetSubscriberServicesParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "subscriberServices", + val, + ) +} + +func (j *jsiiProxy_Topic) SetTopicName(val *string) { + if err := j.validateSetTopicNameParameters(val); err != nil { + panic(err) + } + _jsii_.Set( + j, + "topicName", + val, + ) +} + +// Checks if `x` is a construct. +// +// Use this method instead of `instanceof` to properly detect `Construct` +// instances, even when the construct library is symlinked. +// +// Explanation: in JavaScript, multiple copies of the `constructs` library on +// disk are seen as independent, completely different libraries. As a +// consequence, the class `Construct` in each copy of the `constructs` library +// is seen as a different class, and an instance of one class will not test as +// `instanceof` the other class. `npm install` will not create installations +// like this, but users may manually symlink construct libraries together or +// use a monorepo tool: in those cases, multiple copies of the `constructs` +// library can be accidentally installed, and `instanceof` will behave +// unpredictably. It is safest to avoid using `instanceof`, and using +// this type-testing method instead. +// +// Returns: true if `x` is an object created from a class which extends `Construct`. +func Topic_IsConstruct(x interface{}) *bool { + _init_.Initialize() + + if err := validateTopic_IsConstructParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "topic.Topic", + "isConstruct", + []interface{}{x}, + &returns, + ) + + return returns +} + +// Experimental. +func Topic_IsTerraformElement(x interface{}) *bool { + _init_.Initialize() + + if err := validateTopic_IsTerraformElementParameters(x); err != nil { + panic(err) + } + var returns *bool + + _jsii_.StaticInvoke( + "topic.Topic", + "isTerraformElement", + []interface{}{x}, + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) AddOverride(path *string, value interface{}) { + if err := t.validateAddOverrideParameters(path, value); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + t, + "addOverride", + []interface{}{path, value}, + ) +} + +func (t *jsiiProxy_Topic) AddProvider(provider interface{}) { + if err := t.validateAddProviderParameters(provider); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + t, + "addProvider", + []interface{}{provider}, + ) +} + +func (t *jsiiProxy_Topic) GetString(output *string) *string { + if err := t.validateGetStringParameters(output); err != nil { + panic(err) + } + var returns *string + + _jsii_.Invoke( + t, + "getString", + []interface{}{output}, + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) InterpolationForOutput(moduleOutput *string) cdktf.IResolvable { + if err := t.validateInterpolationForOutputParameters(moduleOutput); err != nil { + panic(err) + } + var returns cdktf.IResolvable + + _jsii_.Invoke( + t, + "interpolationForOutput", + []interface{}{moduleOutput}, + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) OverrideLogicalId(newLogicalId *string) { + if err := t.validateOverrideLogicalIdParameters(newLogicalId); err != nil { + panic(err) + } + _jsii_.InvokeVoid( + t, + "overrideLogicalId", + []interface{}{newLogicalId}, + ) +} + +func (t *jsiiProxy_Topic) ResetOverrideLogicalId() { + _jsii_.InvokeVoid( + t, + "resetOverrideLogicalId", + nil, // no parameters + ) +} + +func (t *jsiiProxy_Topic) SynthesizeAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + t, + "synthesizeAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) SynthesizeHclAttributes() *map[string]interface{} { + var returns *map[string]interface{} + + _jsii_.Invoke( + t, + "synthesizeHclAttributes", + nil, // no parameters + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) ToHclTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + t, + "toHclTerraform", + nil, // no parameters + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) ToMetadata() interface{} { + var returns interface{} + + _jsii_.Invoke( + t, + "toMetadata", + nil, // no parameters + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) ToString() *string { + var returns *string + + _jsii_.Invoke( + t, + "toString", + nil, // no parameters + &returns, + ) + + return returns +} + +func (t *jsiiProxy_Topic) ToTerraform() interface{} { + var returns interface{} + + _jsii_.Invoke( + t, + "toTerraform", + nil, // no parameters + &returns, + ) + + return returns +} diff --git a/cloud/gcp/deploytf/generated/topic/TopicConfig.go b/cloud/gcp/deploytf/generated/topic/TopicConfig.go new file mode 100644 index 000000000..243fa2b45 --- /dev/null +++ b/cloud/gcp/deploytf/generated/topic/TopicConfig.go @@ -0,0 +1,24 @@ +package topic + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type TopicConfig struct { + // Experimental. + DependsOn *[]cdktf.ITerraformDependable `field:"optional" json:"dependsOn" yaml:"dependsOn"` + // Experimental. + ForEach cdktf.ITerraformIterator `field:"optional" json:"forEach" yaml:"forEach"` + // Experimental. + Providers *[]interface{} `field:"optional" json:"providers" yaml:"providers"` + // Experimental. + SkipAssetCreationFromLocalModules *bool `field:"optional" json:"skipAssetCreationFromLocalModules" yaml:"skipAssetCreationFromLocalModules"` + // The ID of the Nitric stack. + StackId *string `field:"required" json:"stackId" yaml:"stackId"` + // The services to create subscriptions for. + SubscriberServices interface{} `field:"required" json:"subscriberServices" yaml:"subscriberServices"` + // The name of the bucket. + // + // This must be globally unique. + TopicName *string `field:"required" json:"topicName" yaml:"topicName"` +} diff --git a/cloud/gcp/deploytf/generated/topic/Topic__checks.go b/cloud/gcp/deploytf/generated/topic/Topic__checks.go new file mode 100644 index 000000000..c3eb91cd1 --- /dev/null +++ b/cloud/gcp/deploytf/generated/topic/Topic__checks.go @@ -0,0 +1,134 @@ +//go:build !no_runtime_type_checking + +package topic + +import ( + "fmt" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func (t *jsiiProxy_Topic) validateAddOverrideParameters(path *string, value interface{}) error { + if path == nil { + return fmt.Errorf("parameter path is required, but nil was provided") + } + + if value == nil { + return fmt.Errorf("parameter value is required, but nil was provided") + } + + return nil +} + +func (t *jsiiProxy_Topic) validateAddProviderParameters(provider interface{}) error { + if provider == nil { + return fmt.Errorf("parameter provider is required, but nil was provided") + } + switch provider.(type) { + case cdktf.TerraformProvider: + // ok + case *cdktf.TerraformModuleProvider: + provider := provider.(*cdktf.TerraformModuleProvider) + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + case cdktf.TerraformModuleProvider: + provider_ := provider.(cdktf.TerraformModuleProvider) + provider := &provider_ + if err := _jsii_.ValidateStruct(provider, func() string { return "parameter provider" }); err != nil { + return err + } + default: + if !_jsii_.IsAnonymousProxy(provider) { + return fmt.Errorf("parameter provider must be one of the allowed types: cdktf.TerraformProvider, *cdktf.TerraformModuleProvider; received %#v (a %T)", provider, provider) + } + } + + return nil +} + +func (t *jsiiProxy_Topic) validateGetStringParameters(output *string) error { + if output == nil { + return fmt.Errorf("parameter output is required, but nil was provided") + } + + return nil +} + +func (t *jsiiProxy_Topic) validateInterpolationForOutputParameters(moduleOutput *string) error { + if moduleOutput == nil { + return fmt.Errorf("parameter moduleOutput is required, but nil was provided") + } + + return nil +} + +func (t *jsiiProxy_Topic) validateOverrideLogicalIdParameters(newLogicalId *string) error { + if newLogicalId == nil { + return fmt.Errorf("parameter newLogicalId is required, but nil was provided") + } + + return nil +} + +func validateTopic_IsConstructParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func validateTopic_IsTerraformElementParameters(x interface{}) error { + if x == nil { + return fmt.Errorf("parameter x is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Topic) validateSetStackIdParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Topic) validateSetSubscriberServicesParameters(val interface{}) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func (j *jsiiProxy_Topic) validateSetTopicNameParameters(val *string) error { + if val == nil { + return fmt.Errorf("parameter val is required, but nil was provided") + } + + return nil +} + +func validateNewTopicParameters(scope constructs.Construct, id *string, config *TopicConfig) error { + if scope == nil { + return fmt.Errorf("parameter scope is required, but nil was provided") + } + + if id == nil { + return fmt.Errorf("parameter id is required, but nil was provided") + } + + if config == nil { + return fmt.Errorf("parameter config is required, but nil was provided") + } + if err := _jsii_.ValidateStruct(config, func() string { return "parameter config" }); err != nil { + return err + } + + return nil +} diff --git a/cloud/gcp/deploytf/generated/topic/Topic__no_checks.go b/cloud/gcp/deploytf/generated/topic/Topic__no_checks.go new file mode 100644 index 000000000..dfbcc6816 --- /dev/null +++ b/cloud/gcp/deploytf/generated/topic/Topic__no_checks.go @@ -0,0 +1,50 @@ +//go:build no_runtime_type_checking + +package topic + +// Building without runtime type checking enabled, so all the below just return nil + +func (t *jsiiProxy_Topic) validateAddOverrideParameters(path *string, value interface{}) error { + return nil +} + +func (t *jsiiProxy_Topic) validateAddProviderParameters(provider interface{}) error { + return nil +} + +func (t *jsiiProxy_Topic) validateGetStringParameters(output *string) error { + return nil +} + +func (t *jsiiProxy_Topic) validateInterpolationForOutputParameters(moduleOutput *string) error { + return nil +} + +func (t *jsiiProxy_Topic) validateOverrideLogicalIdParameters(newLogicalId *string) error { + return nil +} + +func validateTopic_IsConstructParameters(x interface{}) error { + return nil +} + +func validateTopic_IsTerraformElementParameters(x interface{}) error { + return nil +} + +func (j *jsiiProxy_Topic) validateSetStackIdParameters(val *string) error { + return nil +} + +func (j *jsiiProxy_Topic) validateSetSubscriberServicesParameters(val interface{}) error { + return nil +} + +func (j *jsiiProxy_Topic) validateSetTopicNameParameters(val *string) error { + return nil +} + +func validateNewTopicParameters(scope constructs.Construct, id *string, config *TopicConfig) error { + return nil +} + diff --git a/cloud/gcp/deploytf/generated/topic/internal/types.go b/cloud/gcp/deploytf/generated/topic/internal/types.go new file mode 100644 index 000000000..fcd9adcef --- /dev/null +++ b/cloud/gcp/deploytf/generated/topic/internal/types.go @@ -0,0 +1,7 @@ +package internal + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type Type__cdktfTerraformModule = cdktf.TerraformModule diff --git a/cloud/gcp/deploytf/generated/topic/jsii/jsii.go b/cloud/gcp/deploytf/generated/topic/jsii/jsii.go new file mode 100644 index 000000000..78a253b42 --- /dev/null +++ b/cloud/gcp/deploytf/generated/topic/jsii/jsii.go @@ -0,0 +1,28 @@ +// Package jsii contains the functionaility needed for jsii packages to +// initialize their dependencies and themselves. Users should never need to use this package +// directly. If you find you need to - please report a bug at +// https://github.com/aws/jsii/issues/new/choose +package jsii + +import ( + _ "embed" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" + + constructs "github.com/aws/constructs-go/constructs/v10/jsii" + cdktf "github.com/hashicorp/terraform-cdk-go/cdktf/jsii" +) + +//go:embed topic-0.0.0.tgz +var tarball []byte + +// Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module. +// The implementation is idempotent (and hence safe to be called over and over). +func Initialize() { + // Ensure all dependencies are initialized + cdktf.Initialize() + constructs.Initialize() + + // Load this library into the kernel + _jsii_.Load("topic", "0.0.0", tarball) +} diff --git a/cloud/gcp/deploytf/generated/topic/jsii/topic-0.0.0.tgz b/cloud/gcp/deploytf/generated/topic/jsii/topic-0.0.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..cfbc3696e78322a8f6e0803c90310f1ab1cda649 GIT binary patch literal 16897 zcmV)?K!U#?iwFP!00002|LuKgbKAzY?fL9qfvfi+$+p?;g-=?cJ`dF6FuY;r!k+jDNk% z56iNb7Z*(0bC%^Q9Lq8PDpxL9j=Q{MFPML^99!Zl%)i)wy~5Ah^X1jQSoRqz$+9dH z{`*FL{(8qSXY$%#IIFW?8SodwoY}IapZ&_5&2?K}$-b`rZ}{7}>R4y*QL>d|>fYI} z%pdU2NDln-&vy*-4J16%bXT`E-Bt~l8keDJOaBfO!k(Ad^Q%Cn>e!yYTB|-tdd9Km z+&Oo7b(R#it(lIuUg=4Re+BAzYsGT3wMi5kB|P_a&o}IOSN7F~zJf`<;WXdg2O@lV zHP`)Ee$DZ1-KU=6M)O=*g)P^Vy@gS8R_=KXYW1E>>7p^$($Z3f3BN^o&gM?MG*q!( z&{2lJSSz4!J}iJd)mgb8e0{Z&@0^wOA5~laXYQmb5lB$83%{2)a-w*7qua5EzyMah zaVM)js+yXpI;hIZS-beXW1WZUo)O8urD>YTah|8Mm*^hX+EY(=>o1&mrOq_N^XW!< zpX`S;$?wR2zonV?Ur)8NS|lyoz=%XowJrI<`w-OtnA9^HOnQB2tMQyW|3O~q=W0sD za%?9zUoqR+ld*sSWpo%}MQLTwrbNtzp1Lwz-++al`HpL-Q102nv2+*Ld*S=;uOB{y zGdM~CmU~HGc{p$7ynJ4&GCwP8!_=5N<)ePVm3~1h8`f{oD@*rf zP4=VShH^>Mc4gI)m$YRsWba15lh>x-vVDDZC#!IV_E&2?qo%=vL{xF5yN+l0&T1PK z?r+_|WP|l&y)si9Ar$SY3*7=0fU19B&pGy-MMcDiB|TKKhly?YD?{~lb%B5VpqkEF z`!HAC51Q_p&ep$+^+(#2j4De_ACzeZW=WW^YAHkG_1ljX+OEI@}+rn3h z>_yYs`6yURy2w()WSXPK=B<@($*Uz?zK70wrRt3AGv^=9aZ}(G`2$@XT&*ojhP`=q zqu&{}?lH2>K$RJwjK(-NBQv2U43czymRPj!zDDB#*ExJ=*oJS&rm@pkwA!Yl%3vh5 z>~1g^sbPF)n0jD_R2|OagV{7}kg9ZP_vOLvs_4ss%4V}&s z)jXO+&coUNj7s}0YsSpb!qAGU;I0hI@Qn>p-d`E^{Aoq2j(um$4{QOV?`tT3whrO% zera`m-P%l@yzh2p1vUXX$uR5lwt9U_- zzh#&+-PA4J_A|04?N_$9XNg4L-X{eIhGNNXJj1sFmPd$ug?_Fc(9ccPJazT6b~XO( z&v3K{jUHR6+?C_%E8oy_<^jX9*1oJj!$>sg%NS32ukk<$U=wq@_T9Bl8$oJ+>{~Sc zrh!tf>>nt;tS(#H+pXgTx4({S1$<{H`f8}JHijCX2MSa-Hn{$-x?UBx-RJGm#F+QC zmg1P`gO<|%*HLoUpWMt8+ron{Gpso|Ib`pVh+Q)AUG_)(3WR*l!M$lNL`p1+b+KW%DFeD%b?U`7j_Y27f+9pf)_rUyTL7&uv+XCGF) z{%l_Tt|quAx44JrC&qUeb*0O`&fv)l9+G&>owNF`+Mg?bm$UET9YK8bj~0f&%-T%J2>&+}6hTKlVI4=DIWN zxxR8&h7CIW?D9iR+>B6y-fQB&m!+$69RDq`750SxzQ)hl+S3^io>!m!_U=}>*H!;q zgXgcG(I#p8v;OEhE8lz1oPGJCd%>qY^B1#`&9#muU*_8{zrDi=&#zsB`JLG~hQ_eJ zz5DQi2@ks&Wy`=#Bs152@FsaMEW5@#cz}r#e&LwknU(%^ZLIX4G067IZ|^?*``_>W z%@7C0pv;_O;&&i<-gz`A_TL}g!IM5HOn>xsTk`@f;=5ivmxo8K&gy4)RQsMWwD$}; zwETsb@V&LGQ%UHx;Qag?<)K#|4{H1?^HZwAKShZ_^9R5C3&T4%YE|K`a?UQ-V!Ql$w72+q-DJo9jN@5&TTH zBRVJ|>-fh{Akj~Ml3BeVD>P9ue@aGRs~}mtY@*70RlsS#c&@G{RUswiYedV*(hRro zUaerdFNT)XD3Fk^O_V=N6T0{IDuj}M2{!6Uy<+n6)k{dr(o(lI*D-7#ok(SB2}*{$ zu%CYla{TlQrD4kX_ntbZXQz%;(biCB>^il!C66D?*1cm)C%oIS++E9fFw|0& zQ>~sUTGfqKYhAXCme;a-8*S3QpG~^Pt?8lk_F&gCS+8YP7Rp%KweDSIGJG(UvGAZa z%=N6?HExa8)$Pvb`=Y>inr5vp3YGpn_`7%6Hy+FVrNC=!>#8pbH+sG0$zqT1k2&F% z6?j!_uLmO!mp1$+&(LvDX)cULYUpG?8kzT#xUU7B`)GkME0JuMg_6^9OzLan=zu zkl!1y0^h4+J&_LlEhq4!319EjO};NKQNHbC8`irH@~N;6qhX*kkq*l5UG$A0Jt|vb z1zy@xx(9M6eNmX;bg)f8I}SyGABOU)d|&(sbscPjx+1wFR^Ugt?SS6>omq?Necu;_ z`&7LfpwGj0Y4^o$r60&*O}@|ep&k;hJCt8)1!Yq8quV2@pG3+l&w{=H_Hr|*K^c>n zzMZ}(EKpr~@w(7;r^-b2BW($m3ELy3Owj+53fo()7pN1_R#cs~)temo$vTxDZ}RFi zWd(k^-BYLXAfp|jo#1g*piY9s_a!k|r(G{keo8-?x&0&o8`{@Tuw7EhMD32o#j;30 z!MV=u8{qHy1^PE=x3-W|23apV7{@qGfwJ=Y%RRboA}jFXHrZeOV6K8~SE1yK+s6%< z-xU_ku|08ryW#e!#pG~soxpQ-hYjV>{Ttd(uhciP=cgPSxtij2h#u3#yuA(90@TLz zGc@nxXLyc9>j>F?wFXOSwF-S`E$AgvT{V(=k4- z70YB*%e?QDxXr97d9z7(1NJ79M#WVo{6@9=bA8K;vq^h99nUtZ#r2fZfKwWx*AfP% zYPT0NtGZQ0oL`c5vq}3#DOD_atj_O-yro)Izg5%jXAPg78R}I`Hb}eEnr&`c?o;Wb z=Yw5)=c|e(U8s%fR;%$YsIO|x7SobA?@xHQU#hNWmT9*d(uLNL*0W}JE;XdBY6+H7 zZu_Hgb*YUXO=;3I)n#v^STlFF<*z1yj7P^Geb~x}aznzVRrBbSRI?i`%@IY@@vD7U2pVfx6?n`{T)$BdY z#@+dJ(w$F-{3nsE-nN=O&?oB|ms!pRoct0HXFGF2G`y1Eu&er*g z^UWn7tHCYQ8o!wtJUgAV?b)P1S4+}Xv&{RT9aWC1`-5s#A7+y_s}FfrpYUd@0qu7o zk1M-Yqdo`w-%gEZ<%U#gH5Loa66Y$YXUSYBHQt$yD@z6JkGBtVwee_9Cp}Onb2j9! z`i)0dvAp@TG+1@)ffd^Ikn^XLYhNB$9<<3|hx>J@lzO|n?Eb`c8jNO>c1a%hOm*h~ zn^okJREhdo(}+Hw-;I1#u{l*SP``gN`1))-a}`V4wHm^@RTm!QA#VV^XElDK82o}7 zOGDmAV@y&N*pJR!#AChH5ZG4jV$-oIE+}uhtp;g#os#e%OQ5_eIacnKhOkq&Jg+vE z^Vwv<&c>Ccnm(rII%P);|q{ z@q0a2%hJPa(sI;NZ=-^_sbMZVwdj4TcD?Qxm3urddC_xzrydewzAV2!oAFz%hnA$pW-&?*x^`>r%&4MmeMc9w$T_z$hp)d%46k*x$9Wi9y!lO?XPK|Z8S^pw6U0823Y@UvH5d5cggXqhke#I zwWhRHjFj@izN+rjhIHTNSU88%^DtjUI`G`odUU5-eh22qSU)>h-)OGgE(slw-30U2 zc&mlFPs%XAJppzXv{!n$XkIQ47Sod7p4ASoFV1@>kNb!8WoWa9_9tClvHEEZVGC?k z4A!4X7uxII`I?+ZEQ!@7?R84K2jk^VjpPSyan%z1)oiki`jBIZ{^YB9_K>D`WE0+e zT=GplHqS<5kj-t!K=!2EGgW)$PD|1b*y`sYUz&~|x!EXh%!7Rtzmdlkc2t&FAoEjg znPV?tZyD5iZo_q^QFRr&Z-0`g`fru;z?_x`VEx7dTDF?Kiee9(*`(*{meiV-9(k<^+O5rL4QcnOw#4lV=P0`G8p2v1 z^3}BRN2T`H*|^7ctl3s6ae`t4nbPi4us+nTi8Rt0*ct3oT5p$Fo93+=SOXqeu!emS zJP+Etz`Cs)_P^opwd=*_5j)q$l_lOwEK!?YhwB^IH+`xtpsjamuz$5r!|Up2gIWh^ zI~Rib5&t)QQy)GipEpy|g7qe}RiNi%dYY#B0QL%#T6>|`rrI*nSOW;}`)bZ;#>yM9<>%0mnD)FlIJF9+Cu`Ao=n*wt(k5D|xQh zU>6W+qo;9n3XPI}Nv91Ea`Mq;oYEls=?p}kFW3n+h2D@Nc@NtmRqprC zF(7-rfI2Yo7dUv+bRuN!Q;d?7r5!SZ4(6K{XBc4f35cpR(I65$BosbaI9-Kb(#SQ% zWkN$g(IMU_9U@$l(J#+Vim;`7xg@a%5hH>;PbNn^Yys%iT_SQsmpzCa0YI(KY2*lf zS)3dZ0C&pr`Nt@e;Fr>Q2H+bNFM_?A;?IUsV>vY4EhCu{8BAw%bfCd zVC<-D3;r!q;4-k8G!UHbUsyLu#GrV$a9MHSw*aXH_7NgwEQ-_(+juV`b|Cq?Jo!P} zgK<0^rQ2WTc*(3&&&wzi+AA6(?ILwD`=Ve%Jth(b{`bUws!iar67|)@MD_uRFxmD# z69s;@j|7rM5NZIhT-fyQVf&Rc#@DDX3ZtMr8QN}0{y}L*u)iKN+Abu;1>00;_*4qzWO-nKR!0D_DwrfLc7Y}}tu?Ii@kwZ;@4 z=1&?Io6hz+3*a=gac?!73{=H3eGD95r4l@b4@HO-)m8%>j_Q-IHd#C<e*?m_?@+JCdV2Kvf?KvNRduwR6p*cU7HzSORFYW(d$6o#X^c{>J$JE%Xl zM@!Lb)rDc7U9=_ed!xE-)j4S-4B8W}Eeu%m^Jpn_J7JqdGV|(=>LA@f(#7s0-3Ga& zkigDff*68j3z_5)JeK-zpCE#5oIu|8GyxGrGZBy37zu^8`#ew?+hYA#LP=oDRY(*$gm^)>{Q?8vQTe2; z6e+hDh+f%f4bzgxy@l2=H;Rep@FpTBpz%Yl~=TW)Od&yjP7bYr&t4X2G)gfzbF9*jX$Z1 z=WI=DHG~~OGWiJhAhU*K$>WMSyGhqiP1P^iCavZJO*YumMp)k6wDh=8%f(4a;h1bx zgE{N7HW@rYlL_KUjPC%+Vk!nt)niHw!^z+jE9}p<{i@S0jx6j7`+H?QIC3_j?|CB4- z<%$3EX8Au&-*-O)8#6xrc1G@wX8(M1V!2(M+!3RjkDBObxStP zh=D^sJv6S!F@ZwFm6;JLL|mD1J_D)TUZMz2{6z<;lSC0pRz6WACMlB&^f!hw`A!3d zh%58JkRe~zD|1iO5FqrBxFJYnn!YD~%iH0%kZVr(`*X8gx=ajV!%Me&jsj`B8pcKQM4+;?GEIZ_#t`*5UL(z z7C@$ph)~fXau=ULlvU&~djcT)$fe#O7%NhU;PoQ3vBw53&?IU;jJbIeXq-hcKF~8U zKpBzzhYO(7ZM}6RvWQVYqG^!LA}pZ``v@{X>MYi?8KAAADD>2NpGGnTfaWe!LvoM^ zIYQzWH_sVL1f$YvY!woDg(&tdU>lKoHvno0`ywsB4f~Hqmc2pknVAL@d!py$$xpH; zdh32}_y-9vuJ*AfO8=NJCqHCJ5NyL}&bTbXwt~p}xLQlGzio#7(PM$E8|>eLW#zE0 zdNkAP#NaqFI3fneWKbW};M%o&VFrhzH3tuqGB^cZRNhkfjv?GXA-$hDjEAX=1y>zYx3$0dk3|+uFMC>DseAnT=y^r?$ys0+_reY0t>1-)%n@xTzPi6}Z z*dW0O3f#+Y4d_B13m*gB)B!_heh1MsFM;L(1RfxE+87{DA+zC-DTWs;4veF%~J zTdGaXVBC`k(N3H2rfMv9(^B;Tu)pMS-=k5Bi*?5e#v*}0G;y1coOyej#Y~~TfpVD> z^0-n`O1`NsC4V|LJ&J)~nQP6eu4a?A0LT1I+$A23J1X1;WT(W^Md384v>|#Nmuq7* zUkKgnCDnSM@+RE-C26bN^;58zIS6aM=~@!!wTh>iz;kr5sP{Nj?I zg8JgZL&O)0{NCYSr1o)8udJf$u|l8~KZpyEt$|~bcQ*u2VhL9|Qk0G;K|amMFxt8) z8Nkyxl#HOeYgKjDwjaZ&Q(neVNL<0a;3H0#L>vPF`9NcsJqryD8gM^aEn8n!AY}?t z9mv>&Qb!W9v>|(FuSP-Qj4&FMtbEO4lJ;o_%%Qk;0AtM74$3O19g>uZuqTafKiZA~ zXc=Y7q9UY;-UGv@3qE1oZyVzd*H!e(bEDg8qw2}yUgeM&4q=`bj^UuOrx*??F&v&0 zLqQZF10W4m9`r?FK%&xe{DO<8q3IYYPK!N(dbCM=1YD3*t1CUKr(nP)d*Pv~0emI1PQQ^E1b35bmM>sokAx zjgND{k_3n<_#GkC{08`x=UmpYn3kcx;f_FDmEe>%1zG1uLw>829w8d7S%RxH1OxcQ zA5f+{9dkn{W9Jb5x@oZ=0HQ@O7c42Tsm%BiM4H=z7m?r#I6}t2b~Xu+@@psXrSH`E z(QMq?&L(}YRrgI@LP!Ymodir0ftyVv^HX-cBe~L`0ukzcOa_u+Fa~h|z!-utAr@+r zhin4aF8Euc)f{Yc;xYuN5FfBUQW+b0@fif%w=Z#VM>(>ajQ9+A488peJVe}Ie?xo* zJa^`^45s5Ail;)yRfy(_1bQg=qE!VKCsC+B@jQ;YMq@!tvJw(wI39-~dN0DUOT}Sm zo5A2NbI!owX3o#}ooQ=Ga0Ae$?(U)R*(M+?Wnw zz9iy3=JGE`pvo+EaY!_OBcFcA&MC&o5d2BGy#eFBXuJl(h9V>zqPe*!Hqh}-Mfr+f z4id9FgeZrx1&UmdLCo=o$L2_sf9QoFQU1FFFN2A%O-C>oqH#AVLm7u$l9DL@K-L1; z?r=RnfT5B#9~{G231r=c>$PwM`zS}J1KTBHla#`FtOz6N#OOFNI{wjd6yp4kuWNm+ zKQH}b5C5Z7zAPvB9~a!!iU09t`5%2?M90%VpbZ|w{y^nEh5Uhv4!Ivl;P+1bfJz_7 z{D4_$nnw8OAn*MM2oLk`g}-6S4EjJMB_HV~Wqkk6@23kF{yAWMFbTqcpB<{7NTxOx z*Ro9=K@XKul?CsqJEOPYIJ*6)jU^DWmQ}ZH;B1cW>jm#P0NZoms0|#8?m&LvJPu&z z{_wE^;1*p(u)Mx(MNl?8CKqa*h6#?({lN%?fj9GD`VNF6(qQ`f0Wdwj+gzzXKTIDw z+C!NB@ws4n44b6E-4UdW;chSCEM3rfe28KCv=HVHQV!%7faM4XpStRx$L7f2rd)MU z&%F+Sav0CN>L8;|_#SsqC#OiA2nS}WPF*%feoCDZ4*FSF4&>BHsh>j4pCHV?3&QLH z$bQ#f*0+83MIlVI=17lgdCVcWu<4~jm7Q7D284#*i$^&E-{O7<9K^CA#L&@^ z4o?q`>TnrfTXh_|79L?=%tf^CcnOExuuU>xu>sn@ym=>FR1Yz*8S+@O$Egh|gxWea z-ksGRqW87ydB?a|hY%2P%optSZjEcZV|-jIID~(vgxh7(-QYcAE+mH1pksL&ZbIW? z^aMxR^kZp4?h($QSl_#YokFQ{4|SkKc_-n0_oqAAPa%#^NAstn`5z$uuct0_@Y{1j z0QvWSm&&E9MEqa&iankGzuEKuAvU7pA%MUPk3j*#(w_nZgbIXMKq&TmhXVrDk3$54 z-1SFyrF)*?*u;r{;$22&8c`shW@H!{mcDcBluW^!bO+Fpv()W`=O=uc7ge~G8rwKC z$+HD0PB!3vPy%Q9qKA1>@QI|{Jy1oO)J*(@=)dCnrsF!4tb#i3L3d(?Qd~nH=g8JF zlvz;INa7whQD~us{X>0_I@2!{$tva$iX{~a&fGdAnszLt@}A(@+2tG*xVd29?Ni9< z6TQA9xr0@L^2rS#DF#v$~bjL%8XY}AX{b+#o zRD!tmx~}6PV$XTx22M0NXUJ{4k(&R6cYge7^Dn z95pq6;QCFK|0u-D4}#u{phypk74Sf9wuPMhahIF9lLB^Hnbf1!V zp`L#wI#pKAmFVSXzdro?4eA~AJ#N1u?y;2H_k_le)9oT=LuB1b{o-Zi1o-a#b6kI; za1H^7VJ{wk3wb1q6xZMGCc_qkwJD`;iTNwLtQ=fk+hZ$eoVi8D*#^2PvuSfkyPg{) zJ!KBj^5+n$teiQ7qsAK-1wM~l`1jNc2VkedD{zr(HI%chhH^4O4cutJ?z6&GCa2qYELrF-}m54bVIsz&&82c1+_Qpz*Pc>OToGA#nThdn1Kep8OWFdr!&!|t^dXOfh65~U09-3K*)EX1 zd$}QDjQH&YFBikTxb(d4&CRGi0N+4uwoSF%11^Z!*nOmnpf{mg5&V8A;07G$B1GQ` z*?fd3O;JulbKojt=~5|G%vNKzQNy6@q25L6Cdy;Z)UE28#AdVHsI^9QH5*@G7jX&T zg=?(=ug5l9P0iIBbL_f}1IX6+$Zcr9JFy6YEGzf>^}udNL;&?G_=W{@O&lL5=a@|xV149Jd?m>DAo{dZ3%L}RWL^FScWUB1AF*gzu$>>CYzaMzO>!J&1WG(~TO9e}i%r5682F=AL+a zB*xG%FR*BL_7V2tjO34&$kxyWYq;W2Ka(HJdJvJT>~Wa)FLi)ggYRZY_F z4sfBRZSEMpQe<;SaF*ib9~}6d=#K-rOKD@}iS^f_ae16QNYNhSV184k9!1+DSU(3~ ze6Ejhp(g_1BN+#|(8tR^xc*_#dlt=WgG=TTz-*yQOFUzz(CG~aLLyu?WeUB)a4o4C%D)l)2=dkcySKi{Gqm-Ek~3;27hRj=Lq`K z$+h!I@K>|RGR6^%bMvCLd(2ThLHIx92nxyPdP>?>jSuYw=$V!e%tIh##jU}sElXJI z(u0wf?k>SAOuicN8kdnx!H`aE?XLg(iQ{)P|4&y}y8oK@Ka?)YT=M>h%EgKQ z_jdVz(1@PE{)73C;{KtMpTzt_g-5(UB=Wmw{XsR45|Zx0*VRFR`-40$9Jqfx&bf*nqIe%uuA-MN z54egRdo}mgFK`w81FRdqie7oPtLSkZQkX5|HQSgObaQ0Tf5_^{U|2|D;Pz6b2%5b> z{gpuKD|zx$m=$01nH2(LjqPELY%|J4p4W&CP^33z_&X3@+=ltl0kD1ueTpHWq;1CYg`V$pp72Wge58da^BBYl<&O}r;z$!& zry~%SSh=St0jDSdrzioZC;{L3`9E|}dsYA-_x!(nQLa=H=l@q1C;$JqeEtuO=qUgI z6mT2@fXaRv1b~VsFaRX<`v(D_p2wj8pv7vA<*t1l+$S6z@W)=nvZ;>k%Z9D5YL2b0 zS1a9ySCrzsX>Vf!bbDj09NW@uKgvfuj90*t=Y(?b&sY*mx180st3;`SC$WU?$^iyX zq8Z_%#1++ZDi#9zJ3T5v97zcu9t5RC@dgY_ch>$;R~=w{QM3W-c^qGe_1a#<1El|= zq73k&=p^(J7nu)%qzKHyLei{cufk!bFKU!4sdTFBe9bc?XK7E^>RzRZv`JM-LHQa| zVlpom2Sa23&EgYp!G1{^9aN0gYN&%k{rGSd;5k+7~+7E57 z@U{xw%aGud{-GYCy+=t+HfLQy*BPn!z$M)2Gj&9(4G z8UaU?$+_W#7{i(N2cy8G*&m#9@y$8~?2m{tL(LmIEl+-0aH8Md8R6LGYb9-DhZ47vVgj;E}fd|)4=@$^vS)|)996We5+I&6;o zlv{6<{F{96+O;pb&OhfSAK30Y98Ib~o!|{GW3!evPuz@v0~^F+z57cMKOZdrC; zC>jzy-l;Vt;w3_^U3vsCVtoR7q|Havty47+fvrwNV2f@;%9>}R+rEN*sMYhuBK3nzFiS34Z3pFm8>+CJj5Q37o6J3Q-py50*ypX3+p)s>k~c5Ko}ur@w7miK?NJK$ zyp#-@kBY|CzOvv=bm5wdxuK&PDjVM<)w(T#8@zf#?3O#62EH2yZGzvy@qAkXeEpsb z^<}4I)W%Oqek-`KD(bUgxc>pSN=>i&Vtq4U`|t+9Ppo!BMIL1V|7~C@b|3l|bhaNs z)P(hH(q2FgO`~0DHF`_AJg}fAxd3h%`Z&+Lt%itD^Om@x*bDo4BSbaY3$-MIs2)Dx zUV-Q|N(n@*8EjfjX*V14mQrrvXhWe6nURIy?M>hYq6rW9OG6;5NaQGO%o(#u3r02q zZ89x`z5us{0ZtRR6$i8r;+ytMj~i_~7;58-C|bdgzX!KS$qivWYdi)~m*%%Oe73Ie zMlu2LlwdmrWlqb>54T3BQ&Q);wAL(htCT7}9w7WH8-^1czKot`*qfk z9+XD40wN)3jcRt;mSi6rLGFMkYJU%RJv&0(MgzQYtGdN?xltNbZYH!j#h|0LfjYpb zO3hwiV~<@SJ9-+3lB1MiR1Lt%UaGr~m#s#HQ^svmz2DEL5Bl;2ZrUUJD=TtZSpE;d zsmBpu{)QX(!gVh%z;haOq_WiYI>xcjStn^(+3DhX(Q63J-H)v=368iw z9cy&NHvBBEH!&AedJ@m$dVzHqa-tJA4wCa{+y?>AZ*+9DwmB=A8|6MT>RVdmIeIQT z%GV)E52H_ws~m{XhUS+pRi~8qdC{5DZ0YdGZ6&bZlPgi+oagj{&DY>!jzwy9XX3ekSyUi_{`M+3@jPoh00C0cgj zD0mHeUmf{A_@*A4+asG}3;D0i#+8yhX>SyZ1K*K>4-2@d6+|Wg=^fTWG)Yi3`mxHs6SVbSE#zP zTH*c=zC(_P5Q^7d*BeuD2|5X}&NGaVJ-5k=fSINE6xrSRl` zNJm~w?5Cc-7bpkck}!fL`rg|J5E;q09r;{1RB}QIzA# zXKgZg&?bF{@=uPla26jrqBzN1qizM00)v z&Y(wSi3NR~A1xC`g2wa5oSdIPJc9=Xv{5a$Z|FJk7(ZSjQYngo5HIf(74#Gp^b{5J z@ACfz-Vo0l{&QdaPqtD@`2Uu#$|wKdx9k54jOYp8zaaZjzQ3^CCwczDq9eawDDb=Y z`UP4Z8Tk`rjk&7^k5V17iaClwm#Pdmu~148x2${@v6w$4ncShg#SLfGZ6gn^$xlc7=C1LpMD*17ha{vPQV$X8>L_sFSOi2PL9ZjCFK|Ra#Pk*!Oiv0( zStFDN6H-Nr2pl6uB?wkCgL3MC&!k#F97FOWLSPRQ0ttc?BuzceAWdNRTj3xJ!K(BKrd(yOtkFcvT?x9`4x0LV#Sz~AxZ<^anqnp@H=S#SCC}Q zIZ)pLdDV3gfRogneIWZRAZA{H;GF~Da5;j6;$44Pf9SK+oWJWsP!9m~V4iPnI^d89 zfQR53yK#R$wU={Dc!Y;o;L5(vHk%v**9q=TkuD+WCoFT%Re#c?hk;cX%(E!TDQK(U zfIOQ>h2EzSo${|sMC7H7Bd!}mLm}HY4Bk><{()` zWsd?G778ZIsN4L5^Z@ia>foLLzD@x#PXRGc0WnWM&vX9oJFcO=>iPf0>LoOb!!4m{l-ZY{+z&+nYo&u90Z zVVtjg-++hwhhYcMeviQpkgiX`4p7k{c7Oza@7MuU`U%*<{^*t7TJhACp@fmdhzOR+ zck$4dKs_3t2p@gF0ppU@+OJfYC5V-l5;!hJ?jBXsq-KV>3mSHRggcNj1K)|H?1^hf z$k?kIZe|(XF{rtt;eYJmO&d~k^zBzl( zZ1k09IN&*Z&YrVp%(v%8Vzfr}K^}JxL1I{?%)8SAkeHmS*TU<``q=HCyn1cMwohnG z5{)T(eOl_(UQuX}CI#qC@v^c*5#@(J`mw?*p-^x*^k4z>jz$ZKkR$C=$dOaX5jx}uSo6ki zeF#x6VKu0~DC&jQlNJYL;Cj)hA(OK0Ez_Aq@6Zy@22Ips{;3j z5(ud=+o(C$;RWe|+eYXrFzKQb=FD&w2!R11Oi0eDaE?m`b{rM>a{9kJ=2napbxFL}U91_dYyt9O}Xt zx}Y8E;zyTP$hE22^8VI*iTPQIUwKN?+%v&S2O1ovp-JrOITAMr2ZGT9+K_%ReqOq#P zk`r_u>1$c|M9=iKKA#Ie~v3B@PDpy!JWqctBrpEmz@RR2^#$vIXMfV z6ZlkK`wM3U9)_6w|AxPvtB!?|S+W6h#z`gUEr5!=={ z-=J43-E};}cUD_4D?#MwY`ro;(uME4zkc`-s)KPTSRB;Y@Xy|1EDBN#A_>mg*9=%K z&G7s%qr95yz85BAn6tS<{KW({=;7v@8~$RgfM)oBPo?s_Cq?4|CQ1py{sZ zZ2h~0s!${zh&`%H@au0OB8h6D>8@^Tx~&>|q~=*jCV-91vFF@5cX<`mDn8eT!dzWn z-8_@Pci&Dk>)V?D@p$)MVgcB<|6`N;KbE^V&Ht}5|DX1Cr}0nlKV{c|EAi`%|5D|W zON{^0)zxYIzs8SY0nQEc7ZW2UzK=f;J$QrioiS&=F@W5}`~+A2pMHB6%BTe!g(yk5 zb@(Zug))Zi>#I9i)tPJ8z#;>hWOkuwF9K+r;NO2UqlM0ZeJkVKG5$hlu0OY!hV1JP z@)o7|@D6dGWX-Y7Elm3>WV+h(-%@1Vy1ETyc&@H8vd73wdwAQ!8B!%Wu5Qb&F?4k` zPjKrdP!R=}NE3yLhk0Tw*@bf8rZl)|6xPZkQn{F`3;9^V)z_dhmh8RW zisW_~kko=I{z=#M+i&l_B{{j*uJI&BuIw6skBjY2(^XSm=?tRh0@)c>hgEi0#zyw_ zsAeQBFu~aUHL`xd%nhm+ka&NMj2$!HKsVZuZAmwU7d*$5JM@moMA%(gUh;L8h>$9q z%uaD&Q?k$1d=tQ@Sh1*Hyq7PiKBo1(I{apT9D)y`_{+ zlNFGM}jAd1I*0#_13)yEL4AW!` zd*dwi;H)5ZK|)DZbs#WzBk+vp4$pKvAPze5CQx)RdxEiS=-U2Ib#Z0puEAkvJ!u(^ z=9kQ+I4bB>SL2v55=#wf7HR7s^*(b^KIT*ZxxUlIRjT5NG-<+4U()}i^MBVd4R!mf z-~W}X#P@%hEmcnI{|~?Ze}=~Pq{UxW;fFW)s0Hr3Tks251d$!5u6j62Ft7aaXX>(i z-DO}fUq;@@hAAtiUO;pZG&uA7p4>UCbmWGdDk*rm?@R)o^Tz}-Kcg?p_smdNSK!}I z`c?u{JNOLJ-!uKSzSe)qEq4U{xwFen?6bo54_k=wo%G!d%6g4*#x`3i8xLe9Pug|h zF3Z|+;1XVSyFuDMv20`Gj8^NwJU!wiwM_r87qY@J+Aqhxp+~?o0`lkoGFM8T|CYJa_ur2{{|~XTJ!uIDESAw9-IeYE7IXTfjnmb`WJQm7 zgPgfy_kO4umcDarow;*X#ifpLu3X8^Qn%p;*xFy{whvG}op~_)1uTbVjOBfijewxM zlBkpR7!wU2g6=@uo%nPvfBJcY=l>o&F?`MQ zf39-HCC~p)@t^+*`#)%G&vpQSZ8u|!1Kz#z833x^({>q9MD`v7mGHVd45HVl#W!f- z^rbg^dpZgDj#kO!{0}!B&$HfS|AhG;8rzc=05G{S_$pV3*n%%% zaH&D~ot^X57`s3=_dsB6Df$X552|CU>(xrPeR!{c?qQdx8u0KRtnKiV7;vbegB32E z`N*bff!(xVHIZa>`#-kyi#lrXl_M_uYG#;^dd-FFxiRUsXf2Wj&9R<X$$eS+0fYg2{!yH>_QM$>t!q79b!;tg zt>n@NE*3OIX^Bow-3ww?=94yqs3o&^gQ$#G-VPFzI7!f_=hjqThFFrU?Ooag3FP59 zIn|*cH4iQznUC@-4Ckj~yc@~v$GSGc2`iOp3SVS3Q!v}?Ynm`!k>&^|lQeyzm)WF{ zdB#a2ezWH+FZ+8Udi@gYS!!hOYtUHgLRPlXZ66*)X1k-{BlTgD>yn+vJ0fvC*ONBZ z8K=*zAN%|d42;+1|6C;fe@d6-)A!#$;QJ34+p``2*@d=-^j0%%qXtqvZJP!)$lRns z`LDZ0i`qH9JZ7%1;mfQgGPZfkS;jE+G-r81tMO@R`TOVpC>G;u&Hp8iJ=KWm1f~on?-FNDB31RG_`}DkTfmsW1u`hk@ zse=}Sj1V*uYft_6iCiRQYC~Y`wyW_yean_IBO@~-BU2eqL@Y+~bTn2!UOk$c_OIvp z5d`7p`Z^KxTo6RzT1+SYl}g_T$>hzA0Of?FAc`XV`>z-HS((;o39Ou2@An|_{_CkymUF3v3m8-Asj@ZNm>=C9Adxz=zy$Y)ml|{aU~NWA^-2!tScL3E z){7@Q2P(!8ppXe;q$sEjUX&PJXv#}%VQIM0_Zw9*=kgR}2EU!mXX=9XePUUQUq60y zv^Xh&w)`%rK3YG0mAXo15#h79c{Nk5 zkutK}8OL;4@rFs5ji$VG!z#X0A4V(PDjT4vKnAduhOVn2y|p(bPdAt9Vs2{Ie7SQO zuyzYubnSg*wbTO#!XaqS*kFbyF^PTnJnUf&Z>~@$_C7hVrBI+&cbPo*)(*vj6RnMuxP#c-1I+OIBf4uQ) zX=J)8@2YL@Gc_W`PBCRJdvw|ohIl!}TYGE1TFPo-WF@XXUeV#9yY)wZlXy3uL1oMm zNRDQxW@2O{9QG54DJ3yC5~GB}QG!ssdhgrVAO7Um3^NW+84cLdM!L3FmwY$$xjaIv zu58roh087Z2TfOParO1-%Deb==nIrgT?Z?b(GnX+X6EiExZ-J$B;mVh zw5J?iH-FQ3e2PCF`K>Cy?3g@Tx33S2fj*i^$_RF31D0zWAIINzpVP^heZJG+K=!DsvwN&CJ;d}k7G zKjWNCMiNZ>NVbADV&DCO_nx3VQ4^n=^~C%k0Y}jUQ7s8;o-kEINjM!!Pz?*ikxA3~yyl8T6N@ zfVog*w*dOfTY&7`Od0aPQ;e9`tN5fz8>E#0r(?KRsAwLJWYIO6YVp!W~1`f833i;c{RioP` z6+_!5GkdssRPLLm1h7CU9N@yKAI3?bxE$n*)cQt_``;eydVV&8$wxCCN<6F&pm!E? zIJ%JA{ZQtiXbT^-e*Vd>@zXCH!vW^j149v9owMKtQJ@>g!*V{$8&D8R(MKx%lWF4@ zUh}~r)&kY|^B*73X#D4w#P9zX{gU`!zyF?C8DuX~JauNH1yq=-JEjh=P$^@7_>6C; zlJ8-VZ7*T(Z}88D!1w4ROwE2D4%z+w^Bbe9omu+s*)!q)(T4fIsp7AV77Li)PP6(u zx>o!Z{?s+{QSkB6oEyKP9q;D)gSxAT!+vEy>Sb2t$N9dRtIS5dtq#9ygMM~Voh|ld zZKKIzCMnPAdS{kdE4lJbSu2}mqrO)9mB(Sfrrql%DQ`6QWnD1Kv-Cvjb@%1Rh173t zG^tnE$VGiMOhH+#e0#sQvW-q5TP^81_&42nM1R+B8rnA1m=>~%P`-udcWSUC~gokBs$*UTQ2 zkve6w1$Bl(*=)k!&DIv^6uQ-X7uxS&I-^ecwgYXC@*P~ZwcFkyUaEP-qsi7Q(0aE( z`);V=_Dj`#5}pb8SvR+>!?U_gAM@1j=I)cgqc{PY@NcJPHc&tIR&*rOn9m-5ez1{XJy!%?sqk1y#L%U`3oPlSb82Ys|jBy2z6KxyD zC);XqyxVlya(GP8e9-cgKH&rL3Ov%ja&&Py#CIb#$(@sL8INTl7g)bkKytN(I;4F8 z+TC~ac3*(EyJim4>(jRAoR`fuwAtqS&eO*7MdobK;^^N+(6{?sg=ab*4?O?ecyQy_ zfoB~@_DCODdBkmsi;y-kUEHUEW{-1tTTK7@EInoF$R^OO6S?ck9vOgj(aYnuYJyij zIC2I0p zP&AhZ*OR>m;4#Wy^J`Wq1j@H(eG?f}h@RPH@=>y`V!ff~4$0wY+6a`x0UAfFlR%b& z*H#;zwQc%cG%n73qGx$bU*gwRyIRbkKCNLdM01pE9A3AW4xD~@I;Ae6lcaRkE*(ym z`p#NU4RfA%yxfGzNVQ-?N9)@5XQF>{@2<2={`@&;CIP^Jtp)WUK_U~Bv;8f=C`Ra z`<^iOj0x~AY}h&bV)qrE-8Io!s5dEqtS@0L8O=^jgLBzlN_BSwvAb`GnUzxPuFyHG zw=1u!yR0$nrFD5$5Qe?RcwkJ&1F^YOii7b`>(f!HIjig~o^~F}8g)T7x{vTTTi$(Msu}mm?P}Pc zY@jWn4ChAZ?`}9NJPupgEbx0LiD@{e%3~-4eNIp1UA6<~*xjHvT+6d$T@sr~so3qx zVt0qeYdF)5atV0RK98%r`JXT*<8p2eeVXXyViU%ru#k+}SSfxQ5Bl}JB-R&$ep4@( zl!a0p!*eK?FEm=MYzaMA#6p_VSmS?76@AbHIp?6a*L7!%D?oC<>>Qg!QdHqFO zU_QQR+0Llg8B4Q*1^rqNwXA^tZgjJia$cE0pHqXrPRnNSzw)d*85T1usWc_^+VioT zLUWon0_cC0K~5;&d-(k^l;=`?Gwd<^?nA~Zujk9f%&c5$&VlE>QY<`OFt?_9mxtehH|O0hW_mo7#F3aZ-Cw-@E{C&`U+@H%EjbF&Ta5K0$=k%f2fl_ z!#wvk<597&8Wy*RKeJrQn$U+m>ff-}8LL9pgz;ULiy+gxv@p~%7Ll)xg}!U5sEtxr zfOat7Fh7rSDj7O&cE8%if;E^mCrzWf8l;*F;CBz>1nbXQ4*OF^b_Dl#SYv3OAG+HW zotr<)`KCTZ@A|dzpm#lPz;{@=SebzAPhqZB;;2SVdhh)jzm$JK2e+cs3 z;l>5Vc%$^2_84G!aOFl(;P;6Hy6vI$Ia4l~V>AXJZyTjof%$>H!#YQ6LFv^6DOH}! zpi|^x=Z4ogFxR~XGoBk<59tS>&+3+ituLUBz0%L>vNqX6*$vW#K*Mz3qyMf~)tRja zx9;;2{YHj$TG@dfo~0M4KZBhuL*0ElrW>6VOS# z-VN>-mKT4YxHSN}P2X2%RM#apJFK-(~1+{@??MrUT>asXOd=FlAXL`zqh@$GYRD#RKKyPdvB_xNsx+2d>W z_{7>1!{i~dFYZ_#Y$IBJniF{ja$d-oROdYmnReo@`R;01%C2Dyg?0+Y2*wGLSQ1D}P98Q`m7eCcvyvXfFx9r)3QAWJIHAHm);>M!(0zlrK=u-&unnzA6 zYdEXIoWXgcR8LC=oag%Wg*xk&2jVuXl#onRlJK699jv4Hv4%4koXs*p?YG6spKw+a zsx$PxkSstOKojT{=(xatZW;JCf^`9Bmbr)Tg*|`dKePvJg<-!u|57kbyeYxew8n<#=dHZ*K^n+u$Xs{a=@#f8dW7|0At1bnL7UplJM0>PGOz{}I#aGFK8%uL>U^UiSOQQ}0hAAbr~>JRaqfuOL4Ik;KyZ^w zC7L&u#_NY#v8yEpJGk&StW<+|VrU&=jH492672OAA4=t2YQKapv7?FNRT4t5#f-qw zg!wVKfWY1;2+TP+kzdXZ1v9#j@QEuN1qZY1JQ)(U*&#?lZAu_v2x7uQ!s^pVNLU@4 zvI8Jt>NGwiOcDs3L7JW)5?0FtPwgy)gr&~~344ThkAcvrA{slEel6*NdfAYLAV`=C zL7|W^Iq!i86q9KFtcDg?-$HXKxey-&qYx;pqvC-+1=Z)E0eDWl?Nb;{5G0L4QC!pf zUiU)MhVX6}IBo?5|Cq9{n{5aL29G^~yba^PdKPF*Ms!TN9K35A3|V96kU&=^q`gWc zqzpq8dWWGeY6$EL%LRd8tzy7a%t6P2$n|-MR|Ne4SlMV=iyFTP>i?lW$sv7`@R%fX zL>{_v=4+23P6C;)4hsQHWkcr6SrcyGx*gm%CAx21Tagg6U|GcLg+R=E zMbY;|%rHBgK65yE#_o>YZTN8rti6?Aq$< zISQAH)EPslH*6h%p{9nxFjOAWmWl(H^Xe#ErX8to4YWpvbdOf2!H`1^PFpM>-NM4M zvZNo);C_@4RIHF9{iy%xLgd2xAtR_*zaG?&HP?@1&BU;>UM9W{B6GXrpprnxg_q-b zb?ESNs@UrQbWb@Pb{(;P??oHV&B-JO&7)@`x(>K!^qdr+uNi1Hg%=9$S_*;}5_vq- z)_qcE^&f@$ZAjaD3(3!2>&{xEf1wWDI~X|Op1kWi>z};C>tJu8{rj%>i1{tDXOouZ zgDc*(bF2){?Y`cjy7)XRbn{r=+QUL)$DXU}2%3W6ZUQ<(m$gr8WLlSI-5r9Y4Rcvd zZDk*aMN1fJ$c)>RB~&IC20N)F2co4bh3#t8OAxY-V>L)Y|M5CWhw_I^*`rza zQOU=GELNI17p~Z*kU2D#2o@CqwX|VVF~*(3>#z(USR2T<2(sC)qxCLGJ1ToE!h`+I zT}cr*9EJ&(YL2|XxUXRD^>P7D37vGl(XHfRZQp~gY_;?HeY3S0H-t>Bncr60@U2_U z7g`NrQt6`Kp`CI**=-k^m432PXbSq*_Owu|I%DF}jOsh-Ll@?*u$T9r_%SdLq=1Yw z%zd7k-O)N*Icp!}eL(t;0MWpDjZDhA33{Cz3aAEi_l z!B>!uL-Lv&q#7_+ocx-&9@3Z4ZiC8*t+!cNi=66i5FCO+Covt64;IR>s%mK)zQ;fZ zvJ{>Ux+EuuLCx*;XjE<3MoFNM0v9r8%W#{~$t+|r;Jp`?L)&TI`(cor-t)mGrBrhP z=uuG3F)G73*3=`%RXnEd1D}$0p&sd3dXQQb%h6_ z$*;F4=#hVqIsvX{kNpF)ryc`yv+LI+(cWv0gz`CSIb*ssV#5?U*?Cg`ZFnS%yI0S9 z$6w~gpTIs{h>zWVB)rt$ZoK}6$~^8nfn>$$x0lX?4ZD+fbPN!!c2xgE*OfaKn4idT zh~^{Sn6T^ic=&B9yOYEPg4!Jm@#NY)a{isVeNmsrh8wzPkrVn!&pEWc`0!j?za0(H z<=TteKTiMcc)0FE4xN>$`vmCdnDAYqZ@U?KHt?+RUG`JC)LjjWU6AFpKD>*Nc^`lN zF)5ceJOuH;7*To;193Z%Q}H3q{(Uw56=VzK3uGfg2cU88*z=bQ*8d(TYH+(qZ*?-z z59muS5{8QOQ=87=oYD9Ad#SS15ASgW&$tUuY8Riu2R%jai)0V>@&Id7Kx-4pn4CiH zZ19aK>NmqqLBMBGqbne|>X#V0)-#8pu-+DYJ9weJhh1v|+RtY+d{)V&XV4F;32gvP zpf_=0qHY=8f#!Pn_CjZ2&6&up55Z?W&{+|=WR=@OhFeEDor9%TXUL^%JjXC}_-;Y^ z61iY}ZC|_V*nzn^>sj)`U12N{?Ar`@e(QgRXgQE^#HSftrkTdBM}>`s&h!0TIf#Cy zTJZ2$5coFXd~E;yh0$|ZuJmN)72!Wof~0SY<$Sw49|klM|CziNu2Ww8XDXc(F8I$k zi~lTv5Pd~5bUFmomBUkDpe_SXL4q{SwwBE%aMI2`pqn?fG)1@K8b+a^uMUh@vlOUf4f@#)`jP>on{AP2C@4rBBUP}KvqLP>t!)xp zud!vglcWd?gcPY_IvRs2>pDSG>TZCSy5L$YUBrSLxWpF#WyYbK$g_@Z$tCnR*NCV4 zeEGH`FhQUgxsaaDj&k`F~1a zEsU1fQ`An3J~1dQu1__g7EXWX?-SxD7HTJ=PYC@Ni0a}H6-pdLjU9NV$is|O%lu){b-cFf03daH+m zGXW3GJWa=gSz(WEN|EIkcwpv87~9rl6o?21KPpg}Z)GP+E;Pv59MSJ1%S>vL4i934 z<-9@8mTx|oQIPDvU{E9Oyd7!rCl*W2+D*pmiI(y3z#rE!gAiRuT24>25ECoK5f(Et zKF3hE;m>CM zG_&7yjbaI?d|Vgi;Za6F*LuZJIB2w@WkVv9u#}=LR6L#6Z{eG+KQE66R54wD8!e4X zu!py5Xk)ab{p;DyY;bI)N6FR5;Ns7>BrzkPGHf6SWG?IND$8MCC!Z~?v>@*)$fQQ& zdc*r93IdUw$fYd00@))P$V7&mFB`3G8eNI29h&!NS~lxb6c}MhOm653zo?_@P^;NS z&eM8S(1#{=#0&`ffUf1^27QpJL#g}>K_BWk=tGkPeZWrpX9@a1b2a$|&;U64tzOXzQ61qeXS)jPi_sVYR!4=^S9gFtZn(_k3UrX(d_ z`^T8aV$2ig%nbZEfezRlCZkIZlS>YhupB1s`du@(5gOC{t|2^Y4ik6Z>AodrW=mK5 zdSz?`w>PeJK#da=*^|BZOJr-17)vi~LlOc1} zYM%%1wa-Ra9uekj8EF>s$RlU6@w_`NUq!H4XQ>dUNgX?+w2n82IJ|W;N1J*){W{hO z%;CL%G5>J=gK^Euvy&W}mWrO4$g}H9JpGH=Rdue2Ur!JP|_6SALKB^hV!JMcY{NBQXoGLBb<+sjht~T7_gyz_uVM^Y$#@( zhNg`StICBV4GXI(E`r-6p=PNZ#p#n9ZudT4<{eC0fgx2n>jIH!dyX3M!Uso%Vh*uN z;4vXq2{V?Z#kB@a;)Ivx$K1l}H-`17&scK8EiD&I$i)&8W(jF!(ArHkrupSFTS7LH zxLpiVZ^}uhL3uu#gU+Bw98ge3ZV5S<6t`<7+<9igWZ!nP`L_LZW&Ezbkc$OV-hH0S zvkbb?UX)ACb-9SnAlM-WSwqM?h$u`B@Q~!JGst;)1N{=9Z9(m4bsAEZWOy#-$2hAv zzWMB?%f-n=nRQ53TT!1#x$JxZVmN~ z6-Kv@XdJ^GjVii>HrdZT8Ji=Wi>Q1(i(`?y-ZaFsYw4rmx5gcMc0FX-v*j4cn1a@R zi<<}g#`W-R@11}`i+XRtAKmbv&9&q7)1GryOl;|4ta8pJI}sQzBU;a$Sv z{b1qn{_*}lf3DQ?I{zH@|G7r7{yg@->r4EN?FCUjmw8e_0@%lY{FtTmT>ktvI44jb zw!v-BWrL%4=s})6Tp+9_O)+?O&z@s#GfcWc&I_h4#I?=P)SuC|nJ3wsenih6>`_Jf zB*yXV;XSHc&mPa1UF=yGdzQzu2c@QccF!KN=e#Aao_59lk25YIb{q2k6?*b? z$hqS=Y%$K5gm~~Y$@%5Yd+(5b{2g`}GIx<)JETn4pL)$8>jHb#cx^YXXAWmqe8UOJxsk-0e4Q-`kqi?`0jTj%1f^V0YKraV#6Z!Z`B z>-P5g#vlJnNM7#$-|YQ=iwe={CIDLuPq6|xtv|&O;4t9W0vxih-5g-EewszVuASd5 zma1uT$$I?nLMrnX1@>u3g|;?R_j4nllKtlC$%j5KL-G#63!llr*VDt+16t*q>eLA^ zB>3qbuqgyl4K;Ky10A2=U;_+CD<+Qz%rKrAjnAP)YlL&@(2U8cOYvr=aED={3KQuxg~DW+io3s*EHL8;)&Bs=7==_rKNFifV<9(Ezs%LNotl< zrNE_y*?Cfq_)?b)IBzNZEZMLvMuh%dGlx?)Jz8y?8iv2MMiz=%uZ3^m>-c85-K2cd z_;GD?bD!K$ZzRXcG{UKAtdJB-C|y=z*YUR52TDkBIIUduX z_R(!RPN(IzFHX+t={AJ&!(dN09mxQ1WoralZ|pH7>3!;P(iUxz?8=>>v_;L3v_RAU$DRfgx6%5|K+x#Q->F7&5G^3Z3!)&^Ks>#L{~Mb%;#S&jC5ZwzRUe z?_5u&23MZ(aM}|uMaKfTkPK*hHk=H^&bZ^8FT3YW3088)16h4#P^yNq1J@<@IfQC%S#H*C}T?Om#QN(nYQ9 zX1SzFX9-VSllfW}PrTnDu*_<=!ptO&5q#5OQ9W-jrBbc@~+5Eo@9rNbAL{ z8IhxPl*K%ZpCe;=GWtBDvvLsMlh7jrr=TNT88`tU;cfp|lmt5;MZ@X|G+}@1oQ{4e-ieCwEQIG2Wi~JeGrnb9`%9Q zJQ4GO>v}*N&a)H!KwScdZRogY7!bjwbHI|$QhEJmeZuZh&Y-l17jMwFY2BI*}a}m({NG%yC(Jy>tOt+wX;Lw$^j9S|7PPBAmYio$*6ZEx`rwR9By0E_3J(H74FMqwPV=I%n;B))e99T2BaE{}Yl_EGfxee$CT!mO$h zeKJGZ)SZ~LsgORgRx^(kogzN`V|KARUaXFc)v+ej^VO1)YqTqO&un$n2Pyd4F1#h5 zP|9=O@$-!KLG)Nf)euV=xslDThmKW_?#Ft#m2B9nqZ{yh{)Q&hQdVi^T>5S56NqlY z(5-)XtWL)&z*`s%bW=#$fIj4@U(p^}hnz9WJ&QHWk(m(R&^8&D#sN!kht36#iz*`d z<@#Nux0rhpI}pzgbL-b{qu8|RG?JmOt?aGeqQUrp0)Mt2C(ILT^~TmKX6{VKda_63 zL1f_Xu!7MsjP?(u{1J-)XZhh}(_7EE!RG5YR^Lc#0Nds%Rsd4pwL-+d1!wzo{H?#Y z-OFu1JD=#5znua)K}{)+j)5r)1TAp%XxS__i=COCy!Fzb5q|w ztV06Y|2mj0K-V=^c#rD1zM#xncFVXo?L6N*?@c)9Y1pr1Z9MPo_?vL_dpVcSfIdsY zenx!#dkwFzDT+Nk|3YH4dVEd2KAx_Hw&%TNhySpzX~F+o4JcdAWgW{4;xniol1UVU z8{}0k&k8HGyU~KmJ^1`nv&uc!W;WwmAg1nG!Fygsd1(CpL-~sO@Bf!;O+Ie~$jJNu zlmMqn-~Ioscyqb`f5Z3xScslt0Kf!JvjC8`pJoCe%`-LtLiF_;0WhDZSpigItu5!q zOf@X`a-VtVB{T!Q;TFVydWy`{*?hTk%aFf)S>@(P=va$_^T?M|Zp`_klD~b%3_J#2 zYlidiL`PE9v@~PPIFOPD-eTHJov)bjqYu27|IDx+G(|9F{niMUP_#vYBNJwnz_WOe zBV5YQ3#lB<1+5y^K9P`v43J`e4rujg7VOI5Spcc@#Yh5(O9q;WTq=ih0J=27a{!Lx zcp#HvLD~PthaHXW%HifJX9dNu=i#!U20fS3A&VYM=M8x35}k0^Lzk2b@XMtH4*28R z)kFCpO6M>iq+9?Wl)wQ#?CPP~#8}U#>XPoBpJjQzGOYY;r0MZ(o|MKnTNXxy$~P5} z;mx3on4Z?wac$%cWii(b>v;Mqt$DHHzFjM>eZr-`J%b&0r_A)nVJrQo%-+LyD{Cp$ zKz3LzUL(GfH|n}<3>O2jvrb_wB@p%l-P#X^xAT1AA@YUoQ)9K8Mh&J#vrd{E|x2@3)Q`GYvbnU#P-x}NIuLU zzB!wr9dDM;D@w*Ch;KGuV~E!!u@?sM&Bp8v@kD)+m-sniG2^}yFZfNIxW$8xoy#YyW_{pUP!)P|2$FIQ*tro zA;QZ&MBd37ra61#c)26IRn6b0UFI&Pj+jL2d8&)hd>&d)c#r#sL?d`Yermo?g|qhQ zN%^Ut&?lwC#fuk0B7OL9R4UEsQ0qiSSm1O^SZw{#v=$PD1FaE-p2HS*hp|+fB|0yD z5z6d2F-!NUV4dz_Bkf!c2V?l#_^ANQR#>DIJCci&k05A{I2rIojd61Yc=8`yas^y+ z1-Q8adfQSnhcU3r=JVzXK$t0U)T_U-XcY8&y>m8fSV4ksdEjFu_0ZU6#X-Na81yQp zoqw6+gUzgH=0pt#D!(_0wybd+OzQZ6D-xebn{ptiE}L4Sy% zVQhxI`T}{{jf#cU5a*?q&2lMg4ts_D5M$9gV^zqSqh5MhF4m``T^h#N#%*;hoCmvS zV-g4kZCK1a%Bf^%R0fbAan!HCSSEGJXwZlRmacj*6s~8u5Qcq2xv`hSetA6VB_~6e zD>Qb)Vs|4IGwD$5TT!$P{m$(USJQ92v{C#kqK5uJ} zlh84-X@A|%$CA;t2D9!iUi1xREr|+>P;m$RB!>jUg5!*rOUfMNP`9Ix*lQ2^zlXU* zm_xLNSK%1J>`oF94yEbK9}&bC^vA&WU4iXYbUc?uSTDuxTJ0h1PINBup{TE=$HVOg zU@Xacjfk>h^VarYcm9ruCjs?@VISqhP8%^~R6ySIpsxis`it!y4bPI&jO5q0qsG+Q z*@%cKx-|ruSMEODl#A)4)T`+7<6&GVy_I@9un_T-|04A2s3&weRqOfr9d=X`A9pH)nV&kv9<(;+9mj}Ix_7g`BxaFPo&zDD$EMR># zq9U_+=JJd=;6C+Z@c-9+msN$kSwStOt3HjOGx)Ypm!k^c-Pka=HSbc=COu`v_YGagF3OXCXS?wXm z;ZUP6%Qg)+GEXQ^k&${BUSi^x;XI9_S>*NU3G?gdoxZ3~ZQ19~7`}G*zIKnrY1?%R z8Q2#Dfr}-4nb7TfbOF3#D`90z2 z$WqRk=i*o3i6Yd6_OOq@(fxDl9u+Of-gl3kLuVh49}Udev+-KAzXQvq4VU97-r96% zJw^XIXA5R-!{|iLwewvOUoSylhHE%0?A$YP;StU^@IBrv!2Y?A@<0#d1D#tU#sv8* zwyB)VE20j2eFn}7l?P^hgB-%Q2<-iR5yrfyn-%I`5fZhHes6TMcD*L-v!mYjl$>bH zT6g;QFvRpW-W+LO9~(L@C@N%jjrKFRY3H|_fUV1j4x`oaD-&+Gbw zSUt+|$A_Rl0?2Gb;V%H@w+djUOBDZmcJMO(XfuyW`-DFbcTZ3GRLi53Pg$Dsslcav z>gcOx+e87Z3h+A)O4Ses7{oFlAmcg#e&h)l13o@lokBs)*UVmrr1U^W_@Pi{1H5!? zqdo#!$o4y$*5&-*Ww*~b5Y-9bW$05~2}yZ^L8gRvAq4QjfmV3XlnW-2rWY{D1xykG zCTT0VW^TK0O!H!6`n+Hg+xYs1f(&7!kJILXln&iK=+LPHIysoGg6P?23C?2&6AClH z;`cv5iVA*yP&+Asy^WmTj!V?o4g6Gg(c@fk>cPiz zbou~lL~NdP@kG`SG8SAedoGtfm&=|X{Qk$9FEsfj?|+i%v>*oD|J+{gf8OlGwZa22Z*FA?-fp{)aT}-2V`QuRZDuX8N?4FC?dTYbBZTQj^rB=|(Q`y*e>)3Sy2A z#^OBk-b4ACJQ%@%<|H@WD*j*weyY)74T5OCf!GuFpdOC;fJ%nM=5VPT2>rm&2pyXT zz`iG z9?UV`{pWb~5-(8PCn;8+T<>+hPf8U10PpKbr1v#4M)VH#31^E4Y7_HFJj$mrJVtpQ zUC-ChyzJNmokZ-2MW6FPXFO|p{yXk^aH5zTnhzRvA?KlkBho0;YqlylbV4Gw)J3lm zfR82-ZonAWx#>B5!(HyP7x12EL=Oi=Lg1pZh;}p?js~9%f#~f+ZQb@*Ij5Nk+BwoT zH7JztMWiR{&fdXhKcMe=_L$IjBqE52^mKiM`4t9?zI6-)4DZNr;m%phiK2mw3j?&5 z?wa|ADGQaX+-cr%`?Y{PY?{bx5NEfk?mnT5&=s5oCit?lSV?0q#Z+^KQG|u<3Y7`- zcp+znx(x3u>iKya=+W8Q#JQl)l#9ciBnsn-NO&M#r3~#n;~|ve%Dc}?HEeirFWJ#0 zX?HiA6_BS?2cK1hvw5Os%f;+iNUeXtfRMiJI!d_}9^;FYD<@&P++p6AfMN zZlFB@d9a}iMdA_FoQ!(ueYuz)V{cK64(-A`O(x2$1N5`{K-4EvE;}Fe(o+c|bT?zU zxYdy%1EDQ}_H6@ur<&M6R5hA2XC7Ngbg^pL$Xm)E@(kTSgnIzmc{|%mud*McDhq_P zwLQP$c&PaDu;=wWlk5GS8mw$Yc6bhUClB-So{j^M7vNQ>;`hkQGMPkkIe>8;ire*I zRxq(wUoX9o`&~UE>jarkAt2{`q~~9AEn~!PWg?4c{lR%0=9yh9z|-2!c~5DyX{Lhl zpx-#WHZ|lO>KfDr;&vjZkbw!G^WVJ3AL&QkUZXE)Y$9_PWNdN~+%!jSx1Jmr^+%LP z7JYZ|UU|V~PRkDAmZ$R{kT;$1&E`xG_Rb3Ci+J-K^f-^@QQ+htPVsG=$J;H0|Fe0$ z+4M7eP6zJdd)PRhAIE!0F~-NE@|D|OlSg~haP7tGAFC5j@QxyKdO}7LuH9q3PRPFO zdMw4vLqC(Ig`G4#!J{Gtb@j{y-bZ>X(Dj^^XX#Un)poyv+6m2n?ah6Cc;0HaF%98m z*oVBv@Wa4`fcD#B1$zosXXq@LEI7Hd83U|a#x-Vp`1Tr`(S4YJG6{Vtm>y#@{GR(f z`PvpZuOe@5Zgf^ddAYH%na|Db%ZcsGUBPR}hX0BvH}}^6ycAFt=_yCv5ue-OGAP0c ztjB(?GLZ~jE^9&b1z*1Hew%Oeq2(C)7p~VC2H9x+zVQ2xW&ho%k~x>BXH5YfY5x_) zr0C24krLAv{Quuz|6PxkiEpE`*@1huFfq1ZV%Dv+%H?m(cDwwoHK=9ptJuQZ+Rdc7 ze)TY4{`~&Y)U>OmWog*Zdz}5)k>OKp$S%)Mu_L=IIJRV$@N2gxJIp`DrktA_2FOr* zv>dCJ*Q(6D46J^qL5CtJc;5#Ssi~$3$}N}z_wqE`wlh$?eVcn6Y~$tzAg-00cKDlx zYlRuQdD5{=-Cn|B7Tw^XkITN|)H~1vUjwl^5kNk=ADjTh?Zk{!I?w~2bS(D0gkL}6 zfD`kB{5YjUkOw@qXx_ZE4sv)Dc)+C|h(>T;=eMeSB4HJ(Uf>CD8J@r%ZJghKd-rVw zfBO$NzrAzH{PAss70T#_K2<|`DsD-hh_E~p zlN^p`Px4Hp`8*SaRAUyAX98O$J3)CSl1Jp3psqx9;TiHwh=`{;%`>5#E6+qRnWKFR zLL^w&O6ta6ZqoS6oRt(=&KmuCFruPVNA&j`qGI3mA}XAAg7Pm&810bE@%bAX=gi+Q zA-P6^5Ft$d0urM>84@qv?n7*gvg3Y6#-`6&Db)~{I?q@zvG8l#M*Oy-@)iVJ;_Z3# zxypqj3v6^!K%D=5NDS&djzKMygW}@f#cnGij<;PpMyeU7 zPX^ZMLcn~9i;(%^a+kQWh|whBvWVRyF={Sa7S%9x7p`wnS*+&{$CTgd2)!2&>-{=p z?Cf>sMXf}{diNr_T=(4iCD!}JJ=f!&i_Tx|Mqd z9pc0Zr?K8wFvh82ud*lc%p2I+EumPBMHKTet1H;@gAh5H@EGFM8r`t#7Mc?o#rleY zEIF3HVNu^dg~uja{}uDuhHoEPEEvOXd>)@ORyajkVe2k44s4$z;<>Z(eJs+4shfKa z7js@`;5l*gF+9S2?B!jy&&};yNB%J1+qRzLEaIu|23c@rvA&j3J`A8$&2iS(RaHyd z?(2-TGfTZ5V19FQSoj21X53ieC1K%<#T}+scqEUFs6+i6Ts>yIn;6v;8HYJ^%#V+I>Y$Vm%5;`S zNQno9_W78Yw&6S-8Ozs29yxQ`Pua9$qjMr<;{-&KP49u*GYT1D(6695IR?QK&D)W2 za^3lBF659oj2Ew*j(aDm%c=SVo^@#7jz>4Sb71w*+SzP3nTSj-#avr|DXf`-onaGO*A=*4>HWB5&Dz}9UpHILW{sraF8qYCm zxW$Km@r7M+=TY(^&|oZa_?Lj^xBh2{ma{expJs5GW*W|iH|4@cLub~0t{g-^;|u9h z5coFX>}UVYh8@Ckr6)6&h$?Rr|3}b9Bh9ePD`Z1_x%j_=kWTsHzoZc+@Phw){vTvX zr)W5AZ5D;AYiu2VzgW)KnxZaEc<~o9eP0&K54`^Azh__jhu42HnfBp-lj-Z!W&OX{ z`bQ|L_beENXaI^rdGEkb@YB)Cn#`Bzp@Yf&ALq9#c|Ie>X0Vr_LP5ZCQUbwo%-|x* zl|>8bnyeZo=B`t(mUH=fD}P5`E!D-`)U5e(hcpyM=)7MobyRd>S&LskestKPcpuy( z=3KMhzoVER3^jHs%vYA8;qED#X*m@!D$jI^!K3k<`72@fqE3erT9~XPG#noZy4F(V z3H|k>tj|}<$FaQlsHh8lzOx>DtYVUMQPzFaLyLTO&|jn{Kut9i)sQvSW%a!SB*ufC z6t0q2$(vidXI|a!5L>9~^6pFo-+jMm+SjfB=~_3RV*@yJ{uBJ?KOuR2(f==^|1amd z%lc>hzeWoU@4hd${!>EIcm5N_oAhPF=LwM%IUkQ&B(g*K@j;StlB$vte1OkpH ze!@HbPrto$XyojJfm_5mD*R--g(Wn@QkM@SSxtOiXq2Sw5*6MkIeQ>?E%fid6YYtb zQ0C~AX(p_BVr0V6NP`1ZVgo0ygavOue=R49@MJUEkvbpW5v2J@nH&1fuKg=^e>28^ zP{=pm1Uecg<`1z5qOvwMFRgnxNMQozLX`t+qZeVd5hvw4n-7wtCXfbk?T8|Sm^5ul z0Fcck{{*YMc z>InH3s%qk||A9wS1pCX|Zy&%bzu+hkr+cL}=yQ{BK0J^VDrNT)}W+o(2K%1`qiXqRqx5#;^qwznFuHv)zLDlCYfMLlC*K z20Qz34YK+KS{xZWj`tv19?ze+{QQ^2 z!uF&ipgt##Z;8!Bg*_OZB!~!uep3<}94^qAMK$0Tv`3q;ud2#b;5mcTt5Sl8&QSId ziY^#K|F?s0C6`CBtzEZ^5ZSLqNq^+S4qxym6f|J&_Hz|oW}i6@;-Nk>BusI-L_ zJ)^P>G^Kc6YurVD$M<6jJ{4 z-)-u0|M%mc|4JZiUy-am=?HkPE4njZvZ15GXlX=UwHdMRyCTmF&M-dd*x;`G(4&Lf z(2JfPJYw?Xi>mY9IR()PEEh!dvcFw^Ue*3TRd-lU&v^rM0RMH9O#1f!)b-6}|Nr6l z|1VV7&bIwe*W`mg_+DbV#xLu!&j82YOa$!Cb|;^-Ior!JbZd56dC{GjpFn1#WQICu ze`H@j!!|u#GjZ82AC$-F|HWL_zy24*OZ?v-U;lr_!gjLu9}!b6hJWb# zd=sdmM>bv{4CMhT(U7&pNH-HdFXylZe!&D63-l?55D5KjU$KU@ONZ8Ky@rOk> zaKplHUih;Q_w7l0AL&on)<@{S=+4JX7qf9VgB$dv=DvJ}&pb^0@}+lH{cp+>75(;d z_kUs<-Sv6z|HO;^@5k5wEh=nJ+5&8eh3X49r6Mo3V5LpV<(*=2AzpUPNV12v7fYL| z`?;Yepkwi=wrQ=GLsETi)}y@x4%#e1BS-Fx_N+f?b96>8Y=3OIV)24oBrnnIHs_PR zz#Y$DDsEF}#IZPsamm@8_>>kI=8ms=D5f0n|+_%qxd&Sf* zpMvMm|I4)|pZ5kZTK`{PU#ETgKY4qx|NRs6KNhx=H-Nmc)|PW)rW#gaJz8obNhh`} zq%)Aa3~~?(`g(aSCOp;cz^OJo;s-BJ)n!7PA+>#B@)5coZOOq1fLz$OWu|Nb>$tY(tBe3AzeRZr(}L0YO~jY|$}|Kr_~J*g>eYewJml z2jpiXO%HeBGEXR+zXV5k?e{-OZeP~^pSclNK)VzkmGwzh?{ElOO;LVvQaIum#9a5{@t<nXw zq;rPTUg%lFZRbVL8=ghvJ9BWd9JFT#6${(FgXJ@vs;^`;VNUGAsq)31;dY)At{?(@ mfrDfsPdrYk{8qi3d@etipUcnX=koI+KmQ-By8s9P6aoOrYn?Oz literal 0 HcmV?d00001 diff --git a/cloud/gcp/deploytf/generated/websocket/main.go b/cloud/gcp/deploytf/generated/websocket/main.go new file mode 100644 index 000000000..d6d072514 --- /dev/null +++ b/cloud/gcp/deploytf/generated/websocket/main.go @@ -0,0 +1,71 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// websocket +package websocket + +import ( + "reflect" + + _jsii_ "github.com/aws/jsii-runtime-go/runtime" +) + +func init() { + _jsii_.RegisterClass( + "websocket.Websocket", + reflect.TypeOf((*Websocket)(nil)).Elem(), + []_jsii_.Member{ + _jsii_.MemberMethod{JsiiMethod: "addOverride", GoMethod: "AddOverride"}, + _jsii_.MemberMethod{JsiiMethod: "addProvider", GoMethod: "AddProvider"}, + _jsii_.MemberProperty{JsiiProperty: "cdktfStack", GoGetter: "CdktfStack"}, + _jsii_.MemberProperty{JsiiProperty: "constructNodeMetadata", GoGetter: "ConstructNodeMetadata"}, + _jsii_.MemberProperty{JsiiProperty: "dependsOn", GoGetter: "DependsOn"}, + _jsii_.MemberProperty{JsiiProperty: "forEach", GoGetter: "ForEach"}, + _jsii_.MemberProperty{JsiiProperty: "fqn", GoGetter: "Fqn"}, + _jsii_.MemberProperty{JsiiProperty: "friendlyUniqueId", GoGetter: "FriendlyUniqueId"}, + _jsii_.MemberMethod{JsiiMethod: "getString", GoMethod: "GetString"}, + _jsii_.MemberMethod{JsiiMethod: "interpolationForOutput", GoMethod: "InterpolationForOutput"}, + _jsii_.MemberProperty{JsiiProperty: "lambdaConnectTarget", GoGetter: "LambdaConnectTarget"}, + _jsii_.MemberProperty{JsiiProperty: "lambdaDisconnectTarget", GoGetter: "LambdaDisconnectTarget"}, + _jsii_.MemberProperty{JsiiProperty: "lambdaMessageTarget", GoGetter: "LambdaMessageTarget"}, + _jsii_.MemberProperty{JsiiProperty: "node", GoGetter: "Node"}, + _jsii_.MemberMethod{JsiiMethod: "overrideLogicalId", GoMethod: "OverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "providers", GoGetter: "Providers"}, + _jsii_.MemberProperty{JsiiProperty: "rawOverrides", GoGetter: "RawOverrides"}, + _jsii_.MemberMethod{JsiiMethod: "resetOverrideLogicalId", GoMethod: "ResetOverrideLogicalId"}, + _jsii_.MemberProperty{JsiiProperty: "skipAssetCreationFromLocalModules", GoGetter: "SkipAssetCreationFromLocalModules"}, + _jsii_.MemberProperty{JsiiProperty: "source", GoGetter: "Source"}, + _jsii_.MemberProperty{JsiiProperty: "stackId", GoGetter: "StackId"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeAttributes", GoMethod: "SynthesizeAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "synthesizeHclAttributes", GoMethod: "SynthesizeHclAttributes"}, + _jsii_.MemberMethod{JsiiMethod: "toHclTerraform", GoMethod: "ToHclTerraform"}, + _jsii_.MemberMethod{JsiiMethod: "toMetadata", GoMethod: "ToMetadata"}, + _jsii_.MemberMethod{JsiiMethod: "toString", GoMethod: "ToString"}, + _jsii_.MemberMethod{JsiiMethod: "toTerraform", GoMethod: "ToTerraform"}, + _jsii_.MemberProperty{JsiiProperty: "version", GoGetter: "Version"}, + _jsii_.MemberProperty{JsiiProperty: "websocketArnOutput", GoGetter: "WebsocketArnOutput"}, + _jsii_.MemberProperty{JsiiProperty: "websocketExecArnOutput", GoGetter: "WebsocketExecArnOutput"}, + _jsii_.MemberProperty{JsiiProperty: "websocketName", GoGetter: "WebsocketName"}, + }, + func() interface{} { + j := jsiiProxy_Websocket{} + _jsii_.InitJsiiProxy(&j.Type__cdktfTerraformModule) + return &j + }, + ) + _jsii_.RegisterStruct( + "websocket.WebsocketConfig", + reflect.TypeOf((*WebsocketConfig)(nil)).Elem(), + ) +} diff --git a/cloud/gcp/deploytf/generated/websocket/version b/cloud/gcp/deploytf/generated/websocket/version new file mode 100644 index 000000000..77d6f4ca2 --- /dev/null +++ b/cloud/gcp/deploytf/generated/websocket/version @@ -0,0 +1 @@ +0.0.0 diff --git a/cloud/gcp/deploytf/http.go b/cloud/gcp/deploytf/http.go new file mode 100644 index 000000000..cf2dc738f --- /dev/null +++ b/cloud/gcp/deploytf/http.go @@ -0,0 +1,33 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/http_proxy" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +func (a *NitricGcpTerraformProvider) Http(stack cdktf.TerraformStack, name string, config *deploymentspb.Http) error { + http_proxy.NewHttpProxy(stack, jsii.Sprintf("http_%s", name), &http_proxy.HttpProxyConfig{ + StackId: a.Stack.StackIdOutput(), + Name: jsii.String(name), + InvokerEmail: a.Services[config.Target.GetService()].InvokerServiceAccountEmailOutput(), + TargetServiceUrl: a.Services[config.Target.GetService()].ServiceEndpointOutput(), + }) + + return nil +} diff --git a/cloud/gcp/deploytf/keyvalue.go b/cloud/gcp/deploytf/keyvalue.go new file mode 100644 index 000000000..014a7c8ab --- /dev/null +++ b/cloud/gcp/deploytf/keyvalue.go @@ -0,0 +1,25 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "github.com/hashicorp/terraform-cdk-go/cdktf" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +func (a *NitricGcpTerraformProvider) KeyValueStore(stack cdktf.TerraformStack, name string, config *deploymentspb.KeyValueStore) error { + // NoOp - Key Value Store are created at runtime on GCP + return nil +} diff --git a/cloud/gcp/deploytf/policy.go b/cloud/gcp/deploytf/policy.go new file mode 100644 index 000000000..38b49151b --- /dev/null +++ b/cloud/gcp/deploytf/policy.go @@ -0,0 +1,89 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "fmt" + + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/policy" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" + v1 "github.com/nitrictech/nitric/core/pkg/proto/resources/v1" +) + +func (a *NitricGcpTerraformProvider) Policy(stack cdktf.TerraformStack, name string, config *deploymentspb.Policy) error { + stringActions := []string{} + for _, action := range config.Actions { + stringActions = append(stringActions, v1.Action_name[int32(action)]) + } + for _, principal := range config.Principals { + if principal.Id.Type != v1.ResourceType_Service { + return fmt.Errorf("non-service principals are not supported") + } + service, ok := a.Services[principal.Id.Name] + if !ok { + return fmt.Errorf("could not find service %s", principal.Id.Name) + } + + for _, resource := range config.Resources { + memberName := fmt.Sprintf("%s-%s", principal.Id.Name, resource.Id.Name) + + var concreteResourceName *string = nil + + switch resource.Id.Type { + case v1.ResourceType_Bucket: + if concreteResource, ok := a.Buckets[resource.Id.Name]; ok { + concreteResourceName = concreteResource.NameOutput() + } else { + return fmt.Errorf("could not find bucket %s", resource.Id.Name) + } + case v1.ResourceType_Queue: + if concreteResource, ok := a.Queues[resource.Id.Name]; ok { + concreteResourceName = concreteResource.NameOutput() + } else { + return fmt.Errorf("could not find queue %s", resource.Id.Name) + } + case v1.ResourceType_Secret: + if concreteResource, ok := a.Secrets[resource.Id.Name]; ok { + concreteResourceName = concreteResource.NameOutput() + } else { + return fmt.Errorf("could not find secret %s", resource.Id.Name) + } + case v1.ResourceType_KeyValueStore: + // Resource name isn't used for KeyValue stores, so it can be blank + concreteResourceName = jsii.String("") + case v1.ResourceType_Topic: + if concreteResource, ok := a.Topics[resource.Id.Name]; ok { + concreteResourceName = concreteResource.TopicNameOutput() + } else { + return fmt.Errorf("could not find topic %s", resource.Id.Name) + } + } + + resourceType := resource.Id.Type.String() + + policy.NewPolicy(stack, jsii.String(memberName), &policy.PolicyConfig{ + Actions: jsii.Strings(stringActions...), + ResourceName: concreteResourceName, + ResourceType: jsii.String(resourceType), + ServiceAccountEmail: service.ServiceAccountEmailOutput(), + IamRoles: cdktf.Token_AsAny(a.Stack.IamRolesOutput()), + }) + } + } + + return nil +} diff --git a/cloud/gcp/deploytf/queue.go b/cloud/gcp/deploytf/queue.go new file mode 100644 index 000000000..b51614a42 --- /dev/null +++ b/cloud/gcp/deploytf/queue.go @@ -0,0 +1,32 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/queue" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +// // Queue - Deploy a Queue +func (a *NitricGcpTerraformProvider) Queue(stack cdktf.TerraformStack, name string, config *deploymentspb.Queue) error { + a.Queues[name] = queue.NewQueue(stack, jsii.Sprintf("queue_%s", name), &queue.QueueConfig{ + QueueName: jsii.String(name), + StackId: a.Stack.StackIdOutput(), + }) + + return nil +} diff --git a/cloud/gcp/deploytf/schedule.go b/cloud/gcp/deploytf/schedule.go new file mode 100644 index 000000000..9fb833391 --- /dev/null +++ b/cloud/gcp/deploytf/schedule.go @@ -0,0 +1,72 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "fmt" + "strconv" + "strings" + + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/schedule" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +// // Schedule - Deploy a Schedule +func (a *NitricGcpTerraformProvider) Schedule(stack cdktf.TerraformStack, name string, config *deploymentspb.Schedule) error { + cronExpression := "" + + switch t := config.Cadence.(type) { + case *deploymentspb.Schedule_Cron: + cronExpression = t.Cron.Expression + case *deploymentspb.Schedule_Every: + parts := strings.Split(strings.TrimSpace(t.Every.Rate), " ") + if len(parts) != 2 { + return fmt.Errorf("invalid schedule rate: %s", t.Every.Rate) + } + + initialRate, err := strconv.Atoi(parts[0]) + if err != nil { + return fmt.Errorf("invalid schedule rate, must start with an integer") + } + + // Google App Engine cron syntax only support hours, minutes and seconds. Convert days to hours + if strings.HasPrefix(parts[1], "day") { + parts[0] = fmt.Sprintf("%d", initialRate*24) + parts[1] = "hours" + } + + cronExpression = fmt.Sprintf("every %s %s", parts[0], parts[1]) + default: + return fmt.Errorf("unknown schedule type, must be one of: cron, every") + } + + svc, ok := a.Services[config.Target.GetService()] + if !ok { + return fmt.Errorf("service not found: %s", config.Target.GetService()) + } + + a.Schedules[name] = schedule.NewSchedule(stack, jsii.Sprintf("schedule_%s", name), &schedule.ScheduleConfig{ + ScheduleName: jsii.String(name), + ScheduleExpression: jsii.String(cronExpression), + ScheduleTimezone: jsii.String(a.GcpConfig.ScheduleTimezone), + TargetServiceUrl: svc.ServiceEndpointOutput(), + TargetServiceInvokerEmail: svc.InvokerServiceAccountEmailOutput(), + ServiceToken: svc.EventTokenOutput(), + }) + + return nil +} diff --git a/cloud/gcp/deploytf/secret.go b/cloud/gcp/deploytf/secret.go new file mode 100644 index 000000000..3e3a5a989 --- /dev/null +++ b/cloud/gcp/deploytf/secret.go @@ -0,0 +1,32 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/secret" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +// // Secret - Deploy a Secret +func (a *NitricGcpTerraformProvider) Secret(stack cdktf.TerraformStack, name string, config *deploymentspb.Secret) error { + a.Secrets[name] = secret.NewSecret(stack, jsii.Sprintf("secret_%s", name), &secret.SecretConfig{ + SecretName: jsii.String(name), + StackId: a.Stack.StackIdOutput(), + }) + + return nil +} diff --git a/cloud/gcp/deploytf/service.go b/cloud/gcp/deploytf/service.go new file mode 100644 index 000000000..6b1e9c1bc --- /dev/null +++ b/cloud/gcp/deploytf/service.go @@ -0,0 +1,95 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "fmt" + + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/common/deploy/image" + "github.com/nitrictech/nitric/cloud/common/deploy/provider" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/service" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +func (a *NitricGcpTerraformProvider) Service(stack cdktf.TerraformStack, name string, config *deploymentspb.Service, runtimeProvider provider.RuntimeProvider) error { + imageId, err := image.BuildWrappedImage(&image.BuildWrappedImageArgs{ + ServiceName: name, + SourceImage: config.GetImage().Uri, + // TODO: Use correct image uri + TargetImage: name, + Runtime: runtimeProvider(), + }) + if err != nil { + return err + } + + if config.Type == "" { + config.Type = "default" + } + + typeConfig, hasConfig := a.GcpConfig.Config[config.Type] + if !hasConfig { + return fmt.Errorf("could not find config for type %s in %+v", config.Type, a.GcpConfig) + } + + jsiiEnv := map[string]*string{ + "NITRIC_STACK_ID": a.Stack.StackIdOutput(), + "NITRIC_ENVIRONMENT": jsii.String("cloud"), + "MIN_WORKERS": jsii.String(fmt.Sprint(config.Workers)), + "NITRIC_HTTP_PROXY_PORT": jsii.String(fmt.Sprint(3000)), + } + for k, v := range config.GetEnv() { + jsiiEnv[k] = jsii.String(v) + } + + a.Services[name] = service.NewService(stack, jsii.Sprintf("service_%s", name), &service.ServiceConfig{ + ProjectId: jsii.String(a.GcpConfig.ProjectId), + Region: jsii.String(a.Region), + ServiceName: jsii.String(name[:min(len(name), 63)]), + Image: jsii.String(imageId), + Environment: &jsiiEnv, + StackId: a.Stack.StackIdOutput(), + MemoryMb: jsii.Number(typeConfig.CloudRun.Memory), + TimeoutSeconds: jsii.Number(typeConfig.CloudRun.Timeout), + BaseComputeRole: a.Stack.BaseComputeRoleOutput(), + }) + + return nil +} + +// func normalizeServiceName(name string) string { +// name = strings.ToLower(name) + +// // Replace all non-alphanumeric characters with `-` +// replace := regexp.MustCompile("[^a-zA-Z0-9]") +// name = replace.ReplaceAllString(name, "-") + +// // Replace all multiple `-` with single `-` +// replace = regexp.MustCompile("-+") +// name = replace.ReplaceAllString(name, "-") + +// // Replace all leading and trailing `-` with empty string +// replace = regexp.MustCompile("^-|-$") +// name = replace.ReplaceAllString(name, "") + +// // Truncate the name to 63 characters +// if len(name) > 23 { +// name = name[:23] +// } + +// return name +// } diff --git a/cloud/gcp/deploytf/sql.go b/cloud/gcp/deploytf/sql.go new file mode 100644 index 000000000..5e37c9341 --- /dev/null +++ b/cloud/gcp/deploytf/sql.go @@ -0,0 +1,27 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "fmt" + + "github.com/hashicorp/terraform-cdk-go/cdktf" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +func (a *NitricGcpTerraformProvider) SqlDatabase(stack cdktf.TerraformStack, name string, config *deploymentspb.SqlDatabase) error { + // Return gRPC unimplemented error + return fmt.Errorf("sql databases aren't yet supported by Nitric using the Terraform Google Cloud provider, remove the sql databases from your project and try again or use an alternate provider") +} diff --git a/cloud/gcp/deploytf/topic.go b/cloud/gcp/deploytf/topic.go new file mode 100644 index 000000000..17ce19a0d --- /dev/null +++ b/cloud/gcp/deploytf/topic.go @@ -0,0 +1,60 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/nitrictech/nitric/cloud/gcp/deploytf/generated/topic" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +type SubscriberService struct { + // Explicit JSON names required for JSII serialization + Name string `json:"name"` + Url string `json:"url"` + InvokerServiceAccountEmail string `json:"invoker_service_account_email"` + EventToken string `json:"event_token"` +} + +func (a *NitricGcpTerraformProvider) Topic(stack cdktf.TerraformStack, name string, config *deploymentspb.Topic) error { + serviceEndpoints := map[string]*string{} + + for _, subscriber := range config.Subscriptions { + subscriberSvc := a.Services[subscriber.GetService()] + serviceEndpoints[subscriber.GetService()] = subscriberSvc.ServiceEndpointOutput() + } + + subscriberInput := []*SubscriberService{} + + for _, subscriber := range config.Subscriptions { + subscriberSvc := a.Services[subscriber.GetService()] + + subscriberInput = append(subscriberInput, &SubscriberService{ + Name: subscriber.GetService(), + Url: *serviceEndpoints[subscriber.GetService()], + InvokerServiceAccountEmail: *subscriberSvc.InvokerServiceAccountEmailOutput(), + EventToken: *subscriberSvc.EventTokenOutput(), + }) + } + + a.Topics[name] = topic.NewTopic(stack, jsii.Sprintf("topic_%s", name), &topic.TopicConfig{ + StackId: a.Stack.StackIdOutput(), + TopicName: jsii.String(name), + SubscriberServices: subscriberInput, + }) + + return nil +} diff --git a/cloud/gcp/deploytf/websocket.go b/cloud/gcp/deploytf/websocket.go new file mode 100644 index 000000000..72bf57021 --- /dev/null +++ b/cloud/gcp/deploytf/websocket.go @@ -0,0 +1,26 @@ +// Copyright 2021 Nitric Technologies Pty Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package deploytf + +import ( + "fmt" + + "github.com/hashicorp/terraform-cdk-go/cdktf" + deploymentspb "github.com/nitrictech/nitric/core/pkg/proto/deployments/v1" +) + +func (a *NitricGcpTerraformProvider) Websocket(stack cdktf.TerraformStack, name string, config *deploymentspb.Websocket) error { + return fmt.Errorf("websockets aren't yet supported by Nitric on Google Cloud, remove the web sockets from your project and try again or run `nitric down` to destroy this stack") +} diff --git a/cloud/gcp/go.mod b/cloud/gcp/go.mod index 3970be807..cc9fd2af8 100644 --- a/cloud/gcp/go.mod +++ b/cloud/gcp/go.mod @@ -1,6 +1,8 @@ module github.com/nitrictech/nitric/cloud/gcp -go 1.21 +go 1.21.3 + +toolchain go1.22.0 require ( cloud.google.com/go/apigateway v1.6.6 @@ -10,19 +12,26 @@ require ( cloud.google.com/go/secretmanager v1.12.0 cloud.google.com/go/storage v1.39.1 github.com/GoogleCloudPlatform/opentelemetry-operations-go/propagator v0.34.2 + github.com/aws/constructs-go/constructs/v10 v10.3.0 + github.com/aws/jsii-runtime-go v1.99.0 + github.com/cdktf/cdktf-provider-docker-go/docker/v11 v11.0.0 + github.com/cdktf/cdktf-provider-google-go/google/v13 v13.22.0 + github.com/cdktf/cdktf-provider-googlebeta-go/googlebeta/v13 v13.16.0 github.com/charmbracelet/log v0.2.4 github.com/fasthttp/router v1.4.18 github.com/golang/mock v1.6.0 github.com/golangci/golangci-lint v1.56.1 github.com/google/addlicense v1.1.1 github.com/googleapis/gax-go/v2 v2.12.3 + github.com/hashicorp/terraform-cdk-go/cdktf v0.20.7 github.com/mitchellh/mapstructure v1.5.0 - github.com/nitrictech/nitric/cloud/common v0.0.0-20230430232207-a0e427e2d646 - github.com/nitrictech/nitric/core v0.0.0-20230616021604-4036d005db63 + github.com/nitrictech/nitric/cloud/common v0.0.0-20240614052744-71e6e05bc47e + github.com/nitrictech/nitric/core v0.0.0-20240614052744-71e6e05bc47e + github.com/nitrictech/nitric/test v0.0.0-20240614052744-71e6e05bc47e github.com/onsi/ginkgo v1.16.5 github.com/onsi/gomega v1.28.1 github.com/pkg/errors v0.9.1 - github.com/pulumi/pulumi/sdk/v3 v3.105.0 + github.com/pulumi/pulumi/sdk/v3 v3.112.0 github.com/samber/lo v1.38.1 github.com/uw-labs/lichen v0.1.7 github.com/valyala/fasthttp v1.45.0 @@ -34,7 +43,7 @@ require ( ) require ( - github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/go-winio v0.6.2 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect github.com/blang/semver v3.5.1+incompatible // indirect @@ -72,8 +81,8 @@ require ( github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect github.com/uber/jaeger-lib v2.4.1+incompatible // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect - golang.org/x/crypto v0.21.0 // indirect - golang.org/x/term v0.18.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/term v0.20.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect lukechampine.com/frand v1.4.2 // indirect ) @@ -92,11 +101,11 @@ require ( github.com/Antonboom/errname v0.1.12 // indirect github.com/Antonboom/nilnil v0.1.7 // indirect github.com/Antonboom/testifylint v1.1.1 // indirect - github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/BurntSushi/toml v1.3.2 // indirect github.com/Djarvur/go-err113 v0.1.0 // indirect github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.2.0 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/alecthomas/go-check-sumtype v0.1.4 // indirect @@ -128,20 +137,20 @@ require ( github.com/chavacava/garif v0.1.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/containerd/containerd v1.7.17 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/curioswitch/go-reassign v0.2.0 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/daixiang0/gci v0.12.1 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect - github.com/docker/distribution v2.8.0+incompatible // indirect - github.com/docker/docker v20.10.24+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v24.0.7+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect github.com/esimonov/ifshort v1.0.4 // indirect github.com/ettle/strcase v0.2.0 // indirect - github.com/fatih/color v1.16.0 // indirect + github.com/fatih/color v1.17.0 // indirect github.com/fatih/structtag v1.2.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/firefart/nonamedreturns v1.0.4 // indirect @@ -200,7 +209,7 @@ require ( github.com/kisielk/errcheck v1.7.0 // indirect github.com/kisielk/gotool v1.0.0 // indirect github.com/kkHAIKE/contextcheck v1.1.4 // indirect - github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/compress v1.16.7 // indirect github.com/kulti/thelper v0.6.3 // indirect github.com/kunwardeep/paralleltest v1.0.9 // indirect github.com/kyoh86/exportloopref v0.1.11 // indirect @@ -218,11 +227,13 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-localereader v0.0.1 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mbilski/exhaustivestruct v1.2.0 // indirect github.com/mgechev/revive v1.3.7 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/moby/patternmatcher v0.6.0 // indirect + github.com/moby/sys/sequential v0.5.0 // indirect github.com/moricho/tparallel v0.3.1 // indirect github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect github.com/muesli/cancelreader v0.2.2 // indirect @@ -231,12 +242,12 @@ require ( github.com/nakabonne/nestif v0.3.1 // indirect github.com/nishanths/exhaustive v0.12.0 // indirect github.com/nishanths/predeclared v0.2.2 // indirect - github.com/nitrictech/protoutils v0.0.0-20220321044654-02667a814cdf // indirect github.com/nunnatsa/ginkgolinter v0.15.2 // indirect - github.com/nxadm/tail v1.4.8 // indirect + github.com/nxadm/tail v1.4.11 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.2 // indirect + github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/runc v1.1.12 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.0.5 // indirect github.com/pgavlin/fx v0.1.6 // indirect @@ -244,7 +255,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/polyfloyd/go-errorlint v1.4.8 // indirect github.com/prometheus/client_golang v1.14.0 // indirect - github.com/prometheus/client_model v0.4.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect github.com/prometheus/common v0.37.0 // indirect github.com/prometheus/procfs v0.8.0 // indirect github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect @@ -280,8 +291,8 @@ require ( github.com/spf13/viper v1.14.0 // indirect github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect - github.com/stretchr/objx v0.5.0 // indirect - github.com/stretchr/testify v1.8.4 // indirect + github.com/stretchr/objx v0.5.2 // indirect + github.com/stretchr/testify v1.9.0 // indirect github.com/subosito/gotenv v1.4.1 // indirect github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect github.com/tdakkota/asciicheck v0.2.0 // indirect @@ -299,6 +310,7 @@ require ( github.com/yagipy/maintidx v1.0.0 // indirect github.com/yeya24/promlinter v0.2.0 // indirect github.com/ykadowak/zerologlint v0.1.5 // indirect + github.com/yuin/goldmark v1.5.2 // indirect github.com/zclconf/go-cty v1.13.2 // indirect gitlab.com/bosi/decorder v0.4.1 // indirect go-simpler.org/musttag v0.8.0 // indirect @@ -314,14 +326,14 @@ require ( go.uber.org/zap v1.24.0 // indirect golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect golang.org/x/exp/typeparams v0.0.0-20231219180239-dc181d75b848 // indirect - golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.17.0 // indirect - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect + golang.org/x/tools v0.21.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa // indirect diff --git a/cloud/gcp/go.sum b/cloud/gcp/go.sum index bef529e86..72eb5a2fe 100644 --- a/cloud/gcp/go.sum +++ b/cloud/gcp/go.sum @@ -17,14 +17,8 @@ cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKV cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= -cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= -cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= cloud.google.com/go v0.112.2 h1:ZaGT6LiG7dBzi6zNOvVZwacaXlmf3lRqnC4DQzqyRQw= cloud.google.com/go v0.112.2/go.mod h1:iEqjp//KquGIJV/m+Pk3xecgKNhV+ry+vVTsy4TbDms= -cloud.google.com/go/apigateway v1.6.4 h1:VVIxCtVerchHienSlaGzV6XJGtEM9828Erzyr3miUGs= -cloud.google.com/go/apigateway v1.6.5 h1:sPXnpk+6TneKIrjCjcpX5YGsAKy3PTdpIchoj8/74OE= -cloud.google.com/go/apigateway v1.6.5/go.mod h1:6wCwvYRckRQogyDDltpANi3zsCDl6kWi0b4Je+w2UiI= cloud.google.com/go/apigateway v1.6.6 h1:60GMRN1JFwq9MldvEVMdR3gDJ0vI0C/BwgkImG6bx/M= cloud.google.com/go/apigateway v1.6.6/go.mod h1:bFH3EwOkeEC+31wVxKNuiadhk2xa7y9gJ3rK4Mctq6o= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= @@ -33,47 +27,28 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/cloudtasks v1.12.4 h1:5xXuFfAjg0Z5Wb81j2GAbB3e0bwroCeSF+5jBn/L650= -cloud.google.com/go/cloudtasks v1.12.6 h1:EUt1hIZ9bLv8Iz9yWaCrqgMnIU+Tdh0yXM1MMVGhjfE= -cloud.google.com/go/cloudtasks v1.12.6/go.mod h1:b7c7fe4+TJsFZfDyzO51F7cjq7HLUlRi/KZQLQjDsaY= cloud.google.com/go/cloudtasks v1.12.7 h1:Ev+poxwb7pudBhiF0ObwAWT7Dh9BZAcsvAfFTWg0MPc= cloud.google.com/go/cloudtasks v1.12.7/go.mod h1:I6o/ggPK/RvvokBuUppsbmm4hrGouzFbf6fShIm0Pqc= -cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= cloud.google.com/go/compute v1.25.1 h1:ZRpHJedLtTpKgr3RV1Fx23NuaAEN1Zfx9hw1u4aJdjU= cloud.google.com/go/compute v1.25.1/go.mod h1:oopOIR53ly6viBYxaDhBfJwzUAxf1zE//uf3IB011ls= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.14.0 h1:8aLcKnMPoldYU3YHgu4t2exrKhLQkqaXAGqT0ljrFVw= -cloud.google.com/go/firestore v1.14.0/go.mod h1:96MVaHLsEhbvkBEdZgfN+AS/GIkco1LRpH9Xp9YZfzQ= cloud.google.com/go/firestore v1.15.0 h1:/k8ppuWOtNuDHt2tsRV42yI21uaGnKDEQnRFeBpbFF8= cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk= -cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= -cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= cloud.google.com/go/iam v1.1.7 h1:z4VHOhwKLF/+UYXAJDFwGtNF0b6gjsW1Pk9Ml0U/IoM= cloud.google.com/go/iam v1.1.7/go.mod h1:J4PMPg8TtyurAUvSmPj8FF3EDgY1SPRZxcUGrn7WXGA= -cloud.google.com/go/kms v1.15.5 h1:pj1sRfut2eRbD9pFRjNnPNg/CzJPuQAzUujMIM1vVeM= -cloud.google.com/go/kms v1.15.7 h1:7caV9K3yIxvlQPAcaFffhlT7d1qpxjB1wHBtjWa13SM= cloud.google.com/go/kms v1.15.8 h1:szIeDCowID8th2i8XE4uRev5PMxQFqW+JjwYxL9h6xs= -cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg= -cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg= -cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s= +cloud.google.com/go/kms v1.15.8/go.mod h1:WoUHcDjD9pluCg7pNds131awnH429QGvRM3N/4MyoVs= cloud.google.com/go/longrunning v0.5.6 h1:xAe8+0YaWoCKr9t1+aWe+OeQgN/iJK1fEgZSXmjuEaE= cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.33.0 h1:6SPCPvWav64tj0sVX/+npCBKhUi/UjJehy9op/V3p2g= -cloud.google.com/go/pubsub v1.36.1 h1:dfEPuGCHGbWUhaMCTHUFjfroILEkx55iUmKBZTP5f+Y= -cloud.google.com/go/pubsub v1.36.1/go.mod h1:iYjCa9EzWOoBiTdd4ps7QoMtMln5NwaZQpK1hbRfBDE= cloud.google.com/go/pubsub v1.37.0 h1:0uEEfaB1VIJzabPpwpZf44zWAKAme3zwKKxHk7vJQxQ= cloud.google.com/go/pubsub v1.37.0/go.mod h1:YQOQr1uiUM092EXwKs56OPT650nwnawc+8/IjoUeGzQ= -cloud.google.com/go/secretmanager v1.11.4 h1:krnX9qpG2kR2fJ+u+uNyNo+ACVhplIAS4Pu7u+4gd+k= cloud.google.com/go/secretmanager v1.12.0 h1:e5pIo/QEgiFiHPVJPxM5jbtUr4O/u5h2zLHYtkFQr24= cloud.google.com/go/secretmanager v1.12.0/go.mod h1:Y1Gne3Ag+fZ2TDTiJc8ZJCMFbi7k1rYT4Rw30GXfvlk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= @@ -81,8 +56,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= -cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= +cloud.google.com/go/storage v1.39.1 h1:MvraqHKhogCOTXTlct/9C3K3+Uy2jBmFYb3/Sp6dVtY= cloud.google.com/go/storage v1.39.1/go.mod h1:xK6xZmxZmo+fyP7+DEF6FhNc24/JAe95OLyOHCXFH1o= dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= @@ -91,6 +65,8 @@ github.com/4meepo/tagalign v1.3.3 h1:ZsOxcwGD/jP4U/aw7qeWu58i7dwYemfy5Y+IF1ACoNw github.com/4meepo/tagalign v1.3.3/go.mod h1:Q9c1rYMZJc9dPRkbQPpcBNCLEmY2njbAsXhQOZFE2dE= github.com/Abirdcfly/dupword v0.0.13 h1:SMS17YXypwP000fA7Lr+kfyBQyW14tTT+nRv9ASwUUo= github.com/Abirdcfly/dupword v0.0.13/go.mod h1:Ut6Ue2KgF/kCOawpW4LnExT+xZLQviJPE4klBPMK/5Y= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/Antonboom/errname v0.1.12 h1:oh9ak2zUtsLp5oaEd/erjB4GPu9w19NyoIskZClDcQY= github.com/Antonboom/errname v0.1.12/go.mod h1:bK7todrzvlaZoQagP1orKzWXv59X/x0W0Io2XT1Ssro= github.com/Antonboom/nilnil v0.1.7 h1:ofgL+BA7vlA1K2wNQOsHzLJ2Pw5B5DpWRLdDAVvvTow= @@ -110,11 +86,16 @@ github.com/GaijinEntertainment/go-exhaustruct/v3 v3.2.0/go.mod h1:Nl76DrGNJTA1KJ github.com/GoogleCloudPlatform/opentelemetry-operations-go/propagator v0.34.2 h1:+Yq9wIbkgEe31FddGeMtCgrXwttHQA66gQrdnXeby5s= github.com/GoogleCloudPlatform/opentelemetry-operations-go/propagator v0.34.2/go.mod h1:0fpP57AX/8cH5k51D2rwhfovlXmNOuh8LFPWA3pIG8k= github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= +github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.3 h1:LS9NXqXhMoqNCplK1ApmVSfB4UnVLRDWRapB6EIlxE0= +github.com/Microsoft/hcsshim v0.12.3/go.mod h1:Iyl1WVpZzr+UkzjekHZbV8o5Z9ZkxNGx6CtY2Qg/JVQ= github.com/OpenPeeDeeP/depguard/v2 v2.2.0 h1:vDfG60vDtIuf0MEOhmLlLLSzqaRM8EMcgJPdp74zmpA= github.com/OpenPeeDeeP/depguard/v2 v2.2.0/go.mod h1:CIzddKRvLBC4Au5aYP/i3nyaWQ+ClszLIuVocRiCYFQ= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= @@ -124,9 +105,11 @@ github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSi github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= +github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/go-check-sumtype v0.1.4 h1:WCvlB3l5Vq5dZQTFmodqL2g68uHiSwwlWcT5a2FGK0c= github.com/alecthomas/go-check-sumtype v0.1.4/go.mod h1:WyYPfhfkdhyrdaligV6svFopZV8Lqdzn5pyVBaV6jhQ= github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk= +github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -152,9 +135,14 @@ github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5Fc github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aws/constructs-go/constructs/v10 v10.3.0 h1:LsjBIMiaDX/vqrXWhzTquBJ9pPdi02/H+z1DCwg0PEM= +github.com/aws/constructs-go/constructs/v10 v10.3.0/go.mod h1:GgzwIwoRJ2UYsr3SU+JhAl+gq5j39bEMYf8ev3J+s9s= +github.com/aws/jsii-runtime-go v1.99.0 h1:IYnRyyimwcWwa/bR39/tCkkGqhzqjAsdtfLin4atpcc= +github.com/aws/jsii-runtime-go v1.99.0/go.mod h1:zAzY1FrPQXQwG/ZrtHIyZI22vKoZm9dufF7LqsJ1poE= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -182,6 +170,12 @@ github.com/catenacyber/perfsprint v0.6.0 h1:VSv95RRkk5+BxrU/YTPcnxuMEWar1iMK5Vyh github.com/catenacyber/perfsprint v0.6.0/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= github.com/ccojocar/zxcvbn-go v1.0.1 h1:+sxrANSCj6CdadkcMnvde/GWU1vZiiXRbqYSCalV4/4= github.com/ccojocar/zxcvbn-go v1.0.1/go.mod h1:g1qkXtUSvHP8lhHp5GrSmTz6uWALGRMQdw6Qnz/hi60= +github.com/cdktf/cdktf-provider-docker-go/docker/v11 v11.0.0 h1:DRt9cAggV4kavJhwCDqdqpYMPgOOs/WYc/Yj2uo6PBs= +github.com/cdktf/cdktf-provider-docker-go/docker/v11 v11.0.0/go.mod h1:U73UQ/9m5UOVw/4Xa8w3+a9HCwMsYB6omR4qkSIATD4= +github.com/cdktf/cdktf-provider-google-go/google/v13 v13.22.0 h1:R0Zgg6oAqxW0t6SUWX75qYV01nrxSIVl9sHRT7kRyEU= +github.com/cdktf/cdktf-provider-google-go/google/v13 v13.22.0/go.mod h1:0lMdjDdlAucOy5rwwIY2MT8E+XVyONpNuWIwh4MO12I= +github.com/cdktf/cdktf-provider-googlebeta-go/googlebeta/v13 v13.16.0 h1:NN6wabflngx4y0D9ZnsqFap/ZAzQi5i56lFIh5ijB9o= +github.com/cdktf/cdktf-provider-googlebeta-go/googlebeta/v13 v13.16.0/go.mod h1:BCy/reh6qLlzE/T5IOgwfYjDyWk1ZZr1Q/kipj6r28I= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -209,10 +203,10 @@ github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUK github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/containerd/containerd v1.7.17 h1:KjNnn0+tAVQHAoaWRjmdak9WlvnFR/8rU1CHHy8Rm2A= +github.com/containerd/containerd v1.7.17/go.mod h1:vK+hhT4TIv2uejlcDlbVIc8+h/BqtKLIyNrtCZol8lI= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -229,24 +223,22 @@ github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20 github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= -github.com/docker/distribution v2.8.0+incompatible h1:l9EaZDICImO1ngI+uTifW+ZYvvz7fKISBAKpg+MbWbY= -github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= -github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ettle/strcase v0.2.0 h1:fGNiVF21fHXpX1niBgk0aROov1LagYsOwV/xqKDKR/Q= @@ -254,8 +246,8 @@ github.com/ettle/strcase v0.2.0/go.mod h1:DajmHElDSaX76ITe3/VHVyMin4LWSJN5Z909Wp github.com/fasthttp/router v1.4.18 h1:elMnlFq527oZd8MHsuUpO6uLDup1exv8rXPfIjClDHk= github.com/fasthttp/router v1.4.18/go.mod h1:ZmC20Mn0VgCBbUWFDmnYzFbQYRfdGeKgpkBy0+JioKA= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= @@ -263,6 +255,7 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= @@ -282,6 +275,7 @@ github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmS github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -298,8 +292,6 @@ github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KE github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -327,6 +319,7 @@ github.com/go-toolsmith/astfmt v1.1.0/go.mod h1:OrcLlRwu0CuiIBp/8b5PYF9ktGVZUjlN github.com/go-toolsmith/astp v1.1.0 h1:dXPuCl6u2llURjdPLLDxJeZInAeZ0/eZwFJmqZMnpQA= github.com/go-toolsmith/astp v1.1.0/go.mod h1:0T1xFGz9hicKs8Z5MfAqSUitoUYS30pDMsRVIDHs8CA= github.com/go-toolsmith/pkgload v1.2.2 h1:0CtmHq/02QhxcF7E9N5LIFcYFsMR5rdovfqTtRKkgIk= +github.com/go-toolsmith/pkgload v1.2.2/go.mod h1:R2hxLNRKuAsiXCo2i5J6ZQPhnPMOVtU+f0arbFPWCus= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/strparse v1.1.0 h1:GAioeZUK9TGxnLS+qfdqNbA4z0SSm5zVNtCQiyP2Bvw= github.com/go-toolsmith/strparse v1.1.0/go.mod h1:7ksGy58fsaQkGQlY8WVoBFNyEPMGuJin1rfoPS4lBSQ= @@ -345,7 +338,6 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -378,8 +370,6 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= @@ -428,6 +418,7 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= @@ -436,20 +427,17 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= -github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA= -github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc= github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA= github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4= github.com/gordonklaus/ineffassign v0.1.0 h1:y2Gd/9I7MdY1oEIt+n+rowjBNDcLQq3RsH5hwJd0f9s= @@ -466,6 +454,7 @@ github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3 github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= github.com/gostaticanalysis/testutil v0.4.0 h1:nhdCmubdmDF6VEatUNjgUZBJKWRqugoISdUv3PPQgHY= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -482,6 +471,8 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl/v2 v2.17.0 h1:z1XvSUyXd1HP10U4lrLg5e0JMVz6CPaJvAgxM0KNZVY= github.com/hashicorp/hcl/v2 v2.17.0/go.mod h1:gJyW2PTShkJqQBKpAmPO3yxMxIuoXkOF2TpqXzrQyx4= +github.com/hashicorp/terraform-cdk-go/cdktf v0.20.7 h1:2qYAJMPlFg4zU8TfZWDa3nyaMIHX6GHQuZnliCosXCs= +github.com/hashicorp/terraform-cdk-go/cdktf v0.20.7/go.mod h1:wAVKV4pDFnayGSCerTah8NQTIcNvi6HGI5fhRoCX3Zw= github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -525,13 +516,14 @@ github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkHAIKE/contextcheck v1.1.4 h1:B6zAaLhOEEcjvUgIYEqystmnFk1Oemn8bvJhbt0GMb8= github.com/kkHAIKE/contextcheck v1.1.4/go.mod h1:1+i/gWqokIa+dm31mqGLZhZJ7Uh44DJGZVmr6QRBNJg= -github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= -github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -584,8 +576,8 @@ github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRC github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2 h1:hAHbPm5IJGijwng3PWk09JkG9WeqChjprR5s9bBZ+OM= -github.com/matttproud/golang_protobuf_extensions v1.0.2/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= github.com/mgechev/revive v1.3.7 h1:502QY0vQGe9KtYJ9FpxMz9rL+Fc/P13CI5POL4uHCcE= @@ -598,7 +590,12 @@ github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQ github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk= +github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -609,6 +606,7 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwd github.com/moricho/tparallel v0.3.1 h1:fQKD4U1wRMAYNngDonW5XupoB/ZGJHdpzrWqgyg9krA= github.com/moricho/tparallel v0.3.1/go.mod h1:leENX2cUv7Sv2qDgdi0D0fCftN8fRC67Bcn8pqzeYNI= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= @@ -625,17 +623,18 @@ github.com/nishanths/exhaustive v0.12.0 h1:vIY9sALmw6T/yxiASewa4TQcFsVYZQQRUQJhK github.com/nishanths/exhaustive v0.12.0/go.mod h1:mEZ95wPIZW+x8kC4TgC+9YCUgiST7ecevsVDTgc2obs= github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/nitrictech/nitric/cloud/common v0.0.0-20230430232207-a0e427e2d646 h1:7Rd27As1cpE5ARyTQGYFBmMZFFOYXA3r820pq8e/jZw= -github.com/nitrictech/nitric/cloud/common v0.0.0-20230430232207-a0e427e2d646/go.mod h1:+LnApmrNFZsVGB+1d9mKYmPxH3Yu/vnQRlyfd04TYZI= -github.com/nitrictech/nitric/core v0.0.0-20230616021604-4036d005db63 h1:W8dtDQVg57v9FFeW+NuojL7OfOc8JF05upe9ZkGffNw= -github.com/nitrictech/nitric/core v0.0.0-20230616021604-4036d005db63/go.mod h1:ToPwEfaTjD8uz1tj1GxIRxLTEagC4Q1muzTzJdEYxhQ= -github.com/nitrictech/protoutils v0.0.0-20220321044654-02667a814cdf h1:8MB8W8ylM8sCM2COGfiO39/tB6BTdiawLszaUGCNL5w= -github.com/nitrictech/protoutils v0.0.0-20220321044654-02667a814cdf/go.mod h1:b2lzk2a4o1bvSrSCE6yvTldHuXCJymuDVhdMJGOSslw= +github.com/nitrictech/nitric/cloud/common v0.0.0-20240614052744-71e6e05bc47e h1:S6O7DHYmilnygY/KA4KmwL0DtgkfRk0X2l/rdpI0yIc= +github.com/nitrictech/nitric/cloud/common v0.0.0-20240614052744-71e6e05bc47e/go.mod h1:dPdHdiL6RanbPiwhHxWZL8mGKJ3mjMbRBMTHCTgIOQ8= +github.com/nitrictech/nitric/core v0.0.0-20240614052744-71e6e05bc47e h1:WV7BHlv3V25mKQuyPJ97W4aWCJL8h7MGSa4imTFqZcA= +github.com/nitrictech/nitric/core v0.0.0-20240614052744-71e6e05bc47e/go.mod h1:atiPRiYDBs4Wx3flZ45KnQenUD6eAdpL0lOLZT91yyM= +github.com/nitrictech/nitric/test v0.0.0-20240614052744-71e6e05bc47e h1:bluXHs2ZGvPhSGVML7Z7eZJBcQwe/EJ3hDhgbXVpcM0= +github.com/nitrictech/nitric/test v0.0.0-20240614052744-71e6e05bc47e/go.mod h1:8flSXZxCdfgK5KTVvqgKPke3/hnDDJEoQECT+il2A7c= github.com/nunnatsa/ginkgolinter v0.15.2 h1:N2ORxUxPU56R9gsfLIlVVvCv/V/VVou5qVI1oBKBNHg= github.com/nunnatsa/ginkgolinter v0.15.2/go.mod h1:oYxE7dt1vZI8cK2rZOs3RgTaBN2vggkqnENmoJ8kVvc= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= +github.com/nxadm/tail v1.4.11/go.mod h1:OTaG3NK980DZzxbRq6lEuzgU+mug70nY11sMd4JXXHc= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -643,14 +642,17 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108 github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= +github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= +github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -658,6 +660,7 @@ github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+ github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.14.0 h1:dCI/t1iTdYGtkvCuBG2BgR6KZa83PTclw4U5n2wAllU= +github.com/otiai10/copy v1.14.0/go.mod h1:ECfuL02W+/FkTWZWgQqXPWZgW9oeKCSQ5qVfSc4qc4w= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= @@ -694,8 +697,8 @@ github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1: github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= @@ -719,8 +722,8 @@ github.com/pulumi/pulumi-gcp/sdk/v6 v6.55.0 h1:SWkCTU/0ZSdtJFIsqBdRjqr8DYk2ruAaO github.com/pulumi/pulumi-gcp/sdk/v6 v6.55.0/go.mod h1:hcVycxkARvh/sylq8s8OMBJHJjFsOq5r+NcQekIa+fQ= github.com/pulumi/pulumi-random/sdk/v4 v4.8.2 h1:ZlXB3mx1YvAjs+jm59rcpvfl1J7dpLOBOxUb5vEPkZk= github.com/pulumi/pulumi-random/sdk/v4 v4.8.2/go.mod h1:czSwj+jZnn/VWovMpTLUs/RL/ZS4PFHRdmlXrkvHqeI= -github.com/pulumi/pulumi/sdk/v3 v3.105.0 h1:OKEeubZigWyQVnZS6udnFnZHZ/8OWXuUYv9ir3OY+vs= -github.com/pulumi/pulumi/sdk/v3 v3.105.0/go.mod h1:Ml3rpGfyZlI4zQCG7LN2XDSmH4XUNYdyBwJ3yEr/OpI= +github.com/pulumi/pulumi/sdk/v3 v3.112.0 h1:cq2x5N6iuYhSLdeOdRs+LIq0EneB0Cb54WOlD/VaX3E= +github.com/pulumi/pulumi/sdk/v3 v3.112.0/go.mod h1:JWSzKBoHd8rlncC1DhXLf7YdV+Bk/Qf+hSZOOQh0WwQ= github.com/quasilyte/go-ruleguard v0.4.0 h1:DyM6r+TKL+xbKB4Nm7Afd1IQh9kEUKQs2pboWGKtvQo= github.com/quasilyte/go-ruleguard v0.4.0/go.mod h1:Eu76Z/R8IXtViWUIHkE3p8gdH3/PKk1eh3YGfaEof10= github.com/quasilyte/gogrep v0.5.0 h1:eTKODPXbI8ffJMN+W2aE0+oL0z/nh8/5eNdiO34SOAo= @@ -802,8 +805,9 @@ github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8L github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -813,8 +817,9 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplBwWcHBo6q9xrfWdMrT9o4kltkmmvpemgIjep/8= @@ -878,15 +883,20 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yuin/goldmark v1.5.2 h1:ALmeCk/px5FSm1MAcFBAsVKZjDuMVj8Tm7FFIlMJnqU= +github.com/yuin/goldmark v1.5.2/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= gitlab.com/bosi/decorder v0.4.1 h1:VdsdfxhstabyhZovHafFw+9eJ6eU0d2CkFNJcZz/NU4= gitlab.com/bosi/decorder v0.4.1/go.mod h1:jecSqWUew6Yle1pCr2eLWTensJMmsxHsBwt+PVbkAqA= go-simpler.org/assert v0.7.0 h1:OzWWZqfNxt8cLS+MlUp6Tgk1HjPkmgdKBq9qvy8lZsA= +go-simpler.org/assert v0.7.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= go-simpler.org/musttag v0.8.0 h1:DR4UTgetNNhPRNo02rkK1hwDTRzAPotN+ZqYpdtEwWc= go-simpler.org/musttag v0.8.0/go.mod h1:fiNdCkXt2S6je9Eblma3okjnlva9NT1Eg/WUt19rWu8= go-simpler.org/sloglint v0.4.0 h1:UVJuUJo63iNQNFEOtZ6o1xAgagVg/giVLLvG9nNLobI= go-simpler.org/sloglint v0.4.0/go.mod h1:v6zJ++j/thFPhefs2wEXoCKwT10yo5nkBDYRCXyqgNQ= +go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8= +go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -894,30 +904,23 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4 h1:PRXhsszxTt5bbPriTjmaweWUsAnJYeWBhUMLRetUgBU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.4/go.mod h1:05eWWy6ZWzmpeImD3UowLTB3VjDMU1yxQ+ENuVWDM3c= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.11.2 h1:YBZcQlsVekzFsFbjygXMOXSs6pialIZxcjfO/mBDmR0= -go.opentelemetry.io/otel v1.11.2/go.mod h1:7p4EUV+AqgdlNV9gL97IgUZiVR3yrFXYo53f9BM3tRI= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= -go.opentelemetry.io/otel/sdk v1.11.2 h1:GF4JoaEx7iihdMFu30sOyRx52HDHOkl9xQ8SMqNXUiU= -go.opentelemetry.io/otel/sdk v1.11.2/go.mod h1:wZ1WxImwpq+lVRo4vsmSOxdd+xwoUJ6rqyLc3SyX9aU= -go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= +go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= -go.opentelemetry.io/otel/trace v1.11.2 h1:Xf7hWSF2Glv0DE3MH7fBHvtpSBsjcBUe5MYAmZM/+y0= -go.opentelemetry.io/otel/trace v1.11.2/go.mod h1:4N+yC7QEz7TTsG9BSRLNAa63eg5E06ObSbKPmxQ/pKA= go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk= +go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= @@ -933,11 +936,8 @@ golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -966,6 +966,8 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -982,8 +984,8 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1030,11 +1032,8 @@ golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1042,9 +1041,6 @@ golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= -golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI= golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1060,8 +1056,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1111,7 +1107,6 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1128,11 +1123,8 @@ golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1140,11 +1132,8 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1157,8 +1146,8 @@ golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1230,14 +1219,12 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= @@ -1256,9 +1243,6 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.152.0 h1:t0r1vPnfMc260S2Ci+en7kfCZaLOPs5KI0sVV/6jZrY= -google.golang.org/api v0.169.0 h1:QwWPy71FgMWqJN/l6jVlFHUa29a7dcUy02I8o799nPY= -google.golang.org/api v0.169.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg= google.golang.org/api v0.170.0 h1:zMaruDePM88zxZBG+NG8+reALO2rfLhe/JShitLyT48= google.golang.org/api v0.170.0/go.mod h1:/xql9M2btF85xac/VAm4PsLMTLVGUOpq4BE9R8jyNy8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -1267,8 +1251,6 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1300,19 +1282,10 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 h1:9+tzLLstTlPTRyJTh+ah5wIMsBW5c4tQwGTN3thOW9Y= -google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9/go.mod h1:mqHbVIp48Muh7Ywss/AD6I5kNVKZMmAa/QEW58Gxp2s= google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda h1:wu/KJm9KJwpfHWhkkZGohVC6KRrc1oJNr4jwtQMOQXw= google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda/go.mod h1:g2LLCvCeCSir/JJSWosk19BR4NVxGqHUC6rxIRsd7Aw= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 h1:rIo7ocm2roD9DcFIX67Ym8icoGCKSARAiPljFhh5suQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y= google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa h1:Jt1XW5PaLXF1/ePZrznsh/aAUvI7Adfc3LY1dAKlzRs= google.golang.org/genproto/googleapis/api v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:K4kfzHtI0kqWA79gecJarFtDn/Mls+GxQcg3Zox91Ac= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 h1:Xs9lu+tLXxLIfuci70nG4cpwaRC+mRQPUL7LoIeDJC4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs= google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa h1:RBgMaUMP+6soRkik4VoN8ojR2nex2TqZwjSSogic+eo= google.golang.org/genproto/googleapis/rpc v0.0.0-20240325203815-454cdb8f5daa/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1328,7 +1301,6 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk= google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -1343,8 +1315,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1375,6 +1345,7 @@ gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1395,6 +1366,7 @@ mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jC mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14 h1:zCr3iRRgdk5eIikZNDphGcM6KGVTx3Yu+/Uu9Es254w= mvdan.cc/unparam v0.0.0-20240104100049-c549a3470d14/go.mod h1:ZzZjEpJDOmx8TdVU6umamY3Xy0UAQUI2DHbf05USVbI= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/go.work.sum b/go.work.sum index e892888e5..c42924a67 100644 --- a/go.work.sum +++ b/go.work.sum @@ -529,7 +529,6 @@ cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+z cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= cloud.google.com/go/kms v1.15.5/go.mod h1:cU2H5jnp6G2TDpUGZyqTCoy1n16fbubHZjmVXSMtwDI= cloud.google.com/go/kms v1.15.7/go.mod h1:ub54lbsa6tDkUwnu4W7Yt1aAIFLnspgh0kPGToDukeI= -cloud.google.com/go/kms v1.15.8/go.mod h1:WoUHcDjD9pluCg7pNds131awnH429QGvRM3N/4MyoVs= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.8.0 h1:3Wa+IUMamL4JH3Zd3cDZUHpwyqplTACt6UZKRD2eCL4= cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= @@ -882,7 +881,6 @@ cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7Biccwk cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/storage v1.37.0 h1:WI8CsaFO8Q9KjPVtsZ5Cmi0dXV25zMoX0FklT7c3Jm4= cloud.google.com/go/storage v1.37.0/go.mod h1:i34TiT2IhiNDmcj65PqwCjcoUX7Z5pLzS8DEmoiFq1k= -cloud.google.com/go/storage v1.39.1 h1:MvraqHKhogCOTXTlct/9C3K3+Uy2jBmFYb3/Sp6dVtY= cloud.google.com/go/storagetransfer v1.6.0 h1:fUe3OydbbvHcAYp07xY+2UpH4AermGbmnm7qdEj3tGE= cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= cloud.google.com/go/storagetransfer v1.8.0 h1:5T+PM+3ECU3EY2y9Brv0Sf3oka8pKmsCfpQ07+91G9o= @@ -1256,6 +1254,7 @@ github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/Ir github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= github.com/facebookgo/clock v0.0.0-20150410010913-600d898af40a h1:yDWHCSQ40h88yih2JAcL6Ls/kVkSE8GFACTGVnMPruw= github.com/facebookgo/stats v0.0.0-20151006221625-1b76add642e4 h1:0YtRCqIZs2+Tz49QuH6cJVw/IFqzo39gEqZ0iYLxD2M= github.com/fasthttp/router v1.4.13 h1:42M7+7tNO6clb5seb4HhXlBIX1lnNv8DLhiT6jUv75A= @@ -1369,7 +1368,6 @@ github.com/google/licenseclassifier v0.0.0-20221004142553-c1ed8fcf4bab/go.mod h1 github.com/google/licenseclassifier/v2 v2.0.0-alpha.1/go.mod h1:YAgBGGTeNDMU+WfIgaFvjZe4rudym4f6nIn8ZH5X+VM= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= @@ -1563,7 +1561,7 @@ github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47e github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.15.13 h1:NFn1Wr8cfnenSJSA46lLq4wHCcBzKTSjnBIexDMMOV0= github.com/klauspost/compress v1.15.13/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/klauspost/reedsolomon v1.11.3 h1:rX9UNNvDhJ0Bq45y6uBy/eYehcjyz5faokTuZmu1Q9U= @@ -1785,7 +1783,6 @@ github.com/pquerna/cachecontrol v0.1.0 h1:yJMy84ti9h/+OEWa752kBTKv4XC30OtVVHYv/8 github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ= -github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.38.0 h1:VTQitp6mXTdUoCmDMugDVOJ1opi6ADftKfp/yeqTR/E= github.com/prometheus/common v0.38.0/go.mod h1:MBXfmBQZrK5XpbCkjofnXs96LD2QQ7fEq4C0xjC/yec= @@ -2018,8 +2015,6 @@ github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRK github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= -go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8= -go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= @@ -2193,6 +2188,7 @@ golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= @@ -2286,6 +2282,7 @@ golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=