From f63ef47c2304b34a1eff1246e8658205c7c9aae9 Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Mon, 2 Jun 2025 15:31:21 +0200 Subject: [PATCH 1/7] copy 0.20.x documentation for 0.21.x release prep --- .../v0.21.x/data/cdktf-nav-data.json | 390 + .../cdktf/api-reference/csharp/classes.mdx | 13117 +++++++++++ .../cdktf/api-reference/csharp/constructs.mdx | 12379 +++++++++++ .../docs/cdktf/api-reference/csharp/enums.mdx | 56 + .../docs/cdktf/api-reference/csharp/index.mdx | 14 + .../cdktf/api-reference/csharp/protocols.mdx | 967 + .../cdktf/api-reference/csharp/structs.mdx | 10162 +++++++++ .../docs/cdktf/api-reference/go/classes.mdx | 13127 +++++++++++ .../cdktf/api-reference/go/constructs.mdx | 12379 +++++++++++ .../docs/cdktf/api-reference/go/enums.mdx | 56 + .../docs/cdktf/api-reference/go/index.mdx | 14 + .../docs/cdktf/api-reference/go/protocols.mdx | 967 + .../docs/cdktf/api-reference/go/structs.mdx | 10162 +++++++++ .../docs/cdktf/api-reference/index.mdx | 17 + .../docs/cdktf/api-reference/java/classes.mdx | 13117 +++++++++++ .../cdktf/api-reference/java/constructs.mdx | 17190 +++++++++++++++ .../docs/cdktf/api-reference/java/enums.mdx | 56 + .../docs/cdktf/api-reference/java/index.mdx | 14 + .../cdktf/api-reference/java/protocols.mdx | 967 + .../docs/cdktf/api-reference/java/structs.mdx | 10183 +++++++++ .../docs/cdktf/api-reference/provider.mdx | 13 + .../cdktf/api-reference/python/classes.mdx | 14452 +++++++++++++ .../cdktf/api-reference/python/constructs.mdx | 17938 ++++++++++++++++ .../docs/cdktf/api-reference/python/enums.mdx | 56 + .../docs/cdktf/api-reference/python/index.mdx | 14 + .../cdktf/api-reference/python/protocols.mdx | 1013 + .../cdktf/api-reference/python/structs.mdx | 10162 +++++++++ .../api-reference/typescript/classes.mdx | 13127 +++++++++++ .../api-reference/typescript/constructs.mdx | 12379 +++++++++++ .../cdktf/api-reference/typescript/enums.mdx | 56 + .../cdktf/api-reference/typescript/index.mdx | 14 + .../api-reference/typescript/protocols.mdx | 967 + .../api-reference/typescript/structs.mdx | 9498 ++++++++ .../cdktf/cli-reference/cli-configuration.mdx | 110 + .../docs/cdktf/cli-reference/commands.mdx | 896 + .../v0.21.x/docs/cdktf/community.mdx | 24 + .../v0.21.x/docs/cdktf/concepts/aspects.mdx | 513 + .../v0.21.x/docs/cdktf/concepts/assets.mdx | 254 + .../cdktf/concepts/cdktf-architecture.mdx | 72 + .../docs/cdktf/concepts/constructs.mdx | 783 + .../docs/cdktf/concepts/data-sources.mdx | 323 + .../v0.21.x/docs/cdktf/concepts/functions.mdx | 413 + .../cdktf/concepts/hcl-interoperability.mdx | 235 + .../v0.21.x/docs/cdktf/concepts/iterators.mdx | 1098 + .../v0.21.x/docs/cdktf/concepts/modules.mdx | 570 + .../v0.21.x/docs/cdktf/concepts/providers.mdx | 622 + .../docs/cdktf/concepts/remote-backends.mdx | 484 + .../v0.21.x/docs/cdktf/concepts/resources.mdx | 1178 + .../v0.21.x/docs/cdktf/concepts/stacks.mdx | 1074 + .../v0.21.x/docs/cdktf/concepts/tokens.mdx | 215 + .../cdktf/concepts/variables-and-outputs.mdx | 954 + .../cdktf/create-and-deploy/aws-adapter.mdx | 378 + .../create-and-deploy/best-practices.mdx | 143 + .../create-and-deploy/configuration-file.mdx | 203 + .../create-and-deploy/deployment-patterns.mdx | 167 + .../environment-variables.mdx | 25 + .../cdktf/create-and-deploy/hcp-terraform.mdx | 185 + .../cdktf/create-and-deploy/performance.mdx | 31 + .../cdktf/create-and-deploy/project-setup.mdx | 193 + .../create-and-deploy/remote-templates.mdx | 85 + .../construct-design.mdx | 153 + .../publishing-and-distribution.mdx | 149 + .../cdktf/examples-and-guides/examples.mdx | 139 + .../cdktf/examples-and-guides/refactoring.mdx | 353 + .../v0.21.x/docs/cdktf/index.mdx | 48 + .../v0.21.x/docs/cdktf/release/index.mdx | 24 + .../cdktf/release/upgrade-guide-v0-10.mdx | 103 + .../cdktf/release/upgrade-guide-v0-11.mdx | 111 + .../cdktf/release/upgrade-guide-v0-12.mdx | 35 + .../cdktf/release/upgrade-guide-v0-13.mdx | 261 + .../cdktf/release/upgrade-guide-v0-15.mdx | 106 + .../cdktf/release/upgrade-guide-v0-17.mdx | 34 + .../cdktf/release/upgrade-guide-v0-18.mdx | 70 + .../cdktf/release/upgrade-guide-v0-19.mdx | 23 + .../docs/cdktf/release/upgrade-guide-v0-6.mdx | 184 + .../docs/cdktf/release/upgrade-guide-v0-7.mdx | 164 + .../docs/cdktf/release/upgrade-guide-v0-9.mdx | 44 + .../v0.21.x/docs/cdktf/telemetry.mdx | 27 + .../v0.21.x/docs/cdktf/test/debugging.mdx | 57 + .../v0.21.x/docs/cdktf/test/unit-tests.mdx | 332 + .../v0.21.x/img/cdktf-app-architecture.png | Bin 0 -> 585677 bytes .../v0.21.x/img/cdktf-terraform-workflow.png | Bin 0 -> 822929 bytes .../v0.21.x/img/cdktf-terraform.png | Bin 0 -> 68747 bytes .../v0.21.x/img/constructs-level.png | Bin 0 -> 323636 bytes .../v0.21.x/img/provider-modules.png | Bin 0 -> 257584 bytes .../v0.21.x/img/terraform-platform.png | Bin 0 -> 60946 bytes .../v0.21.x/img/terraform-plugin-overview.png | Bin 0 -> 208536 bytes 87 files changed, 208668 insertions(+) create mode 100644 content/terraform-cdk/v0.21.x/data/cdktf-nav-data.json create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/classes.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/constructs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/enums.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/protocols.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/structs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/classes.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/constructs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/enums.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/protocols.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/structs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/classes.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/constructs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/enums.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/protocols.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/structs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/provider.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/classes.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/constructs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/enums.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/protocols.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/structs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/classes.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/constructs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/enums.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/protocols.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/structs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/cli-configuration.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/community.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/aspects.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/assets.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/cdktf-architecture.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/constructs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/functions.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/hcl-interoperability.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/iterators.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/modules.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/providers.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/remote-backends.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/resources.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/stacks.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/tokens.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/aws-adapter.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/best-practices.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/configuration-file.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/deployment-patterns.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/environment-variables.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/hcp-terraform.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/performance.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/project-setup.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/construct-design.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/publishing-and-distribution.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/refactoring.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/index.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-10.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-11.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-12.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-13.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-15.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-17.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-18.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-19.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-6.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-7.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-9.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/telemetry.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/test/debugging.mdx create mode 100644 content/terraform-cdk/v0.21.x/docs/cdktf/test/unit-tests.mdx create mode 100644 content/terraform-cdk/v0.21.x/img/cdktf-app-architecture.png create mode 100644 content/terraform-cdk/v0.21.x/img/cdktf-terraform-workflow.png create mode 100644 content/terraform-cdk/v0.21.x/img/cdktf-terraform.png create mode 100644 content/terraform-cdk/v0.21.x/img/constructs-level.png create mode 100644 content/terraform-cdk/v0.21.x/img/provider-modules.png create mode 100644 content/terraform-cdk/v0.21.x/img/terraform-platform.png create mode 100644 content/terraform-cdk/v0.21.x/img/terraform-plugin-overview.png diff --git a/content/terraform-cdk/v0.21.x/data/cdktf-nav-data.json b/content/terraform-cdk/v0.21.x/data/cdktf-nav-data.json new file mode 100644 index 0000000000..69a16d2d47 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/data/cdktf-nav-data.json @@ -0,0 +1,390 @@ +[ + { + "heading": "CDK for Terraform" + }, + { + "title": "Overview", + "path": "" + }, + { + "title": "Get Started", + "href": "https://learn.hashicorp.com/tutorials/terraform/cdktf-install?in=terraform/cdktf" + }, + { + "title": "Concepts", + "routes": [ + { + "title": "Architecture", + "path": "concepts/cdktf-architecture" + }, + { + "title": "HCL Interoperability", + "path": "concepts/hcl-interoperability" + }, + { + "title": "Constructs", + "path": "concepts/constructs" + }, + { + "title": "Providers", + "path": "concepts/providers" + }, + { + "title": "Resources", + "path": "concepts/resources" + }, + { + "title": "Modules", + "path": "concepts/modules" + }, + { + "title": "Data Sources", + "path": "concepts/data-sources" + }, + { + "title": "Variables and Outputs", + "path": "concepts/variables-and-outputs" + }, + { + "title": "Functions", + "path": "concepts/functions" + }, + { + "title": "Iterators", + "path": "concepts/iterators" + }, + { + "title": "Remote Backends", + "path": "concepts/remote-backends" + }, + { + "title": "Aspects", + "path": "concepts/aspects" + }, + { + "title": "Assets", + "path": "concepts/assets" + }, + { + "title": "Tokens", + "path": "concepts/tokens" + }, + { + "title": "Stacks", + "path": "concepts/stacks" + } + ] + }, + { + "title": "Examples and Guides", + "routes": [ + { + "title": "Examples", + "path": "examples-and-guides/examples" + }, + { + "title": "Refactoring Stacks", + "path": "examples-and-guides/refactoring" + } + ] + }, + { + "title": "Create and Deploy Applications", + "routes": [ + { + "title": "Project Setup", + "path": "create-and-deploy/project-setup" + }, + { + "title": "Configuration File", + "path": "create-and-deploy/configuration-file" + }, + { + "title": "Best Practices", + "path": "create-and-deploy/best-practices" + }, + { + "title": "Environment Variables", + "path": "create-and-deploy/environment-variables" + }, + { + "title": "HCP Terraform", + "path": "create-and-deploy/hcp-terraform" + }, + { + "title": "Deployment Patterns", + "path": "create-and-deploy/deployment-patterns" + }, + { + "title": "Performance", + "path": "create-and-deploy/performance" + }, + { + "title": "Remote Templates", + "path": "create-and-deploy/remote-templates" + }, + { + "title": "AWS Adapter [preview]", + "path": "create-and-deploy/aws-adapter" + } + ] + }, + { + "title": "Develop Custom Constructs", + "routes": [ + { + "title": "Design", + "path": "develop-custom-constructs/construct-design" + }, + { + "title": "Publishing and Distribution", + "path": "develop-custom-constructs/publishing-and-distribution" + } + ] + }, + { + "title": "Test and Debug", + "routes": [ + { + "title": "Unit Tests", + "path": "test/unit-tests" + }, + { + "title": "Debugging", + "path": "test/debugging" + } + ] + }, + { + "title": "CLI Reference", + "routes": [ + { + "title": "CLI Configuration", + "path": "cli-reference/cli-configuration" + }, + { + "title": "Commands", + "path": "cli-reference/commands" + } + ] + }, + { + "title": "API Reference", + "routes": [ + { + "title": "Overview", + "path": "api-reference" + }, + { + "title": "Typescript", + "routes": [ + { + "title": "Overview", + "path": "api-reference/typescript" + }, + { + "title": "Classes", + "path": "api-reference/typescript/classes" + }, + { + "title": "Constructs", + "path": "api-reference/typescript/constructs" + }, + { + "title": "Enums", + "path": "api-reference/typescript/enums" + }, + { + "title": "Protocols", + "path": "api-reference/typescript/protocols" + }, + { + "title": "Structs", + "path": "api-reference/typescript/structs" + } + ] + }, + { + "title": "Python", + "routes": [ + { + "title": "Overview", + "path": "api-reference/python" + }, + { + "title": "Classes", + "path": "api-reference/python/classes" + }, + { + "title": "Constructs", + "path": "api-reference/python/constructs" + }, + { + "title": "Enums", + "path": "api-reference/python/enums" + }, + { + "title": "Protocols", + "path": "api-reference/python/protocols" + }, + { + "title": "Structs", + "path": "api-reference/python/structs" + } + ] + }, + { + "title": "Java", + "routes": [ + { + "title": "Overview", + "path": "api-reference/java" + }, + { + "title": "Classes", + "path": "api-reference/java/classes" + }, + { + "title": "Constructs", + "path": "api-reference/java/constructs" + }, + { + "title": "Enums", + "path": "api-reference/java/enums" + }, + { + "title": "Protocols", + "path": "api-reference/java/protocols" + }, + { + "title": "Structs", + "path": "api-reference/java/structs" + } + ] + }, + { + "title": "C#", + "routes": [ + { + "title": "Overview", + "path": "api-reference/csharp" + }, + { + "title": "Classes", + "path": "api-reference/csharp/classes" + }, + { + "title": "Constructs", + "path": "api-reference/csharp/constructs" + }, + { + "title": "Enums", + "path": "api-reference/csharp/enums" + }, + { + "title": "Protocols", + "path": "api-reference/csharp/protocols" + }, + { + "title": "Structs", + "path": "api-reference/csharp/structs" + } + ] + }, + { + "title": "Go", + "routes": [ + { + "title": "Overview", + "path": "api-reference/go" + }, + { + "title": "Classes", + "path": "api-reference/go/classes" + }, + { + "title": "Constructs", + "path": "api-reference/go/constructs" + }, + { + "title": "Enums", + "path": "api-reference/go/enums" + }, + { + "title": "Protocols", + "path": "api-reference/go/protocols" + }, + { + "title": "Structs", + "path": "api-reference/go/structs" + } + ] + }, + { + "title": "Providers", + "path": "api-reference/provider" + } + ] + }, + { + "title": "Release", + "routes": [ + { + "title": "Overview", + "path": "release" + }, + { + "title": "Upgrading to Version 0.19", + "path": "release/upgrade-guide-v0-19" + }, + { + "title": "Upgrading to Version 0.18", + "path": "release/upgrade-guide-v0-18" + }, + { + "title": "Upgrading to Version 0.17", + "path": "release/upgrade-guide-v0-17" + }, + { + "title": "Upgrading to Version 0.15", + "path": "release/upgrade-guide-v0-15" + }, + { + "title": "Upgrading to Version 0.13", + "path": "release/upgrade-guide-v0-13" + }, + { + "title": "Upgrading to Version 0.12", + "path": "release/upgrade-guide-v0-12" + }, + { + "title": "Upgrading to Version 0.11", + "path": "release/upgrade-guide-v0-11" + }, + { + "title": "Upgrading to Version 0.10", + "path": "release/upgrade-guide-v0-10" + }, + { + "title": "Upgrading to Version 0.9", + "path": "release/upgrade-guide-v0-9" + }, + { + "title": "Upgrading to Version 0.7", + "path": "release/upgrade-guide-v0-7" + }, + { + "title": "Upgrading to Version 0.6", + "path": "release/upgrade-guide-v0-6" + } + ] + }, + { + "title": "Community", + "path": "community" + }, + { + "title": "Telemetry", + "path": "telemetry" + } +] \ No newline at end of file diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/classes.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/classes.mdx new file mode 100644 index 0000000000..1f256682fc --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/classes.mdx @@ -0,0 +1,13117 @@ +--- +page_title: CSharp Reference for Classes +description: CDKTF Core API Reference for Classes in CSharp. +--- + + + +# CSharp: Classes + +### Annotations + +Includes API for attaching annotations such as warning messages to constructs. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ------------------------------------------------------------------ | +| AddError | Adds an { "error": < message > } metadata entry to this construct. | +| AddInfo | Adds an info metadata entry to this construct. | +| AddWarning | Adds a warning metadata entry to this construct. | + +--- + +##### `AddError` + +```csharp +private void AddError(string Message) +``` + +Adds an { "error": < message > } metadata entry to this construct. + +The toolkit will fail synthesis when errors are reported. + +###### `Message`Required + +- _Type:_ string + +The error message. + +--- + +##### `AddInfo` + +```csharp +private void AddInfo(string Message) +``` + +Adds an info metadata entry to this construct. + +The CLI will display the info message when apps are synthesized. + +###### `Message`Required + +- _Type:_ string + +The info message. + +--- + +##### `AddWarning` + +```csharp +private void AddWarning(string Message) +``` + +Adds a warning metadata entry to this construct. + +The CLI will display the warning when an app is synthesized. +In a future release the CLI might introduce a --strict flag which +will then fail the synthesis if it encounters a warning. + +###### `Message`Required + +- _Type:_ string + +The warning message. + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------- | -------------------------------------------------- | +| Of | Returns the annotations API for a construct scope. | + +--- + +##### `Of` + +```csharp +using HashiCorp.Cdktf; + +Annotations.Of(IConstruct Scope); +``` + +Returns the annotations API for a construct scope. + +###### `Scope`Required + +- _Type:_ Constructs.IConstruct + +The scope. + +--- + +### AnyListList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new AnyListList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```csharp +private DynamicListTerraformIterator AllWithMapKey(string MapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private IResolvable Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### AnyListMap + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new AnyListMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private IResolvable Get(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### AnyMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new AnyMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Lookup` + +```csharp +private object Lookup(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### AnyMapList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new AnyMapList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private AnyMap Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### Aspects + +Aspects can be applied to CDK tree scopes and can operate on the tree before synthesis. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------- | ---------------------------------------------------- | +| Add | Adds an aspect to apply this scope before synthesis. | + +--- + +##### `Add` + +```csharp +private void Add(IAspect Aspect) +``` + +Adds an aspect to apply this scope before synthesis. + +###### `Aspect`Required + +- _Type:_ IAspect + +The aspect to add. + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------- | --------------------------------------------------------------- | +| Of | Returns the `Aspects` object associated with a construct scope. | + +--- + +##### `Of` + +```csharp +using HashiCorp.Cdktf; + +Aspects.Of(IConstruct Scope); +``` + +Returns the `Aspects` object associated with a construct scope. + +###### `Scope`Required + +- _Type:_ Constructs.IConstruct + +The scope for which these aspects will apply. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------- | +| All | IAspect[] | The list of aspects which were directly applied on this scope. | + +--- + +##### `All`Required + +```csharp +public IAspect[] All { get; } +``` + +- _Type:_ IAspect[] + +The list of aspects which were directly applied on this scope. + +--- + +### AssertionReturn + +Class representing the contents of a return by an assertion. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new AssertionReturn(string Message, bool Pass); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------- | -------------------------------------------------------------------------- | +| Message | string | - String message containing information about the result of the assertion. | +| Pass | bool | - Boolean pass denoting the success of the assertion. | + +--- + +##### `Message`Required + +- _Type:_ string + +String message containing information about the result of the assertion. + +--- + +##### `Pass`Required + +- _Type:_ bool + +Boolean pass denoting the success of the assertion. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------- | -------------------------------------------------------------------------- | +| Message | string | - String message containing information about the result of the assertion. | +| Pass | bool | - Boolean pass denoting the success of the assertion. | + +--- + +##### `Message`Required + +```csharp +public string Message { get; } +``` + +- _Type:_ string + +String message containing information about the result of the assertion. + +--- + +##### `Pass`Required + +```csharp +public bool Pass { get; } +``` + +- _Type:_ bool + +Boolean pass denoting the success of the assertion. + +--- + +### BooleanList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new BooleanList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```csharp +private DynamicListTerraformIterator AllWithMapKey(string MapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private IResolvable Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### BooleanListList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new BooleanListList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```csharp +private DynamicListTerraformIterator AllWithMapKey(string MapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private IResolvable Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### BooleanListMap + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new BooleanListMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private IResolvable Get(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### BooleanMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new BooleanMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Lookup` + +```csharp +private IResolvable Lookup(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### BooleanMapList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new BooleanMapList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private BooleanMap Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### CloudWorkspace + +A cloud workspace can either be a single named workspace, or a list of tagged workspaces. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new CloudWorkspace(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| ToTerraform | _No description._ | + +--- + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +### ComplexComputedList + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ComplexComputedList(IInterpolatingParent TerraformResource, string TerraformAttribute, string ComplexComputedListIndex, bool WrapsSet = null); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| ComplexComputedListIndex | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `ComplexComputedListIndex`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Optional + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### ~~`ComputeFqn`~~ + +```csharp +private string ComputeFqn() +``` + +##### ~~`GetAnyMapAttribute`~~ + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetBooleanAttribute`~~ + +```csharp +private IResolvable GetBooleanAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetBooleanMapAttribute`~~ + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetListAttribute`~~ + +```csharp +private string[] GetListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetNumberAttribute`~~ + +```csharp +private double GetNumberAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetNumberListAttribute`~~ + +```csharp +private double[] GetNumberListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetNumberMapAttribute`~~ + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetStringAttribute`~~ + +```csharp +private string GetStringAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`GetStringMapAttribute`~~ + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`InterpolationForAttribute`~~ + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### ~~`Resolve`~~ + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### ~~`ToString`~~ + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### ~~`CreationStack`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### ~~`Fqn`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### ComplexList + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ComplexList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `AllWithMapKey` + +```csharp +private DynamicListTerraformIterator AllWithMapKey(string MapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### ComplexMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ComplexMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### ComplexObject + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ComplexObject(IInterpolatingParent TerraformResource, string TerraformAttribute, bool ComplexObjectIsFromSet, object ComplexObjectIndex = null); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| ComplexObjectIsFromSet | bool | set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. | +| ComplexObjectIndex | object | the index of the complex object in a list. | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `ComplexObjectIsFromSet`Required + +- _Type:_ bool + +set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. + +--- + +##### `ComplexObjectIndex`Optional + +- _Type:_ object + +the index of the complex object in a list. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `GetAnyMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanAttribute` + +```csharp +private IResolvable GetBooleanAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetListAttribute` + +```csharp +private string[] GetListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberAttribute` + +```csharp +private double GetNumberAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberListAttribute` + +```csharp +private double[] GetNumberListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringAttribute` + +```csharp +private string GetStringAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### DefaultTokenResolver + +- _Implements:_ ITokenResolver + +Default resolver implementation. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DefaultTokenResolver(IFragmentConcatenator Concat); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------- | +| Concat | IFragmentConcatenator | _No description._ | + +--- + +##### `Concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------- | +| ResolveList | Resolves a list of string. | +| ResolveMap | Resolves a map token. | +| ResolveNumberList | Resolves a list of numbers. | +| ResolveString | Resolve string fragments to Tokens. | +| ResolveToken | Default Token resolution. | + +--- + +##### `ResolveList` + +```csharp +private object ResolveList(string[] Xs, IResolveContext Context) +``` + +Resolves a list of string. + +###### `Xs`Required + +- _Type:_ string[] + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveMap` + +```csharp +private object ResolveMap(System.Collections.Generic.IDictionary< string, object > Xs, IResolveContext Context) +``` + +Resolves a map token. + +###### `Xs`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveNumberList` + +```csharp +private object ResolveNumberList(double[] Xs, IResolveContext Context) +``` + +Resolves a list of numbers. + +###### `Xs`Required + +- _Type:_ double[] + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveString` + +```csharp +private object ResolveString(TokenizedStringFragments Fragments, IResolveContext Context) +``` + +Resolve string fragments to Tokens. + +###### `Fragments`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveToken` + +```csharp +private object ResolveToken(IResolvable T, IResolveContext Context, IPostProcessor PostProcessor) +``` + +Default Token resolution. + +Resolve the Token, recurse into whatever it returns, +then finally post-process it. + +###### `T`Required + +- _Type:_ IResolvable + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +###### `PostProcessor`Required + +- _Type:_ IPostProcessor + +--- + +### DynamicListTerraformIterator + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DynamicListTerraformIterator(object List, string MapKeyAttributeName); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| List | object | _No description._ | +| MapKeyAttributeName | string | _No description._ | + +--- + +##### `List`Required + +- _Type:_ object + +--- + +##### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```csharp +private IResolvable Dynamic(System.Collections.Generic.IDictionary< string, object > Attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `Attributes`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ForExpressionForList` + +```csharp +private IResolvable ForExpressionForList(object Expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Expression`Required + +- _Type:_ object + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```csharp +private IResolvable ForExpressionForMap(object KeyExpression, object ValueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `KeyExpression`Required + +- _Type:_ object + +The expression to use as key in the for mapping. + +--- + +###### `ValueExpression`Required + +- _Type:_ object + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```csharp +private IResolvable GetAny(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```csharp +private double[] GetNumberList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetString` + +```csharp +private string GetString(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `Keys` + +```csharp +private IResolvable Keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```csharp +private IResolvable PluckProperty(string Property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```csharp +private IResolvable Values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```csharp +using HashiCorp.Cdktf; + +DynamicListTerraformIterator.FromComplexList(object List, string MapKeyAttributeName); +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```csharp +// Example automatically generated from non-compiling source. May contain errors. +var cert = new AcmCertificate(this, "cert", new Struct { + DomainName = "example.com", + ValidationMethod = "DNS" +}); + +var dvoIterator = TerraformIterator.FromComplexList(cert.DomainValidationOptions, "domain_name"); + +new Route53Record(this, "record", new Struct { + AllowOverwrite = true, + Name = dvoIterator.GetString("name"), + Records = new [] { dvoIterator.GetString("record") }, + Ttl = 60, + Type = dvoIterator.GetString("type"), + ZoneId = Token.AsString(dataAwsRoute53ZoneExample.ZoneId), + ForEach = dvoIterator +}); +``` + +###### `List`Required + +- _Type:_ object + +the list to iterate over. + +--- + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```csharp +using HashiCorp.Cdktf; + +DynamicListTerraformIterator.FromDataSources(ITerraformResource Resource); +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```csharp +using HashiCorp.Cdktf; + +DynamicListTerraformIterator.FromList(object List); +``` + +Creates a new iterator from a list. + +###### `List`Required + +- _Type:_ object + +--- + +##### `FromMap` + +```csharp +using HashiCorp.Cdktf; + +DynamicListTerraformIterator.FromMap(object Map); +``` + +Creates a new iterator from a map. + +###### `Map`Required + +- _Type:_ object + +--- + +##### `FromResources` + +```csharp +using HashiCorp.Cdktf; + +DynamicListTerraformIterator.FromResources(ITerraformResource Resource); +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------- | +| Key | string | Returns the key of the current entry in the map that is being iterated over. | +| Value | object | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```csharp +public string Key { get; } +``` + +- _Type:_ string + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `Value`Required + +```csharp +public object Value { get; } +``` + +- _Type:_ object + +Returns the value of the current item iterated over. + +--- + +### Fn + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Fn(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| Abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| Alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| Anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| Base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| Base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| Base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| Base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| Base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| Basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| Can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| Ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| Chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| Chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| Cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| Cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| Cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| Cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| Coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| Coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| Compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| Concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| Contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| Csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| Dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| Distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| Element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| Endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| File | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| Filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| Filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| Filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| Fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| Filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| Fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| Filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| Filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| Filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| Flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| Floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| Format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| Formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| Formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| Indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| Index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| Jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| Jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| Keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| LengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| Log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| Lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| Matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| Max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| Md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| Merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| Min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| Nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| One | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| Parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| Pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| Plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| Pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| Regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| Regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| Replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| Reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| Rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| Sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| Setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| Setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| Setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| Setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| Sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| Sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| Sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| Signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| Slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| Sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| Split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| Startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| Strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| Strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| Substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| Sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| Templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| Textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| Textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| Timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| Timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| Timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| Title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| Tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| Tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| Tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| Tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| Toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| Tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| Transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| Trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| Trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| Trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| Trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| Try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| Upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| Urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| Uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| Uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| Values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| Yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| Yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| Zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | +| Bcrypt | {@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. | +| Conditional | {@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. | +| Join | {@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. | +| Lookup | {@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. | +| LookupNested | returns a property access expression that accesses the property at the given path in the given inputMap. | +| Range | {@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. | +| RawString | Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). | + +--- + +##### `Abs` + +```csharp +using HashiCorp.Cdktf; + +Fn.Abs(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Abspath` + +```csharp +using HashiCorp.Cdktf; + +Fn.Abspath(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Alltrue` + +```csharp +using HashiCorp.Cdktf; + +Fn.Alltrue(object[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `List`Required + +- _Type:_ object[] + +--- + +##### `Anytrue` + +```csharp +using HashiCorp.Cdktf; + +Fn.Anytrue(object[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `List`Required + +- _Type:_ object[] + +--- + +##### `Base64decode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Base64decode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64encode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Base64encode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64gzip` + +```csharp +using HashiCorp.Cdktf; + +Fn.Base64gzip(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64sha256` + +```csharp +using HashiCorp.Cdktf; + +Fn.Base64sha256(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64sha512` + +```csharp +using HashiCorp.Cdktf; + +Fn.Base64sha512(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Basename` + +```csharp +using HashiCorp.Cdktf; + +Fn.Basename(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Can` + +```csharp +using HashiCorp.Cdktf; + +Fn.Can(object Expression); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `Expression`Required + +- _Type:_ object + +--- + +##### `Ceil` + +```csharp +using HashiCorp.Cdktf; + +Fn.Ceil(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Chomp` + +```csharp +using HashiCorp.Cdktf; + +Fn.Chomp(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Chunklist` + +```csharp +using HashiCorp.Cdktf; + +Fn.Chunklist(object[] List, double Size); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `List`Required + +- _Type:_ object[] + +--- + +###### `Size`Required + +- _Type:_ double + +--- + +##### `Cidrhost` + +```csharp +using HashiCorp.Cdktf; + +Fn.Cidrhost(string Prefix, double Hostnum); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `Prefix`Required + +- _Type:_ string + +--- + +###### `Hostnum`Required + +- _Type:_ double + +--- + +##### `Cidrnetmask` + +```csharp +using HashiCorp.Cdktf; + +Fn.Cidrnetmask(string Prefix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `Prefix`Required + +- _Type:_ string + +--- + +##### `Cidrsubnet` + +```csharp +using HashiCorp.Cdktf; + +Fn.Cidrsubnet(string Prefix, double Newbits, double Netnum); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `Prefix`Required + +- _Type:_ string + +--- + +###### `Newbits`Required + +- _Type:_ double + +--- + +###### `Netnum`Required + +- _Type:_ double + +--- + +##### `Cidrsubnets` + +```csharp +using HashiCorp.Cdktf; + +Fn.Cidrsubnets(string Prefix, double[] Newbits); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `Prefix`Required + +- _Type:_ string + +--- + +###### `Newbits`Required + +- _Type:_ double[] + +--- + +##### `Coalesce` + +```csharp +using HashiCorp.Cdktf; + +Fn.Coalesce(object[] Vals); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `Vals`Required + +- _Type:_ object[] + +--- + +##### `Coalescelist` + +```csharp +using HashiCorp.Cdktf; + +Fn.Coalescelist(object[] Vals); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `Vals`Required + +- _Type:_ object[] + +--- + +##### `Compact` + +```csharp +using HashiCorp.Cdktf; + +Fn.Compact(string[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `List`Required + +- _Type:_ string[] + +--- + +##### `Concat` + +```csharp +using HashiCorp.Cdktf; + +Fn.Concat(object[] Seqs); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `Seqs`Required + +- _Type:_ object[] + +--- + +##### `Contains` + +```csharp +using HashiCorp.Cdktf; + +Fn.Contains(object List, object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `List`Required + +- _Type:_ object + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Csvdecode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Csvdecode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Dirname` + +```csharp +using HashiCorp.Cdktf; + +Fn.Dirname(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Distinct` + +```csharp +using HashiCorp.Cdktf; + +Fn.Distinct(object[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `List`Required + +- _Type:_ object[] + +--- + +##### `Element` + +```csharp +using HashiCorp.Cdktf; + +Fn.Element(object List, double Index); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `List`Required + +- _Type:_ object + +--- + +###### `Index`Required + +- _Type:_ double + +--- + +##### `Endswith` + +```csharp +using HashiCorp.Cdktf; + +Fn.Endswith(string Str, string Suffix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Suffix`Required + +- _Type:_ string + +--- + +##### `File` + +```csharp +using HashiCorp.Cdktf; + +Fn.File(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filebase64` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filebase64(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filebase64sha256` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filebase64sha256(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filebase64sha512` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filebase64sha512(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Fileexists` + +```csharp +using HashiCorp.Cdktf; + +Fn.Fileexists(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filemd5` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filemd5(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Fileset` + +```csharp +using HashiCorp.Cdktf; + +Fn.Fileset(string Path, string Pattern); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Pattern`Required + +- _Type:_ string + +--- + +##### `Filesha1` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filesha1(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filesha256` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filesha256(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filesha512` + +```csharp +using HashiCorp.Cdktf; + +Fn.Filesha512(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Flatten` + +```csharp +using HashiCorp.Cdktf; + +Fn.Flatten(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Floor` + +```csharp +using HashiCorp.Cdktf; + +Fn.Floor(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Format` + +```csharp +using HashiCorp.Cdktf; + +Fn.Format(string Format, object[] Args); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `Format`Required + +- _Type:_ string + +--- + +###### `Args`Required + +- _Type:_ object[] + +--- + +##### `Formatdate` + +```csharp +using HashiCorp.Cdktf; + +Fn.Formatdate(string Format, string Time); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `Format`Required + +- _Type:_ string + +--- + +###### `Time`Required + +- _Type:_ string + +--- + +##### `Formatlist` + +```csharp +using HashiCorp.Cdktf; + +Fn.Formatlist(string Format, object[] Args); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `Format`Required + +- _Type:_ string + +--- + +###### `Args`Required + +- _Type:_ object[] + +--- + +##### `Indent` + +```csharp +using HashiCorp.Cdktf; + +Fn.Indent(double Spaces, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `Spaces`Required + +- _Type:_ double + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Index` + +```csharp +using HashiCorp.Cdktf; + +Fn.Index(object List, object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `List`Required + +- _Type:_ object + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Jsondecode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Jsondecode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Jsonencode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Jsonencode(object Val); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `Val`Required + +- _Type:_ object + +--- + +##### `Keys` + +```csharp +using HashiCorp.Cdktf; + +Fn.Keys(object InputMap); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `InputMap`Required + +- _Type:_ object + +--- + +##### `LengthOf` + +```csharp +using HashiCorp.Cdktf; + +Fn.LengthOf(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Log` + +```csharp +using HashiCorp.Cdktf; + +Fn.Log(double Num, double Base); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `Num`Required + +- _Type:_ double + +--- + +###### `Base`Required + +- _Type:_ double + +--- + +##### `Lower` + +```csharp +using HashiCorp.Cdktf; + +Fn.Lower(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Matchkeys` + +```csharp +using HashiCorp.Cdktf; + +Fn.Matchkeys(object[] Values, object[] Keys, object[] Searchset); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `Values`Required + +- _Type:_ object[] + +--- + +###### `Keys`Required + +- _Type:_ object[] + +--- + +###### `Searchset`Required + +- _Type:_ object[] + +--- + +##### `Max` + +```csharp +using HashiCorp.Cdktf; + +Fn.Max(double[] Numbers); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `Numbers`Required + +- _Type:_ double[] + +--- + +##### `Md5` + +```csharp +using HashiCorp.Cdktf; + +Fn.Md5(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Merge` + +```csharp +using HashiCorp.Cdktf; + +Fn.Merge(object[] Maps); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `Maps`Required + +- _Type:_ object[] + +--- + +##### `Min` + +```csharp +using HashiCorp.Cdktf; + +Fn.Min(double[] Numbers); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `Numbers`Required + +- _Type:_ double[] + +--- + +##### `Nonsensitive` + +```csharp +using HashiCorp.Cdktf; + +Fn.Nonsensitive(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `One` + +```csharp +using HashiCorp.Cdktf; + +Fn.One(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Parseint` + +```csharp +using HashiCorp.Cdktf; + +Fn.Parseint(object Number, double Base); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `Number`Required + +- _Type:_ object + +--- + +###### `Base`Required + +- _Type:_ double + +--- + +##### `Pathexpand` + +```csharp +using HashiCorp.Cdktf; + +Fn.Pathexpand(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Plantimestamp` + +```csharp +using HashiCorp.Cdktf; + +Fn.Plantimestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `Pow` + +```csharp +using HashiCorp.Cdktf; + +Fn.Pow(double Num, double Power); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `Num`Required + +- _Type:_ double + +--- + +###### `Power`Required + +- _Type:_ double + +--- + +##### `Regex` + +```csharp +using HashiCorp.Cdktf; + +Fn.Regex(string Pattern, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `Pattern`Required + +- _Type:_ string + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Regexall` + +```csharp +using HashiCorp.Cdktf; + +Fn.Regexall(string Pattern, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `Pattern`Required + +- _Type:_ string + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Replace` + +```csharp +using HashiCorp.Cdktf; + +Fn.Replace(string Str, string Substr, string Replace); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Substr`Required + +- _Type:_ string + +--- + +###### `Replace`Required + +- _Type:_ string + +--- + +##### `Reverse` + +```csharp +using HashiCorp.Cdktf; + +Fn.Reverse(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Rsadecrypt` + +```csharp +using HashiCorp.Cdktf; + +Fn.Rsadecrypt(string Ciphertext, string Privatekey); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `Ciphertext`Required + +- _Type:_ string + +--- + +###### `Privatekey`Required + +- _Type:_ string + +--- + +##### `Sensitive` + +```csharp +using HashiCorp.Cdktf; + +Fn.Sensitive(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Setintersection` + +```csharp +using HashiCorp.Cdktf; + +Fn.Setintersection(object[] FirstSet, object[][] OtherSets); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `FirstSet`Required + +- _Type:_ object[] + +--- + +###### `OtherSets`Required + +- _Type:_ object[][] + +--- + +##### `Setproduct` + +```csharp +using HashiCorp.Cdktf; + +Fn.Setproduct(object[] Sets); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `Sets`Required + +- _Type:_ object[] + +--- + +##### `Setsubtract` + +```csharp +using HashiCorp.Cdktf; + +Fn.Setsubtract(object[] A, object[] B); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `A`Required + +- _Type:_ object[] + +--- + +###### `B`Required + +- _Type:_ object[] + +--- + +##### `Setunion` + +```csharp +using HashiCorp.Cdktf; + +Fn.Setunion(object[] FirstSet, object[][] OtherSets); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `FirstSet`Required + +- _Type:_ object[] + +--- + +###### `OtherSets`Required + +- _Type:_ object[][] + +--- + +##### `Sha1` + +```csharp +using HashiCorp.Cdktf; + +Fn.Sha1(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Sha256` + +```csharp +using HashiCorp.Cdktf; + +Fn.Sha256(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Sha512` + +```csharp +using HashiCorp.Cdktf; + +Fn.Sha512(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Signum` + +```csharp +using HashiCorp.Cdktf; + +Fn.Signum(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Slice` + +```csharp +using HashiCorp.Cdktf; + +Fn.Slice(object List, double StartIndex, double EndIndex); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `List`Required + +- _Type:_ object + +--- + +###### `StartIndex`Required + +- _Type:_ double + +--- + +###### `EndIndex`Required + +- _Type:_ double + +--- + +##### `Sort` + +```csharp +using HashiCorp.Cdktf; + +Fn.Sort(string[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `List`Required + +- _Type:_ string[] + +--- + +##### `Split` + +```csharp +using HashiCorp.Cdktf; + +Fn.Split(string Separator, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `Separator`Required + +- _Type:_ string + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Startswith` + +```csharp +using HashiCorp.Cdktf; + +Fn.Startswith(string Str, string Prefix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Prefix`Required + +- _Type:_ string + +--- + +##### `Strcontains` + +```csharp +using HashiCorp.Cdktf; + +Fn.Strcontains(string Str, string Substr); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Substr`Required + +- _Type:_ string + +--- + +##### `Strrev` + +```csharp +using HashiCorp.Cdktf; + +Fn.Strrev(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Substr` + +```csharp +using HashiCorp.Cdktf; + +Fn.Substr(string Str, double Offset, double Length); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Offset`Required + +- _Type:_ double + +--- + +###### `Length`Required + +- _Type:_ double + +--- + +##### `Sum` + +```csharp +using HashiCorp.Cdktf; + +Fn.Sum(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Templatefile` + +```csharp +using HashiCorp.Cdktf; + +Fn.Templatefile(string Path, object Vars); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Vars`Required + +- _Type:_ object + +--- + +##### `Textdecodebase64` + +```csharp +using HashiCorp.Cdktf; + +Fn.Textdecodebase64(string Source, string Encoding); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `Source`Required + +- _Type:_ string + +--- + +###### `Encoding`Required + +- _Type:_ string + +--- + +##### `Textencodebase64` + +```csharp +using HashiCorp.Cdktf; + +Fn.Textencodebase64(string Str, string Encoding); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Encoding`Required + +- _Type:_ string + +--- + +##### `Timeadd` + +```csharp +using HashiCorp.Cdktf; + +Fn.Timeadd(string Timestamp, string Duration); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `Timestamp`Required + +- _Type:_ string + +--- + +###### `Duration`Required + +- _Type:_ string + +--- + +##### `Timecmp` + +```csharp +using HashiCorp.Cdktf; + +Fn.Timecmp(string TimestampA, string TimestampB); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `TimestampA`Required + +- _Type:_ string + +--- + +###### `TimestampB`Required + +- _Type:_ string + +--- + +##### `Timestamp` + +```csharp +using HashiCorp.Cdktf; + +Fn.Timestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `Title` + +```csharp +using HashiCorp.Cdktf; + +Fn.Title(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Tobool` + +```csharp +using HashiCorp.Cdktf; + +Fn.Tobool(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tolist` + +```csharp +using HashiCorp.Cdktf; + +Fn.Tolist(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tomap` + +```csharp +using HashiCorp.Cdktf; + +Fn.Tomap(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tonumber` + +```csharp +using HashiCorp.Cdktf; + +Fn.Tonumber(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Toset` + +```csharp +using HashiCorp.Cdktf; + +Fn.Toset(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tostring` + +```csharp +using HashiCorp.Cdktf; + +Fn.Tostring(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Transpose` + +```csharp +using HashiCorp.Cdktf; + +Fn.Transpose(object Values); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `Values`Required + +- _Type:_ object + +--- + +##### `Trim` + +```csharp +using HashiCorp.Cdktf; + +Fn.Trim(string Str, string Cutset); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Cutset`Required + +- _Type:_ string + +--- + +##### `Trimprefix` + +```csharp +using HashiCorp.Cdktf; + +Fn.Trimprefix(string Str, string Prefix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Prefix`Required + +- _Type:_ string + +--- + +##### `Trimspace` + +```csharp +using HashiCorp.Cdktf; + +Fn.Trimspace(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Trimsuffix` + +```csharp +using HashiCorp.Cdktf; + +Fn.Trimsuffix(string Str, string Suffix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Suffix`Required + +- _Type:_ string + +--- + +##### `Try` + +```csharp +using HashiCorp.Cdktf; + +Fn.Try(object[] Expressions); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `Expressions`Required + +- _Type:_ object[] + +--- + +##### `Upper` + +```csharp +using HashiCorp.Cdktf; + +Fn.Upper(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Urlencode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Urlencode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Uuid` + +```csharp +using HashiCorp.Cdktf; + +Fn.Uuid(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `Uuidv5` + +```csharp +using HashiCorp.Cdktf; + +Fn.Uuidv5(string Namespace, string Name); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `Namespace`Required + +- _Type:_ string + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +##### `Values` + +```csharp +using HashiCorp.Cdktf; + +Fn.Values(object Mapping); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `Mapping`Required + +- _Type:_ object + +--- + +##### `Yamldecode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Yamldecode(string Src); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `Src`Required + +- _Type:_ string + +--- + +##### `Yamlencode` + +```csharp +using HashiCorp.Cdktf; + +Fn.Yamlencode(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Zipmap` + +```csharp +using HashiCorp.Cdktf; + +Fn.Zipmap(string[] Keys, object Values); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `Keys`Required + +- _Type:_ string[] + +--- + +###### `Values`Required + +- _Type:_ object + +--- + +##### `Bcrypt` + +```csharp +using HashiCorp.Cdktf; + +Fn.Bcrypt(string Str, double Cost = null); +``` + +{@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Cost`Optional + +- _Type:_ double + +--- + +##### `Conditional` + +```csharp +using HashiCorp.Cdktf; + +Fn.Conditional(object Condition, object TrueValue, object FalseValue); +``` + +{@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. + +###### `Condition`Required + +- _Type:_ object + +--- + +###### `TrueValue`Required + +- _Type:_ object + +--- + +###### `FalseValue`Required + +- _Type:_ object + +--- + +##### `Join` + +```csharp +using HashiCorp.Cdktf; + +Fn.Join(string Separator, string[] List); +``` + +{@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. + +###### `Separator`Required + +- _Type:_ string + +--- + +###### `List`Required + +- _Type:_ string[] + +--- + +##### `Lookup` + +```csharp +using HashiCorp.Cdktf; + +Fn.Lookup(object InputMap, string Key, object DefaultValue = null); +``` + +{@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. + +###### `InputMap`Required + +- _Type:_ object + +--- + +###### `Key`Required + +- _Type:_ string + +--- + +###### `DefaultValue`Optional + +- _Type:_ object + +--- + +##### `LookupNested` + +```csharp +using HashiCorp.Cdktf; + +Fn.LookupNested(object InputMap, object[] Path); +``` + +returns a property access expression that accesses the property at the given path in the given inputMap. + +For example lookupNested(x, ["a", "b", "c"]) will return a Terraform expression like x["a"]["b"]["c"] + +###### `InputMap`Required + +- _Type:_ object + +--- + +###### `Path`Required + +- _Type:_ object[] + +--- + +##### `Range` + +```csharp +using HashiCorp.Cdktf; + +Fn.Range(double Start, double Limit, double Step = null); +``` + +{@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. + +###### `Start`Required + +- _Type:_ double + +--- + +###### `Limit`Required + +- _Type:_ double + +--- + +###### `Step`Optional + +- _Type:_ double + +--- + +##### `RawString` + +```csharp +using HashiCorp.Cdktf; + +Fn.RawString(string Str); +``` + +Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). + +###### `Str`Required + +- _Type:_ string + +--- + +### FnGenerated + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new FnGenerated(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| Abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| Alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| Anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| Base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| Base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| Base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| Base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| Base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| Basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| Can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| Ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| Chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| Chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| Cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| Cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| Cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| Cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| Coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| Coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| Compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| Concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| Contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| Csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| Dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| Distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| Element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| Endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| File | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| Filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| Filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| Filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| Fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| Filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| Fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| Filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| Filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| Filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| Flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| Floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| Format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| Formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| Formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| Indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| Index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| Jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| Jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| Keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| LengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| Log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| Lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| Matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| Max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| Md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| Merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| Min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| Nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| One | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| Parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| Pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| Plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| Pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| Regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| Regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| Replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| Reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| Rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| Sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| Setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| Setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| Setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| Setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| Sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| Sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| Sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| Signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| Slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| Sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| Split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| Startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| Strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| Strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| Substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| Sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| Templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| Textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| Textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| Timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| Timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| Timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| Title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| Tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| Tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| Tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| Tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| Toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| Tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| Transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| Trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| Trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| Trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| Trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| Try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| Upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| Urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| Uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| Uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| Values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| Yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| Yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| Zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | + +--- + +##### `Abs` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Abs(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Abspath` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Abspath(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Alltrue` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Alltrue(object[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `List`Required + +- _Type:_ object[] + +--- + +##### `Anytrue` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Anytrue(object[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `List`Required + +- _Type:_ object[] + +--- + +##### `Base64decode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Base64decode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64encode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Base64encode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64gzip` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Base64gzip(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64sha256` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Base64sha256(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Base64sha512` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Base64sha512(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Basename` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Basename(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Can` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Can(object Expression); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `Expression`Required + +- _Type:_ object + +--- + +##### `Ceil` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Ceil(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Chomp` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Chomp(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Chunklist` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Chunklist(object[] List, double Size); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `List`Required + +- _Type:_ object[] + +--- + +###### `Size`Required + +- _Type:_ double + +--- + +##### `Cidrhost` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Cidrhost(string Prefix, double Hostnum); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `Prefix`Required + +- _Type:_ string + +--- + +###### `Hostnum`Required + +- _Type:_ double + +--- + +##### `Cidrnetmask` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Cidrnetmask(string Prefix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `Prefix`Required + +- _Type:_ string + +--- + +##### `Cidrsubnet` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Cidrsubnet(string Prefix, double Newbits, double Netnum); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `Prefix`Required + +- _Type:_ string + +--- + +###### `Newbits`Required + +- _Type:_ double + +--- + +###### `Netnum`Required + +- _Type:_ double + +--- + +##### `Cidrsubnets` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Cidrsubnets(string Prefix, double[] Newbits); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `Prefix`Required + +- _Type:_ string + +--- + +###### `Newbits`Required + +- _Type:_ double[] + +--- + +##### `Coalesce` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Coalesce(object[] Vals); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `Vals`Required + +- _Type:_ object[] + +--- + +##### `Coalescelist` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Coalescelist(object[] Vals); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `Vals`Required + +- _Type:_ object[] + +--- + +##### `Compact` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Compact(string[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `List`Required + +- _Type:_ string[] + +--- + +##### `Concat` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Concat(object[] Seqs); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `Seqs`Required + +- _Type:_ object[] + +--- + +##### `Contains` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Contains(object List, object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `List`Required + +- _Type:_ object + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Csvdecode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Csvdecode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Dirname` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Dirname(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Distinct` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Distinct(object[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `List`Required + +- _Type:_ object[] + +--- + +##### `Element` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Element(object List, double Index); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `List`Required + +- _Type:_ object + +--- + +###### `Index`Required + +- _Type:_ double + +--- + +##### `Endswith` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Endswith(string Str, string Suffix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Suffix`Required + +- _Type:_ string + +--- + +##### `File` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.File(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filebase64` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filebase64(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filebase64sha256` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filebase64sha256(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filebase64sha512` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filebase64sha512(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Fileexists` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Fileexists(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filemd5` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filemd5(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Fileset` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Fileset(string Path, string Pattern); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Pattern`Required + +- _Type:_ string + +--- + +##### `Filesha1` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filesha1(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filesha256` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filesha256(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Filesha512` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Filesha512(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Flatten` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Flatten(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Floor` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Floor(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Format` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Format(string Format, object[] Args); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `Format`Required + +- _Type:_ string + +--- + +###### `Args`Required + +- _Type:_ object[] + +--- + +##### `Formatdate` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Formatdate(string Format, string Time); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `Format`Required + +- _Type:_ string + +--- + +###### `Time`Required + +- _Type:_ string + +--- + +##### `Formatlist` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Formatlist(string Format, object[] Args); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `Format`Required + +- _Type:_ string + +--- + +###### `Args`Required + +- _Type:_ object[] + +--- + +##### `Indent` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Indent(double Spaces, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `Spaces`Required + +- _Type:_ double + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Index` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Index(object List, object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `List`Required + +- _Type:_ object + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Jsondecode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Jsondecode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Jsonencode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Jsonencode(object Val); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `Val`Required + +- _Type:_ object + +--- + +##### `Keys` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Keys(object InputMap); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `InputMap`Required + +- _Type:_ object + +--- + +##### `LengthOf` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.LengthOf(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Log` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Log(double Num, double Base); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `Num`Required + +- _Type:_ double + +--- + +###### `Base`Required + +- _Type:_ double + +--- + +##### `Lower` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Lower(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Matchkeys` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Matchkeys(object[] Values, object[] Keys, object[] Searchset); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `Values`Required + +- _Type:_ object[] + +--- + +###### `Keys`Required + +- _Type:_ object[] + +--- + +###### `Searchset`Required + +- _Type:_ object[] + +--- + +##### `Max` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Max(double[] Numbers); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `Numbers`Required + +- _Type:_ double[] + +--- + +##### `Md5` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Md5(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Merge` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Merge(object[] Maps); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `Maps`Required + +- _Type:_ object[] + +--- + +##### `Min` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Min(double[] Numbers); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `Numbers`Required + +- _Type:_ double[] + +--- + +##### `Nonsensitive` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Nonsensitive(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `One` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.One(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Parseint` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Parseint(object Number, double Base); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `Number`Required + +- _Type:_ object + +--- + +###### `Base`Required + +- _Type:_ double + +--- + +##### `Pathexpand` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Pathexpand(string Path); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `Path`Required + +- _Type:_ string + +--- + +##### `Plantimestamp` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Plantimestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `Pow` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Pow(double Num, double Power); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `Num`Required + +- _Type:_ double + +--- + +###### `Power`Required + +- _Type:_ double + +--- + +##### `Regex` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Regex(string Pattern, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `Pattern`Required + +- _Type:_ string + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Regexall` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Regexall(string Pattern, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `Pattern`Required + +- _Type:_ string + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Replace` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Replace(string Str, string Substr, string Replace); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Substr`Required + +- _Type:_ string + +--- + +###### `Replace`Required + +- _Type:_ string + +--- + +##### `Reverse` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Reverse(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Rsadecrypt` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Rsadecrypt(string Ciphertext, string Privatekey); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `Ciphertext`Required + +- _Type:_ string + +--- + +###### `Privatekey`Required + +- _Type:_ string + +--- + +##### `Sensitive` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Sensitive(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Setintersection` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Setintersection(object[] FirstSet, object[][] OtherSets); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `FirstSet`Required + +- _Type:_ object[] + +--- + +###### `OtherSets`Required + +- _Type:_ object[][] + +--- + +##### `Setproduct` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Setproduct(object[] Sets); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `Sets`Required + +- _Type:_ object[] + +--- + +##### `Setsubtract` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Setsubtract(object[] A, object[] B); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `A`Required + +- _Type:_ object[] + +--- + +###### `B`Required + +- _Type:_ object[] + +--- + +##### `Setunion` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Setunion(object[] FirstSet, object[][] OtherSets); +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `FirstSet`Required + +- _Type:_ object[] + +--- + +###### `OtherSets`Required + +- _Type:_ object[][] + +--- + +##### `Sha1` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Sha1(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Sha256` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Sha256(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Sha512` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Sha512(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Signum` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Signum(double Num); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `Num`Required + +- _Type:_ double + +--- + +##### `Slice` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Slice(object List, double StartIndex, double EndIndex); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `List`Required + +- _Type:_ object + +--- + +###### `StartIndex`Required + +- _Type:_ double + +--- + +###### `EndIndex`Required + +- _Type:_ double + +--- + +##### `Sort` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Sort(string[] List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `List`Required + +- _Type:_ string[] + +--- + +##### `Split` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Split(string Separator, string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `Separator`Required + +- _Type:_ string + +--- + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Startswith` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Startswith(string Str, string Prefix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Prefix`Required + +- _Type:_ string + +--- + +##### `Strcontains` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Strcontains(string Str, string Substr); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Substr`Required + +- _Type:_ string + +--- + +##### `Strrev` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Strrev(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Substr` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Substr(string Str, double Offset, double Length); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Offset`Required + +- _Type:_ double + +--- + +###### `Length`Required + +- _Type:_ double + +--- + +##### `Sum` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Sum(object List); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `List`Required + +- _Type:_ object + +--- + +##### `Templatefile` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Templatefile(string Path, object Vars); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Vars`Required + +- _Type:_ object + +--- + +##### `Textdecodebase64` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Textdecodebase64(string Source, string Encoding); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `Source`Required + +- _Type:_ string + +--- + +###### `Encoding`Required + +- _Type:_ string + +--- + +##### `Textencodebase64` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Textencodebase64(string Str, string Encoding); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Encoding`Required + +- _Type:_ string + +--- + +##### `Timeadd` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Timeadd(string Timestamp, string Duration); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `Timestamp`Required + +- _Type:_ string + +--- + +###### `Duration`Required + +- _Type:_ string + +--- + +##### `Timecmp` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Timecmp(string TimestampA, string TimestampB); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `TimestampA`Required + +- _Type:_ string + +--- + +###### `TimestampB`Required + +- _Type:_ string + +--- + +##### `Timestamp` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Timestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `Title` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Title(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Tobool` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Tobool(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tolist` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Tolist(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tomap` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Tomap(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tonumber` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Tonumber(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Toset` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Toset(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Tostring` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Tostring(object V); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `V`Required + +- _Type:_ object + +--- + +##### `Transpose` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Transpose(object Values); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `Values`Required + +- _Type:_ object + +--- + +##### `Trim` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Trim(string Str, string Cutset); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Cutset`Required + +- _Type:_ string + +--- + +##### `Trimprefix` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Trimprefix(string Str, string Prefix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Prefix`Required + +- _Type:_ string + +--- + +##### `Trimspace` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Trimspace(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Trimsuffix` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Trimsuffix(string Str, string Suffix); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `Str`Required + +- _Type:_ string + +--- + +###### `Suffix`Required + +- _Type:_ string + +--- + +##### `Try` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Try(object[] Expressions); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `Expressions`Required + +- _Type:_ object[] + +--- + +##### `Upper` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Upper(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Urlencode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Urlencode(string Str); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `Str`Required + +- _Type:_ string + +--- + +##### `Uuid` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Uuid(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `Uuidv5` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Uuidv5(string Namespace, string Name); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `Namespace`Required + +- _Type:_ string + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +##### `Values` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Values(object Mapping); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `Mapping`Required + +- _Type:_ object + +--- + +##### `Yamldecode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Yamldecode(string Src); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `Src`Required + +- _Type:_ string + +--- + +##### `Yamlencode` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Yamlencode(object Value); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `Zipmap` + +```csharp +using HashiCorp.Cdktf; + +FnGenerated.Zipmap(string[] Keys, object Values); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `Keys`Required + +- _Type:_ string[] + +--- + +###### `Values`Required + +- _Type:_ object + +--- + +### Lazy + +Lazily produce a value. + +Can be used to return a string, list or numeric value whose actual value +will only be calculated later, during synthesis. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Lazy(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------- | +| AnyValue | Produces a lazy token from an untyped value. | +| ListValue | Returns a list-ified token for a lazy value. | +| NumberValue | Returns a numberified token for a lazy value. | +| StringValue | Returns a stringified token for a lazy value. | + +--- + +##### `AnyValue` + +```csharp +using HashiCorp.Cdktf; + +Lazy.AnyValue(IAnyProducer Producer, LazyAnyValueOptions Options = null); +``` + +Produces a lazy token from an untyped value. + +###### `Producer`Required + +- _Type:_ IAnyProducer + +The lazy producer. + +--- + +###### `Options`Optional + +- _Type:_ LazyAnyValueOptions + +Options. + +--- + +##### `ListValue` + +```csharp +using HashiCorp.Cdktf; + +Lazy.ListValue(IListProducer Producer, LazyListValueOptions Options = null); +``` + +Returns a list-ified token for a lazy value. + +###### `Producer`Required + +- _Type:_ IListProducer + +The producer. + +--- + +###### `Options`Optional + +- _Type:_ LazyListValueOptions + +Options. + +--- + +##### `NumberValue` + +```csharp +using HashiCorp.Cdktf; + +Lazy.NumberValue(INumberProducer Producer); +``` + +Returns a numberified token for a lazy value. + +###### `Producer`Required + +- _Type:_ INumberProducer + +The producer. + +--- + +##### `StringValue` + +```csharp +using HashiCorp.Cdktf; + +Lazy.StringValue(IStringProducer Producer, LazyStringValueOptions Options = null); +``` + +Returns a stringified token for a lazy value. + +###### `Producer`Required + +- _Type:_ IStringProducer + +The producer. + +--- + +###### `Options`Optional + +- _Type:_ LazyStringValueOptions + +Options. + +--- + +### LazyBase + +- _Implements:_ IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new LazyBase(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| AddPostProcessor | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToJSON | Turn this Token into JSON. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `AddPostProcessor` + +```csharp +private void AddPostProcessor(IPostProcessor PostProcessor) +``` + +###### `PostProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToJSON` + +```csharp +private object ToJSON() +``` + +Turn this Token into JSON. + +Called automatically when JSON.stringify() is called on a Token. + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### ListTerraformIterator + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ListTerraformIterator(object List); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| List | object | _No description._ | + +--- + +##### `List`Required + +- _Type:_ object + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```csharp +private IResolvable Dynamic(System.Collections.Generic.IDictionary< string, object > Attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `Attributes`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ForExpressionForList` + +```csharp +private IResolvable ForExpressionForList(object Expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Expression`Required + +- _Type:_ object + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```csharp +private IResolvable ForExpressionForMap(object KeyExpression, object ValueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `KeyExpression`Required + +- _Type:_ object + +The expression to use as key in the for mapping. + +--- + +###### `ValueExpression`Required + +- _Type:_ object + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```csharp +private IResolvable GetAny(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```csharp +private double[] GetNumberList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetString` + +```csharp +private string GetString(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `Keys` + +```csharp +private IResolvable Keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```csharp +private IResolvable PluckProperty(string Property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```csharp +private IResolvable Values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```csharp +using HashiCorp.Cdktf; + +ListTerraformIterator.FromComplexList(object List, string MapKeyAttributeName); +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```csharp +// Example automatically generated from non-compiling source. May contain errors. +var cert = new AcmCertificate(this, "cert", new Struct { + DomainName = "example.com", + ValidationMethod = "DNS" +}); + +var dvoIterator = TerraformIterator.FromComplexList(cert.DomainValidationOptions, "domain_name"); + +new Route53Record(this, "record", new Struct { + AllowOverwrite = true, + Name = dvoIterator.GetString("name"), + Records = new [] { dvoIterator.GetString("record") }, + Ttl = 60, + Type = dvoIterator.GetString("type"), + ZoneId = Token.AsString(dataAwsRoute53ZoneExample.ZoneId), + ForEach = dvoIterator +}); +``` + +###### `List`Required + +- _Type:_ object + +the list to iterate over. + +--- + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```csharp +using HashiCorp.Cdktf; + +ListTerraformIterator.FromDataSources(ITerraformResource Resource); +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```csharp +using HashiCorp.Cdktf; + +ListTerraformIterator.FromList(object List); +``` + +Creates a new iterator from a list. + +###### `List`Required + +- _Type:_ object + +--- + +##### `FromMap` + +```csharp +using HashiCorp.Cdktf; + +ListTerraformIterator.FromMap(object Map); +``` + +Creates a new iterator from a map. + +###### `Map`Required + +- _Type:_ object + +--- + +##### `FromResources` + +```csharp +using HashiCorp.Cdktf; + +ListTerraformIterator.FromResources(ITerraformResource Resource); +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------- | +| Key | object | Returns the currently entry in the list or set that is being iterated over. | +| Value | object | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```csharp +public object Key { get; } +``` + +- _Type:_ object + +Returns the currently entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `Value`Required + +```csharp +public object Value { get; } +``` + +- _Type:_ object + +Returns the value of the current item iterated over. + +--- + +### Manifest + +- _Implements:_ IManifest + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Manifest(string Version, string Outdir, bool HclOutput); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------- | ----------------- | +| Version | string | _No description._ | +| Outdir | string | _No description._ | +| HclOutput | bool | _No description._ | + +--- + +##### `Version`Required + +- _Type:_ string + +--- + +##### `Outdir`Required + +- _Type:_ string + +--- + +##### `HclOutput`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | ----------------- | +| BuildManifest | _No description._ | +| ForStack | _No description._ | +| WriteToFile | _No description._ | + +--- + +##### `BuildManifest` + +```csharp +private IManifest BuildManifest() +``` + +##### `ForStack` + +```csharp +private StackManifest ForStack(TerraformStack Stack) +``` + +###### `Stack`Required + +- _Type:_ TerraformStack + +--- + +##### `WriteToFile` + +```csharp +private void WriteToFile() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------- | +| HclOutput | bool | _No description._ | +| Outdir | string | _No description._ | +| StackFileName | string | _No description._ | +| Stacks | System.Collections.Generic.IDictionary< string, StackManifest> | _No description._ | +| Version | string | _No description._ | + +--- + +##### `HclOutput`Required + +```csharp +public bool HclOutput { get; } +``` + +- _Type:_ bool + +--- + +##### `Outdir`Required + +```csharp +public string Outdir { get; } +``` + +- _Type:_ string + +--- + +##### `StackFileName`Required + +```csharp +public string StackFileName { get; } +``` + +- _Type:_ string + +--- + +##### `Stacks`Required + +```csharp +public System.Collections.Generic.IDictionary< string, StackManifest > Stacks { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, StackManifest> + +--- + +##### `Version`Required + +```csharp +public string Version { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| FileName | string | _No description._ | +| StackMetadataPath | string | _No description._ | +| StacksFolder | string | _No description._ | + +--- + +##### `FileName`Required + +```csharp +public string FileName { get; } +``` + +- _Type:_ string + +--- + +##### `StackMetadataPath`Required + +```csharp +public string StackMetadataPath { get; } +``` + +- _Type:_ string + +--- + +##### `StacksFolder`Required + +```csharp +public string StacksFolder { get; } +``` + +- _Type:_ string + +--- + +### MapList + +- _Implements:_ ITerraformAddressable, IInterpolatingParent, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new MapList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### MapTerraformIterator + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new MapTerraformIterator(object Map); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------- | ----------------- | +| Map | object | _No description._ | + +--- + +##### `Map`Required + +- _Type:_ object + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```csharp +private IResolvable Dynamic(System.Collections.Generic.IDictionary< string, object > Attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `Attributes`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ForExpressionForList` + +```csharp +private IResolvable ForExpressionForList(object Expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Expression`Required + +- _Type:_ object + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```csharp +private IResolvable ForExpressionForMap(object KeyExpression, object ValueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `KeyExpression`Required + +- _Type:_ object + +The expression to use as key in the for mapping. + +--- + +###### `ValueExpression`Required + +- _Type:_ object + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```csharp +private IResolvable GetAny(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```csharp +private double[] GetNumberList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetString` + +```csharp +private string GetString(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `Keys` + +```csharp +private IResolvable Keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```csharp +private IResolvable PluckProperty(string Property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```csharp +private IResolvable Values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```csharp +using HashiCorp.Cdktf; + +MapTerraformIterator.FromComplexList(object List, string MapKeyAttributeName); +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```csharp +// Example automatically generated from non-compiling source. May contain errors. +var cert = new AcmCertificate(this, "cert", new Struct { + DomainName = "example.com", + ValidationMethod = "DNS" +}); + +var dvoIterator = TerraformIterator.FromComplexList(cert.DomainValidationOptions, "domain_name"); + +new Route53Record(this, "record", new Struct { + AllowOverwrite = true, + Name = dvoIterator.GetString("name"), + Records = new [] { dvoIterator.GetString("record") }, + Ttl = 60, + Type = dvoIterator.GetString("type"), + ZoneId = Token.AsString(dataAwsRoute53ZoneExample.ZoneId), + ForEach = dvoIterator +}); +``` + +###### `List`Required + +- _Type:_ object + +the list to iterate over. + +--- + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```csharp +using HashiCorp.Cdktf; + +MapTerraformIterator.FromDataSources(ITerraformResource Resource); +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```csharp +using HashiCorp.Cdktf; + +MapTerraformIterator.FromList(object List); +``` + +Creates a new iterator from a list. + +###### `List`Required + +- _Type:_ object + +--- + +##### `FromMap` + +```csharp +using HashiCorp.Cdktf; + +MapTerraformIterator.FromMap(object Map); +``` + +Creates a new iterator from a map. + +###### `Map`Required + +- _Type:_ object + +--- + +##### `FromResources` + +```csharp +using HashiCorp.Cdktf; + +MapTerraformIterator.FromResources(ITerraformResource Resource); +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------- | +| Key | string | Returns the key of the current entry in the map that is being iterated over. | +| Value | object | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```csharp +public string Key { get; } +``` + +- _Type:_ string + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `Value`Required + +```csharp +public object Value { get; } +``` + +- _Type:_ object + +Returns the value of the current item iterated over. + +--- + +### MigrateIds + +- _Implements:_ IAspect + +For migrating past 0.17 where the feature flag for the old id generation logic was removed after being deprecated since 0.15. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new MigrateIds(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------------ | +| Visit | All aspects can visit an IConstruct. | + +--- + +##### `Visit` + +```csharp +private void Visit(IConstruct Node) +``` + +All aspects can visit an IConstruct. + +###### `Node`Required + +- _Type:_ Constructs.IConstruct + +--- + +### NamedCloudWorkspace + +The name of a single Terraform Cloud workspace. + +You will only be able to use the workspace specified in the configuration with this working directory, and cannot manage workspaces from the CLI (e.g. terraform workspace select or terraform workspace new). + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new NamedCloudWorkspace(string Name, string Project = null); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| Name | string | _No description._ | +| Project | string | _No description._ | + +--- + +##### `Name`Required + +- _Type:_ string + +--- + +##### `Project`Optional + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------- | +| ToTerraform | _No description._ | +| ToHclTerraform | _No description._ | + +--- + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------- | ----------------- | +| Name | string | _No description._ | +| Project | string | _No description._ | + +--- + +##### `Name`Required + +```csharp +public string Name { get; } +``` + +- _Type:_ string + +--- + +##### `Project`Optional + +```csharp +public string Project { get; } +``` + +- _Type:_ string + +--- + +### NamedRemoteWorkspace + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new NamedRemoteWorkspace(string Name); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| Name | string | _No description._ | + +--- + +##### `Name`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ------------------- | ----------------- | +| Name | string | _No description._ | + +--- + +##### `Name`Required + +```csharp +public string Name { get; } +``` + +- _Type:_ string + +--- + +### NumberListList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new NumberListList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```csharp +private DynamicListTerraformIterator AllWithMapKey(string MapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private double[] Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### NumberListMap + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new NumberListMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private double[] Get(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### NumberMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new NumberMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Lookup` + +```csharp +private double Lookup(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### NumberMapList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new NumberMapList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private NumberMap Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### Op + +This class contains static functions for all arithmetical and logical operators in the Terraform configuration language. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Op(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------- | ------------------------ | +| Add | Renders left + right. | +| And | Renders left && right. | +| Div | Renders left / right. | +| Eq | Renders left == right. | +| Gt | Renders left > right. | +| Gte | Renders left >= right. | +| Lt | Renders left < right. | +| Lte | Renders left < = right. | +| Mod | Renders left % right. | +| Mul | Renders left \* right. | +| Negate | Renders -expression. | +| Neq | Renders left != right. | +| Not | Renders !expression. | +| Or | Renders left \|\| right. | +| Sub | Renders left - right. | + +--- + +##### `Add` + +```csharp +using HashiCorp.Cdktf; + +Op.Add(object Left, object Right); +``` + +Renders left + right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `And` + +```csharp +using HashiCorp.Cdktf; + +Op.And(object Left, object Right); +``` + +Renders left && right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Div` + +```csharp +using HashiCorp.Cdktf; + +Op.Div(object Left, object Right); +``` + +Renders left / right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Eq` + +```csharp +using HashiCorp.Cdktf; + +Op.Eq(object Left, object Right); +``` + +Renders left == right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Gt` + +```csharp +using HashiCorp.Cdktf; + +Op.Gt(object Left, object Right); +``` + +Renders left > right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Gte` + +```csharp +using HashiCorp.Cdktf; + +Op.Gte(object Left, object Right); +``` + +Renders left >= right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Lt` + +```csharp +using HashiCorp.Cdktf; + +Op.Lt(object Left, object Right); +``` + +Renders left < right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Lte` + +```csharp +using HashiCorp.Cdktf; + +Op.Lte(object Left, object Right); +``` + +Renders left < = right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Mod` + +```csharp +using HashiCorp.Cdktf; + +Op.Mod(object Left, object Right); +``` + +Renders left % right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Mul` + +```csharp +using HashiCorp.Cdktf; + +Op.Mul(object Left, object Right); +``` + +Renders left \* right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Negate` + +```csharp +using HashiCorp.Cdktf; + +Op.Negate(object Expression); +``` + +Renders -expression. + +###### `Expression`Required + +- _Type:_ object + +--- + +##### `Neq` + +```csharp +using HashiCorp.Cdktf; + +Op.Neq(object Left, object Right); +``` + +Renders left != right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Not` + +```csharp +using HashiCorp.Cdktf; + +Op.Not(object Expression); +``` + +Renders !expression. + +###### `Expression`Required + +- _Type:_ object + +--- + +##### `Or` + +```csharp +using HashiCorp.Cdktf; + +Op.Or(object Left, object Right); +``` + +Renders left || right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +##### `Sub` + +```csharp +using HashiCorp.Cdktf; + +Op.Sub(object Left, object Right); +``` + +Renders left - right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +### PrefixedRemoteWorkspaces + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new PrefixedRemoteWorkspaces(string Prefix); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| Prefix | string | _No description._ | + +--- + +##### `Prefix`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------- | ----------------- | +| Prefix | string | _No description._ | + +--- + +##### `Prefix`Required + +```csharp +public string Prefix { get; } +``` + +- _Type:_ string + +--- + +### ResourceTerraformIterator + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ResourceTerraformIterator(ITerraformResource Element); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| Element | ITerraformResource | _No description._ | + +--- + +##### `Element`Required + +- _Type:_ ITerraformResource + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```csharp +private IResolvable Dynamic(System.Collections.Generic.IDictionary< string, object > Attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `Attributes`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ForExpressionForList` + +```csharp +private IResolvable ForExpressionForList(object Expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Expression`Required + +- _Type:_ object + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```csharp +private IResolvable ForExpressionForMap(object KeyExpression, object ValueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `KeyExpression`Required + +- _Type:_ object + +The expression to use as key in the for mapping. + +--- + +###### `ValueExpression`Required + +- _Type:_ object + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```csharp +private IResolvable GetAny(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```csharp +private double[] GetNumberList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetString` + +```csharp +private string GetString(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `Keys` + +```csharp +private IResolvable Keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```csharp +private IResolvable PluckProperty(string Property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```csharp +private IResolvable Values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```csharp +using HashiCorp.Cdktf; + +ResourceTerraformIterator.FromComplexList(object List, string MapKeyAttributeName); +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```csharp +// Example automatically generated from non-compiling source. May contain errors. +var cert = new AcmCertificate(this, "cert", new Struct { + DomainName = "example.com", + ValidationMethod = "DNS" +}); + +var dvoIterator = TerraformIterator.FromComplexList(cert.DomainValidationOptions, "domain_name"); + +new Route53Record(this, "record", new Struct { + AllowOverwrite = true, + Name = dvoIterator.GetString("name"), + Records = new [] { dvoIterator.GetString("record") }, + Ttl = 60, + Type = dvoIterator.GetString("type"), + ZoneId = Token.AsString(dataAwsRoute53ZoneExample.ZoneId), + ForEach = dvoIterator +}); +``` + +###### `List`Required + +- _Type:_ object + +the list to iterate over. + +--- + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```csharp +using HashiCorp.Cdktf; + +ResourceTerraformIterator.FromDataSources(ITerraformResource Resource); +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```csharp +using HashiCorp.Cdktf; + +ResourceTerraformIterator.FromList(object List); +``` + +Creates a new iterator from a list. + +###### `List`Required + +- _Type:_ object + +--- + +##### `FromMap` + +```csharp +using HashiCorp.Cdktf; + +ResourceTerraformIterator.FromMap(object Map); +``` + +Creates a new iterator from a map. + +###### `Map`Required + +- _Type:_ object + +--- + +##### `FromResources` + +```csharp +using HashiCorp.Cdktf; + +ResourceTerraformIterator.FromResources(ITerraformResource Resource); +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------- | +| Key | object | Returns the current entry in the list or set that is being iterated over. | +| Value | object | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```csharp +public object Key { get; } +``` + +- _Type:_ object + +Returns the current entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `Value`Required + +```csharp +public object Value { get; } +``` + +- _Type:_ object + +Returns the value of the current item iterated over. + +--- + +### StringConcat + +- _Implements:_ IFragmentConcatenator + +Converts all fragments to strings and concats those. + +Drops 'undefined's. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new StringConcat(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------ | +| Join | Concatenates string fragments. | + +--- + +##### `Join` + +```csharp +private object Join(object Left, object Right) +``` + +Concatenates string fragments. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +### StringListList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new StringListList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```csharp +private DynamicListTerraformIterator AllWithMapKey(string MapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private string[] Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### StringListMap + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new StringListMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private string[] Get(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### StringMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new StringMap(IInterpolatingParent TerraformResource, string TerraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `Lookup` + +```csharp +private string Lookup(string Key) +``` + +###### `Key`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### StringMapList + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new StringMapList(IInterpolatingParent TerraformResource, string TerraformAttribute, bool WrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| TerraformResource | IInterpolatingParent | _No description._ | +| TerraformAttribute | string | _No description._ | +| WrapsSet | bool | _No description._ | + +--- + +##### `TerraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `WrapsSet`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```csharp +private string ComputeFqn() +``` + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string Property) +``` + +###### `Property`Required + +- _Type:_ string + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```csharp +private StringMap Get(double Index) +``` + +###### `Index`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | string | _No description._ | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### TaggedCloudWorkspaces + +A set of Terraform Cloud workspace tags. + +You will be able to use this working directory with any workspaces that have all of the specified tags, and can use the terraform workspace commands to switch between them or create new workspaces. New workspaces will automatically have the specified tags. This option conflicts with name. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TaggedCloudWorkspaces(string[] Tags, string Project = null); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| Tags | string[] | _No description._ | +| Project | string | _No description._ | + +--- + +##### `Tags`Required + +- _Type:_ string[] + +--- + +##### `Project`Optional + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------- | +| ToTerraform | _No description._ | +| ToHclTerraform | _No description._ | + +--- + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | --------------------- | ----------------- | +| Tags | string[] | _No description._ | +| Project | string | _No description._ | + +--- + +##### `Tags`Required + +```csharp +public string[] Tags { get; } +``` + +- _Type:_ string[] + +--- + +##### `Project`Optional + +```csharp +public string Project { get; } +``` + +- _Type:_ string + +--- + +### TerraformCount + +Iterator for the Terraform count property. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| ToString | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +##### `ToTerraform` + +```csharp +private double ToTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------- | +| IsTerraformCount | _No description._ | +| Of | _No description._ | + +--- + +##### `IsTerraformCount` + +```csharp +using HashiCorp.Cdktf; + +TerraformCount.IsTerraformCount(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `Of` + +```csharp +using HashiCorp.Cdktf; + +TerraformCount.Of(double Count); +``` + +###### `Count`Required + +- _Type:_ double + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------- | ------------------- | ----------------- | +| Index | double | _No description._ | + +--- + +##### `Index`Required + +```csharp +public double Index { get; } +``` + +- _Type:_ double + +--- + +### TerraformIterator + +- _Implements:_ ITerraformIterator + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformIterator(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```csharp +private IResolvable Dynamic(System.Collections.Generic.IDictionary< string, object > Attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `Attributes`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ForExpressionForList` + +```csharp +private IResolvable ForExpressionForList(object Expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Expression`Required + +- _Type:_ object + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```csharp +private IResolvable ForExpressionForMap(object KeyExpression, object ValueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `KeyExpression`Required + +- _Type:_ object + +The expression to use as key in the for mapping. + +--- + +###### `ValueExpression`Required + +- _Type:_ object + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```csharp +private IResolvable GetAny(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```csharp +private double[] GetNumberList(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetString` + +```csharp +private string GetString(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMap(string Attribute) +``` + +###### `Attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `Keys` + +```csharp +private IResolvable Keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```csharp +private IResolvable PluckProperty(string Property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `Property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```csharp +private IResolvable Values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```csharp +using HashiCorp.Cdktf; + +TerraformIterator.FromComplexList(object List, string MapKeyAttributeName); +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```csharp +// Example automatically generated from non-compiling source. May contain errors. +var cert = new AcmCertificate(this, "cert", new Struct { + DomainName = "example.com", + ValidationMethod = "DNS" +}); + +var dvoIterator = TerraformIterator.FromComplexList(cert.DomainValidationOptions, "domain_name"); + +new Route53Record(this, "record", new Struct { + AllowOverwrite = true, + Name = dvoIterator.GetString("name"), + Records = new [] { dvoIterator.GetString("record") }, + Ttl = 60, + Type = dvoIterator.GetString("type"), + ZoneId = Token.AsString(dataAwsRoute53ZoneExample.ZoneId), + ForEach = dvoIterator +}); +``` + +###### `List`Required + +- _Type:_ object + +the list to iterate over. + +--- + +###### `MapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```csharp +using HashiCorp.Cdktf; + +TerraformIterator.FromDataSources(ITerraformResource Resource); +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```csharp +using HashiCorp.Cdktf; + +TerraformIterator.FromList(object List); +``` + +Creates a new iterator from a list. + +###### `List`Required + +- _Type:_ object + +--- + +##### `FromMap` + +```csharp +using HashiCorp.Cdktf; + +TerraformIterator.FromMap(object Map); +``` + +Creates a new iterator from a map. + +###### `Map`Required + +- _Type:_ object + +--- + +##### `FromResources` + +```csharp +using HashiCorp.Cdktf; + +TerraformIterator.FromResources(ITerraformResource Resource); +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `Resource`Required + +- _Type:_ ITerraformResource + +--- + +### TerraformResourceTargets + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformResourceTargets(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------- | +| AddResourceTarget | _No description._ | +| GetResourceByTarget | _No description._ | + +--- + +##### `AddResourceTarget` + +```csharp +private void AddResourceTarget(TerraformResource Resource, string Target) +``` + +###### `Resource`Required + +- _Type:_ TerraformResource + +--- + +###### `Target`Required + +- _Type:_ string + +--- + +##### `GetResourceByTarget` + +```csharp +private TerraformResource GetResourceByTarget(string Target) +``` + +###### `Target`Required + +- _Type:_ string + +--- + +### TerraformSelf + +Expressions in connection blocks cannot refer to their parent resource by name. + +References create dependencies, and referring to a resource by name within its own block would create a dependency cycle. +Instead, expressions can use the self object, which represents the connection's parent resource and has all of that resource's attributes. +For example, use self.public_ip to reference an aws_instance's public_ip attribute. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformSelf(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| GetAny | Only usable within a connection block to reference the connections parent resource. | +| GetNumber | Only usable within a connection block to reference the connections parent resource. | +| GetString | Only usable within a connection block to reference the connections parent resource. | + +--- + +##### `GetAny` + +```csharp +using HashiCorp.Cdktf; + +TerraformSelf.GetAny(string Key); +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getAny("hostPort")` + +###### `Key`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +using HashiCorp.Cdktf; + +TerraformSelf.GetNumber(string Key); +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getNumber("hostPort")` + +###### `Key`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +using HashiCorp.Cdktf; + +TerraformSelf.GetString(string Key); +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getString("publicIp")` + +###### `Key`Required + +- _Type:_ string + +--- + +### Testing + +Testing utilities for cdktf applications. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Testing(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| App | Returns an app for testing with the following properties: - Output directory is a temp dir. | +| EnableFutureFlags | _No description._ | +| FakeCdktfJsonPath | _No description._ | +| FullSynth | _No description._ | +| RenderConstructTree | _No description._ | +| SetupJest | _No description._ | +| StubVersion | _No description._ | +| Synth | Returns the Terraform synthesized JSON. | +| SynthHcl | Returns the Terraform synthesized JSON. | +| SynthScope | _No description._ | +| ToBeValidTerraform | _No description._ | +| ToHaveDataSource | _No description._ | +| ToHaveDataSourceWithProperties | _No description._ | +| ToHaveProvider | _No description._ | +| ToHaveProviderWithProperties | _No description._ | +| ToHaveResource | _No description._ | +| ToHaveResourceWithProperties | _No description._ | + +--- + +##### `App` + +```csharp +using HashiCorp.Cdktf; + +Testing.App(TestingAppConfig Options = null); +``` + +Returns an app for testing with the following properties: - Output directory is a temp dir. + +###### `Options`Optional + +- _Type:_ TestingAppConfig + +--- + +##### `EnableFutureFlags` + +```csharp +using HashiCorp.Cdktf; + +Testing.EnableFutureFlags(App App); +``` + +###### `App`Required + +- _Type:_ App + +--- + +##### `FakeCdktfJsonPath` + +```csharp +using HashiCorp.Cdktf; + +Testing.FakeCdktfJsonPath(App App); +``` + +###### `App`Required + +- _Type:_ App + +--- + +##### `FullSynth` + +```csharp +using HashiCorp.Cdktf; + +Testing.FullSynth(TerraformStack Stack); +``` + +###### `Stack`Required + +- _Type:_ TerraformStack + +--- + +##### `RenderConstructTree` + +```csharp +using HashiCorp.Cdktf; + +Testing.RenderConstructTree(IConstruct Construct); +``` + +###### `Construct`Required + +- _Type:_ Constructs.IConstruct + +--- + +##### `SetupJest` + +```csharp +using HashiCorp.Cdktf; + +Testing.SetupJest(); +``` + +##### `StubVersion` + +```csharp +using HashiCorp.Cdktf; + +Testing.StubVersion(App App); +``` + +###### `App`Required + +- _Type:_ App + +--- + +##### `Synth` + +```csharp +using HashiCorp.Cdktf; + +Testing.Synth(TerraformStack Stack, bool RunValidations = null); +``` + +Returns the Terraform synthesized JSON. + +###### `Stack`Required + +- _Type:_ TerraformStack + +--- + +###### `RunValidations`Optional + +- _Type:_ bool + +--- + +##### `SynthHcl` + +```csharp +using HashiCorp.Cdktf; + +Testing.SynthHcl(TerraformStack Stack, bool RunValidations = null, bool ReturnMetadata = null); +``` + +Returns the Terraform synthesized JSON. + +###### `Stack`Required + +- _Type:_ TerraformStack + +--- + +###### `RunValidations`Optional + +- _Type:_ bool + +--- + +###### `ReturnMetadata`Optional + +- _Type:_ bool + +--- + +##### `SynthScope` + +```csharp +using HashiCorp.Cdktf; + +Testing.SynthScope(IScopeCallback Fn); +``` + +###### `Fn`Required + +- _Type:_ IScopeCallback + +--- + +##### `ToBeValidTerraform` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToBeValidTerraform(string Received); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +##### `ToHaveDataSource` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToHaveDataSource(string Received, string ResourceType); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +###### `ResourceType`Required + +- _Type:_ string + +--- + +##### `ToHaveDataSourceWithProperties` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToHaveDataSourceWithProperties(string Received, string ResourceType, System.Collections.Generic.IDictionary< string, object > Properties = null); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +###### `ResourceType`Required + +- _Type:_ string + +--- + +###### `Properties`Optional + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ToHaveProvider` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToHaveProvider(string Received, string ResourceType); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +###### `ResourceType`Required + +- _Type:_ string + +--- + +##### `ToHaveProviderWithProperties` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToHaveProviderWithProperties(string Received, string ResourceType, System.Collections.Generic.IDictionary< string, object > Properties = null); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +###### `ResourceType`Required + +- _Type:_ string + +--- + +###### `Properties`Optional + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ToHaveResource` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToHaveResource(string Received, string ResourceType); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +###### `ResourceType`Required + +- _Type:_ string + +--- + +##### `ToHaveResourceWithProperties` + +```csharp +using HashiCorp.Cdktf; + +Testing.ToHaveResourceWithProperties(string Received, string ResourceType, System.Collections.Generic.IDictionary< string, object > Properties = null); +``` + +###### `Received`Required + +- _Type:_ string + +--- + +###### `ResourceType`Required + +- _Type:_ string + +--- + +###### `Properties`Optional + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +### Token + +Represents a special or lazily-evaluated value. + +Can be used to delay evaluation of a certain value in case, for example, +that it requires some context or late-bound data. Can also be used to +mark values that need special processing at document rendering time. + +Tokens can be embedded into strings while retaining their original +semantics. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Token(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------- | -------------------------------------------------------- | +| AsAny | Return a resolvable representation of the given value. | +| AsAnyMap | Return a reversible map representation of this token. | +| AsBooleanMap | Return a reversible map representation of this token. | +| AsList | Return a reversible list representation of this token. | +| AsMap | Return a reversible map representation of this token. | +| AsNumber | Return a reversible number representation of this token. | +| AsNumberList | Return a reversible list representation of this token. | +| AsNumberMap | Return a reversible map representation of this token. | +| AsString | Return a reversible string representation of this token. | +| AsStringMap | Return a reversible map representation of this token. | +| IsUnresolved | Returns true if obj represents an unresolved value. | +| NullValue | Return a Token containing a `null` value. | + +--- + +##### `AsAny` + +```csharp +using HashiCorp.Cdktf; + +Token.AsAny(object Value); +``` + +Return a resolvable representation of the given value. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `AsAnyMap` + +```csharp +using HashiCorp.Cdktf; + +Token.AsAnyMap(object Value, EncodingOptions Options = null); +``` + +Return a reversible map representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsBooleanMap` + +```csharp +using HashiCorp.Cdktf; + +Token.AsBooleanMap(object Value, EncodingOptions Options = null); +``` + +Return a reversible map representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsList` + +```csharp +using HashiCorp.Cdktf; + +Token.AsList(object Value, EncodingOptions Options = null); +``` + +Return a reversible list representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsMap` + +```csharp +using HashiCorp.Cdktf; + +Token.AsMap(object Value, object MapValue, EncodingOptions Options = null); +``` + +Return a reversible map representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `MapValue`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsNumber` + +```csharp +using HashiCorp.Cdktf; + +Token.AsNumber(object Value); +``` + +Return a reversible number representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `AsNumberList` + +```csharp +using HashiCorp.Cdktf; + +Token.AsNumberList(object Value); +``` + +Return a reversible list representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +##### `AsNumberMap` + +```csharp +using HashiCorp.Cdktf; + +Token.AsNumberMap(object Value, EncodingOptions Options = null); +``` + +Return a reversible map representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsString` + +```csharp +using HashiCorp.Cdktf; + +Token.AsString(object Value, EncodingOptions Options = null); +``` + +Return a reversible string representation of this token. + +If the Token is initialized with a literal, the stringified value of the +literal is returned. Otherwise, a special quoted string representation +of the Token is returned that can be embedded into other strings. + +Strings with quoted Tokens in them can be restored back into +complex values with the Tokens restored by calling `resolve()` +on the string. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsStringMap` + +```csharp +using HashiCorp.Cdktf; + +Token.AsStringMap(object Value, EncodingOptions Options = null); +``` + +Return a reversible map representation of this token. + +###### `Value`Required + +- _Type:_ object + +--- + +###### `Options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `IsUnresolved` + +```csharp +using HashiCorp.Cdktf; + +Token.IsUnresolved(object Obj); +``` + +Returns true if obj represents an unresolved value. + +One of these must be true: + +- `obj` is an IResolvable +- `obj` is a string containing at least one encoded `IResolvable` +- `obj` is either an encoded number or list + +This does NOT recurse into lists or objects to see if they +containing resolvables. + +###### `Obj`Required + +- _Type:_ object + +The object to test. + +--- + +##### `NullValue` + +```csharp +using HashiCorp.Cdktf; + +Token.NullValue(); +``` + +Return a Token containing a `null` value. + +Note: This is different than `undefined`, `nil`, `None` or similar +as it will end up in the Terraform config and can be used to explicitly +not set an attribute (which is sometimes required by Terraform providers) + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------- | -------------------------------------- | +| AnyMapTokenValue | string | Any map token representation. | +| NumberMapTokenValue | double | Number Map token value representation. | +| StringMapTokenValue | string | String Map token value representation. | + +--- + +##### `AnyMapTokenValue`Required + +```csharp +public string AnyMapTokenValue { get; } +``` + +- _Type:_ string + +Any map token representation. + +--- + +##### `NumberMapTokenValue`Required + +```csharp +public double NumberMapTokenValue { get; } +``` + +- _Type:_ double + +Number Map token value representation. + +--- + +##### `StringMapTokenValue`Required + +```csharp +public string StringMapTokenValue { get; } +``` + +- _Type:_ string + +String Map token value representation. + +--- + +### Tokenization + +Less oft-needed functions to manipulate Tokens. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Tokenization(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| IsResolvable | Return whether the given object is an IResolvable object. | +| Resolve | Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. | +| Reverse | Reverse any value into Resolvables, if possible. | +| ReverseList | Un-encode a Tokenized value from a list. | +| ReverseMap | Un-encode a Tokenized value from a map. | +| ReverseNumber | Un-encode a Tokenized value from a number. | +| ReverseNumberList | Un-encode a Tokenized value from a list. | +| ReverseString | Un-encode a string potentially containing encoded tokens. | +| StringifyNumber | Stringify a number directly or lazily if it's a Token. | + +--- + +##### `IsResolvable` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.IsResolvable(object Obj); +``` + +Return whether the given object is an IResolvable object. + +This is different from Token.isUnresolved() which will also check for +encoded Tokens, whereas this method will only do a type check on the given +object. + +###### `Obj`Required + +- _Type:_ object + +--- + +##### `Resolve` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.Resolve(object Obj, ResolveOptions Options); +``` + +Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. + +Values can only be primitives, arrays or tokens. Other objects (i.e. with methods) will be rejected. + +###### `Obj`Required + +- _Type:_ object + +The object to resolve. + +--- + +###### `Options`Required + +- _Type:_ ResolveOptions + +Prefix key path components for diagnostics. + +--- + +##### `Reverse` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.Reverse(object X); +``` + +Reverse any value into Resolvables, if possible. + +###### `X`Required + +- _Type:_ object + +--- + +##### `ReverseList` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.ReverseList(string[] L); +``` + +Un-encode a Tokenized value from a list. + +###### `L`Required + +- _Type:_ string[] + +--- + +##### `ReverseMap` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.ReverseMap(System.Collections.Generic.IDictionary< string, object > M); +``` + +Un-encode a Tokenized value from a map. + +###### `M`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `ReverseNumber` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.ReverseNumber(double N); +``` + +Un-encode a Tokenized value from a number. + +###### `N`Required + +- _Type:_ double + +--- + +##### `ReverseNumberList` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.ReverseNumberList(double[] L); +``` + +Un-encode a Tokenized value from a list. + +###### `L`Required + +- _Type:_ double[] + +--- + +##### `ReverseString` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.ReverseString(string S); +``` + +Un-encode a string potentially containing encoded tokens. + +###### `S`Required + +- _Type:_ string + +--- + +##### `StringifyNumber` + +```csharp +using HashiCorp.Cdktf; + +Tokenization.StringifyNumber(double X); +``` + +Stringify a number directly or lazily if it's a Token. + +If it is an object (i.e., { Ref: 'SomeLogicalId' }), return it as-is. + +###### `X`Required + +- _Type:_ double + +--- + +### TokenizedStringFragments + +Fragments of a concatenated string containing stringified Tokens. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TokenizedStringFragments(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------ | +| AddEscape | _No description._ | +| AddIntrinsic | Adds an intrinsic fragment. | +| AddLiteral | Adds a literal fragment. | +| AddToken | Adds a token fragment. | +| Concat | _No description._ | +| Join | Combine the string fragments using the given joiner. | +| MapTokens | Apply a transformation function to all tokens in the string. | + +--- + +##### `AddEscape` + +```csharp +private void AddEscape(string Kind) +``` + +###### `Kind`Required + +- _Type:_ string + +--- + +##### `AddIntrinsic` + +```csharp +private void AddIntrinsic(object Value) +``` + +Adds an intrinsic fragment. + +###### `Value`Required + +- _Type:_ object + +the intrinsic value to add. + +--- + +##### `AddLiteral` + +```csharp +private void AddLiteral(object Lit) +``` + +Adds a literal fragment. + +###### `Lit`Required + +- _Type:_ object + +the literal to add. + +--- + +##### `AddToken` + +```csharp +private void AddToken(IResolvable Token) +``` + +Adds a token fragment. + +###### `Token`Required + +- _Type:_ IResolvable + +the token to add. + +--- + +##### `Concat` + +```csharp +private void Concat(TokenizedStringFragments Other) +``` + +###### `Other`Required + +- _Type:_ TokenizedStringFragments + +--- + +##### `Join` + +```csharp +private object Join(IFragmentConcatenator Concat) +``` + +Combine the string fragments using the given joiner. + +If there are any + +###### `Concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +##### `MapTokens` + +```csharp +private TokenizedStringFragments MapTokens(IResolveContext Context) +``` + +Apply a transformation function to all tokens in the string. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------ | +| Escapes | IResolvable[] | Return all escape fragments from this string. | +| FirstValue | object | Returns the first value. | +| Intrinsic | IResolvable[] | Return all intrinsic fragments from this string. | +| Length | double | Returns the number of fragments. | +| Literals | IResolvable[] | Return all literals from this string. | +| Tokens | IResolvable[] | Return all Tokens from this string. | +| FirstToken | IResolvable | Returns the first token. | + +--- + +##### `Escapes`Required + +```csharp +public IResolvable[] Escapes { get; } +``` + +- _Type:_ IResolvable[] + +Return all escape fragments from this string. + +--- + +##### `FirstValue`Required + +```csharp +public object FirstValue { get; } +``` + +- _Type:_ object + +Returns the first value. + +--- + +##### `Intrinsic`Required + +```csharp +public IResolvable[] Intrinsic { get; } +``` + +- _Type:_ IResolvable[] + +Return all intrinsic fragments from this string. + +--- + +##### `Length`Required + +```csharp +public double Length { get; } +``` + +- _Type:_ double + +Returns the number of fragments. + +--- + +##### `Literals`Required + +```csharp +public IResolvable[] Literals { get; } +``` + +- _Type:_ IResolvable[] + +Return all literals from this string. + +--- + +##### `Tokens`Required + +```csharp +public IResolvable[] Tokens { get; } +``` + +- _Type:_ IResolvable[] + +Return all Tokens from this string. + +--- + +##### `FirstToken`Optional + +```csharp +public IResolvable FirstToken { get; } +``` + +- _Type:_ IResolvable + +Returns the first token. + +--- + +### VariableType + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new VariableType(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------ | ----------------- | +| List | _No description._ | +| Map | _No description._ | +| Object | _No description._ | +| Set | _No description._ | +| Tuple | _No description._ | + +--- + +##### `List` + +```csharp +using HashiCorp.Cdktf; + +VariableType.List(string Type); +``` + +###### `Type`Required + +- _Type:_ string + +--- + +##### `Map` + +```csharp +using HashiCorp.Cdktf; + +VariableType.Map(string Type); +``` + +###### `Type`Required + +- _Type:_ string + +--- + +##### `Object` + +```csharp +using HashiCorp.Cdktf; + +VariableType.Object(System.Collections.Generic.IDictionary< string, string > Attributes); +``` + +###### `Attributes`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, string > + +--- + +##### `Set` + +```csharp +using HashiCorp.Cdktf; + +VariableType.Set(string Type); +``` + +###### `Type`Required + +- _Type:_ string + +--- + +##### `Tuple` + +```csharp +using HashiCorp.Cdktf; + +VariableType.Tuple(params string[] Elements); +``` + +###### `Elements`Required + +- _Type:_ params string[] + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------- | ----------------- | +| Any | string | _No description._ | +| Bool | string | _No description._ | +| List | string | _No description._ | +| ListBool | string | _No description._ | +| ListNumber | string | _No description._ | +| ListString | string | _No description._ | +| Map | string | _No description._ | +| MapBool | string | _No description._ | +| MapNumber | string | _No description._ | +| MapString | string | _No description._ | +| Number | string | _No description._ | +| Set | string | _No description._ | +| SetBool | string | _No description._ | +| SetNumber | string | _No description._ | +| SetString | string | _No description._ | +| String | string | _No description._ | + +--- + +##### `Any`Required + +```csharp +public string Any { get; } +``` + +- _Type:_ string + +--- + +##### `Bool`Required + +```csharp +public string Bool { get; } +``` + +- _Type:_ string + +--- + +##### `List`Required + +```csharp +public string List { get; } +``` + +- _Type:_ string + +--- + +##### `ListBool`Required + +```csharp +public string ListBool { get; } +``` + +- _Type:_ string + +--- + +##### `ListNumber`Required + +```csharp +public string ListNumber { get; } +``` + +- _Type:_ string + +--- + +##### `ListString`Required + +```csharp +public string ListString { get; } +``` + +- _Type:_ string + +--- + +##### `Map`Required + +```csharp +public string Map { get; } +``` + +- _Type:_ string + +--- + +##### `MapBool`Required + +```csharp +public string MapBool { get; } +``` + +- _Type:_ string + +--- + +##### `MapNumber`Required + +```csharp +public string MapNumber { get; } +``` + +- _Type:_ string + +--- + +##### `MapString`Required + +```csharp +public string MapString { get; } +``` + +- _Type:_ string + +--- + +##### `Number`Required + +```csharp +public string Number { get; } +``` + +- _Type:_ string + +--- + +##### `Set`Required + +```csharp +public string Set { get; } +``` + +- _Type:_ string + +--- + +##### `SetBool`Required + +```csharp +public string SetBool { get; } +``` + +- _Type:_ string + +--- + +##### `SetNumber`Required + +```csharp +public string SetNumber { get; } +``` + +- _Type:_ string + +--- + +##### `SetString`Required + +```csharp +public string SetString { get; } +``` + +- _Type:_ string + +--- + +##### `String`Required + +```csharp +public string String { get; } +``` + +- _Type:_ string + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/constructs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/constructs.mdx new file mode 100644 index 0000000000..01fe700fd2 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/constructs.mdx @@ -0,0 +1,12379 @@ +--- +page_title: CSharp Reference for Constructs +description: CDKTF Core API Reference for Constructs in CSharp. +--- + + + +# CSharp: Constructs + +### App + +Represents a cdktf application. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new App(AppConfig Config = null); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------------- | --------------- | +| Config | AppConfig | configuration. | + +--- + +##### `Config`Optional + +- _Type:_ AppConfig + +configuration. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| CrossStackReference | Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. | +| Synth | Synthesizes all resources to the output directory. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `CrossStackReference` + +```csharp +private string CrossStackReference(TerraformStack FromStack, TerraformStack ToStack, string Identifier) +``` + +Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. + +###### `FromStack`Required + +- _Type:_ TerraformStack + +--- + +###### `ToStack`Required + +- _Type:_ TerraformStack + +--- + +###### `Identifier`Required + +- _Type:_ string + +--- + +##### `Synth` + +```csharp +private void Synth() +``` + +Synthesizes all resources to the output directory. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsApp | _No description._ | +| Of | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +App.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsApp` + +```csharp +using HashiCorp.Cdktf; + +App.IsApp(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `Of` + +```csharp +using HashiCorp.Cdktf; + +App.Of(IConstruct Construct); +``` + +###### `Construct`Required + +- _Type:_ Constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | --------------------------------------------------------------- | +| Node | Constructs.Node | The tree node. | +| HclOutput | bool | _No description._ | +| Manifest | Manifest | _No description._ | +| Outdir | string | The output directory into which resources will be synthesized. | +| SkipBackendValidation | bool | Whether to skip backend validation during synthesis of the app. | +| SkipValidation | bool | Whether to skip all validations during synthesis of the app. | +| TargetStackId | string | The stack which will be synthesized. | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `HclOutput`Required + +```csharp +public bool HclOutput { get; } +``` + +- _Type:_ bool + +--- + +##### `Manifest`Required + +```csharp +public Manifest Manifest { get; } +``` + +- _Type:_ Manifest + +--- + +##### `Outdir`Required + +```csharp +public string Outdir { get; } +``` + +- _Type:_ string + +The output directory into which resources will be synthesized. + +--- + +##### `SkipBackendValidation`Required + +```csharp +public bool SkipBackendValidation { get; } +``` + +- _Type:_ bool + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `SkipValidation`Required + +```csharp +public bool SkipValidation { get; } +``` + +- _Type:_ bool + +Whether to skip all validations during synthesis of the app. + +--- + +##### `TargetStackId`Optional + +```csharp +public string TargetStackId { get; } +``` + +- _Type:_ string + +The stack which will be synthesized. + +If not set, all stacks will be synthesized. + +--- + +### AzurermBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new AzurermBackend(Construct Scope, AzurermBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | AzurermBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ AzurermBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +AzurermBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +AzurermBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +AzurermBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### CloudBackend + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new CloudBackend(Construct Scope, CloudBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | CloudBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ CloudBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +CloudBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +CloudBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +CloudBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### ConsulBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ConsulBackend(Construct Scope, ConsulBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | ConsulBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ ConsulBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +ConsulBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +ConsulBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +ConsulBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### CosBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new CosBackend(Construct Scope, CosBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | CosBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ CosBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +CosBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +CosBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +CosBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### DataResource + +The DataResource implements the standard resource lifecycle, but does not directly take any other actions. + +You can use the DataResource resource without requiring or configuring a provider. + +The DataResource resource is useful for storing values which need to follow a manage resource lifecycle, and for triggering provisioners when there is no other logical managed resource in which to place them. + +It requires Terraform 1.4 or later. + +It is also possible to generate these bindings by adding "terraform.io/builtin/terraform" to the "terraformProviders" key in your cdktf.json file and running "cdktf get". + +https://developer.hashicorp.com/terraform/language/resources/terraform-data + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataResource(Construct Scope, string Id, DataConfig Config = null); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------- | +| Scope | Constructs.Construct | The scope in which to define this construct. | +| Id | string | The scoped construct ID. | +| Config | DataConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +The scope in which to define this construct. + +--- + +##### `Id`Required + +- _Type:_ string + +The scoped construct ID. + +Must be unique amongst siblings in the same scope + +--- + +##### `Config`Optional + +- _Type:_ DataConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| AddMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| HasResourceMove | _No description._ | +| ImportFrom | _No description._ | +| InterpolationForAttribute | _No description._ | +| MoveFromId | Move the resource corresponding to "id" to this resource. | +| MoveTo | Moves this resource to the target resource given by moveTarget. | +| MoveToId | Moves this resource to the resource corresponding to "id". | +| ResetInput | _No description._ | +| ResetTriggersReplace | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `AddMoveTarget` + +```csharp +private void AddMoveTarget(string MoveTarget) +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `MoveTarget`Required + +- _Type:_ string + +The string move target that will correspond to this resource. + +--- + +##### `GetAnyMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanAttribute` + +```csharp +private IResolvable GetBooleanAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetListAttribute` + +```csharp +private string[] GetListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberAttribute` + +```csharp +private double GetNumberAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberListAttribute` + +```csharp +private double[] GetNumberListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringAttribute` + +```csharp +private string GetStringAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `HasResourceMove` + +```csharp +private object HasResourceMove() +``` + +##### `ImportFrom` + +```csharp +private void ImportFrom(string Id, TerraformProvider Provider = null) +``` + +###### `Id`Required + +- _Type:_ string + +--- + +###### `Provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `MoveFromId` + +```csharp +private void MoveFromId(string Id) +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `Id`Required + +- _Type:_ string + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `MoveTo` + +```csharp +private void MoveTo(string MoveTarget, object Index = null) +``` + +Moves this resource to the target resource given by moveTarget. + +###### `MoveTarget`Required + +- _Type:_ string + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `Index`Optional + +- _Type:_ object + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `MoveToId` + +```csharp +private void MoveToId(string Id) +``` + +Moves this resource to the resource corresponding to "id". + +###### `Id`Required + +- _Type:_ string + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +##### `ResetInput` + +```csharp +private void ResetInput() +``` + +##### `ResetTriggersReplace` + +```csharp +private void ResetTriggersReplace() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformResource | _No description._ | +| GenerateConfigForImport | Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataResource.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataResource.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsTerraformResource` + +```csharp +using HashiCorp.Cdktf; + +DataResource.IsTerraformResource(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `GenerateConfigForImport` + +```csharp +using HashiCorp.Cdktf; + +DataResource.GenerateConfigForImport(Construct Scope, string ImportToId, string ImportFromId, TerraformProvider Provider = null); +``` + +Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +The scope in which to define this construct. + +--- + +###### `ImportToId`Required + +- _Type:_ string + +The construct id used in the generated config for the Data to import. + +--- + +###### `ImportFromId`Required + +- _Type:_ string + +The id of the existing Data that should be imported. + +Refer to the {@link https://terraform.io/providers/builtin/terraform/latest/docs/resources/data#import import section} in the documentation of this resource for the id to use + +--- + +###### `Provider`Optional + +- _Type:_ TerraformProvider + +? Optional instance of the provider where the Data to import is found. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| TerraformMetaArguments | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| TerraformResourceType | string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| Connection | object | _No description._ | +| Count | object | _No description._ | +| DependsOn | string[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | object[] | _No description._ | +| Id | string | _No description._ | +| Output | AnyMap | _No description._ | +| InputInput | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| TriggersReplaceInput | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Input | System.Collections.Generic.IDictionary< string, object > | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| TriggersReplace | System.Collections.Generic.IDictionary< string, object > | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformMetaArguments`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > TerraformMetaArguments { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```csharp +public TerraformProviderGeneratorMetadata TerraformGeneratorMetadata { get; } +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; } +``` + +- _Type:_ object + +--- + +##### `Count`Optional + +```csharp +public object Count { get; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public string[] DependsOn { get; } +``` + +- _Type:_ string[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; } +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```csharp +public object[] Provisioners { get; } +``` + +- _Type:_ object[] + +--- + +##### `Id`Required + +```csharp +public string Id { get; } +``` + +- _Type:_ string + +--- + +##### `Output`Required + +```csharp +public AnyMap Output { get; } +``` + +- _Type:_ AnyMap + +--- + +##### `InputInput`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > InputInput { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `TriggersReplaceInput`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > TriggersReplaceInput { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Input`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > Input { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `TriggersReplace`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > TriggersReplace { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteState + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteState(Construct Scope, string Id, DataTerraformRemoteStateRemoteConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateRemoteConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateRemoteConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteState.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteState.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateAzurerm + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateAzurerm(Construct Scope, string Id, DataTerraformRemoteStateAzurermConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateAzurermConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateAzurermConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateAzurerm.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateAzurerm.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateConsul + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateConsul(Construct Scope, string Id, DataTerraformRemoteStateConsulConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateConsulConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateConsulConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateConsul.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateConsul.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateCos + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateCos(Construct Scope, string Id, DataTerraformRemoteStateCosConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateCosConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateCosConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateCos.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateCos.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateGcs + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateGcs(Construct Scope, string Id, DataTerraformRemoteStateGcsConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateGcsConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateGcsConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateGcs.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateGcs.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateHttp + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateHttp(Construct Scope, string Id, DataTerraformRemoteStateHttpConfig Config); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateHttpConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateHttpConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateHttp.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateHttp.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateLocal + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateLocal(Construct Scope, string Id, DataTerraformRemoteStateLocalConfig Config); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateLocalConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateLocalConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateLocal.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateLocal.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateOss + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateOss(Construct Scope, string Id, DataTerraformRemoteStateOssConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateOssConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateOssConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateOss.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateOss.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStatePg + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStatePg(Construct Scope, string Id, DataTerraformRemoteStatePgConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStatePgConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStatePgConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStatePg.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStatePg.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateS3 + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateS3(Construct Scope, string Id, DataTerraformRemoteStateS3Config Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateS3Config | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateS3Config + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateS3.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateS3.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateSwift + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateSwift(Construct Scope, string Id, DataTerraformRemoteStateSwiftConfig Config); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | DataTerraformRemoteStateSwiftConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateSwiftConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### ~~`ToString`~~ + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### ~~`AddOverride`~~ + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### ~~`OverrideLogicalId`~~ + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### ~~`ResetOverrideLogicalId`~~ + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`ToHclTerraform`~~ + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### ~~`ToMetadata`~~ + +```csharp +private object ToMetadata() +``` + +##### ~~`ToTerraform`~~ + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### ~~`Get`~~ + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### ~~`GetBoolean`~~ + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### ~~`GetList`~~ + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### ~~`GetNumber`~~ + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### ~~`GetString`~~ + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### ~~`IsConstruct`~~ + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateSwift.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### ~~`IsTerraformElement`~~ + +```csharp +using HashiCorp.Cdktf; + +DataTerraformRemoteStateSwift.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### ~~`Node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### ~~`CdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`Fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### ~~`FriendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### ~~`TfResourceType`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### GcsBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new GcsBackend(Construct Scope, GcsBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | GcsBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ GcsBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +GcsBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +GcsBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +GcsBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### HttpBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new HttpBackend(Construct Scope, HttpBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | HttpBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ HttpBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +HttpBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +HttpBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +HttpBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### ImportableResource + +Class used to represent an importable resource. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new ImportableResource(Construct Scope, string Name, IImportableConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Name | string | _No description._ | +| Config | IImportableConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Name`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ IImportableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +ImportableResource.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +ImportableResource.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### LocalBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new LocalBackend(Construct Scope, LocalBackendConfig Props = null); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | LocalBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Optional + +- _Type:_ LocalBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +LocalBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +LocalBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +LocalBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### OssBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new OssBackend(Construct Scope, OssBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | OssBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ OssBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +OssBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +OssBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +OssBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### PgBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new PgBackend(Construct Scope, PgBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | PgBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ PgBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +PgBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +PgBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +PgBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### RemoteBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new RemoteBackend(Construct Scope, RemoteBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | RemoteBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ RemoteBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +RemoteBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +RemoteBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +RemoteBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### Resource + +- _Implements:_ IResource + +A construct which represents a resource. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new Resource(Construct Scope, string Id); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------ | -------------------------------------------------- | +| ToString | Returns a string representation of this construct. | + +--- + +##### ~~`ToString`~~ + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | + +--- + +##### ~~`IsConstruct`~~ + +```csharp +using HashiCorp.Cdktf; + +Resource.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| Node | Constructs.Node | The tree node. | +| Stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### ~~`Node`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### ~~`Stack`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```csharp +public TerraformStack Stack { get; } +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### S3Backend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new S3Backend(Construct Scope, S3BackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | S3BackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ S3BackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +S3Backend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +S3Backend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +S3Backend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### SwiftBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new SwiftBackend(Construct Scope, SwiftBackendConfig Props); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Props | SwiftBackendConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Props`Required + +- _Type:_ SwiftBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### ~~`ToString`~~ + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### ~~`AddOverride`~~ + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### ~~`OverrideLogicalId`~~ + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### ~~`ResetOverrideLogicalId`~~ + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`ToHclTerraform`~~ + +```csharp +private object ToHclTerraform() +``` + +##### ~~`ToMetadata`~~ + +```csharp +private object ToMetadata() +``` + +##### ~~`ToTerraform`~~ + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### ~~`GetRemoteStateDataSource`~~ + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### ~~`IsConstruct`~~ + +```csharp +using HashiCorp.Cdktf; + +SwiftBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### ~~`IsTerraformElement`~~ + +```csharp +using HashiCorp.Cdktf; + +SwiftBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### ~~`IsBackend`~~ + +```csharp +using HashiCorp.Cdktf; + +SwiftBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### ~~`Node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### ~~`CdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`Fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### ~~`FriendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### TerraformAsset + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformAsset(Construct Scope, string Id, TerraformAssetConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | TerraformAssetConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ TerraformAssetConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | -------------------------------------------------- | +| ToString | Returns a string representation of this construct. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformAsset.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| Node | Constructs.Node | The tree node. | +| FileName | string | Name of the asset. | +| Path | string | The path relative to the root of the terraform directory in posix format Use this property to reference the asset. | +| AssetHash | string | _No description._ | +| Type | AssetType | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `FileName`Required + +```csharp +public string FileName { get; } +``` + +- _Type:_ string + +Name of the asset. + +--- + +##### `Path`Required + +```csharp +public string Path { get; } +``` + +- _Type:_ string + +The path relative to the root of the terraform directory in posix format Use this property to reference the asset. + +--- + +##### `AssetHash`Required + +```csharp +public string AssetHash { get; } +``` + +- _Type:_ string + +--- + +##### `Type`Required + +```csharp +public AssetType Type { get; } +``` + +- _Type:_ AssetType + +--- + +### TerraformBackend + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformBackend(Construct Scope, string Id, string Name); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Name | string | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Name`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```csharp +private TerraformRemoteState GetRemoteStateDataSource(Construct Scope, string Name, string FromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +###### `Name`Required + +- _Type:_ string + +--- + +###### `FromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformBackend.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformBackend.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsBackend` + +```csharp +using HashiCorp.Cdktf; + +TerraformBackend.IsBackend(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### TerraformDataSource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformDataSource(Construct Scope, string Id, TerraformResourceConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | TerraformResourceConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ TerraformResourceConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| InterpolationForAttribute | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `GetAnyMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanAttribute` + +```csharp +private IResolvable GetBooleanAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetListAttribute` + +```csharp +private string[] GetListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberAttribute` + +```csharp +private double GetNumberAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberListAttribute` + +```csharp +private double[] GetNumberListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringAttribute` + +```csharp +private string GetStringAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformDataSource | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformDataSource.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformDataSource.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsTerraformDataSource` + +```csharp +using HashiCorp.Cdktf; + +TerraformDataSource.IsTerraformDataSource(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| TerraformMetaArguments | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| TerraformResourceType | string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| Count | object | _No description._ | +| DependsOn | string[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformMetaArguments`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > TerraformMetaArguments { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```csharp +public TerraformProviderGeneratorMetadata TerraformGeneratorMetadata { get; } +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `Count`Optional + +```csharp +public object Count { get; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public string[] DependsOn { get; } +``` + +- _Type:_ string[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; } +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformElement + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformElement(Construct Scope, string Id, string ElementType = null); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| ElementType | string | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `ElementType`Optional + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformElement.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformElement.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +### TerraformHclModule + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformHclModule(Construct Scope, string Id, TerraformHclModuleConfig Options); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Options | TerraformHclModuleConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Options`Required + +- _Type:_ TerraformHclModuleConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | +| AddProvider | _No description._ | +| GetString | _No description._ | +| InterpolationForOutput | _No description._ | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| Set | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +##### `AddProvider` + +```csharp +private void AddProvider(object Provider) +``` + +###### `Provider`Required + +- _Type:_ object + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `InterpolationForOutput` + +```csharp +private IResolvable InterpolationForOutput(string ModuleOutput) +``` + +###### `ModuleOutput`Required + +- _Type:_ string + +--- + +##### `Get` + +```csharp +private object Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `Set` + +```csharp +private void Set(string Variable, object Value) +``` + +###### `Variable`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformHclModule.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformHclModule.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| Source | string | _No description._ | +| Providers | object[] | _No description._ | +| SkipAssetCreationFromLocalModules | bool | _No description._ | +| Version | string | _No description._ | +| DependsOn | string[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Variables | System.Collections.Generic.IDictionary< string, object > | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `Source`Required + +```csharp +public string Source { get; } +``` + +- _Type:_ string + +--- + +##### `Providers`Optional + +```csharp +public object[] Providers { get; } +``` + +- _Type:_ object[] + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```csharp +public bool SkipAssetCreationFromLocalModules { get; } +``` + +- _Type:_ bool + +--- + +##### `Version`Optional + +```csharp +public string Version { get; } +``` + +- _Type:_ string + +--- + +##### `DependsOn`Optional + +```csharp +public string[] DependsOn { get; } +``` + +- _Type:_ string[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Variables`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Variables { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +### TerraformLocal + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformLocal(Construct Scope, string Id, object Expression); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Expression | object | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Expression`Required + +- _Type:_ object + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformLocal.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformLocal.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| AsAnyMap | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| AsBoolean | IResolvable | _No description._ | +| AsBooleanMap | System.Collections.Generic.IDictionary< string, bool > | _No description._ | +| AsList | string[] | _No description._ | +| AsNumber | double | _No description._ | +| AsNumberMap | System.Collections.Generic.IDictionary< string, double > | _No description._ | +| AsString | string | _No description._ | +| AsStringMap | System.Collections.Generic.IDictionary< string, string > | _No description._ | +| Expression | object | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `AsAnyMap`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > AsAnyMap { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `AsBoolean`Required + +```csharp +public IResolvable AsBoolean { get; } +``` + +- _Type:_ IResolvable + +--- + +##### `AsBooleanMap`Required + +```csharp +public System.Collections.Generic.IDictionary< string, bool > AsBooleanMap { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, bool > + +--- + +##### `AsList`Required + +```csharp +public string[] AsList { get; } +``` + +- _Type:_ string[] + +--- + +##### `AsNumber`Required + +```csharp +public double AsNumber { get; } +``` + +- _Type:_ double + +--- + +##### `AsNumberMap`Required + +```csharp +public System.Collections.Generic.IDictionary< string, double > AsNumberMap { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, double > + +--- + +##### `AsString`Required + +```csharp +public string AsString { get; } +``` + +- _Type:_ string + +--- + +##### `AsStringMap`Required + +```csharp +public System.Collections.Generic.IDictionary< string, string > AsStringMap { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, string > + +--- + +##### `Expression`Required + +```csharp +public object Expression { get; } +``` + +- _Type:_ object + +--- + +### TerraformModule + +- _Implements:_ ITerraformDependable + +TerraformModule can be used to reference a local terraform module or a module from the Terraform Registry. + +It should be used if you can not use generated bindings for the module as you would get by adding the module +to your cdktf.json files "terraformModules" array and running cdktf get. + +This class is not creating a Terraform module to be used outside of CDKTF. +If you want to bundle certain resources together like you would do with a Terraform module, +you should use Constructs instead, see http://cdk.tf/constructs for more details. + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformModule(Construct Scope, string Id, TerraformModuleConfig Options); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Options | TerraformModuleConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Options`Required + +- _Type:_ TerraformModuleConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | +| AddProvider | _No description._ | +| GetString | _No description._ | +| InterpolationForOutput | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +##### `AddProvider` + +```csharp +private void AddProvider(object Provider) +``` + +###### `Provider`Required + +- _Type:_ object + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `InterpolationForOutput` + +```csharp +private IResolvable InterpolationForOutput(string ModuleOutput) +``` + +###### `ModuleOutput`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformModule.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformModule.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| Source | string | _No description._ | +| Providers | object[] | _No description._ | +| SkipAssetCreationFromLocalModules | bool | _No description._ | +| Version | string | _No description._ | +| DependsOn | string[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `Source`Required + +```csharp +public string Source { get; } +``` + +- _Type:_ string + +--- + +##### `Providers`Optional + +```csharp +public object[] Providers { get; } +``` + +- _Type:_ object[] + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```csharp +public bool SkipAssetCreationFromLocalModules { get; } +``` + +- _Type:_ bool + +--- + +##### `Version`Optional + +```csharp +public string Version { get; } +``` + +- _Type:_ string + +--- + +##### `DependsOn`Optional + +```csharp +public string[] DependsOn { get; } +``` + +- _Type:_ string[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; } +``` + +- _Type:_ ITerraformIterator + +--- + +### TerraformOutput + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformOutput(Construct Scope, string Id, TerraformOutputConfig Config); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | TerraformOutputConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ TerraformOutputConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformOutput | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformOutput.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformOutput.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsTerraformOutput` + +```csharp +using HashiCorp.Cdktf; + +TerraformOutput.IsTerraformOutput(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| StaticId | bool | _No description._ | +| Value | object | _No description._ | +| DependsOn | ITerraformDependable[] | _No description._ | +| Description | string | _No description._ | +| Precondition | Precondition | _No description._ | +| Sensitive | bool | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `StaticId`Required + +```csharp +public bool StaticId { get; } +``` + +- _Type:_ bool + +--- + +##### `Value`Required + +```csharp +public object Value { get; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `Description`Optional + +```csharp +public string Description { get; } +``` + +- _Type:_ string + +--- + +##### `Precondition`Optional + +```csharp +public Precondition Precondition { get; } +``` + +- _Type:_ Precondition + +--- + +##### `Sensitive`Optional + +```csharp +public bool Sensitive { get; } +``` + +- _Type:_ bool + +--- + +### TerraformProvider + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformProvider(Construct Scope, string Id, TerraformProviderConfig Config); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | TerraformProviderConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ TerraformProviderConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformProvider | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformProvider.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformProvider.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsTerraformProvider` + +```csharp +using HashiCorp.Cdktf; + +TerraformProvider.IsTerraformProvider(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| MetaAttributes | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| TerraformResourceType | string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| TerraformProviderSource | string | _No description._ | +| Alias | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `MetaAttributes`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > MetaAttributes { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```csharp +public TerraformProviderGeneratorMetadata TerraformGeneratorMetadata { get; } +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `TerraformProviderSource`Optional + +```csharp +public string TerraformProviderSource { get; } +``` + +- _Type:_ string + +--- + +##### `Alias`Optional + +```csharp +public string Alias { get; } +``` + +- _Type:_ string + +--- + +### TerraformRemoteState + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformRemoteState(Construct Scope, string Id, string Backend, DataTerraformRemoteStateConfig Config); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Backend | string | _No description._ | +| Config | DataTerraformRemoteStateConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Backend`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ DataTerraformRemoteStateConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```csharp +private IResolvable Get(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetBoolean` + +```csharp +private IResolvable GetBoolean(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetList` + +```csharp +private string[] GetList(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetNumber` + +```csharp +private double GetNumber(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +##### `GetString` + +```csharp +private string GetString(string Output) +``` + +###### `Output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformRemoteState.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformRemoteState.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; } +``` + +- _Type:_ string + +--- + +### TerraformResource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformResource(Construct Scope, string Id, TerraformResourceConfig Config); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | TerraformResourceConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ TerraformResourceConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| AddMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| HasResourceMove | _No description._ | +| ImportFrom | _No description._ | +| InterpolationForAttribute | _No description._ | +| MoveFromId | Move the resource corresponding to "id" to this resource. | +| MoveTo | Moves this resource to the target resource given by moveTarget. | +| MoveToId | Moves this resource to the resource corresponding to "id". | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `AddMoveTarget` + +```csharp +private void AddMoveTarget(string MoveTarget) +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `MoveTarget`Required + +- _Type:_ string + +The string move target that will correspond to this resource. + +--- + +##### `GetAnyMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, object > GetAnyMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanAttribute` + +```csharp +private IResolvable GetBooleanAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetBooleanMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, bool > GetBooleanMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetListAttribute` + +```csharp +private string[] GetListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberAttribute` + +```csharp +private double GetNumberAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberListAttribute` + +```csharp +private double[] GetNumberListAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetNumberMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, double > GetNumberMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringAttribute` + +```csharp +private string GetStringAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `GetStringMapAttribute` + +```csharp +private System.Collections.Generic.IDictionary< string, string > GetStringMapAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `HasResourceMove` + +```csharp +private object HasResourceMove() +``` + +##### `ImportFrom` + +```csharp +private void ImportFrom(string Id, TerraformProvider Provider = null) +``` + +###### `Id`Required + +- _Type:_ string + +--- + +###### `Provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +##### `MoveFromId` + +```csharp +private void MoveFromId(string Id) +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `Id`Required + +- _Type:_ string + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `MoveTo` + +```csharp +private void MoveTo(string MoveTarget, object Index = null) +``` + +Moves this resource to the target resource given by moveTarget. + +###### `MoveTarget`Required + +- _Type:_ string + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `Index`Optional + +- _Type:_ object + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `MoveToId` + +```csharp +private void MoveToId(string Id) +``` + +Moves this resource to the resource corresponding to "id". + +###### `Id`Required + +- _Type:_ string + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformResource | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformResource.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformResource.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `IsTerraformResource` + +```csharp +using HashiCorp.Cdktf; + +TerraformResource.IsTerraformResource(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| TerraformMetaArguments | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| TerraformResourceType | string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| Connection | object | _No description._ | +| Count | object | _No description._ | +| DependsOn | string[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | object[] | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformMetaArguments`Required + +```csharp +public System.Collections.Generic.IDictionary< string, object > TerraformMetaArguments { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```csharp +public TerraformProviderGeneratorMetadata TerraformGeneratorMetadata { get; } +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; } +``` + +- _Type:_ object + +--- + +##### `Count`Optional + +```csharp +public object Count { get; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public string[] DependsOn { get; } +``` + +- _Type:_ string[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; } +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```csharp +public object[] Provisioners { get; } +``` + +- _Type:_ object[] + +--- + +### TerraformStack + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformStack(Construct Scope, string Id); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddDependency | _No description._ | +| AddOverride | _No description._ | +| AllProviders | _No description._ | +| DependsOn | _No description._ | +| EnsureBackendExists | _No description._ | +| GetLogicalId | _No description._ | +| HasResourceMove | _No description._ | +| PrepareStack | _No description._ | +| RegisterIncomingCrossStackReference | _No description._ | +| RegisterOutgoingCrossStackReference | _No description._ | +| RunAllValidations | Run all validations on the stack. | +| ToHclTerraform | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddDependency` + +```csharp +private void AddDependency(TerraformStack Dependency) +``` + +###### `Dependency`Required + +- _Type:_ TerraformStack + +--- + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `AllProviders` + +```csharp +private TerraformProvider[] AllProviders() +``` + +##### `DependsOn` + +```csharp +private bool DependsOn(TerraformStack Stack) +``` + +###### `Stack`Required + +- _Type:_ TerraformStack + +--- + +##### `EnsureBackendExists` + +```csharp +private TerraformBackend EnsureBackendExists() +``` + +##### `GetLogicalId` + +```csharp +private string GetLogicalId(object TfElement) +``` + +###### `TfElement`Required + +- _Type:_ object + +--- + +##### `HasResourceMove` + +```csharp +private bool HasResourceMove() +``` + +##### `PrepareStack` + +```csharp +private void PrepareStack() +``` + +##### `RegisterIncomingCrossStackReference` + +```csharp +private TerraformRemoteState RegisterIncomingCrossStackReference(TerraformStack FromStack) +``` + +###### `FromStack`Required + +- _Type:_ TerraformStack + +--- + +##### `RegisterOutgoingCrossStackReference` + +```csharp +private TerraformOutput RegisterOutgoingCrossStackReference(string Identifier) +``` + +###### `Identifier`Required + +- _Type:_ string + +--- + +##### `RunAllValidations` + +```csharp +private void RunAllValidations() +``` + +Run all validations on the stack. + +##### `ToHclTerraform` + +```csharp +private System.Collections.Generic.IDictionary< string, object > ToHclTerraform() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsStack | _No description._ | +| Of | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformStack.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsStack` + +```csharp +using HashiCorp.Cdktf; + +TerraformStack.IsStack(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +##### `Of` + +```csharp +using HashiCorp.Cdktf; + +TerraformStack.Of(IConstruct Construct); +``` + +###### `Construct`Required + +- _Type:_ Constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| Dependencies | TerraformStack[] | _No description._ | +| MoveTargets | TerraformResourceTargets | _No description._ | +| Synthesizer | IStackSynthesizer | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `Dependencies`Required + +```csharp +public TerraformStack[] Dependencies { get; } +``` + +- _Type:_ TerraformStack[] + +--- + +##### `MoveTargets`Required + +```csharp +public TerraformResourceTargets MoveTargets { get; } +``` + +- _Type:_ TerraformResourceTargets + +--- + +##### `Synthesizer`Required + +```csharp +public IStackSynthesizer Synthesizer { get; } +``` + +- _Type:_ IStackSynthesizer + +--- + +### TerraformVariable + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```csharp +using HashiCorp.Cdktf; + +new TerraformVariable(Construct Scope, string Id, TerraformVariableConfig Config); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| Scope | Constructs.Construct | _No description._ | +| Id | string | _No description._ | +| Config | TerraformVariableConfig | _No description._ | + +--- + +##### `Scope`Required + +- _Type:_ Constructs.Construct + +--- + +##### `Id`Required + +- _Type:_ string + +--- + +##### `Config`Required + +- _Type:_ TerraformVariableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | +| AddValidation | _No description._ | +| SynthesizeAttributes | _No description._ | +| SynthesizeHclAttributes | _No description._ | + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```csharp +private void AddOverride(string Path, object Value) +``` + +###### `Path`Required + +- _Type:_ string + +--- + +###### `Value`Required + +- _Type:_ object + +--- + +##### `OverrideLogicalId` + +```csharp +private void OverrideLogicalId(string NewLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `NewLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```csharp +private void ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```csharp +private object ToHclTerraform() +``` + +##### `ToMetadata` + +```csharp +private object ToMetadata() +``` + +##### `ToTerraform` + +```csharp +private object ToTerraform() +``` + +##### `AddValidation` + +```csharp +private void AddValidation(TerraformVariableValidationConfig Validation) +``` + +###### `Validation`Required + +- _Type:_ TerraformVariableValidationConfig + +--- + +##### `SynthesizeAttributes` + +```csharp +private System.Collections.Generic.IDictionary< string, object > SynthesizeAttributes() +``` + +##### `SynthesizeHclAttributes` + +```csharp +private System.Collections.Generic.IDictionary< string, object > SynthesizeHclAttributes() +``` + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```csharp +using HashiCorp.Cdktf; + +TerraformVariable.IsConstruct(object X); +``` + +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. + +###### `X`Required + +- _Type:_ object + +Any object. + +--- + +##### `IsTerraformElement` + +```csharp +using HashiCorp.Cdktf; + +TerraformVariable.IsTerraformElement(object X); +``` + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | Constructs.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| BooleanValue | IResolvable | _No description._ | +| ListValue | string[] | _No description._ | +| NumberValue | double | _No description._ | +| StringValue | string | _No description._ | +| Value | object | _No description._ | +| Default | object | _No description._ | +| Description | string | _No description._ | +| Nullable | bool | _No description._ | +| Sensitive | bool | _No description._ | +| Type | string | _No description._ | +| Validation | TerraformVariableValidationConfig[] | _No description._ | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```csharp +public TerraformStack CdktfStack { get; } +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `BooleanValue`Required + +```csharp +public IResolvable BooleanValue { get; } +``` + +- _Type:_ IResolvable + +--- + +##### `ListValue`Required + +```csharp +public string[] ListValue { get; } +``` + +- _Type:_ string[] + +--- + +##### `NumberValue`Required + +```csharp +public double NumberValue { get; } +``` + +- _Type:_ double + +--- + +##### `StringValue`Required + +```csharp +public string StringValue { get; } +``` + +- _Type:_ string + +--- + +##### `Value`Required + +```csharp +public object Value { get; } +``` + +- _Type:_ object + +--- + +##### `Default`Optional + +```csharp +public object Default { get; } +``` + +- _Type:_ object + +--- + +##### `Description`Optional + +```csharp +public string Description { get; } +``` + +- _Type:_ string + +--- + +##### `Nullable`Optional + +```csharp +public bool Nullable { get; } +``` + +- _Type:_ bool + +--- + +##### `Sensitive`Optional + +```csharp +public bool Sensitive { get; } +``` + +- _Type:_ bool + +--- + +##### `Type`Optional + +```csharp +public string Type { get; } +``` + +- _Type:_ string + +--- + +##### `Validation`Optional + +```csharp +public TerraformVariableValidationConfig[] Validation { get; } +``` + +- _Type:_ TerraformVariableValidationConfig[] + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/enums.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/enums.mdx new file mode 100644 index 0000000000..f418d93d72 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/enums.mdx @@ -0,0 +1,56 @@ +--- +page_title: CSharp Reference for Enums +description: CDKTF Core API Reference for Enums in CSharp. +--- + + + +# CSharp: Enums + +### AnnotationMetadataEntryType + +#### Members + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| INFO | _No description._ | +| WARN | _No description._ | +| ERROR | _No description._ | + +--- + +##### `INFO` + +--- + +##### `WARN` + +--- + +##### `ERROR` + +--- + +### AssetType + +#### Members + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------- | +| FILE | _No description._ | +| DIRECTORY | _No description._ | +| ARCHIVE | _No description._ | + +--- + +##### `FILE` + +--- + +##### `DIRECTORY` + +--- + +##### `ARCHIVE` + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/index.mdx new file mode 100644 index 0000000000..e0d1c78c5f --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/index.mdx @@ -0,0 +1,14 @@ +--- +page_title: C# API resource reference overview +description: Learn about the API resources available in the Terraform CDK library for C#. +--- + +# C# API resource reference overview + +The C# API reference includes the following resources: + +- [Classes](/terraform/cdktf/api-reference/csharp/classes) +- [Constructs](/terraform/cdktf/api-reference/csharp/constructs) +- [Enums](/terraform/cdktf/api-reference/csharp/enums) +- [Protocols](/terraform/cdktf/api-reference/csharp/protocols) +- [Structs](/terraform/cdktf/api-reference/csharp/structs) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/protocols.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/protocols.mdx new file mode 100644 index 0000000000..d2440b2b0c --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/protocols.mdx @@ -0,0 +1,967 @@ +--- +page_title: CSharp Reference for Protocols +description: CDKTF Core API Reference for Protocols in CSharp. +--- + + + +# CSharp: Protocols + +### IAnyProducer + +- _Implemented By:_ IAnyProducer + +Interface for lazy untyped value producers. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | ------------------ | +| Produce | Produce the value. | + +--- + +##### `Produce` + +```csharp +private object Produce(IResolveContext Context) +``` + +Produce the value. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +### IAspect + +- _Implemented By:_ MigrateIds, IAspect + +Represents an Aspect. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------- | ------------------------------------ | +| Visit | All aspects can visit an IConstruct. | + +--- + +##### `Visit` + +```csharp +private void Visit(IConstruct Node) +``` + +All aspects can visit an IConstruct. + +###### `Node`Required + +- _Type:_ Constructs.IConstruct + +--- + +### IFragmentConcatenator + +- _Implemented By:_ StringConcat, IFragmentConcatenator + +Function used to concatenate symbols in the target document language. + +Interface so it could potentially be exposed over jsii. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ----------------------------------------------- | +| Join | Join the fragment on the left and on the right. | + +--- + +##### `Join` + +```csharp +private object Join(object Left, object Right) +``` + +Join the fragment on the left and on the right. + +###### `Left`Required + +- _Type:_ object + +--- + +###### `Right`Required + +- _Type:_ object + +--- + +### IImportableConfig + +- _Implemented By:_ IImportableConfig + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| ImportId | string | _No description._ | +| TerraformResourceType | string | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `ImportId`Required + +```csharp +public string ImportId { get; set; } +``` + +- _Type:_ string + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; set; } +``` + +- _Type:_ string + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +### IInterpolatingParent + +- _Implemented By:_ AnyMapList, BooleanMapList, ComplexComputedList, ComplexObject, DataResource, MapList, NumberMapList, StringMapList, TerraformDataSource, TerraformResource, IInterpolatingParent + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ----------------- | +| InterpolationForAttribute | _No description._ | + +--- + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +### IListProducer + +- _Implemented By:_ IListProducer + +Interface for lazy list producers. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------------- | +| Produce | Produce the list value. | + +--- + +##### `Produce` + +```csharp +private string[] Produce(IResolveContext Context) +``` + +Produce the list value. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +### IManifest + +- _Implemented By:_ Manifest, IManifest + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ----------------- | +| Stacks | System.Collections.Generic.IDictionary< string, StackManifest> | _No description._ | +| Version | string | _No description._ | + +--- + +##### `Stacks`Required + +```csharp +public System.Collections.Generic.IDictionary< string, StackManifest > Stacks { get; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, StackManifest> + +--- + +##### `Version`Required + +```csharp +public string Version { get; } +``` + +- _Type:_ string + +--- + +### INumberProducer + +- _Implemented By:_ INumberProducer + +Interface for lazy number producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| Produce | Produce the number value. | + +--- + +##### `Produce` + +```csharp +private double Produce(IResolveContext Context) +``` + +Produce the number value. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +### IPostProcessor + +- _Implemented By:_ IPostProcessor + +A Token that can post-process the complete resolved value, after resolve() has recursed over it. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| PostProcess | Process the completely resolved value, after full recursion/resolution has happened. | + +--- + +##### `PostProcess` + +```csharp +private object PostProcess(object Input, IResolveContext Context) +``` + +Process the completely resolved value, after full recursion/resolution has happened. + +###### `Input`Required + +- _Type:_ object + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +### IRemoteWorkspace + +- _Implemented By:_ NamedRemoteWorkspace, PrefixedRemoteWorkspaces, IRemoteWorkspace + +### IResolvable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, LazyBase, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, IResolvable + +Interface for values that can be resolvable later. + +Tokens are special objects that participate in synthesis. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------- | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `Resolve` + +```csharp +private object Resolve(IResolveContext Context) +``` + +Produce the Token's value at resolution time. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```csharp +private string ToString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `CreationStack`Required + +```csharp +public string[] CreationStack { get; } +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### IResolveContext + +- _Implemented By:_ IResolveContext + +Current resolution context for tokens. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| RegisterPostProcessor | Use this postprocessor after the entire token structure has been resolved. | +| Resolve | Resolve an inner object. | + +--- + +##### `RegisterPostProcessor` + +```csharp +private void RegisterPostProcessor(IPostProcessor PostProcessor) +``` + +Use this postprocessor after the entire token structure has been resolved. + +###### `PostProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `Resolve` + +```csharp +private object Resolve(object X) +``` + +Resolve an inner object. + +###### `X`Required + +- _Type:_ object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Preparing | bool | True when we are still preparing, false if we're rendering the final output. | +| Scope | Constructs.IConstruct | The scope from which resolution has been initiated. | +| IgnoreEscapes | bool | True when ${} should not be parsed, and treated as literals. | +| IteratorContext | string | TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. | +| SuppressBraces | bool | True when ${} should be ommitted (because already inside them), false otherwise. | +| WarnEscapes | bool | True when ${} should not be included in the string to be resolved, outputs a warning. | + +--- + +##### `Preparing`Required + +```csharp +public bool Preparing { get; } +``` + +- _Type:_ bool + +True when we are still preparing, false if we're rendering the final output. + +--- + +##### `Scope`Required + +```csharp +public IConstruct Scope { get; } +``` + +- _Type:_ Constructs.IConstruct + +The scope from which resolution has been initiated. + +--- + +##### `IgnoreEscapes`Optional + +```csharp +public bool IgnoreEscapes { get; set; } +``` + +- _Type:_ bool + +True when ${} should not be parsed, and treated as literals. + +--- + +##### `IteratorContext`Optional + +```csharp +public string IteratorContext { get; set; } +``` + +- _Type:_ string + +TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. + +--- + +##### `SuppressBraces`Optional + +```csharp +public bool SuppressBraces { get; set; } +``` + +- _Type:_ bool + +True when ${} should be ommitted (because already inside them), false otherwise. + +--- + +##### `WarnEscapes`Optional + +```csharp +public bool WarnEscapes { get; set; } +``` + +- _Type:_ bool + +True when ${} should not be included in the string to be resolved, outputs a warning. + +Default: false + +--- + +### IResource + +- _Extends:_ Constructs.IConstruct + +- _Implemented By:_ Resource, IResource + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| Node | Constructs.Node | The tree node. | +| Stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### `Node`Required + +```csharp +public Node Node { get; } +``` + +- _Type:_ Constructs.Node + +The tree node. + +--- + +##### `Stack`Required + +```csharp +public TerraformStack Stack { get; } +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### IResourceConstructor + +- _Implemented By:_ IResourceConstructor + +### IScopeCallback + +- _Implemented By:_ IScopeCallback + +### IStackSynthesizer + +- _Implemented By:_ IStackSynthesizer + +Encodes information how a certain Stack should be deployed inspired by AWS CDK v2 implementation (synth functionality was removed in constructs v10). + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------- | +| Synthesize | Synthesize the associated stack to the session. | + +--- + +##### `Synthesize` + +```csharp +private void Synthesize(ISynthesisSession Session) +``` + +Synthesize the associated stack to the session. + +###### `Session`Required + +- _Type:_ ISynthesisSession + +--- + +### IStringProducer + +- _Implemented By:_ IStringProducer + +Interface for lazy string producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| Produce | Produce the string value. | + +--- + +##### `Produce` + +```csharp +private string Produce(IResolveContext Context) +``` + +Produce the string value. + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +### ISynthesisSession + +- _Implemented By:_ ISynthesisSession + +Represents a single session of synthesis. + +Passed into `TerraformStack.onSynthesize()` methods. +originally from aws/constructs lib v3.3.126 (synth functionality was removed in constructs v10) + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------------------ | +| Manifest | Manifest | _No description._ | +| Outdir | string | The output directory for this synthesis session. | +| SkipValidation | bool | _No description._ | + +--- + +##### `Manifest`Required + +```csharp +public Manifest Manifest { get; } +``` + +- _Type:_ Manifest + +--- + +##### `Outdir`Required + +```csharp +public string Outdir { get; } +``` + +- _Type:_ string + +The output directory for this synthesis session. + +--- + +##### `SkipValidation`Optional + +```csharp +public bool SkipValidation { get; } +``` + +- _Type:_ bool + +--- + +### ITerraformAddressable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, DataResource, DataTerraformRemoteState, DataTerraformRemoteStateAzurerm, DataTerraformRemoteStateConsul, DataTerraformRemoteStateCos, DataTerraformRemoteStateGcs, DataTerraformRemoteStateHttp, DataTerraformRemoteStateLocal, DataTerraformRemoteStateOss, DataTerraformRemoteStatePg, DataTerraformRemoteStateS3, DataTerraformRemoteStateSwift, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, TerraformDataSource, TerraformHclModule, TerraformLocal, TerraformModule, TerraformRemoteState, TerraformResource, TerraformVariable, ITerraformAddressable, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------ | ------------------- | ----------------- | +| Fqn | string | _No description._ | + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### ITerraformDependable + +- _Extends:_ ITerraformAddressable + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformHclModule, TerraformModule, TerraformResource, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------- | ------------------- | ----------------- | +| Fqn | string | _No description._ | + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +### ITerraformIterator + +- _Implemented By:_ DynamicListTerraformIterator, ListTerraformIterator, MapTerraformIterator, ResourceTerraformIterator, TerraformIterator, ITerraformIterator + +### ITerraformResource + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformResource, ITerraformResource + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------- | +| InterpolationForAttribute | _No description._ | + +--- + +##### `InterpolationForAttribute` + +```csharp +private IResolvable InterpolationForAttribute(string TerraformAttribute) +``` + +###### `TerraformAttribute`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| Fqn | string | _No description._ | +| FriendlyUniqueId | string | _No description._ | +| TerraformResourceType | string | _No description._ | +| Count | object | _No description._ | +| DependsOn | string[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `Fqn`Required + +```csharp +public string Fqn { get; } +``` + +- _Type:_ string + +--- + +##### `FriendlyUniqueId`Required + +```csharp +public string FriendlyUniqueId { get; } +``` + +- _Type:_ string + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; } +``` + +- _Type:_ string + +--- + +##### `Count`Optional + +```csharp +public object Count { get; set; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public string[] DependsOn { get; set; } +``` + +- _Type:_ string[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; set; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +### ITokenMapper + +- _Implemented By:_ ITokenMapper + +Interface to apply operation to tokens in a string. + +Interface so it can be exported via jsii. + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------- | ----------------------- | +| MapToken | Replace a single token. | + +--- + +##### `MapToken` + +```csharp +private object MapToken(IResolvable T) +``` + +Replace a single token. + +###### `T`Required + +- _Type:_ IResolvable + +--- + +### ITokenResolver + +- _Implemented By:_ DefaultTokenResolver, ITokenResolver + +How to resolve tokens. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------------- | +| ResolveList | Resolve a tokenized list. | +| ResolveMap | Resolve a tokenized map. | +| ResolveNumberList | Resolve a tokenized number list. | +| ResolveString | Resolve a string with at least one stringified token in it. | +| ResolveToken | Resolve a single token. | + +--- + +##### `ResolveList` + +```csharp +private object ResolveList(string[] L, IResolveContext Context) +``` + +Resolve a tokenized list. + +###### `L`Required + +- _Type:_ string[] + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveMap` + +```csharp +private object ResolveMap(System.Collections.Generic.IDictionary< string, object > M, IResolveContext Context) +``` + +Resolve a tokenized map. + +###### `M`Required + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveNumberList` + +```csharp +private object ResolveNumberList(double[] L, IResolveContext Context) +``` + +Resolve a tokenized number list. + +###### `L`Required + +- _Type:_ double[] + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveString` + +```csharp +private object ResolveString(TokenizedStringFragments S, IResolveContext Context) +``` + +Resolve a string with at least one stringified token in it. + +(May use concatenation) + +###### `S`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveToken` + +```csharp +private object ResolveToken(IResolvable T, IResolveContext Context, IPostProcessor PostProcessor) +``` + +Resolve a single token. + +###### `T`Required + +- _Type:_ IResolvable + +--- + +###### `Context`Required + +- _Type:_ IResolveContext + +--- + +###### `PostProcessor`Required + +- _Type:_ IPostProcessor + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/structs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/structs.mdx new file mode 100644 index 0000000000..ffcaa87a7b --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/csharp/structs.mdx @@ -0,0 +1,10162 @@ +--- +page_title: CSharp Reference for Structs +description: CDKTF Core API Reference for Structs in CSharp. +--- + + + +# CSharp: Structs + +### AppConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new AppConfig { + System.Collections.Generic.IDictionary< string, object > Context = null, + bool HclOutput = null, + string Outdir = null, + bool SkipBackendValidation = null, + bool SkipValidation = null, + bool StackTraces = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | --------------------------------------------------------------- | +| Context | System.Collections.Generic.IDictionary< string, object > | Additional context values for the application. | +| HclOutput | bool | _No description._ | +| Outdir | string | The directory to output Terraform resources. | +| SkipBackendValidation | bool | Whether to skip backend validation during synthesis of the app. | +| SkipValidation | bool | Whether to skip all validations during synthesis of the app. | +| StackTraces | bool | _No description._ | + +--- + +##### `Context`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Context { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `HclOutput`Optional + +```csharp +public bool HclOutput { get; set; } +``` + +- _Type:_ bool + +--- + +##### `Outdir`Optional + +```csharp +public string Outdir { get; set; } +``` + +- _Type:_ string +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `SkipBackendValidation`Optional + +```csharp +public bool SkipBackendValidation { get; set; } +``` + +- _Type:_ bool +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `SkipValidation`Optional + +```csharp +public bool SkipValidation { get; set; } +``` + +- _Type:_ bool +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `StackTraces`Optional + +```csharp +public bool StackTraces { get; set; } +``` + +- _Type:_ bool + +--- + +### AzurermBackendConfig + +Stores the state as a Blob with the given Key within the Blob Container within the Blob Storage Account. + +This backend supports state locking and consistency checking +with Azure Blob Storage native capabilities. + +Note: By default the Azure Backend uses ADAL for authentication which is deprecated +in favour of MSAL - MSAL can be used by setting use_microsoft_graph to true. +The default for this will change in Terraform 1.2, +so that MSAL authentication is used by default. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/azurerm + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new AzurermBackendConfig { + string ContainerName, + string Key, + string StorageAccountName, + string AccessKey = null, + string ClientCertificatePassword = null, + string ClientCertificatePath = null, + string ClientId = null, + string ClientSecret = null, + string Endpoint = null, + string Environment = null, + string MetadataHost = null, + string MsiEndpoint = null, + string OidcRequestToken = null, + string OidcRequestUrl = null, + string OidcToken = null, + string OidcTokenFilePath = null, + string ResourceGroupName = null, + string SasToken = null, + bool Snapshot = null, + string SubscriptionId = null, + string TenantId = null, + bool UseAzureadAuth = null, + bool UseMicrosoftGraph = null, + bool UseMsi = null, + bool UseOidc = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ContainerName | string | (Required) The Name of the Storage Container within the Storage Account. | +| Key | string | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| StorageAccountName | string | (Required) The Name of the Storage Account. | +| AccessKey | string | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| ClientCertificatePassword | string | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| ClientCertificatePath | string | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| ClientId | string | (Optional) The Client ID of the Service Principal. | +| ClientSecret | string | (Optional) The Client Secret of the Service Principal. | +| Endpoint | string | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| Environment | string | (Optional) The Azure Environment which should be used. | +| MetadataHost | string | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| MsiEndpoint | string | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| OidcRequestToken | string | (Optional) The bearer token for the request to the OIDC provider. | +| OidcRequestUrl | string | (Optional) The URL for the OIDC provider from which to request an ID token. | +| OidcToken | string | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| OidcTokenFilePath | string | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| ResourceGroupName | string | (Required) The Name of the Resource Group in which the Storage Account exists. | +| SasToken | string | (Optional) The SAS Token used to access the Blob Storage Account. | +| Snapshot | bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| SubscriptionId | string | (Optional) The Subscription ID in which the Storage Account exists. | +| TenantId | string | (Optional) The Tenant ID in which the Subscription exists. | +| UseAzureadAuth | bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| UseMicrosoftGraph | bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| UseMsi | bool | (Optional) Should Managed Service Identity authentication be used? | +| UseOidc | bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `ContainerName`Required + +```csharp +public string ContainerName { get; set; } +``` + +- _Type:_ string + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `Key`Required + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `StorageAccountName`Required + +```csharp +public string StorageAccountName { get; set; } +``` + +- _Type:_ string + +(Required) The Name of the Storage Account. + +--- + +##### `AccessKey`Optional + +```csharp +public string AccessKey { get; set; } +``` + +- _Type:_ string + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `ClientCertificatePassword`Optional + +```csharp +public string ClientCertificatePassword { get; set; } +``` + +- _Type:_ string + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `ClientCertificatePath`Optional + +```csharp +public string ClientCertificatePath { get; set; } +``` + +- _Type:_ string + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `ClientId`Optional + +```csharp +public string ClientId { get; set; } +``` + +- _Type:_ string + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `ClientSecret`Optional + +```csharp +public string ClientSecret { get; set; } +``` + +- _Type:_ string + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `Endpoint`Optional + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `Environment`Optional + +```csharp +public string Environment { get; set; } +``` + +- _Type:_ string + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `MetadataHost`Optional + +```csharp +public string MetadataHost { get; set; } +``` + +- _Type:_ string + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `MsiEndpoint`Optional + +```csharp +public string MsiEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `OidcRequestToken`Optional + +```csharp +public string OidcRequestToken { get; set; } +``` + +- _Type:_ string + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `OidcRequestUrl`Optional + +```csharp +public string OidcRequestUrl { get; set; } +``` + +- _Type:_ string + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `OidcToken`Optional + +```csharp +public string OidcToken { get; set; } +``` + +- _Type:_ string + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `OidcTokenFilePath`Optional + +```csharp +public string OidcTokenFilePath { get; set; } +``` + +- _Type:_ string + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `ResourceGroupName`Optional + +```csharp +public string ResourceGroupName { get; set; } +``` + +- _Type:_ string + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `SasToken`Optional + +```csharp +public string SasToken { get; set; } +``` + +- _Type:_ string + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `Snapshot`Optional + +```csharp +public bool Snapshot { get; set; } +``` + +- _Type:_ bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `SubscriptionId`Optional + +```csharp +public string SubscriptionId { get; set; } +``` + +- _Type:_ string + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `TenantId`Optional + +```csharp +public string TenantId { get; set; } +``` + +- _Type:_ string + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `UseAzureadAuth`Optional + +```csharp +public bool UseAzureadAuth { get; set; } +``` + +- _Type:_ bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `UseMicrosoftGraph`Optional + +```csharp +public bool UseMicrosoftGraph { get; set; } +``` + +- _Type:_ bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `UseMsi`Optional + +```csharp +public bool UseMsi { get; set; } +``` + +- _Type:_ bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `UseOidc`Optional + +```csharp +public bool UseOidc { get; set; } +``` + +- _Type:_ bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### CloudBackendConfig + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +https://developer.hashicorp.com/terraform/cli/cloud/settings#arguments + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new CloudBackendConfig { + string Organization, + object Workspaces, + string Hostname = null, + string Token = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------- | +| Organization | string | The name of the organization containing the workspace(s) the current configuration should use. | +| Workspaces | object | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| Hostname | string | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| Token | string | The token used to authenticate with Terraform Cloud. | + +--- + +##### `Organization`Required + +```csharp +public string Organization { get; set; } +``` + +- _Type:_ string + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `Workspaces`Required + +```csharp +public object Workspaces { get; set; } +``` + +- _Type:_ object + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `Hostname`Optional + +```csharp +public string Hostname { get; set; } +``` + +- _Type:_ string +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `Token`Optional + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +### ConsulBackendConfig + +Stores the state in the Consul KV store at a given path. This backend supports state locking. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/consul + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new ConsulBackendConfig { + string AccessToken, + string Path, + string Address = null, + string CaFile = null, + string CertFile = null, + string Datacenter = null, + bool Gzip = null, + string HttpAuth = null, + string KeyFile = null, + bool Lock = null, + string Scheme = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| AccessToken | string | (Required) Access token. | +| Path | string | (Required) Path in the Consul KV store. | +| Address | string | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| CaFile | string | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| CertFile | string | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| Datacenter | string | (Optional) The datacenter to use. | +| Gzip | bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| HttpAuth | string | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| KeyFile | string | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| Lock | bool | (Optional) false to disable locking. | +| Scheme | string | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `AccessToken`Required + +```csharp +public string AccessToken { get; set; } +``` + +- _Type:_ string + +(Required) Access token. + +--- + +##### `Path`Required + +```csharp +public string Path { get; set; } +``` + +- _Type:_ string + +(Required) Path in the Consul KV store. + +--- + +##### `Address`Optional + +```csharp +public string Address { get; set; } +``` + +- _Type:_ string + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `CaFile`Optional + +```csharp +public string CaFile { get; set; } +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `CertFile`Optional + +```csharp +public string CertFile { get; set; } +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `Datacenter`Optional + +```csharp +public string Datacenter { get; set; } +``` + +- _Type:_ string + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `Gzip`Optional + +```csharp +public bool Gzip { get; set; } +``` + +- _Type:_ bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `HttpAuth`Optional + +```csharp +public string HttpAuth { get; set; } +``` + +- _Type:_ string + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `KeyFile`Optional + +```csharp +public string KeyFile { get; set; } +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `Lock`Optional + +```csharp +public bool Lock { get; set; } +``` + +- _Type:_ bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `Scheme`Optional + +```csharp +public string Scheme { get; set; } +``` + +- _Type:_ string + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### CosBackendAssumeRole + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new CosBackendAssumeRole { + string RoleArn, + double SessionDuration, + string SessionName, + object Policy = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------- | +| RoleArn | string | (Required) The ARN of the role to assume. | +| SessionDuration | double | (Required) The duration of the session when making the AssumeRole call. | +| SessionName | string | (Required) The session name to use when making the AssumeRole call. | +| Policy | object | (Optional) A more restrictive policy when making the AssumeRole call. | + +--- + +##### `RoleArn`Required + +```csharp +public string RoleArn { get; set; } +``` + +- _Type:_ string + +(Required) The ARN of the role to assume. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_ARN. + +--- + +##### `SessionDuration`Required + +```csharp +public double SessionDuration { get; set; } +``` + +- _Type:_ double + +(Required) The duration of the session when making the AssumeRole call. + +Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION. + +--- + +##### `SessionName`Required + +```csharp +public string SessionName { get; set; } +``` + +- _Type:_ string + +(Required) The session name to use when making the AssumeRole call. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `Policy`Optional + +```csharp +public object Policy { get; set; } +``` + +- _Type:_ object + +(Optional) A more restrictive policy when making the AssumeRole call. + +Its content must not contains principal elements. +Please refer to {@link https://www.tencentcloud.com/document/product/598/10603 policies syntax logic}. + +--- + +### CosBackendConfig + +Stores the state as an object in a configurable prefix in a given bucket on Tencent Cloud Object Storage (COS). + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the COS bucket to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/cos + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new CosBackendConfig { + string Bucket, + bool Accelerate = null, + string Acl = null, + CosBackendAssumeRole AssumeRole = null, + string Domain = null, + bool Encrypt = null, + string Endpoint = null, + string Key = null, + string Prefix = null, + string Region = null, + string SecretId = null, + string SecretKey = null, + string SecurityToken = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Bucket | string | (Required) The name of the COS bucket. | +| Accelerate | bool | (Optional) Whether to enable global Acceleration. | +| Acl | string | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| AssumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| Domain | string | (Optional) The root domain of the API request. | +| Encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | string | (Optional) The Custom Endpoint for the COS backend. | +| Key | string | (Optional) The path for saving the state file in bucket. | +| Prefix | string | (Optional) The directory for saving the state file in bucket. | +| Region | string | (Optional) The region of the COS bucket. | +| SecretId | string | (Optional) Secret id of Tencent Cloud. | +| SecretKey | string | (Optional) Secret key of Tencent Cloud. | +| SecurityToken | string | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `Accelerate`Optional + +```csharp +public bool Accelerate { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `Acl`Optional + +```csharp +public string Acl { get; set; } +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `AssumeRole`Optional + +```csharp +public CosBackendAssumeRole AssumeRole { get; set; } +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `Domain`Optional + +```csharp +public string Domain { get; set; } +``` + +- _Type:_ string + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `Encrypt`Optional + +```csharp +public bool Encrypt { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `Key`Optional + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```csharp +public string Prefix { get; set; } +``` + +- _Type:_ string + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `Region`Optional + +```csharp +public string Region { get; set; } +``` + +- _Type:_ string + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `SecretId`Optional + +```csharp +public string SecretId { get; set; } +``` + +- _Type:_ string + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `SecretKey`Optional + +```csharp +public string SecretKey { get; set; } +``` + +- _Type:_ string + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `SecurityToken`Optional + +```csharp +public string SecurityToken { get; set; } +``` + +- _Type:_ string + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataConfig { + object Connection = null, + object Count = null, + ITerraformDependable[] DependsOn = null, + ITerraformIterator ForEach = null, + TerraformResourceLifecycle Lifecycle = null, + TerraformProvider Provider = null, + object[] Provisioners = null, + System.Collections.Generic.IDictionary< string, object > Input = null, + System.Collections.Generic.IDictionary< string, object > TriggersReplace = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| Connection | object | _No description._ | +| Count | object | _No description._ | +| DependsOn | ITerraformDependable[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | object[] | _No description._ | +| Input | System.Collections.Generic.IDictionary< string, object > | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| TriggersReplace | System.Collections.Generic.IDictionary< string, object > | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; set; } +``` + +- _Type:_ object + +--- + +##### `Count`Optional + +```csharp +public object Count { get; set; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; set; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```csharp +public object[] Provisioners { get; set; } +``` + +- _Type:_ object[] + +--- + +##### `Input`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Input { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `TriggersReplace`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > TriggersReplace { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +### DataTerraformRemoteStateAzurermConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateAzurermConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string ContainerName, + string Key, + string StorageAccountName, + string AccessKey = null, + string ClientCertificatePassword = null, + string ClientCertificatePath = null, + string ClientId = null, + string ClientSecret = null, + string Endpoint = null, + string Environment = null, + string MetadataHost = null, + string MsiEndpoint = null, + string OidcRequestToken = null, + string OidcRequestUrl = null, + string OidcToken = null, + string OidcTokenFilePath = null, + string ResourceGroupName = null, + string SasToken = null, + bool Snapshot = null, + string SubscriptionId = null, + string TenantId = null, + bool UseAzureadAuth = null, + bool UseMicrosoftGraph = null, + bool UseMsi = null, + bool UseOidc = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| ContainerName | string | (Required) The Name of the Storage Container within the Storage Account. | +| Key | string | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| StorageAccountName | string | (Required) The Name of the Storage Account. | +| AccessKey | string | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| ClientCertificatePassword | string | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| ClientCertificatePath | string | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| ClientId | string | (Optional) The Client ID of the Service Principal. | +| ClientSecret | string | (Optional) The Client Secret of the Service Principal. | +| Endpoint | string | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| Environment | string | (Optional) The Azure Environment which should be used. | +| MetadataHost | string | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| MsiEndpoint | string | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| OidcRequestToken | string | (Optional) The bearer token for the request to the OIDC provider. | +| OidcRequestUrl | string | (Optional) The URL for the OIDC provider from which to request an ID token. | +| OidcToken | string | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| OidcTokenFilePath | string | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| ResourceGroupName | string | (Required) The Name of the Resource Group in which the Storage Account exists. | +| SasToken | string | (Optional) The SAS Token used to access the Blob Storage Account. | +| Snapshot | bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| SubscriptionId | string | (Optional) The Subscription ID in which the Storage Account exists. | +| TenantId | string | (Optional) The Tenant ID in which the Subscription exists. | +| UseAzureadAuth | bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| UseMicrosoftGraph | bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| UseMsi | bool | (Optional) Should Managed Service Identity authentication be used? | +| UseOidc | bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `ContainerName`Required + +```csharp +public string ContainerName { get; set; } +``` + +- _Type:_ string + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `Key`Required + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `StorageAccountName`Required + +```csharp +public string StorageAccountName { get; set; } +``` + +- _Type:_ string + +(Required) The Name of the Storage Account. + +--- + +##### `AccessKey`Optional + +```csharp +public string AccessKey { get; set; } +``` + +- _Type:_ string + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `ClientCertificatePassword`Optional + +```csharp +public string ClientCertificatePassword { get; set; } +``` + +- _Type:_ string + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `ClientCertificatePath`Optional + +```csharp +public string ClientCertificatePath { get; set; } +``` + +- _Type:_ string + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `ClientId`Optional + +```csharp +public string ClientId { get; set; } +``` + +- _Type:_ string + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `ClientSecret`Optional + +```csharp +public string ClientSecret { get; set; } +``` + +- _Type:_ string + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `Endpoint`Optional + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `Environment`Optional + +```csharp +public string Environment { get; set; } +``` + +- _Type:_ string + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `MetadataHost`Optional + +```csharp +public string MetadataHost { get; set; } +``` + +- _Type:_ string + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `MsiEndpoint`Optional + +```csharp +public string MsiEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `OidcRequestToken`Optional + +```csharp +public string OidcRequestToken { get; set; } +``` + +- _Type:_ string + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `OidcRequestUrl`Optional + +```csharp +public string OidcRequestUrl { get; set; } +``` + +- _Type:_ string + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `OidcToken`Optional + +```csharp +public string OidcToken { get; set; } +``` + +- _Type:_ string + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `OidcTokenFilePath`Optional + +```csharp +public string OidcTokenFilePath { get; set; } +``` + +- _Type:_ string + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `ResourceGroupName`Optional + +```csharp +public string ResourceGroupName { get; set; } +``` + +- _Type:_ string + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `SasToken`Optional + +```csharp +public string SasToken { get; set; } +``` + +- _Type:_ string + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `Snapshot`Optional + +```csharp +public bool Snapshot { get; set; } +``` + +- _Type:_ bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `SubscriptionId`Optional + +```csharp +public string SubscriptionId { get; set; } +``` + +- _Type:_ string + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `TenantId`Optional + +```csharp +public string TenantId { get; set; } +``` + +- _Type:_ string + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `UseAzureadAuth`Optional + +```csharp +public bool UseAzureadAuth { get; set; } +``` + +- _Type:_ bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `UseMicrosoftGraph`Optional + +```csharp +public bool UseMicrosoftGraph { get; set; } +``` + +- _Type:_ bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `UseMsi`Optional + +```csharp +public bool UseMsi { get; set; } +``` + +- _Type:_ bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `UseOidc`Optional + +```csharp +public bool UseOidc { get; set; } +``` + +- _Type:_ bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### DataTerraformRemoteStateConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateConsulConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateConsulConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string AccessToken, + string Path, + string Address = null, + string CaFile = null, + string CertFile = null, + string Datacenter = null, + bool Gzip = null, + string HttpAuth = null, + string KeyFile = null, + bool Lock = null, + string Scheme = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| AccessToken | string | (Required) Access token. | +| Path | string | (Required) Path in the Consul KV store. | +| Address | string | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| CaFile | string | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| CertFile | string | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| Datacenter | string | (Optional) The datacenter to use. | +| Gzip | bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| HttpAuth | string | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| KeyFile | string | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| Lock | bool | (Optional) false to disable locking. | +| Scheme | string | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `AccessToken`Required + +```csharp +public string AccessToken { get; set; } +``` + +- _Type:_ string + +(Required) Access token. + +--- + +##### `Path`Required + +```csharp +public string Path { get; set; } +``` + +- _Type:_ string + +(Required) Path in the Consul KV store. + +--- + +##### `Address`Optional + +```csharp +public string Address { get; set; } +``` + +- _Type:_ string + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `CaFile`Optional + +```csharp +public string CaFile { get; set; } +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `CertFile`Optional + +```csharp +public string CertFile { get; set; } +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `Datacenter`Optional + +```csharp +public string Datacenter { get; set; } +``` + +- _Type:_ string + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `Gzip`Optional + +```csharp +public bool Gzip { get; set; } +``` + +- _Type:_ bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `HttpAuth`Optional + +```csharp +public string HttpAuth { get; set; } +``` + +- _Type:_ string + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `KeyFile`Optional + +```csharp +public string KeyFile { get; set; } +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `Lock`Optional + +```csharp +public bool Lock { get; set; } +``` + +- _Type:_ bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `Scheme`Optional + +```csharp +public string Scheme { get; set; } +``` + +- _Type:_ string + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### DataTerraformRemoteStateCosConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateCosConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Bucket, + bool Accelerate = null, + string Acl = null, + CosBackendAssumeRole AssumeRole = null, + string Domain = null, + bool Encrypt = null, + string Endpoint = null, + string Key = null, + string Prefix = null, + string Region = null, + string SecretId = null, + string SecretKey = null, + string SecurityToken = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Bucket | string | (Required) The name of the COS bucket. | +| Accelerate | bool | (Optional) Whether to enable global Acceleration. | +| Acl | string | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| AssumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| Domain | string | (Optional) The root domain of the API request. | +| Encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | string | (Optional) The Custom Endpoint for the COS backend. | +| Key | string | (Optional) The path for saving the state file in bucket. | +| Prefix | string | (Optional) The directory for saving the state file in bucket. | +| Region | string | (Optional) The region of the COS bucket. | +| SecretId | string | (Optional) Secret id of Tencent Cloud. | +| SecretKey | string | (Optional) Secret key of Tencent Cloud. | +| SecurityToken | string | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `Accelerate`Optional + +```csharp +public bool Accelerate { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `Acl`Optional + +```csharp +public string Acl { get; set; } +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `AssumeRole`Optional + +```csharp +public CosBackendAssumeRole AssumeRole { get; set; } +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `Domain`Optional + +```csharp +public string Domain { get; set; } +``` + +- _Type:_ string + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `Encrypt`Optional + +```csharp +public bool Encrypt { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `Key`Optional + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```csharp +public string Prefix { get; set; } +``` + +- _Type:_ string + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `Region`Optional + +```csharp +public string Region { get; set; } +``` + +- _Type:_ string + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `SecretId`Optional + +```csharp +public string SecretId { get; set; } +``` + +- _Type:_ string + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `SecretKey`Optional + +```csharp +public string SecretKey { get; set; } +``` + +- _Type:_ string + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `SecurityToken`Optional + +```csharp +public string SecurityToken { get; set; } +``` + +- _Type:_ string + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataTerraformRemoteStateGcsConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateGcsConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Bucket, + string AccessToken = null, + string Credentials = null, + string EncryptionKey = null, + string ImpersonateServiceAccount = null, + string[] ImpersonateServiceAccountDelegates = null, + string KmsEncryptionKey = null, + string Prefix = null, + string StoreageCustomEndpoint = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Bucket | string | (Required) The name of the GCS bucket. | +| AccessToken | string | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| Credentials | string | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| EncryptionKey | string | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| ImpersonateServiceAccount | string | (Optional) The service account to impersonate for accessing the State Bucket. | +| ImpersonateServiceAccountDelegates | string[] | (Optional) The delegation chain for an impersonating a service account. | +| KmsEncryptionKey | string | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| Prefix | string | (Optional) GCS prefix inside the bucket. | +| StoreageCustomEndpoint | string | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `AccessToken`Optional + +```csharp +public string AccessToken { get; set; } +``` + +- _Type:_ string + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `Credentials`Optional + +```csharp +public string Credentials { get; set; } +``` + +- _Type:_ string + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `EncryptionKey`Optional + +```csharp +public string EncryptionKey { get; set; } +``` + +- _Type:_ string + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `ImpersonateServiceAccount`Optional + +```csharp +public string ImpersonateServiceAccount { get; set; } +``` + +- _Type:_ string + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `ImpersonateServiceAccountDelegates`Optional + +```csharp +public string[] ImpersonateServiceAccountDelegates { get; set; } +``` + +- _Type:_ string[] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `KmsEncryptionKey`Optional + +```csharp +public string KmsEncryptionKey { get; set; } +``` + +- _Type:_ string + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `Prefix`Optional + +```csharp +public string Prefix { get; set; } +``` + +- _Type:_ string + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `StoreageCustomEndpoint`Optional + +```csharp +public string StoreageCustomEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### DataTerraformRemoteStateHttpConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateHttpConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Address, + string ClientCaCertificatePem = null, + string ClientCertificatePem = null, + string ClientPrivateKeyPem = null, + string LockAddress = null, + string LockMethod = null, + string Password = null, + double RetryMax = null, + double RetryWaitMax = null, + double RetryWaitMin = null, + bool SkipCertVerification = null, + string UnlockAddress = null, + string UnlockMethod = null, + string UpdateMethod = null, + string Username = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Address | string | (Required) The address of the REST endpoint. | +| ClientCaCertificatePem | string | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| ClientCertificatePem | string | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| ClientPrivateKeyPem | string | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| LockAddress | string | (Optional) The address of the lock REST endpoint. | +| LockMethod | string | (Optional) The HTTP method to use when locking. | +| Password | string | (Optional) The password for HTTP basic authentication. | +| RetryMax | double | (Optional) The number of HTTP request retries. | +| RetryWaitMax | double | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| RetryWaitMin | double | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| SkipCertVerification | bool | (Optional) Whether to skip TLS verification. | +| UnlockAddress | string | (Optional) The address of the unlock REST endpoint. | +| UnlockMethod | string | (Optional) The HTTP method to use when unlocking. | +| UpdateMethod | string | (Optional) HTTP method to use when updating state. | +| Username | string | (Optional) The username for HTTP basic authentication. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Address`Required + +```csharp +public string Address { get; set; } +``` + +- _Type:_ string + +(Required) The address of the REST endpoint. + +--- + +##### `ClientCaCertificatePem`Optional + +```csharp +public string ClientCaCertificatePem { get; set; } +``` + +- _Type:_ string + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `ClientCertificatePem`Optional + +```csharp +public string ClientCertificatePem { get; set; } +``` + +- _Type:_ string + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `ClientPrivateKeyPem`Optional + +```csharp +public string ClientPrivateKeyPem { get; set; } +``` + +- _Type:_ string + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `LockAddress`Optional + +```csharp +public string LockAddress { get; set; } +``` + +- _Type:_ string + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `LockMethod`Optional + +```csharp +public string LockMethod { get; set; } +``` + +- _Type:_ string + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `Password`Optional + +```csharp +public string Password { get; set; } +``` + +- _Type:_ string + +(Optional) The password for HTTP basic authentication. + +--- + +##### `RetryMax`Optional + +```csharp +public double RetryMax { get; set; } +``` + +- _Type:_ double + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `RetryWaitMax`Optional + +```csharp +public double RetryWaitMax { get; set; } +``` + +- _Type:_ double + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `RetryWaitMin`Optional + +```csharp +public double RetryWaitMin { get; set; } +``` + +- _Type:_ double + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `SkipCertVerification`Optional + +```csharp +public bool SkipCertVerification { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `UnlockAddress`Optional + +```csharp +public string UnlockAddress { get; set; } +``` + +- _Type:_ string + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `UnlockMethod`Optional + +```csharp +public string UnlockMethod { get; set; } +``` + +- _Type:_ string + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `UpdateMethod`Optional + +```csharp +public string UpdateMethod { get; set; } +``` + +- _Type:_ string + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `Username`Optional + +```csharp +public string Username { get; set; } +``` + +- _Type:_ string + +(Optional) The username for HTTP basic authentication. + +--- + +### DataTerraformRemoteStateLocalConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateLocalConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Path = null, + string WorkspaceDir = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Path | string | Path where the state file is stored. | +| WorkspaceDir | string | (Optional) The path to non-default workspaces. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Path`Optional + +```csharp +public string Path { get; set; } +``` + +- _Type:_ string +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `WorkspaceDir`Optional + +```csharp +public string WorkspaceDir { get; set; } +``` + +- _Type:_ string + +(Optional) The path to non-default workspaces. + +--- + +### DataTerraformRemoteStateOssConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateOssConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Bucket, + string AccessKey = null, + string Acl = null, + OssAssumeRole AssumeRole = null, + string AssumeRolePolicy = null, + string AssumeRoleRoleArn = null, + double AssumeRoleSessionExpiration = null, + string AssumeRoleSessionName = null, + string EcsRoleName = null, + bool Encrypt = null, + string Endpoint = null, + string Key = null, + string Prefix = null, + string Profile = null, + string Region = null, + string SecretKey = null, + string SecurityToken = null, + string SharedCredentialsFile = null, + string StsEndpoint = null, + string TablestoreEndpoint = null, + string TablestoreTable = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Bucket | string | (Required) The name of the OSS bucket. | +| AccessKey | string | (Optional) Alibaba Cloud access key. | +| Acl | string | (Optional) Object ACL to be applied to the state file. | +| AssumeRole | OssAssumeRole | _No description._ | +| AssumeRolePolicy | string | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| AssumeRoleRoleArn | string | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| AssumeRoleSessionExpiration | double | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| AssumeRoleSessionName | string | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| EcsRoleName | string | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| Encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | string | (Optional) A custom endpoint for the OSS API. | +| Key | string | (Optional) The name of the state file. | +| Prefix | string | (Optional) The path directory of the state file will be stored. | +| Profile | string | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| Region | string | (Optional) The region of the OSS bucket. | +| SecretKey | string | (Optional) Alibaba Cloud secret access key. | +| SecurityToken | string | (Optional) STS access token. | +| SharedCredentialsFile | string | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| StsEndpoint | string | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| TablestoreEndpoint | string | (Optional) A custom endpoint for the TableStore API. | +| TablestoreTable | string | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +(Required) The name of the OSS bucket. + +--- + +##### `AccessKey`Optional + +```csharp +public string AccessKey { get; set; } +``` + +- _Type:_ string + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `Acl`Optional + +```csharp +public string Acl { get; set; } +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`AssumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```csharp +public OssAssumeRole AssumeRole { get; set; } +``` + +- _Type:_ OssAssumeRole + +--- + +##### `AssumeRolePolicy`Optional + +```csharp +public string AssumeRolePolicy { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `AssumeRoleRoleArn`Optional + +```csharp +public string AssumeRoleRoleArn { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `AssumeRoleSessionExpiration`Optional + +```csharp +public double AssumeRoleSessionExpiration { get; set; } +``` + +- _Type:_ double + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `AssumeRoleSessionName`Optional + +```csharp +public string AssumeRoleSessionName { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `EcsRoleName`Optional + +```csharp +public string EcsRoleName { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `Encrypt`Optional + +```csharp +public bool Encrypt { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `Key`Optional + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```csharp +public string Prefix { get; set; } +``` + +- _Type:_ string + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `Profile`Optional + +```csharp +public string Profile { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `Region`Optional + +```csharp +public string Region { get; set; } +``` + +- _Type:_ string + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `SecretKey`Optional + +```csharp +public string SecretKey { get; set; } +``` + +- _Type:_ string + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `SecurityToken`Optional + +```csharp +public string SecurityToken { get; set; } +``` + +- _Type:_ string + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `SharedCredentialsFile`Optional + +```csharp +public string SharedCredentialsFile { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `StsEndpoint`Optional + +```csharp +public string StsEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `TablestoreEndpoint`Optional + +```csharp +public string TablestoreEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `TablestoreTable`Optional + +```csharp +public string TablestoreTable { get; set; } +``` + +- _Type:_ string + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### DataTerraformRemoteStatePgConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStatePgConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string ConnStr, + string SchemaName = null, + bool SkipIndexCreation = null, + bool SkipSchemaCreation = null, + bool SkipTableCreation = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| ConnStr | string | Postgres connection string; | +| SchemaName | string | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| SkipIndexCreation | bool | If set to true, the Postgres index must already exist. | +| SkipSchemaCreation | bool | If set to true, the Postgres schema must already exist. | +| SkipTableCreation | bool | If set to true, the Postgres table must already exist. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `ConnStr`Required + +```csharp +public string ConnStr { get; set; } +``` + +- _Type:_ string + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `SchemaName`Optional + +```csharp +public string SchemaName { get; set; } +``` + +- _Type:_ string + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `SkipIndexCreation`Optional + +```csharp +public bool SkipIndexCreation { get; set; } +``` + +- _Type:_ bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipSchemaCreation`Optional + +```csharp +public bool SkipSchemaCreation { get; set; } +``` + +- _Type:_ bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipTableCreation`Optional + +```csharp +public bool SkipTableCreation { get; set; } +``` + +- _Type:_ bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### DataTerraformRemoteStateRemoteConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateRemoteConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Organization, + IRemoteWorkspace Workspaces, + string Hostname = null, + string Token = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Organization | string | _No description._ | +| Workspaces | IRemoteWorkspace | _No description._ | +| Hostname | string | _No description._ | +| Token | string | _No description._ | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Organization`Required + +```csharp +public string Organization { get; set; } +``` + +- _Type:_ string + +--- + +##### `Workspaces`Required + +```csharp +public IRemoteWorkspace Workspaces { get; set; } +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `Hostname`Optional + +```csharp +public string Hostname { get; set; } +``` + +- _Type:_ string + +--- + +##### `Token`Optional + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateS3Config + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateS3Config { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Bucket, + string Key, + string AccessKey = null, + string Acl = null, + string[] AllowedAccountIds = null, + S3BackendAssumeRoleConfig AssumeRole = null, + string AssumeRolePolicy = null, + string[] AssumeRolePolicyArns = null, + System.Collections.Generic.IDictionary< string, string > AssumeRoleTags = null, + string[] AssumeRoleTransitiveTagKeys = null, + S3BackendAssumeRoleWithWebIdentityConfig AssumeRoleWithWebIdentity = null, + string CustomCaBundle = null, + string DynamodbEndpoint = null, + string DynamodbTable = null, + string Ec2MetadataServiceEndpoint = null, + string Ec2MetadataServiceEndpointMode = null, + bool Encrypt = null, + string Endpoint = null, + S3BackendEndpointConfig Endpoints = null, + string ExternalId = null, + string[] ForbiddenAccountIds = null, + bool ForcePathStyle = null, + string HttpProxy = null, + string HttpsProxy = null, + string IamEndpoint = null, + bool Insecure = null, + string KmsKeyId = null, + double MaxRetries = null, + string NoProxy = null, + string Profile = null, + string Region = null, + string RetryMode = null, + string RoleArn = null, + string SecretKey = null, + string SessionName = null, + string[] SharedConfigFiles = null, + string SharedCredentialsFile = null, + string[] SharedCredentialsFiles = null, + bool SkipCredentialsValidation = null, + bool SkipMetadataApiCheck = null, + bool SkipRegionValidation = null, + bool SkipRequestingAccountId = null, + bool SkipS3Checksum = null, + string SseCustomerKey = null, + string StsEndpoint = null, + string StsRegion = null, + string Token = null, + bool UseLegacyWorkflow = null, + bool UsePathStyle = null, + string WorkspaceKeyPrefix = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Bucket | string | Name of the S3 Bucket. | +| Key | string | Path to the state file inside the S3 Bucket. | +| AccessKey | string | (Optional) AWS access key. | +| Acl | string | (Optional) Canned ACL to be applied to the state file. | +| AllowedAccountIds | string[] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| AssumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| AssumeRolePolicy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| AssumeRolePolicyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| AssumeRoleTags | System.Collections.Generic.IDictionary< string, string > | (Optional) Map of assume role session tags. | +| AssumeRoleTransitiveTagKeys | string[] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| AssumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| CustomCaBundle | string | (Optional) File containing custom root and intermediate certificates. | +| DynamodbEndpoint | string | (Optional) Custom endpoint for the AWS DynamoDB API. | +| DynamodbTable | string | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| Ec2MetadataServiceEndpoint | string | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| Ec2MetadataServiceEndpointMode | string | (Optional) Mode to use in communicating with the metadata service. | +| Encrypt | bool | (Optional) Enable server side encryption of the state file. | +| Endpoint | string | (Optional) Custom endpoint for the AWS S3 API. | +| Endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| ExternalId | string | (Optional) External identifier to use when assuming the role. | +| ForbiddenAccountIds | string[] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| ForcePathStyle | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| HttpProxy | string | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| HttpsProxy | string | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| IamEndpoint | string | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| Insecure | bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| KmsKeyId | string | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| MaxRetries | double | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| NoProxy | string | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| Profile | string | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| Region | string | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| RetryMode | string | (Optional) Specifies how retries are attempted. | +| RoleArn | string | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| SecretKey | string | (Optional) AWS secret access key. | +| SessionName | string | (Optional) Session name to use when assuming the role. | +| SharedConfigFiles | string[] | (Optional) List of paths to AWS shared configuration files. | +| SharedCredentialsFile | string | (Optional) Path to the AWS shared credentials file. | +| SharedCredentialsFiles | string[] | (Optional) List of paths to AWS shared credentials files. | +| SkipCredentialsValidation | bool | (Optional) Skip credentials validation via the STS API. | +| SkipMetadataApiCheck | bool | (Optional) Skip usage of EC2 Metadata API. | +| SkipRegionValidation | bool | (Optional) Skip validation of provided region name. | +| SkipRequestingAccountId | bool | (Optional) Whether to skip requesting the account ID. | +| SkipS3Checksum | bool | (Optional) Do not include checksum when uploading S3 Objects. | +| SseCustomerKey | string | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| StsEndpoint | string | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| StsRegion | string | (Optional) AWS region for STS. | +| Token | string | (Optional) Multi-Factor Authentication (MFA) token. | +| UseLegacyWorkflow | bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| UsePathStyle | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| WorkspaceKeyPrefix | string | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `Defaults`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `Workspace`Optional + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +Name of the S3 Bucket. + +--- + +##### `Key`Required + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `AccessKey`Optional + +```csharp +public string AccessKey { get; set; } +``` + +- _Type:_ string + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `Acl`Optional + +```csharp +public string Acl { get; set; } +``` + +- _Type:_ string + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `AllowedAccountIds`Optional + +```csharp +public string[] AllowedAccountIds { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `AssumeRole`Optional + +```csharp +public S3BackendAssumeRoleConfig AssumeRole { get; set; } +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`AssumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```csharp +public string AssumeRolePolicy { get; set; } +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```csharp +public string[] AssumeRolePolicyArns { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```csharp +public System.Collections.Generic.IDictionary< string, string > AssumeRoleTags { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, string > + +(Optional) Map of assume role session tags. + +--- + +##### ~~`AssumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```csharp +public string[] AssumeRoleTransitiveTagKeys { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `AssumeRoleWithWebIdentity`Optional + +```csharp +public S3BackendAssumeRoleWithWebIdentityConfig AssumeRoleWithWebIdentity { get; set; } +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `CustomCaBundle`Optional + +```csharp +public string CustomCaBundle { get; set; } +``` + +- _Type:_ string + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`DynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```csharp +public string DynamodbEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `DynamodbTable`Optional + +```csharp +public string DynamodbTable { get; set; } +``` + +- _Type:_ string + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `Ec2MetadataServiceEndpoint`Optional + +```csharp +public string Ec2MetadataServiceEndpoint { get; set; } +``` + +- _Type:_ string + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `Ec2MetadataServiceEndpointMode`Optional + +```csharp +public string Ec2MetadataServiceEndpointMode { get; set; } +``` + +- _Type:_ string + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `Encrypt`Optional + +```csharp +public bool Encrypt { get; set; } +``` + +- _Type:_ bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`Endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `Endpoints`Optional + +```csharp +public S3BackendEndpointConfig Endpoints { get; set; } +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`ExternalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```csharp +public string ExternalId { get; set; } +``` + +- _Type:_ string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `ForbiddenAccountIds`Optional + +```csharp +public string[] ForbiddenAccountIds { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`ForcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```csharp +public bool ForcePathStyle { get; set; } +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `HttpProxy`Optional + +```csharp +public string HttpProxy { get; set; } +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `HttpsProxy`Optional + +```csharp +public string HttpsProxy { get; set; } +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`IamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```csharp +public string IamEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `Insecure`Optional + +```csharp +public bool Insecure { get; set; } +``` + +- _Type:_ bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `KmsKeyId`Optional + +```csharp +public string KmsKeyId { get; set; } +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `MaxRetries`Optional + +```csharp +public double MaxRetries { get; set; } +``` + +- _Type:_ double + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `NoProxy`Optional + +```csharp +public string NoProxy { get; set; } +``` + +- _Type:_ string + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `Profile`Optional + +```csharp +public string Profile { get; set; } +``` + +- _Type:_ string + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `Region`Optional + +```csharp +public string Region { get; set; } +``` + +- _Type:_ string + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `RetryMode`Optional + +```csharp +public string RetryMode { get; set; } +``` + +- _Type:_ string + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`RoleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```csharp +public string RoleArn { get; set; } +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `SecretKey`Optional + +```csharp +public string SecretKey { get; set; } +``` + +- _Type:_ string + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`SessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```csharp +public string SessionName { get; set; } +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +--- + +##### `SharedConfigFiles`Optional + +```csharp +public string[] SharedConfigFiles { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `SharedCredentialsFile`Optional + +```csharp +public string SharedCredentialsFile { get; set; } +``` + +- _Type:_ string + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `SharedCredentialsFiles`Optional + +```csharp +public string[] SharedCredentialsFiles { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `SkipCredentialsValidation`Optional + +```csharp +public bool SkipCredentialsValidation { get; set; } +``` + +- _Type:_ bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `SkipMetadataApiCheck`Optional + +```csharp +public bool SkipMetadataApiCheck { get; set; } +``` + +- _Type:_ bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `SkipRegionValidation`Optional + +```csharp +public bool SkipRegionValidation { get; set; } +``` + +- _Type:_ bool + +(Optional) Skip validation of provided region name. + +--- + +##### `SkipRequestingAccountId`Optional + +```csharp +public bool SkipRequestingAccountId { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `SkipS3Checksum`Optional + +```csharp +public bool SkipS3Checksum { get; set; } +``` + +- _Type:_ bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `SseCustomerKey`Optional + +```csharp +public string SseCustomerKey { get; set; } +``` + +- _Type:_ string + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`StsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```csharp +public string StsEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `StsRegion`Optional + +```csharp +public string StsRegion { get; set; } +``` + +- _Type:_ string + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `Token`Optional + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `UseLegacyWorkflow`Optional + +```csharp +public bool UseLegacyWorkflow { get; set; } +``` + +- _Type:_ bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `UsePathStyle`Optional + +```csharp +public bool UsePathStyle { get; set; } +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `WorkspaceKeyPrefix`Optional + +```csharp +public string WorkspaceKeyPrefix { get; set; } +``` + +- _Type:_ string + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### DataTerraformRemoteStateSwiftConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new DataTerraformRemoteStateSwiftConfig { + System.Collections.Generic.IDictionary< string, object > Defaults = null, + string Workspace = null, + string Container, + string ApplicationCredentialId = null, + string ApplicationCredentialName = null, + string ApplicationCredentialSecret = null, + string ArchiveContainer = null, + string AuthUrl = null, + string CacertFile = null, + string Cert = null, + string Cloud = null, + string DefaultDomain = null, + string DomainId = null, + string DomainName = null, + string ExpireAfter = null, + bool Insecure = null, + string Key = null, + string Password = null, + string ProjectDomainId = null, + string ProjectDomainName = null, + string RegionName = null, + string StateName = null, + string TenantId = null, + string TenantName = null, + string Token = null, + string UserDomainId = null, + string UserDomainName = null, + string UserId = null, + string UserName = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Defaults | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| Workspace | string | _No description._ | +| Container | string | _No description._ | +| ApplicationCredentialId | string | _No description._ | +| ApplicationCredentialName | string | _No description._ | +| ApplicationCredentialSecret | string | _No description._ | +| ArchiveContainer | string | _No description._ | +| AuthUrl | string | _No description._ | +| CacertFile | string | _No description._ | +| Cert | string | _No description._ | +| Cloud | string | _No description._ | +| DefaultDomain | string | _No description._ | +| DomainId | string | _No description._ | +| DomainName | string | _No description._ | +| ExpireAfter | string | _No description._ | +| Insecure | bool | _No description._ | +| Key | string | _No description._ | +| Password | string | _No description._ | +| ProjectDomainId | string | _No description._ | +| ProjectDomainName | string | _No description._ | +| RegionName | string | _No description._ | +| StateName | string | _No description._ | +| TenantId | string | _No description._ | +| TenantName | string | _No description._ | +| Token | string | _No description._ | +| UserDomainId | string | _No description._ | +| UserDomainName | string | _No description._ | +| UserId | string | _No description._ | +| UserName | string | _No description._ | + +--- + +##### ~~`Defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public System.Collections.Generic.IDictionary< string, object > Defaults { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### ~~`Workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Workspace { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Container { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ApplicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ApplicationCredentialId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ApplicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ApplicationCredentialName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ApplicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ApplicationCredentialSecret { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ArchiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ArchiveContainer { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`AuthUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string AuthUrl { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`CacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string CacertFile { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Cert { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Cloud { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`DefaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string DefaultDomain { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`DomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string DomainId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`DomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string DomainName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ExpireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ExpireAfter { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public bool Insecure { get; set; } +``` + +- _Type:_ bool + +--- + +##### ~~`Key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Password { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ProjectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ProjectDomainId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ProjectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ProjectDomainName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`RegionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string RegionName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`StateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string StateName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`TenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string TenantId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`TenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string TenantName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserDomainId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserDomainName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserName { get; set; } +``` + +- _Type:_ string + +--- + +### EncodingOptions + +Properties to string encodings. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new EncodingOptions { + string DisplayHint = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------- | +| DisplayHint | string | A hint for the Token's purpose when stringifying it. | + +--- + +##### `DisplayHint`Optional + +```csharp +public string DisplayHint { get; set; } +``` + +- _Type:_ string +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +### FileProvisioner + +The file provisioner copies files or directories from the machine running Terraform to the newly created resource. + +The file provisioner supports both ssh and winrm type connections. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/file file} + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new FileProvisioner { + string Destination, + string Type, + object Connection = null, + string Content = null, + string Source = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| Destination | string | The source file or directory. | +| Type | string | _No description._ | +| Connection | object | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| Content | string | The destination path to write to on the remote system. | +| Source | string | The direct content to copy on the destination. | + +--- + +##### `Destination`Required + +```csharp +public string Destination { get; set; } +``` + +- _Type:_ string + +The source file or directory. + +Specify it either relative to the current working directory or as an absolute path. +This argument cannot be combined with content. + +--- + +##### `Type`Required + +```csharp +public string Type { get; set; } +``` + +- _Type:_ string + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; set; } +``` + +- _Type:_ object + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +--- + +##### `Content`Optional + +```csharp +public string Content { get; set; } +``` + +- _Type:_ string + +The destination path to write to on the remote system. + +See Destination Paths below for more information. + +--- + +##### `Source`Optional + +```csharp +public string Source { get; set; } +``` + +- _Type:_ string + +The direct content to copy on the destination. + +If destination is a file, the content will be written on that file. +In case of a directory, a file named tf-file-content is created inside that directory. +We recommend using a file as the destination when using content. +This argument cannot be combined with source. + +--- + +### GcsBackendConfig + +Stores the state as an object in a configurable prefix in a pre-existing bucket on Google Cloud Storage (GCS). + +The bucket must exist prior to configuring the backend. + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the GCS bucket +to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/gcs + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new GcsBackendConfig { + string Bucket, + string AccessToken = null, + string Credentials = null, + string EncryptionKey = null, + string ImpersonateServiceAccount = null, + string[] ImpersonateServiceAccountDelegates = null, + string KmsEncryptionKey = null, + string Prefix = null, + string StoreageCustomEndpoint = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bucket | string | (Required) The name of the GCS bucket. | +| AccessToken | string | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| Credentials | string | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| EncryptionKey | string | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| ImpersonateServiceAccount | string | (Optional) The service account to impersonate for accessing the State Bucket. | +| ImpersonateServiceAccountDelegates | string[] | (Optional) The delegation chain for an impersonating a service account. | +| KmsEncryptionKey | string | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| Prefix | string | (Optional) GCS prefix inside the bucket. | +| StoreageCustomEndpoint | string | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `AccessToken`Optional + +```csharp +public string AccessToken { get; set; } +``` + +- _Type:_ string + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `Credentials`Optional + +```csharp +public string Credentials { get; set; } +``` + +- _Type:_ string + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `EncryptionKey`Optional + +```csharp +public string EncryptionKey { get; set; } +``` + +- _Type:_ string + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `ImpersonateServiceAccount`Optional + +```csharp +public string ImpersonateServiceAccount { get; set; } +``` + +- _Type:_ string + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `ImpersonateServiceAccountDelegates`Optional + +```csharp +public string[] ImpersonateServiceAccountDelegates { get; set; } +``` + +- _Type:_ string[] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `KmsEncryptionKey`Optional + +```csharp +public string KmsEncryptionKey { get; set; } +``` + +- _Type:_ string + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `Prefix`Optional + +```csharp +public string Prefix { get; set; } +``` + +- _Type:_ string + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `StoreageCustomEndpoint`Optional + +```csharp +public string StoreageCustomEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### HttpBackendConfig + +Stores the state using a simple REST client. + +State will be fetched via GET, updated via POST, and purged with DELETE. +The method used for updating is configurable. + +This backend optionally supports state locking. +When locking support is enabled it will use LOCK and UNLOCK requests providing the lock info in the body. +The endpoint should return a 423: Locked or 409: Conflict with the holding lock info when +it's already taken, 200: OK for success. Any other status will be considered an error. +The ID of the holding lock info will be added as a query parameter to state updates requests. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/http + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new HttpBackendConfig { + string Address, + string ClientCaCertificatePem = null, + string ClientCertificatePem = null, + string ClientPrivateKeyPem = null, + string LockAddress = null, + string LockMethod = null, + string Password = null, + double RetryMax = null, + double RetryWaitMax = null, + double RetryWaitMin = null, + bool SkipCertVerification = null, + string UnlockAddress = null, + string UnlockMethod = null, + string UpdateMethod = null, + string Username = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| Address | string | (Required) The address of the REST endpoint. | +| ClientCaCertificatePem | string | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| ClientCertificatePem | string | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| ClientPrivateKeyPem | string | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| LockAddress | string | (Optional) The address of the lock REST endpoint. | +| LockMethod | string | (Optional) The HTTP method to use when locking. | +| Password | string | (Optional) The password for HTTP basic authentication. | +| RetryMax | double | (Optional) The number of HTTP request retries. | +| RetryWaitMax | double | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| RetryWaitMin | double | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| SkipCertVerification | bool | (Optional) Whether to skip TLS verification. | +| UnlockAddress | string | (Optional) The address of the unlock REST endpoint. | +| UnlockMethod | string | (Optional) The HTTP method to use when unlocking. | +| UpdateMethod | string | (Optional) HTTP method to use when updating state. | +| Username | string | (Optional) The username for HTTP basic authentication. | + +--- + +##### `Address`Required + +```csharp +public string Address { get; set; } +``` + +- _Type:_ string + +(Required) The address of the REST endpoint. + +--- + +##### `ClientCaCertificatePem`Optional + +```csharp +public string ClientCaCertificatePem { get; set; } +``` + +- _Type:_ string + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `ClientCertificatePem`Optional + +```csharp +public string ClientCertificatePem { get; set; } +``` + +- _Type:_ string + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `ClientPrivateKeyPem`Optional + +```csharp +public string ClientPrivateKeyPem { get; set; } +``` + +- _Type:_ string + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `LockAddress`Optional + +```csharp +public string LockAddress { get; set; } +``` + +- _Type:_ string + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `LockMethod`Optional + +```csharp +public string LockMethod { get; set; } +``` + +- _Type:_ string + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `Password`Optional + +```csharp +public string Password { get; set; } +``` + +- _Type:_ string + +(Optional) The password for HTTP basic authentication. + +--- + +##### `RetryMax`Optional + +```csharp +public double RetryMax { get; set; } +``` + +- _Type:_ double + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `RetryWaitMax`Optional + +```csharp +public double RetryWaitMax { get; set; } +``` + +- _Type:_ double + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `RetryWaitMin`Optional + +```csharp +public double RetryWaitMin { get; set; } +``` + +- _Type:_ double + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `SkipCertVerification`Optional + +```csharp +public bool SkipCertVerification { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `UnlockAddress`Optional + +```csharp +public string UnlockAddress { get; set; } +``` + +- _Type:_ string + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `UnlockMethod`Optional + +```csharp +public string UnlockMethod { get; set; } +``` + +- _Type:_ string + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `UpdateMethod`Optional + +```csharp +public string UpdateMethod { get; set; } +``` + +- _Type:_ string + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `Username`Optional + +```csharp +public string Username { get; set; } +``` + +- _Type:_ string + +(Optional) The username for HTTP basic authentication. + +--- + +### LazyAnyValueOptions + +Options for creating lazy untyped tokens. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new LazyAnyValueOptions { + string DisplayHint = null, + bool OmitEmptyArray = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------ | +| DisplayHint | string | Use the given name as a display hint. | +| OmitEmptyArray | bool | If the produced value is an array and it is empty, return 'undefined' instead. | + +--- + +##### `DisplayHint`Optional + +```csharp +public string DisplayHint { get; set; } +``` + +- _Type:_ string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `OmitEmptyArray`Optional + +```csharp +public bool OmitEmptyArray { get; set; } +``` + +- _Type:_ bool +- _Default:_ false + +If the produced value is an array and it is empty, return 'undefined' instead. + +--- + +### LazyListValueOptions + +Options for creating a lazy list token. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new LazyListValueOptions { + string DisplayHint = null, + bool OmitEmpty = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------- | +| DisplayHint | string | Use the given name as a display hint. | +| OmitEmpty | bool | If the produced list is empty, return 'undefined' instead. | + +--- + +##### `DisplayHint`Optional + +```csharp +public string DisplayHint { get; set; } +``` + +- _Type:_ string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `OmitEmpty`Optional + +```csharp +public bool OmitEmpty { get; set; } +``` + +- _Type:_ bool +- _Default:_ false + +If the produced list is empty, return 'undefined' instead. + +--- + +### LazyStringValueOptions + +Options for creating a lazy string token. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new LazyStringValueOptions { + string DisplayHint = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ------------------- | ------------------------------------- | +| DisplayHint | string | Use the given name as a display hint. | + +--- + +##### `DisplayHint`Optional + +```csharp +public string DisplayHint { get; set; } +``` + +- _Type:_ string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +### LocalBackendConfig + +The local backend stores state on the local filesystem, locks that state using system APIs, and performs operations locally. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/local + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new LocalBackendConfig { + string Path = null, + string WorkspaceDir = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------- | +| Path | string | Path where the state file is stored. | +| WorkspaceDir | string | (Optional) The path to non-default workspaces. | + +--- + +##### `Path`Optional + +```csharp +public string Path { get; set; } +``` + +- _Type:_ string +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `WorkspaceDir`Optional + +```csharp +public string WorkspaceDir { get; set; } +``` + +- _Type:_ string + +(Optional) The path to non-default workspaces. + +--- + +### LocalExecProvisioner + +The local-exec provisioner invokes a local executable after a resource is created. + +This invokes a process on the machine running Terraform, not on the resource. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec local-exec} + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new LocalExecProvisioner { + string Command, + string Type, + System.Collections.Generic.IDictionary< string, string > Environment = null, + string[] Interpreter = null, + string When = null, + string WorkingDir = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| Command | string | This is the command to execute. | +| Type | string | _No description._ | +| Environment | System.Collections.Generic.IDictionary< string, string > | A record of key value pairs representing the environment of the executed command. | +| Interpreter | string[] | If provided, this is a list of interpreter arguments used to execute the command. | +| When | string | If provided, specifies when Terraform will execute the command. | +| WorkingDir | string | If provided, specifies the working directory where command will be executed. | + +--- + +##### `Command`Required + +```csharp +public string Command { get; set; } +``` + +- _Type:_ string + +This is the command to execute. + +It can be provided as a relative path to the current working directory or as an absolute path. +It is evaluated in a shell, and can use environment variables or Terraform variables. + +--- + +##### `Type`Required + +```csharp +public string Type { get; set; } +``` + +- _Type:_ string + +--- + +##### `Environment`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, string > Environment { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, string > + +A record of key value pairs representing the environment of the executed command. + +It inherits the current process environment. + +--- + +##### `Interpreter`Optional + +```csharp +public string[] Interpreter { get; set; } +``` + +- _Type:_ string[] + +If provided, this is a list of interpreter arguments used to execute the command. + +The first argument is the interpreter itself. +It can be provided as a relative path to the current working directory or as an absolute path +The remaining arguments are appended prior to the command. +This allows building command lines of the form "/bin/bash", "-c", "echo foo". +If interpreter is unspecified, sensible defaults will be chosen based on the system OS. + +--- + +##### `When`Optional + +```csharp +public string When { get; set; } +``` + +- _Type:_ string + +If provided, specifies when Terraform will execute the command. + +For example, when = destroy specifies that the provisioner will run when the associated resource is destroyed + +--- + +##### `WorkingDir`Optional + +```csharp +public string WorkingDir { get; set; } +``` + +- _Type:_ string + +If provided, specifies the working directory where command will be executed. + +It can be provided as a relative path to the current working directory or as an absolute path. +The directory must exist. + +--- + +### OssAssumeRole + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new OssAssumeRole { + string RoleArn, + string Policy = null, + double SessionExpiration = null, + string SessionName = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| RoleArn | string | _No description._ | +| Policy | string | _No description._ | +| SessionExpiration | double | _No description._ | +| SessionName | string | _No description._ | + +--- + +##### `RoleArn`Required + +```csharp +public string RoleArn { get; set; } +``` + +- _Type:_ string + +--- + +##### `Policy`Optional + +```csharp +public string Policy { get; set; } +``` + +- _Type:_ string + +--- + +##### `SessionExpiration`Optional + +```csharp +public double SessionExpiration { get; set; } +``` + +- _Type:_ double + +--- + +##### `SessionName`Optional + +```csharp +public string SessionName { get; set; } +``` + +- _Type:_ string + +--- + +### OssBackendConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new OssBackendConfig { + string Bucket, + string AccessKey = null, + string Acl = null, + OssAssumeRole AssumeRole = null, + string AssumeRolePolicy = null, + string AssumeRoleRoleArn = null, + double AssumeRoleSessionExpiration = null, + string AssumeRoleSessionName = null, + string EcsRoleName = null, + bool Encrypt = null, + string Endpoint = null, + string Key = null, + string Prefix = null, + string Profile = null, + string Region = null, + string SecretKey = null, + string SecurityToken = null, + string SharedCredentialsFile = null, + string StsEndpoint = null, + string TablestoreEndpoint = null, + string TablestoreTable = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bucket | string | (Required) The name of the OSS bucket. | +| AccessKey | string | (Optional) Alibaba Cloud access key. | +| Acl | string | (Optional) Object ACL to be applied to the state file. | +| AssumeRole | OssAssumeRole | _No description._ | +| AssumeRolePolicy | string | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| AssumeRoleRoleArn | string | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| AssumeRoleSessionExpiration | double | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| AssumeRoleSessionName | string | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| EcsRoleName | string | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| Encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | string | (Optional) A custom endpoint for the OSS API. | +| Key | string | (Optional) The name of the state file. | +| Prefix | string | (Optional) The path directory of the state file will be stored. | +| Profile | string | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| Region | string | (Optional) The region of the OSS bucket. | +| SecretKey | string | (Optional) Alibaba Cloud secret access key. | +| SecurityToken | string | (Optional) STS access token. | +| SharedCredentialsFile | string | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| StsEndpoint | string | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| TablestoreEndpoint | string | (Optional) A custom endpoint for the TableStore API. | +| TablestoreTable | string | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +(Required) The name of the OSS bucket. + +--- + +##### `AccessKey`Optional + +```csharp +public string AccessKey { get; set; } +``` + +- _Type:_ string + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `Acl`Optional + +```csharp +public string Acl { get; set; } +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`AssumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```csharp +public OssAssumeRole AssumeRole { get; set; } +``` + +- _Type:_ OssAssumeRole + +--- + +##### `AssumeRolePolicy`Optional + +```csharp +public string AssumeRolePolicy { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `AssumeRoleRoleArn`Optional + +```csharp +public string AssumeRoleRoleArn { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `AssumeRoleSessionExpiration`Optional + +```csharp +public double AssumeRoleSessionExpiration { get; set; } +``` + +- _Type:_ double + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `AssumeRoleSessionName`Optional + +```csharp +public string AssumeRoleSessionName { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `EcsRoleName`Optional + +```csharp +public string EcsRoleName { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `Encrypt`Optional + +```csharp +public bool Encrypt { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `Key`Optional + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```csharp +public string Prefix { get; set; } +``` + +- _Type:_ string + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `Profile`Optional + +```csharp +public string Profile { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `Region`Optional + +```csharp +public string Region { get; set; } +``` + +- _Type:_ string + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `SecretKey`Optional + +```csharp +public string SecretKey { get; set; } +``` + +- _Type:_ string + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `SecurityToken`Optional + +```csharp +public string SecurityToken { get; set; } +``` + +- _Type:_ string + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `SharedCredentialsFile`Optional + +```csharp +public string SharedCredentialsFile { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `StsEndpoint`Optional + +```csharp +public string StsEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `TablestoreEndpoint`Optional + +```csharp +public string TablestoreEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `TablestoreTable`Optional + +```csharp +public string TablestoreTable { get; set; } +``` + +- _Type:_ string + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### PgBackendConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new PgBackendConfig { + string ConnStr, + string SchemaName = null, + bool SkipIndexCreation = null, + bool SkipSchemaCreation = null, + bool SkipTableCreation = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------- | ------------------------------------------------------------------------------------- | +| ConnStr | string | Postgres connection string; | +| SchemaName | string | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| SkipIndexCreation | bool | If set to true, the Postgres index must already exist. | +| SkipSchemaCreation | bool | If set to true, the Postgres schema must already exist. | +| SkipTableCreation | bool | If set to true, the Postgres table must already exist. | + +--- + +##### `ConnStr`Required + +```csharp +public string ConnStr { get; set; } +``` + +- _Type:_ string + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `SchemaName`Optional + +```csharp +public string SchemaName { get; set; } +``` + +- _Type:_ string + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `SkipIndexCreation`Optional + +```csharp +public bool SkipIndexCreation { get; set; } +``` + +- _Type:_ bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipSchemaCreation`Optional + +```csharp +public bool SkipSchemaCreation { get; set; } +``` + +- _Type:_ bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipTableCreation`Optional + +```csharp +public bool SkipTableCreation { get; set; } +``` + +- _Type:_ bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### Postcondition + +Terraform checks a postcondition after evaluating the object it is associated with. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new Postcondition { + object Condition, + string ErrorMessage +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```csharp +public object Condition { get; set; } +``` + +- _Type:_ object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```csharp +public string ErrorMessage { get; set; } +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### Precondition + +Terraform checks a precondition before evaluating the object it is associated with. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new Precondition { + object Condition, + string ErrorMessage +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```csharp +public object Condition { get; set; } +``` + +- _Type:_ object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```csharp +public string ErrorMessage { get; set; } +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### RemoteBackendConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new RemoteBackendConfig { + string Organization, + IRemoteWorkspace Workspaces, + string Hostname = null, + string Token = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| Organization | string | _No description._ | +| Workspaces | IRemoteWorkspace | _No description._ | +| Hostname | string | _No description._ | +| Token | string | _No description._ | + +--- + +##### `Organization`Required + +```csharp +public string Organization { get; set; } +``` + +- _Type:_ string + +--- + +##### `Workspaces`Required + +```csharp +public IRemoteWorkspace Workspaces { get; set; } +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `Hostname`Optional + +```csharp +public string Hostname { get; set; } +``` + +- _Type:_ string + +--- + +##### `Token`Optional + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +--- + +### RemoteExecProvisioner + +The remote-exec provisioner invokes a script on a remote resource after it is created. + +This can be used to run a configuration management tool, bootstrap into a cluster, etc +The remote-exec provisioner requires a connection and supports both ssh and winrm. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/remote-exec remote-exec} + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new RemoteExecProvisioner { + string Type, + object Connection = null, + string[] Inline = null, + string Script = null, + string[] Scripts = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| Type | string | _No description._ | +| Connection | object | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| Inline | string[] | This is a list of command strings. | +| Script | string | This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. | +| Scripts | string[] | This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. | + +--- + +##### `Type`Required + +```csharp +public string Type { get; set; } +``` + +- _Type:_ string + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; set; } +``` + +- _Type:_ object + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +A connection must be provided here or in the parent resource. + +--- + +##### `Inline`Optional + +```csharp +public string[] Inline { get; set; } +``` + +- _Type:_ string[] + +This is a list of command strings. + +They are executed in the order they are provided. +This cannot be provided with script or scripts. + +--- + +##### `Script`Optional + +```csharp +public string Script { get; set; } +``` + +- _Type:_ string + +This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. + +This cannot be provided with inline or scripts. + +--- + +##### `Scripts`Optional + +```csharp +public string[] Scripts { get; set; } +``` + +- _Type:_ string[] + +This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. + +They are executed in the order they are provided. +This cannot be provided with inline or script. + +--- + +### ResolveOptions + +Options to the resolve() operation. + +NOT the same as the ResolveContext; ResolveContext is exposed to Token +implementors and resolution hooks, whereas this struct is just to bundle +a number of things that would otherwise be arguments to resolve() in a +readable way. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new ResolveOptions { + ITokenResolver Resolver, + IConstruct Scope, + bool Preparing = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------- | +| Resolver | ITokenResolver | The resolver to apply to any resolvable tokens found. | +| Scope | Constructs.IConstruct | The scope from which resolution is performed. | +| Preparing | bool | Whether the resolution is being executed during the prepare phase or not. | + +--- + +##### `Resolver`Required + +```csharp +public ITokenResolver Resolver { get; set; } +``` + +- _Type:_ ITokenResolver + +The resolver to apply to any resolvable tokens found. + +--- + +##### `Scope`Required + +```csharp +public IConstruct Scope { get; set; } +``` + +- _Type:_ Constructs.IConstruct + +The scope from which resolution is performed. + +--- + +##### `Preparing`Optional + +```csharp +public bool Preparing { get; set; } +``` + +- _Type:_ bool +- _Default:_ false + +Whether the resolution is being executed during the prepare phase or not. + +--- + +### S3BackendAssumeRoleConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new S3BackendAssumeRoleConfig { + string RoleArn, + string Duration = null, + string ExternalId = null, + string Policy = null, + string[] PolicyArns = null, + string SessionName = null, + string SourceIdentity = null, + System.Collections.Generic.IDictionary< string, string > Tags = null, + string[] TransitiveTagKeys = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| RoleArn | string | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| Duration | string | (Optional) The duration individual credentials will be valid. | +| ExternalId | string | (Optional) External identifier to use when assuming the role. | +| Policy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| PolicyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| SessionName | string | (Optional) Session name to use when assuming the role. | +| SourceIdentity | string | (Optional) Source identity specified by the principal assuming the. | +| Tags | System.Collections.Generic.IDictionary< string, string > | (Optional) Map of assume role session tags. | +| TransitiveTagKeys | string[] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | + +--- + +##### `RoleArn`Required + +```csharp +public string RoleArn { get; set; } +``` + +- _Type:_ string + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `Duration`Optional + +```csharp +public string Duration { get; set; } +``` + +- _Type:_ string + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `ExternalId`Optional + +```csharp +public string ExternalId { get; set; } +``` + +- _Type:_ string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `Policy`Optional + +```csharp +public string Policy { get; set; } +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `PolicyArns`Optional + +```csharp +public string[] PolicyArns { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `SessionName`Optional + +```csharp +public string SessionName { get; set; } +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +--- + +##### `SourceIdentity`Optional + +```csharp +public string SourceIdentity { get; set; } +``` + +- _Type:_ string + +(Optional) Source identity specified by the principal assuming the. + +--- + +##### `Tags`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, string > Tags { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, string > + +(Optional) Map of assume role session tags. + +--- + +##### `TransitiveTagKeys`Optional + +```csharp +public string[] TransitiveTagKeys { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +### S3BackendAssumeRoleWithWebIdentityConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new S3BackendAssumeRoleWithWebIdentityConfig { + string Duration = null, + string Policy = null, + string[] PolicyArns = null, + string RoleArn = null, + string SessionName = null, + string WebIdentityToken = null, + string WebIdentityTokenFile = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| Duration | string | (Optional) The duration individual credentials will be valid. | +| Policy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| PolicyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| RoleArn | string | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| SessionName | string | (Optional) Session name to use when assuming the role. | +| WebIdentityToken | string | (Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. | +| WebIdentityTokenFile | string | (Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. | + +--- + +##### `Duration`Optional + +```csharp +public string Duration { get; set; } +``` + +- _Type:_ string + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `Policy`Optional + +```csharp +public string Policy { get; set; } +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `PolicyArns`Optional + +```csharp +public string[] PolicyArns { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `RoleArn`Optional + +```csharp +public string RoleArn { get; set; } +``` + +- _Type:_ string + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +Can also be set with the AWS_ROLE_ARN environment variable. + +--- + +##### `SessionName`Optional + +```csharp +public string SessionName { get; set; } +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +Can also be set with the AWS_ROLE_SESSION_NAME environment variable. + +--- + +##### `WebIdentityToken`Optional + +```csharp +public string WebIdentityToken { get; set; } +``` + +- _Type:_ string + +(Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token or web_identity_token_file is required. + +--- + +##### `WebIdentityTokenFile`Optional + +```csharp +public string WebIdentityTokenFile { get; set; } +``` + +- _Type:_ string + +(Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token_file or web_identity_token is required. +Can also be set with the AWS_WEB_IDENTITY_TOKEN_FILE environment variable. + +--- + +### S3BackendConfig + +Stores the state as a given key in a given bucket on Amazon S3. + +This backend +also supports state locking and consistency checking via Dynamo DB, which +can be enabled by setting the dynamodb_table field to an existing DynamoDB +table name. A single DynamoDB table can be used to lock multiple remote +state files. Terraform generates key names that include the values of the +bucket and key variables. + +Warning! It is highly recommended that you enable Bucket Versioning on the +S3 bucket to allow for state recovery in the case of accidental deletions +and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/s3 + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new S3BackendConfig { + string Bucket, + string Key, + string AccessKey = null, + string Acl = null, + string[] AllowedAccountIds = null, + S3BackendAssumeRoleConfig AssumeRole = null, + string AssumeRolePolicy = null, + string[] AssumeRolePolicyArns = null, + System.Collections.Generic.IDictionary< string, string > AssumeRoleTags = null, + string[] AssumeRoleTransitiveTagKeys = null, + S3BackendAssumeRoleWithWebIdentityConfig AssumeRoleWithWebIdentity = null, + string CustomCaBundle = null, + string DynamodbEndpoint = null, + string DynamodbTable = null, + string Ec2MetadataServiceEndpoint = null, + string Ec2MetadataServiceEndpointMode = null, + bool Encrypt = null, + string Endpoint = null, + S3BackendEndpointConfig Endpoints = null, + string ExternalId = null, + string[] ForbiddenAccountIds = null, + bool ForcePathStyle = null, + string HttpProxy = null, + string HttpsProxy = null, + string IamEndpoint = null, + bool Insecure = null, + string KmsKeyId = null, + double MaxRetries = null, + string NoProxy = null, + string Profile = null, + string Region = null, + string RetryMode = null, + string RoleArn = null, + string SecretKey = null, + string SessionName = null, + string[] SharedConfigFiles = null, + string SharedCredentialsFile = null, + string[] SharedCredentialsFiles = null, + bool SkipCredentialsValidation = null, + bool SkipMetadataApiCheck = null, + bool SkipRegionValidation = null, + bool SkipRequestingAccountId = null, + bool SkipS3Checksum = null, + string SseCustomerKey = null, + string StsEndpoint = null, + string StsRegion = null, + string Token = null, + bool UseLegacyWorkflow = null, + bool UsePathStyle = null, + string WorkspaceKeyPrefix = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bucket | string | Name of the S3 Bucket. | +| Key | string | Path to the state file inside the S3 Bucket. | +| AccessKey | string | (Optional) AWS access key. | +| Acl | string | (Optional) Canned ACL to be applied to the state file. | +| AllowedAccountIds | string[] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| AssumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| AssumeRolePolicy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| AssumeRolePolicyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| AssumeRoleTags | System.Collections.Generic.IDictionary< string, string > | (Optional) Map of assume role session tags. | +| AssumeRoleTransitiveTagKeys | string[] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| AssumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| CustomCaBundle | string | (Optional) File containing custom root and intermediate certificates. | +| DynamodbEndpoint | string | (Optional) Custom endpoint for the AWS DynamoDB API. | +| DynamodbTable | string | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| Ec2MetadataServiceEndpoint | string | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| Ec2MetadataServiceEndpointMode | string | (Optional) Mode to use in communicating with the metadata service. | +| Encrypt | bool | (Optional) Enable server side encryption of the state file. | +| Endpoint | string | (Optional) Custom endpoint for the AWS S3 API. | +| Endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| ExternalId | string | (Optional) External identifier to use when assuming the role. | +| ForbiddenAccountIds | string[] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| ForcePathStyle | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| HttpProxy | string | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| HttpsProxy | string | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| IamEndpoint | string | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| Insecure | bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| KmsKeyId | string | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| MaxRetries | double | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| NoProxy | string | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| Profile | string | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| Region | string | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| RetryMode | string | (Optional) Specifies how retries are attempted. | +| RoleArn | string | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| SecretKey | string | (Optional) AWS secret access key. | +| SessionName | string | (Optional) Session name to use when assuming the role. | +| SharedConfigFiles | string[] | (Optional) List of paths to AWS shared configuration files. | +| SharedCredentialsFile | string | (Optional) Path to the AWS shared credentials file. | +| SharedCredentialsFiles | string[] | (Optional) List of paths to AWS shared credentials files. | +| SkipCredentialsValidation | bool | (Optional) Skip credentials validation via the STS API. | +| SkipMetadataApiCheck | bool | (Optional) Skip usage of EC2 Metadata API. | +| SkipRegionValidation | bool | (Optional) Skip validation of provided region name. | +| SkipRequestingAccountId | bool | (Optional) Whether to skip requesting the account ID. | +| SkipS3Checksum | bool | (Optional) Do not include checksum when uploading S3 Objects. | +| SseCustomerKey | string | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| StsEndpoint | string | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| StsRegion | string | (Optional) AWS region for STS. | +| Token | string | (Optional) Multi-Factor Authentication (MFA) token. | +| UseLegacyWorkflow | bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| UsePathStyle | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| WorkspaceKeyPrefix | string | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `Bucket`Required + +```csharp +public string Bucket { get; set; } +``` + +- _Type:_ string + +Name of the S3 Bucket. + +--- + +##### `Key`Required + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `AccessKey`Optional + +```csharp +public string AccessKey { get; set; } +``` + +- _Type:_ string + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `Acl`Optional + +```csharp +public string Acl { get; set; } +``` + +- _Type:_ string + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `AllowedAccountIds`Optional + +```csharp +public string[] AllowedAccountIds { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `AssumeRole`Optional + +```csharp +public S3BackendAssumeRoleConfig AssumeRole { get; set; } +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`AssumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```csharp +public string AssumeRolePolicy { get; set; } +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```csharp +public string[] AssumeRolePolicyArns { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```csharp +public System.Collections.Generic.IDictionary< string, string > AssumeRoleTags { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, string > + +(Optional) Map of assume role session tags. + +--- + +##### ~~`AssumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```csharp +public string[] AssumeRoleTransitiveTagKeys { get; set; } +``` + +- _Type:_ string[] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `AssumeRoleWithWebIdentity`Optional + +```csharp +public S3BackendAssumeRoleWithWebIdentityConfig AssumeRoleWithWebIdentity { get; set; } +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `CustomCaBundle`Optional + +```csharp +public string CustomCaBundle { get; set; } +``` + +- _Type:_ string + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`DynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```csharp +public string DynamodbEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `DynamodbTable`Optional + +```csharp +public string DynamodbTable { get; set; } +``` + +- _Type:_ string + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `Ec2MetadataServiceEndpoint`Optional + +```csharp +public string Ec2MetadataServiceEndpoint { get; set; } +``` + +- _Type:_ string + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `Ec2MetadataServiceEndpointMode`Optional + +```csharp +public string Ec2MetadataServiceEndpointMode { get; set; } +``` + +- _Type:_ string + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `Encrypt`Optional + +```csharp +public bool Encrypt { get; set; } +``` + +- _Type:_ bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`Endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```csharp +public string Endpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `Endpoints`Optional + +```csharp +public S3BackendEndpointConfig Endpoints { get; set; } +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`ExternalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```csharp +public string ExternalId { get; set; } +``` + +- _Type:_ string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `ForbiddenAccountIds`Optional + +```csharp +public string[] ForbiddenAccountIds { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`ForcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```csharp +public bool ForcePathStyle { get; set; } +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `HttpProxy`Optional + +```csharp +public string HttpProxy { get; set; } +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `HttpsProxy`Optional + +```csharp +public string HttpsProxy { get; set; } +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`IamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```csharp +public string IamEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `Insecure`Optional + +```csharp +public bool Insecure { get; set; } +``` + +- _Type:_ bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `KmsKeyId`Optional + +```csharp +public string KmsKeyId { get; set; } +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `MaxRetries`Optional + +```csharp +public double MaxRetries { get; set; } +``` + +- _Type:_ double + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `NoProxy`Optional + +```csharp +public string NoProxy { get; set; } +``` + +- _Type:_ string + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `Profile`Optional + +```csharp +public string Profile { get; set; } +``` + +- _Type:_ string + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `Region`Optional + +```csharp +public string Region { get; set; } +``` + +- _Type:_ string + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `RetryMode`Optional + +```csharp +public string RetryMode { get; set; } +``` + +- _Type:_ string + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`RoleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```csharp +public string RoleArn { get; set; } +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `SecretKey`Optional + +```csharp +public string SecretKey { get; set; } +``` + +- _Type:_ string + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`SessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```csharp +public string SessionName { get; set; } +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +--- + +##### `SharedConfigFiles`Optional + +```csharp +public string[] SharedConfigFiles { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `SharedCredentialsFile`Optional + +```csharp +public string SharedCredentialsFile { get; set; } +``` + +- _Type:_ string + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `SharedCredentialsFiles`Optional + +```csharp +public string[] SharedCredentialsFiles { get; set; } +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `SkipCredentialsValidation`Optional + +```csharp +public bool SkipCredentialsValidation { get; set; } +``` + +- _Type:_ bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `SkipMetadataApiCheck`Optional + +```csharp +public bool SkipMetadataApiCheck { get; set; } +``` + +- _Type:_ bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `SkipRegionValidation`Optional + +```csharp +public bool SkipRegionValidation { get; set; } +``` + +- _Type:_ bool + +(Optional) Skip validation of provided region name. + +--- + +##### `SkipRequestingAccountId`Optional + +```csharp +public bool SkipRequestingAccountId { get; set; } +``` + +- _Type:_ bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `SkipS3Checksum`Optional + +```csharp +public bool SkipS3Checksum { get; set; } +``` + +- _Type:_ bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `SseCustomerKey`Optional + +```csharp +public string SseCustomerKey { get; set; } +``` + +- _Type:_ string + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`StsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```csharp +public string StsEndpoint { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `StsRegion`Optional + +```csharp +public string StsRegion { get; set; } +``` + +- _Type:_ string + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `Token`Optional + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `UseLegacyWorkflow`Optional + +```csharp +public bool UseLegacyWorkflow { get; set; } +``` + +- _Type:_ bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `UsePathStyle`Optional + +```csharp +public bool UsePathStyle { get; set; } +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `WorkspaceKeyPrefix`Optional + +```csharp +public string WorkspaceKeyPrefix { get; set; } +``` + +- _Type:_ string + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### S3BackendEndpointConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new S3BackendEndpointConfig { + string Dynamodb = null, + string Iam = null, + string S3 = null, + string Sso = null, + string Sts = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------- | ----------------------------------------------------------------------------------------------- | +| Dynamodb | string | (Optional) Custom endpoint URL for the AWS DynamoDB API. | +| Iam | string | (Optional) Custom endpoint URL for the AWS IAM API. | +| S3 | string | (Optional) Custom endpoint URL for the AWS S3 API. | +| Sso | string | (Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. | +| Sts | string | (Optional) Custom endpoint URL for the AWS STS API. | + +--- + +##### `Dynamodb`Optional + +```csharp +public string Dynamodb { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS DynamoDB API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_DYNAMODB or the deprecated environment variable AWS_DYNAMODB_ENDPOINT. + +--- + +##### `Iam`Optional + +```csharp +public string Iam { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS IAM API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_IAM or the deprecated environment variable AWS_IAM_ENDPOINT. + +--- + +##### `S3`Optional + +```csharp +public string S3 { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS S3 API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_S3 or the deprecated environment variable AWS_S3_ENDPOINT. + +--- + +##### `Sso`Optional + +```csharp +public string Sso { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_SSO. + +--- + +##### `Sts`Optional + +```csharp +public string Sts { get; set; } +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS STS API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_STS or the deprecated environment variable AWS_STS_ENDPOINT. + +--- + +### SSHProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new SSHProvisionerConnection { + string Host, + string Type, + string Agent = null, + string AgentIdentity = null, + string BastionCertificate = null, + string BastionHost = null, + string BastionHostKey = null, + string BastionPassword = null, + double BastionPort = null, + string BastionPrivateKey = null, + string BastionUser = null, + string Certificate = null, + string HostKey = null, + string Password = null, + double Port = null, + string PrivateKey = null, + string ProxyHost = null, + double ProxyPort = null, + string ProxyScheme = null, + string ProxyUserName = null, + string ProxyUserPassword = null, + string ScriptPath = null, + string TargetPlatform = null, + string Timeout = null, + string User = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------- | +| Host | string | The address of the resource to connect to. | +| Type | string | The connection type. | +| Agent | string | Set to false to disable using ssh-agent to authenticate. | +| AgentIdentity | string | The preferred identity from the ssh agent for authentication. | +| BastionCertificate | string | The contents of a signed CA Certificate. | +| BastionHost | string | Setting this enables the bastion Host connection. | +| BastionHostKey | string | The public key from the remote host or the signing CA, used to verify the host connection. | +| BastionPassword | string | The password to use for the bastion host. | +| BastionPort | double | The port to use connect to the bastion host. | +| BastionPrivateKey | string | The contents of an SSH key file to use for the bastion host. | +| BastionUser | string | The user for the connection to the bastion host. | +| Certificate | string | The contents of a signed CA Certificate. | +| HostKey | string | The public key from the remote host or the signing CA, used to verify the connection. | +| Password | string | The password to use for the connection. | +| Port | double | The port to connect to. | +| PrivateKey | string | The contents of an SSH key to use for the connection. | +| ProxyHost | string | Setting this enables the SSH over HTTP connection. | +| ProxyPort | double | The port to use connect to the proxy host. | +| ProxyScheme | string | The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. | +| ProxyUserName | string | The username to use connect to the private proxy host. | +| ProxyUserPassword | string | The password to use connect to the private proxy host. | +| ScriptPath | string | The path used to copy scripts meant for remote execution. | +| TargetPlatform | string | The target platform to connect to. | +| Timeout | string | The timeout to wait for the connection to become available. | +| User | string | The user to use for the connection. | + +--- + +##### `Host`Required + +```csharp +public string Host { get; set; } +``` + +- _Type:_ string + +The address of the resource to connect to. + +--- + +##### `Type`Required + +```csharp +public string Type { get; set; } +``` + +- _Type:_ string + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `Agent`Optional + +```csharp +public string Agent { get; set; } +``` + +- _Type:_ string + +Set to false to disable using ssh-agent to authenticate. + +On Windows the only supported SSH authentication agent is Pageant. + +--- + +##### `AgentIdentity`Optional + +```csharp +public string AgentIdentity { get; set; } +``` + +- _Type:_ string + +The preferred identity from the ssh agent for authentication. + +--- + +##### `BastionCertificate`Optional + +```csharp +public string BastionCertificate { get; set; } +``` + +- _Type:_ string + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a bastion_private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `BastionHost`Optional + +```csharp +public string BastionHost { get; set; } +``` + +- _Type:_ string + +Setting this enables the bastion Host connection. + +The provisioner will connect to bastion_host first, and then connect from there to host. + +--- + +##### `BastionHostKey`Optional + +```csharp +public string BastionHostKey { get; set; } +``` + +- _Type:_ string + +The public key from the remote host or the signing CA, used to verify the host connection. + +--- + +##### `BastionPassword`Optional + +```csharp +public string BastionPassword { get; set; } +``` + +- _Type:_ string + +The password to use for the bastion host. + +--- + +##### `BastionPort`Optional + +```csharp +public double BastionPort { get; set; } +``` + +- _Type:_ double + +The port to use connect to the bastion host. + +--- + +##### `BastionPrivateKey`Optional + +```csharp +public string BastionPrivateKey { get; set; } +``` + +- _Type:_ string + +The contents of an SSH key file to use for the bastion host. + +These can be loaded from a file on disk using the file function. + +--- + +##### `BastionUser`Optional + +```csharp +public string BastionUser { get; set; } +``` + +- _Type:_ string + +The user for the connection to the bastion host. + +--- + +##### `Certificate`Optional + +```csharp +public string Certificate { get; set; } +``` + +- _Type:_ string + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `HostKey`Optional + +```csharp +public string HostKey { get; set; } +``` + +- _Type:_ string + +The public key from the remote host or the signing CA, used to verify the connection. + +--- + +##### `Password`Optional + +```csharp +public string Password { get; set; } +``` + +- _Type:_ string + +The password to use for the connection. + +--- + +##### `Port`Optional + +```csharp +public double Port { get; set; } +``` + +- _Type:_ double +- _Default:_ 22 + +The port to connect to. + +--- + +##### `PrivateKey`Optional + +```csharp +public string PrivateKey { get; set; } +``` + +- _Type:_ string + +The contents of an SSH key to use for the connection. + +These can be loaded from a file on disk using the file function. +This takes preference over password if provided. + +--- + +##### `ProxyHost`Optional + +```csharp +public string ProxyHost { get; set; } +``` + +- _Type:_ string + +Setting this enables the SSH over HTTP connection. + +This host will be connected to first, and then the host or bastion_host connection will be made from there. + +--- + +##### `ProxyPort`Optional + +```csharp +public double ProxyPort { get; set; } +``` + +- _Type:_ double + +The port to use connect to the proxy host. + +--- + +##### `ProxyScheme`Optional + +```csharp +public string ProxyScheme { get; set; } +``` + +- _Type:_ string + +The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. + +--- + +##### `ProxyUserName`Optional + +```csharp +public string ProxyUserName { get; set; } +``` + +- _Type:_ string + +The username to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `ProxyUserPassword`Optional + +```csharp +public string ProxyUserPassword { get; set; } +``` + +- _Type:_ string + +The password to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `ScriptPath`Optional + +```csharp +public string ScriptPath { get; set; } +``` + +- _Type:_ string + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `TargetPlatform`Optional + +```csharp +public string TargetPlatform { get; set; } +``` + +- _Type:_ string +- _Default:_ unix + +The target platform to connect to. + +Valid values are "windows" and "unix". +If the platform is set to windows, the default script*path is c:\windows\temp\terraform*%RAND%.cmd, assuming the SSH default shell is cmd.exe. +If the SSH default shell is PowerShell, set script*path to "c:/windows/temp/terraform*%RAND%.ps1" + +--- + +##### `Timeout`Optional + +```csharp +public string Timeout { get; set; } +``` + +- _Type:_ string +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `User`Optional + +```csharp +public string User { get; set; } +``` + +- _Type:_ string +- _Default:_ root + +The user to use for the connection. + +--- + +### StackAnnotation + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new StackAnnotation { + string ConstructPath, + AnnotationMetadataEntryType Level, + string Message, + string[] Stacktrace = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | +| ConstructPath | string | _No description._ | +| Level | AnnotationMetadataEntryType | _No description._ | +| Message | string | _No description._ | +| Stacktrace | string[] | _No description._ | + +--- + +##### `ConstructPath`Required + +```csharp +public string ConstructPath { get; set; } +``` + +- _Type:_ string + +--- + +##### `Level`Required + +```csharp +public AnnotationMetadataEntryType Level { get; set; } +``` + +- _Type:_ AnnotationMetadataEntryType + +--- + +##### `Message`Required + +```csharp +public string Message { get; set; } +``` + +- _Type:_ string + +--- + +##### `Stacktrace`Optional + +```csharp +public string[] Stacktrace { get; set; } +``` + +- _Type:_ string[] + +--- + +### StackManifest + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new StackManifest { + StackAnnotation[] Annotations, + string ConstructPath, + string[] Dependencies, + string Name, + string StackMetadataPath, + string SynthesizedStackPath, + string WorkingDirectory +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| Annotations | StackAnnotation[] | _No description._ | +| ConstructPath | string | _No description._ | +| Dependencies | string[] | _No description._ | +| Name | string | _No description._ | +| StackMetadataPath | string | _No description._ | +| SynthesizedStackPath | string | _No description._ | +| WorkingDirectory | string | _No description._ | + +--- + +##### `Annotations`Required + +```csharp +public StackAnnotation[] Annotations { get; set; } +``` + +- _Type:_ StackAnnotation[] + +--- + +##### `ConstructPath`Required + +```csharp +public string ConstructPath { get; set; } +``` + +- _Type:_ string + +--- + +##### `Dependencies`Required + +```csharp +public string[] Dependencies { get; set; } +``` + +- _Type:_ string[] + +--- + +##### `Name`Required + +```csharp +public string Name { get; set; } +``` + +- _Type:_ string + +--- + +##### `StackMetadataPath`Required + +```csharp +public string StackMetadataPath { get; set; } +``` + +- _Type:_ string + +--- + +##### `SynthesizedStackPath`Required + +```csharp +public string SynthesizedStackPath { get; set; } +``` + +- _Type:_ string + +--- + +##### `WorkingDirectory`Required + +```csharp +public string WorkingDirectory { get; set; } +``` + +- _Type:_ string + +--- + +### SwiftBackendConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new SwiftBackendConfig { + string Container, + string ApplicationCredentialId = null, + string ApplicationCredentialName = null, + string ApplicationCredentialSecret = null, + string ArchiveContainer = null, + string AuthUrl = null, + string CacertFile = null, + string Cert = null, + string Cloud = null, + string DefaultDomain = null, + string DomainId = null, + string DomainName = null, + string ExpireAfter = null, + bool Insecure = null, + string Key = null, + string Password = null, + string ProjectDomainId = null, + string ProjectDomainName = null, + string RegionName = null, + string StateName = null, + string TenantId = null, + string TenantName = null, + string Token = null, + string UserDomainId = null, + string UserDomainName = null, + string UserId = null, + string UserName = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| Container | string | _No description._ | +| ApplicationCredentialId | string | _No description._ | +| ApplicationCredentialName | string | _No description._ | +| ApplicationCredentialSecret | string | _No description._ | +| ArchiveContainer | string | _No description._ | +| AuthUrl | string | _No description._ | +| CacertFile | string | _No description._ | +| Cert | string | _No description._ | +| Cloud | string | _No description._ | +| DefaultDomain | string | _No description._ | +| DomainId | string | _No description._ | +| DomainName | string | _No description._ | +| ExpireAfter | string | _No description._ | +| Insecure | bool | _No description._ | +| Key | string | _No description._ | +| Password | string | _No description._ | +| ProjectDomainId | string | _No description._ | +| ProjectDomainName | string | _No description._ | +| RegionName | string | _No description._ | +| StateName | string | _No description._ | +| TenantId | string | _No description._ | +| TenantName | string | _No description._ | +| Token | string | _No description._ | +| UserDomainId | string | _No description._ | +| UserDomainName | string | _No description._ | +| UserId | string | _No description._ | +| UserName | string | _No description._ | + +--- + +##### ~~`Container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Container { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ApplicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ApplicationCredentialId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ApplicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ApplicationCredentialName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ApplicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ApplicationCredentialSecret { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ArchiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ArchiveContainer { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`AuthUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string AuthUrl { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`CacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string CacertFile { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Cert { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Cloud { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`DefaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string DefaultDomain { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`DomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string DomainId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`DomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string DomainName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ExpireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ExpireAfter { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public bool Insecure { get; set; } +``` + +- _Type:_ bool + +--- + +##### ~~`Key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Key { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Password { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ProjectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ProjectDomainId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`ProjectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string ProjectDomainName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`RegionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string RegionName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`StateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string StateName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`TenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string TenantId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`TenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string TenantName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`Token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string Token { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserDomainId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserDomainName { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserId { get; set; } +``` + +- _Type:_ string + +--- + +##### ~~`UserName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```csharp +public string UserName { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformAssetConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformAssetConfig { + string Path, + string AssetHash = null, + AssetType Type = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------- | +| Path | string | _No description._ | +| AssetHash | string | _No description._ | +| Type | AssetType | _No description._ | + +--- + +##### `Path`Required + +```csharp +public string Path { get; set; } +``` + +- _Type:_ string + +--- + +##### `AssetHash`Optional + +```csharp +public string AssetHash { get; set; } +``` + +- _Type:_ string + +--- + +##### `Type`Optional + +```csharp +public AssetType Type { get; set; } +``` + +- _Type:_ AssetType + +--- + +### TerraformCondition + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformCondition { + object Condition, + string ErrorMessage +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```csharp +public object Condition { get; set; } +``` + +- _Type:_ object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```csharp +public string ErrorMessage { get; set; } +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TerraformConstructor + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformConstructor { + string TfResourceType +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| TfResourceType | string | _No description._ | + +--- + +##### `TfResourceType`Required + +```csharp +public string TfResourceType { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformElementMetadata + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformElementMetadata { + string Path, + string[] StackTrace, + string UniqueId +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| Path | string | _No description._ | +| StackTrace | string[] | _No description._ | +| UniqueId | string | _No description._ | + +--- + +##### `Path`Required + +```csharp +public string Path { get; set; } +``` + +- _Type:_ string + +--- + +##### `StackTrace`Required + +```csharp +public string[] StackTrace { get; set; } +``` + +- _Type:_ string[] + +--- + +##### `UniqueId`Required + +```csharp +public string UniqueId { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformHclModuleConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformHclModuleConfig { + ITerraformDependable[] DependsOn = null, + ITerraformIterator ForEach = null, + object[] Providers = null, + bool SkipAssetCreationFromLocalModules = null, + string Source, + string Version = null, + System.Collections.Generic.IDictionary< string, object > Variables = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| DependsOn | ITerraformDependable[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Providers | object[] | _No description._ | +| SkipAssetCreationFromLocalModules | bool | _No description._ | +| Source | string | _No description._ | +| Version | string | _No description._ | +| Variables | System.Collections.Generic.IDictionary< string, object > | _No description._ | + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Providers`Optional + +```csharp +public object[] Providers { get; set; } +``` + +- _Type:_ object[] + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```csharp +public bool SkipAssetCreationFromLocalModules { get; set; } +``` + +- _Type:_ bool + +--- + +##### `Source`Required + +```csharp +public string Source { get; set; } +``` + +- _Type:_ string + +--- + +##### `Version`Optional + +```csharp +public string Version { get; set; } +``` + +- _Type:_ string + +--- + +##### `Variables`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Variables { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +### TerraformMetaArguments + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformMetaArguments { + object Connection = null, + object Count = null, + ITerraformDependable[] DependsOn = null, + ITerraformIterator ForEach = null, + TerraformResourceLifecycle Lifecycle = null, + TerraformProvider Provider = null, + object[] Provisioners = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| Connection | object | _No description._ | +| Count | object | _No description._ | +| DependsOn | ITerraformDependable[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | object[] | _No description._ | + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; set; } +``` + +- _Type:_ object + +--- + +##### `Count`Optional + +```csharp +public object Count { get; set; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; set; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```csharp +public object[] Provisioners { get; set; } +``` + +- _Type:_ object[] + +--- + +### TerraformModuleConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformModuleConfig { + ITerraformDependable[] DependsOn = null, + ITerraformIterator ForEach = null, + object[] Providers = null, + bool SkipAssetCreationFromLocalModules = null, + string Source, + string Version = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------- | +| DependsOn | ITerraformDependable[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Providers | object[] | _No description._ | +| SkipAssetCreationFromLocalModules | bool | _No description._ | +| Source | string | _No description._ | +| Version | string | _No description._ | + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Providers`Optional + +```csharp +public object[] Providers { get; set; } +``` + +- _Type:_ object[] + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```csharp +public bool SkipAssetCreationFromLocalModules { get; set; } +``` + +- _Type:_ bool + +--- + +##### `Source`Required + +```csharp +public string Source { get; set; } +``` + +- _Type:_ string + +--- + +##### `Version`Optional + +```csharp +public string Version { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformModuleProvider + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformModuleProvider { + string ModuleAlias, + TerraformProvider Provider +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| ModuleAlias | string | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `ModuleAlias`Required + +```csharp +public string ModuleAlias { get; set; } +``` + +- _Type:_ string + +--- + +##### `Provider`Required + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformModuleUserConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformModuleUserConfig { + ITerraformDependable[] DependsOn = null, + ITerraformIterator ForEach = null, + object[] Providers = null, + bool SkipAssetCreationFromLocalModules = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| DependsOn | ITerraformDependable[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Providers | object[] | _No description._ | +| SkipAssetCreationFromLocalModules | bool | _No description._ | + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Providers`Optional + +```csharp +public object[] Providers { get; set; } +``` + +- _Type:_ object[] + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```csharp +public bool SkipAssetCreationFromLocalModules { get; set; } +``` + +- _Type:_ bool + +--- + +### TerraformOutputConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformOutputConfig { + object Value, + ITerraformDependable[] DependsOn = null, + string Description = null, + Precondition Precondition = null, + bool Sensitive = null, + bool StaticId = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Value | object | _No description._ | +| DependsOn | ITerraformDependable[] | _No description._ | +| Description | string | _No description._ | +| Precondition | Precondition | _No description._ | +| Sensitive | bool | _No description._ | +| StaticId | bool | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `Value`Required + +```csharp +public object Value { get; set; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `Description`Optional + +```csharp +public string Description { get; set; } +``` + +- _Type:_ string + +--- + +##### `Precondition`Optional + +```csharp +public Precondition Precondition { get; set; } +``` + +- _Type:_ Precondition + +--- + +##### `Sensitive`Optional + +```csharp +public bool Sensitive { get; set; } +``` + +- _Type:_ bool + +--- + +##### `StaticId`Optional + +```csharp +public bool StaticId { get; set; } +``` + +- _Type:_ bool +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +### TerraformProviderConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformProviderConfig { + string TerraformResourceType, + TerraformProviderGeneratorMetadata TerraformGeneratorMetadata = null, + string TerraformProviderSource = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| TerraformResourceType | string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| TerraformProviderSource | string | _No description._ | + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; set; } +``` + +- _Type:_ string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```csharp +public TerraformProviderGeneratorMetadata TerraformGeneratorMetadata { get; set; } +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `TerraformProviderSource`Optional + +```csharp +public string TerraformProviderSource { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformProviderGeneratorMetadata + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformProviderGeneratorMetadata { + string ProviderName, + string ProviderVersion = null, + string ProviderVersionConstraint = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| ProviderName | string | _No description._ | +| ProviderVersion | string | _No description._ | +| ProviderVersionConstraint | string | _No description._ | + +--- + +##### `ProviderName`Required + +```csharp +public string ProviderName { get; set; } +``` + +- _Type:_ string + +--- + +##### `ProviderVersion`Optional + +```csharp +public string ProviderVersion { get; set; } +``` + +- _Type:_ string + +--- + +##### `ProviderVersionConstraint`Optional + +```csharp +public string ProviderVersionConstraint { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformResourceConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformResourceConfig { + object Connection = null, + object Count = null, + ITerraformDependable[] DependsOn = null, + ITerraformIterator ForEach = null, + TerraformResourceLifecycle Lifecycle = null, + TerraformProvider Provider = null, + object[] Provisioners = null, + string TerraformResourceType, + TerraformProviderGeneratorMetadata TerraformGeneratorMetadata = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Connection | object | _No description._ | +| Count | object | _No description._ | +| DependsOn | ITerraformDependable[] | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | object[] | _No description._ | +| TerraformResourceType | string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `Connection`Optional + +```csharp +public object Connection { get; set; } +``` + +- _Type:_ object + +--- + +##### `Count`Optional + +```csharp +public object Count { get; set; } +``` + +- _Type:_ object + +--- + +##### `DependsOn`Optional + +```csharp +public ITerraformDependable[] DependsOn { get; set; } +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `ForEach`Optional + +```csharp +public ITerraformIterator ForEach { get; set; } +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```csharp +public TerraformResourceLifecycle Lifecycle { get; set; } +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```csharp +public object[] Provisioners { get; set; } +``` + +- _Type:_ object[] + +--- + +##### `TerraformResourceType`Required + +```csharp +public string TerraformResourceType { get; set; } +``` + +- _Type:_ string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```csharp +public TerraformProviderGeneratorMetadata TerraformGeneratorMetadata { get; set; } +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +### TerraformResourceImport + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformResourceImport { + string Id, + TerraformProvider Provider = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| Id | string | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `Id`Required + +```csharp +public string Id { get; set; } +``` + +- _Type:_ string + +--- + +##### `Provider`Optional + +```csharp +public TerraformProvider Provider { get; set; } +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformResourceLifecycle + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformResourceLifecycle { + bool CreateBeforeDestroy = null, + object IgnoreChanges = null, + Postcondition[] Postcondition = null, + Precondition[] Precondition = null, + bool PreventDestroy = null, + object[] ReplaceTriggeredBy = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| CreateBeforeDestroy | bool | _No description._ | +| IgnoreChanges | object | _No description._ | +| Postcondition | Postcondition[] | _No description._ | +| Precondition | Precondition[] | _No description._ | +| PreventDestroy | bool | _No description._ | +| ReplaceTriggeredBy | object[] | _No description._ | + +--- + +##### `CreateBeforeDestroy`Optional + +```csharp +public bool CreateBeforeDestroy { get; set; } +``` + +- _Type:_ bool + +--- + +##### `IgnoreChanges`Optional + +```csharp +public object IgnoreChanges { get; set; } +``` + +- _Type:_ object + +--- + +##### `Postcondition`Optional + +```csharp +public Postcondition[] Postcondition { get; set; } +``` + +- _Type:_ Postcondition[] + +--- + +##### `Precondition`Optional + +```csharp +public Precondition[] Precondition { get; set; } +``` + +- _Type:_ Precondition[] + +--- + +##### `PreventDestroy`Optional + +```csharp +public bool PreventDestroy { get; set; } +``` + +- _Type:_ bool + +--- + +##### `ReplaceTriggeredBy`Optional + +```csharp +public object[] ReplaceTriggeredBy { get; set; } +``` + +- _Type:_ object[] + +--- + +### TerraformResourceMoveById + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformResourceMoveById { + string From, + string To +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------- | ----------------- | +| From | string | _No description._ | +| To | string | _No description._ | + +--- + +##### `From`Required + +```csharp +public string From { get; set; } +``` + +- _Type:_ string + +--- + +##### `To`Required + +```csharp +public string To { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformResourceMoveByTarget + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformResourceMoveByTarget { + string MoveTarget, + object Index = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| MoveTarget | string | _No description._ | +| Index | object | _No description._ | + +--- + +##### `MoveTarget`Required + +```csharp +public string MoveTarget { get; set; } +``` + +- _Type:_ string + +--- + +##### `Index`Optional + +```csharp +public object Index { get; set; } +``` + +- _Type:_ object + +--- + +### TerraformStackMetadata + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformStackMetadata { + string Backend, + string StackName, + string Version, + string Cloud = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| Backend | string | _No description._ | +| StackName | string | _No description._ | +| Version | string | _No description._ | +| Cloud | string | _No description._ | + +--- + +##### `Backend`Required + +```csharp +public string Backend { get; set; } +``` + +- _Type:_ string + +--- + +##### `StackName`Required + +```csharp +public string StackName { get; set; } +``` + +- _Type:_ string + +--- + +##### `Version`Required + +```csharp +public string Version { get; set; } +``` + +- _Type:_ string + +--- + +##### `Cloud`Optional + +```csharp +public string Cloud { get; set; } +``` + +- _Type:_ string + +--- + +### TerraformVariableConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformVariableConfig { + object Default = null, + string Description = null, + bool Nullable = null, + bool Sensitive = null, + string Type = null, + TerraformVariableValidationConfig[] Validation = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| Default | object | _No description._ | +| Description | string | _No description._ | +| Nullable | bool | _No description._ | +| Sensitive | bool | _No description._ | +| Type | string | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| Validation | TerraformVariableValidationConfig[] | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `Default`Optional + +```csharp +public object Default { get; set; } +``` + +- _Type:_ object + +--- + +##### `Description`Optional + +```csharp +public string Description { get; set; } +``` + +- _Type:_ string + +--- + +##### `Nullable`Optional + +```csharp +public bool Nullable { get; set; } +``` + +- _Type:_ bool + +--- + +##### `Sensitive`Optional + +```csharp +public bool Sensitive { get; set; } +``` + +- _Type:_ bool + +--- + +##### `Type`Optional + +```csharp +public string Type { get; set; } +``` + +- _Type:_ string + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(< TYPE >) +- set(< TYPE >) +- map(< TYPE >) +- object({< ATTR NAME > = < TYPE >, ... }) +- tuple([< TYPE >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `Validation`Optional + +```csharp +public TerraformVariableValidationConfig[] Validation { get; set; } +``` + +- _Type:_ TerraformVariableValidationConfig[] + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +### TerraformVariableValidationConfig + +Add one or more validation blocks within the variable block to specify custom conditions. + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TerraformVariableValidationConfig { + object Condition, + string ErrorMessage +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```csharp +public object Condition { get; set; } +``` + +- _Type:_ object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```csharp +public string ErrorMessage { get; set; } +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TestingAppConfig + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new TestingAppConfig { + System.Collections.Generic.IDictionary< string, object > Context = null, + bool EnableFutureFlags = null, + bool FakeCdktfJsonPath = null, + string Outdir = null, + bool StackTraces = null, + bool StubVersion = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Context | System.Collections.Generic.IDictionary< string, object > | _No description._ | +| EnableFutureFlags | bool | _No description._ | +| FakeCdktfJsonPath | bool | _No description._ | +| Outdir | string | _No description._ | +| StackTraces | bool | _No description._ | +| StubVersion | bool | _No description._ | + +--- + +##### `Context`Optional + +```csharp +public System.Collections.Generic.IDictionary< string, object > Context { get; set; } +``` + +- _Type:_ System.Collections.Generic.IDictionary< string, object > + +--- + +##### `EnableFutureFlags`Optional + +```csharp +public bool EnableFutureFlags { get; set; } +``` + +- _Type:_ bool + +--- + +##### `FakeCdktfJsonPath`Optional + +```csharp +public bool FakeCdktfJsonPath { get; set; } +``` + +- _Type:_ bool + +--- + +##### `Outdir`Optional + +```csharp +public string Outdir { get; set; } +``` + +- _Type:_ string + +--- + +##### `StackTraces`Optional + +```csharp +public bool StackTraces { get; set; } +``` + +- _Type:_ bool + +--- + +##### `StubVersion`Optional + +```csharp +public bool StubVersion { get; set; } +``` + +- _Type:_ bool + +--- + +### WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```csharp +using HashiCorp.Cdktf; + +new WinrmProvisionerConnection { + string Host, + string Type, + string Cacert = null, + bool Https = null, + bool Insecure = null, + string Password = null, + double Port = null, + string ScriptPath = null, + string Timeout = null, + bool UseNtlm = null, + string User = null +}; +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Host | string | The address of the resource to connect to. | +| Type | string | The connection type. | +| Cacert | string | The CA certificate to validate against. | +| Https | bool | Set to true to connect using HTTPS instead of HTTP. | +| Insecure | bool | Set to true to skip validating the HTTPS certificate chain. | +| Password | string | The password to use for the connection. | +| Port | double | The port to connect to. | +| ScriptPath | string | The path used to copy scripts meant for remote execution. | +| Timeout | string | The timeout to wait for the connection to become available. | +| UseNtlm | bool | Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. | +| User | string | The user to use for the connection. | + +--- + +##### `Host`Required + +```csharp +public string Host { get; set; } +``` + +- _Type:_ string + +The address of the resource to connect to. + +--- + +##### `Type`Required + +```csharp +public string Type { get; set; } +``` + +- _Type:_ string + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `Cacert`Optional + +```csharp +public string Cacert { get; set; } +``` + +- _Type:_ string + +The CA certificate to validate against. + +--- + +##### `Https`Optional + +```csharp +public bool Https { get; set; } +``` + +- _Type:_ bool + +Set to true to connect using HTTPS instead of HTTP. + +--- + +##### `Insecure`Optional + +```csharp +public bool Insecure { get; set; } +``` + +- _Type:_ bool + +Set to true to skip validating the HTTPS certificate chain. + +--- + +##### `Password`Optional + +```csharp +public string Password { get; set; } +``` + +- _Type:_ string + +The password to use for the connection. + +--- + +##### `Port`Optional + +```csharp +public double Port { get; set; } +``` + +- _Type:_ double +- _Default:_ 22 + +The port to connect to. + +--- + +##### `ScriptPath`Optional + +```csharp +public string ScriptPath { get; set; } +``` + +- _Type:_ string + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `Timeout`Optional + +```csharp +public string Timeout { get; set; } +``` + +- _Type:_ string +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `UseNtlm`Optional + +```csharp +public bool UseNtlm { get; set; } +``` + +- _Type:_ bool + +Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. + +Refer to Authentication for Remote Connections in the Windows App Development documentation for more details. + +--- + +##### `User`Optional + +```csharp +public string User { get; set; } +``` + +- _Type:_ string +- _Default:_ root + +The user to use for the connection. + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/classes.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/classes.mdx new file mode 100644 index 0000000000..edf70c78e5 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/classes.mdx @@ -0,0 +1,13127 @@ +--- +page_title: Go Reference for Classes +description: CDKTF Core API Reference for Classes in Go. +--- + + + +# Go: Classes + +### Annotations + +Includes API for attaching annotations such as warning messages to constructs. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ------------------------------------------------------------------ | +| AddError | Adds an { "error": < message > } metadata entry to this construct. | +| AddInfo | Adds an info metadata entry to this construct. | +| AddWarning | Adds a warning metadata entry to this construct. | + +--- + +##### `AddError` + +```go +func AddError(message *string) +``` + +Adds an { "error": < message > } metadata entry to this construct. + +The toolkit will fail synthesis when errors are reported. + +###### `message`Required + +- _Type:_ \*string + +The error message. + +--- + +##### `AddInfo` + +```go +func AddInfo(message *string) +``` + +Adds an info metadata entry to this construct. + +The CLI will display the info message when apps are synthesized. + +###### `message`Required + +- _Type:_ \*string + +The info message. + +--- + +##### `AddWarning` + +```go +func AddWarning(message *string) +``` + +Adds a warning metadata entry to this construct. + +The CLI will display the warning when an app is synthesized. +In a future release the CLI might introduce a --strict flag which +will then fail the synthesis if it encounters a warning. + +###### `message`Required + +- _Type:_ \*string + +The warning message. + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------- | -------------------------------------------------- | +| Of | Returns the annotations API for a construct scope. | + +--- + +##### `Of` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Annotations_Of(scope IConstruct) Annotations +``` + +Returns the annotations API for a construct scope. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +The scope. + +--- + +### AnyListList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewAnyListList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) AnyListList +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```go +func AllWithMapKey(mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) IResolvable +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### AnyListMap + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewAnyListMap(terraformResource IInterpolatingParent, terraformAttribute *string) AnyListMap +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(key *string) IResolvable +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### AnyMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewAnyMap(terraformResource IInterpolatingParent, terraformAttribute *string) AnyMap +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Lookup` + +```go +func Lookup(key *string) interface{} +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### AnyMapList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewAnyMapList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) AnyMapList +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) AnyMap +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### Aspects + +Aspects can be applied to CDK tree scopes and can operate on the tree before synthesis. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------- | ---------------------------------------------------- | +| Add | Adds an aspect to apply this scope before synthesis. | + +--- + +##### `Add` + +```go +func Add(aspect IAspect) +``` + +Adds an aspect to apply this scope before synthesis. + +###### `aspect`Required + +- _Type:_ IAspect + +The aspect to add. + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------- | --------------------------------------------------------------- | +| Of | Returns the `Aspects` object associated with a construct scope. | + +--- + +##### `Of` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Aspects_Of(scope IConstruct) Aspects +``` + +Returns the `Aspects` object associated with a construct scope. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +The scope for which these aspects will apply. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------- | ----------------------------------------------------- | -------------------------------------------------------------- | +| All | \*[]IAspect | The list of aspects which were directly applied on this scope. | + +--- + +##### `All`Required + +```go +func All() *[]IAspect +``` + +- _Type:_ \*[]IAspect + +The list of aspects which were directly applied on this scope. + +--- + +### AssertionReturn + +Class representing the contents of a return by an assertion. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf/testingmatchers" + +testingmatchers.NewAssertionReturn(message *string, pass *bool) AssertionReturn +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------- | -------------------------------------------------------------------------- | +| message | \*string | - String message containing information about the result of the assertion. | +| pass | \*bool | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +- _Type:_ \*string + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +- _Type:_ \*bool + +Boolean pass denoting the success of the assertion. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------- | -------------------------------------------------------------------------- | +| Message | \*string | - String message containing information about the result of the assertion. | +| Pass | \*bool | - Boolean pass denoting the success of the assertion. | + +--- + +##### `Message`Required + +```go +func Message() *string +``` + +- _Type:_ \*string + +String message containing information about the result of the assertion. + +--- + +##### `Pass`Required + +```go +func Pass() *bool +``` + +- _Type:_ \*bool + +Boolean pass denoting the success of the assertion. + +--- + +### BooleanList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewBooleanList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) BooleanList +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```go +func AllWithMapKey(mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) IResolvable +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### BooleanListList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewBooleanListList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) BooleanListList +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```go +func AllWithMapKey(mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) IResolvable +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### BooleanListMap + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewBooleanListMap(terraformResource IInterpolatingParent, terraformAttribute *string) BooleanListMap +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(key *string) IResolvable +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### BooleanMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewBooleanMap(terraformResource IInterpolatingParent, terraformAttribute *string) BooleanMap +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Lookup` + +```go +func Lookup(key *string) IResolvable +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### BooleanMapList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewBooleanMapList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) BooleanMapList +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) BooleanMap +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### CloudWorkspace + +A cloud workspace can either be a single named workspace, or a list of tagged workspaces. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewCloudWorkspace() CloudWorkspace +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| ToTerraform | _No description._ | + +--- + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +### ComplexComputedList + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewComplexComputedList(terraformResource IInterpolatingParent, terraformAttribute *string, complexComputedListIndex *string, wrapsSet *bool) ComplexComputedList +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| complexComputedListIndex | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `complexComputedListIndex`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Optional + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### ~~`ComputeFqn`~~ + +```go +func ComputeFqn() *string +``` + +##### ~~`GetAnyMapAttribute`~~ + +```go +func GetAnyMapAttribute(terraformAttribute *string) *map[string]interface{} +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetBooleanAttribute`~~ + +```go +func GetBooleanAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetBooleanMapAttribute`~~ + +```go +func GetBooleanMapAttribute(terraformAttribute *string) *map[string]*bool +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetListAttribute`~~ + +```go +func GetListAttribute(terraformAttribute *string) *[]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetNumberAttribute`~~ + +```go +func GetNumberAttribute(terraformAttribute *string) *f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetNumberListAttribute`~~ + +```go +func GetNumberListAttribute(terraformAttribute *string) *[]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetNumberMapAttribute`~~ + +```go +func GetNumberMapAttribute(terraformAttribute *string) *map[string]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetStringAttribute`~~ + +```go +func GetStringAttribute(terraformAttribute *string) *string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`GetStringMapAttribute`~~ + +```go +func GetStringMapAttribute(terraformAttribute *string) *map[string]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### ~~`InterpolationForAttribute`~~ + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### ~~`Resolve`~~ + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### ~~`ToString`~~ + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### ~~`CreationStack`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### ~~`Fqn`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### ComplexList + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewComplexList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) ComplexList +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `AllWithMapKey` + +```go +func AllWithMapKey(mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### ComplexMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewComplexMap(terraformResource IInterpolatingParent, terraformAttribute *string) ComplexMap +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### ComplexObject + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewComplexObject(terraformResource IInterpolatingParent, terraformAttribute *string, complexObjectIsFromSet *bool, complexObjectIndex interface{}) ComplexObject +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| complexObjectIsFromSet | \*bool | set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. | +| complexObjectIndex | interface{} | the index of the complex object in a list. | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `complexObjectIsFromSet`Required + +- _Type:_ \*bool + +set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. + +--- + +##### `complexObjectIndex`Optional + +- _Type:_ interface{} + +the index of the complex object in a list. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `GetAnyMapAttribute` + +```go +func GetAnyMapAttribute(terraformAttribute *string) *map[string]interface{} +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanAttribute` + +```go +func GetBooleanAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanMapAttribute` + +```go +func GetBooleanMapAttribute(terraformAttribute *string) *map[string]*bool +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetListAttribute` + +```go +func GetListAttribute(terraformAttribute *string) *[]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberAttribute` + +```go +func GetNumberAttribute(terraformAttribute *string) *f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberListAttribute` + +```go +func GetNumberListAttribute(terraformAttribute *string) *[]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberMapAttribute` + +```go +func GetNumberMapAttribute(terraformAttribute *string) *map[string]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringAttribute` + +```go +func GetStringAttribute(terraformAttribute *string) *string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringMapAttribute` + +```go +func GetStringMapAttribute(terraformAttribute *string) *map[string]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### DefaultTokenResolver + +- _Implements:_ ITokenResolver + +Default resolver implementation. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDefaultTokenResolver(concat IFragmentConcatenator) DefaultTokenResolver +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------- | +| concat | IFragmentConcatenator | _No description._ | + +--- + +##### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------- | +| ResolveList | Resolves a list of string. | +| ResolveMap | Resolves a map token. | +| ResolveNumberList | Resolves a list of numbers. | +| ResolveString | Resolve string fragments to Tokens. | +| ResolveToken | Default Token resolution. | + +--- + +##### `ResolveList` + +```go +func ResolveList(xs *[]*string, context IResolveContext) interface{} +``` + +Resolves a list of string. + +###### `xs`Required + +- _Type:_ *[]*string + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveMap` + +```go +func ResolveMap(xs *map[string]interface{}, context IResolveContext) interface{} +``` + +Resolves a map token. + +###### `xs`Required + +- _Type:_ \*map[string]interface{} + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveNumberList` + +```go +func ResolveNumberList(xs *[]*f64, context IResolveContext) interface{} +``` + +Resolves a list of numbers. + +###### `xs`Required + +- _Type:_ *[]*f64 + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveString` + +```go +func ResolveString(fragments TokenizedStringFragments, context IResolveContext) interface{} +``` + +Resolve string fragments to Tokens. + +###### `fragments`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveToken` + +```go +func ResolveToken(t IResolvable, context IResolveContext, postProcessor IPostProcessor) interface{} +``` + +Default Token resolution. + +Resolve the Token, recurse into whatever it returns, +then finally post-process it. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +### DynamicListTerraformIterator + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDynamicListTerraformIterator(list interface{}, mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ----------------- | +| list | interface{} | _No description._ | +| mapKeyAttributeName | \*string | _No description._ | + +--- + +##### `list`Required + +- _Type:_ interface{} + +--- + +##### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```go +func Dynamic(attributes *map[string]interface{}) IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ \*map[string]interface{} + +--- + +##### `ForExpressionForList` + +```go +func ForExpressionForList(expression interface{}) IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ interface{} + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```go +func ForExpressionForMap(keyExpression interface{}, valueExpression interface{}) IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ interface{} + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ interface{} + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```go +func GetAny(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```go +func GetAnyMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```go +func GetBoolean(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```go +func GetBooleanMap(attribute *string) *map[string]*bool +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetList` + +```go +func GetList(attribute *string) *[]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```go +func GetMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```go +func GetNumber(attribute *string) *f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```go +func GetNumberList(attribute *string) *[]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```go +func GetNumberMap(attribute *string) *map[string]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetString` + +```go +func GetString(attribute *string) *string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```go +func GetStringMap(attribute *string) *map[string]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `Keys` + +```go +func Keys() IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```go +func PluckProperty(property *string) IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ \*string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```go +func Values() IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DynamicListTerraformIterator_FromComplexList(list interface{}, mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```go +// Example automatically generated from non-compiling source. May contain errors. +cert := NewAcmCertificate(this, jsii.String("cert"), map[string]*string{ + "domainName": jsii.String("example.com"), + "validationMethod": jsii.String("DNS"), +}) + +dvoIterator := terraformIterator_FromComplexList(cert.domainValidationOptions, jsii.String("domain_name")) + +NewRoute53Record(this, jsii.String("record"), map[string]interface{}{ + "allowOverwrite": jsii.Boolean(true), + "name": dvoIterator.getString(jsii.String("name")), + "records": []interface{}{ + dvoIterator.getString(jsii.String("record")), + }, + "ttl": jsii.Number(60), + "type": dvoIterator.getString(jsii.String("type")), + "zoneId": Token_asString(dataAwsRoute53ZoneExample.zoneId), + "forEach": dvoIterator, +}) +``` + +###### `list`Required + +- _Type:_ interface{} + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DynamicListTerraformIterator_FromDataSources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DynamicListTerraformIterator_FromList(list interface{}) ListTerraformIterator +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `FromMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DynamicListTerraformIterator_FromMap(map interface{}) MapTerraformIterator +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ interface{} + +--- + +##### `FromResources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DynamicListTerraformIterator_FromResources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------- | +| Key | \*string | Returns the key of the current entry in the map that is being iterated over. | +| Value | interface{} | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```go +func Key() *string +``` + +- _Type:_ \*string + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `Value`Required + +```go +func Value() interface{} +``` + +- _Type:_ interface{} + +Returns the value of the current item iterated over. + +--- + +### Fn + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewFn() Fn +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| Abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| Alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| Anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| Base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| Base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| Base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| Base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| Base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| Basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| Can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| Ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| Chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| Chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| Cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| Cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| Cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| Cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| Coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| Coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| Compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| Concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| Contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| Csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| Dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| Distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| Element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| Endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| File | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| Filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| Filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| Filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| Fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| Filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| Fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| Filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| Filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| Filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| Flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| Floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| Format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| Formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| Formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| Indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| Index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| Jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| Jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| Keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| LengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| Log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| Lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| Matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| Max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| Md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| Merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| Min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| Nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| One | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| Parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| Pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| Plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| Pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| Regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| Regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| Replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| Reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| Rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| Sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| Setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| Setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| Setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| Setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| Sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| Sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| Sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| Signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| Slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| Sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| Split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| Startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| Strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| Strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| Substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| Sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| Templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| Textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| Textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| Timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| Timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| Timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| Title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| Tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| Tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| Tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| Tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| Toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| Tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| Transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| Trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| Trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| Trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| Trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| Try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| Upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| Urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| Uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| Uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| Values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| Yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| Yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| Zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | +| Bcrypt | {@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. | +| Conditional | {@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. | +| Join | {@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. | +| Lookup | {@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. | +| LookupNested | returns a property access expression that accesses the property at the given path in the given inputMap. | +| Range | {@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. | +| RawString | Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). | + +--- + +##### `Abs` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Abs(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Abspath` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Abspath(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Alltrue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Alltrue(list *[]interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Anytrue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Anytrue(list *[]interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Base64decode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Base64decode(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64encode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Base64encode(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64gzip` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Base64gzip(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64sha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Base64sha256(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64sha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Base64sha512(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Basename` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Basename(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Can` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Can(expression interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ interface{} + +--- + +##### `Ceil` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Ceil(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Chomp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Chomp(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Chunklist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Chunklist(list *[]interface{}, size *f64) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +###### `size`Required + +- _Type:_ \*f64 + +--- + +##### `Cidrhost` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Cidrhost(prefix *string, hostnum *f64) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +###### `hostnum`Required + +- _Type:_ \*f64 + +--- + +##### `Cidrnetmask` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Cidrnetmask(prefix *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +##### `Cidrsubnet` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Cidrsubnet(prefix *string, newbits *f64, netnum *f64) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +###### `newbits`Required + +- _Type:_ \*f64 + +--- + +###### `netnum`Required + +- _Type:_ \*f64 + +--- + +##### `Cidrsubnets` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Cidrsubnets(prefix *string, newbits *[]*f64) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +###### `newbits`Required + +- _Type:_ *[]*f64 + +--- + +##### `Coalesce` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Coalesce(vals *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Coalescelist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Coalescelist(vals *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Compact` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Compact(list *[]*string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ *[]*string + +--- + +##### `Concat` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Concat(seqs *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Contains` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Contains(list interface{}, value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Csvdecode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Csvdecode(str *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Dirname` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Dirname(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Distinct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Distinct(list *[]interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Element` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Element(list interface{}, index *f64) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `index`Required + +- _Type:_ \*f64 + +--- + +##### `Endswith` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Endswith(str *string, suffix *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `suffix`Required + +- _Type:_ \*string + +--- + +##### `File` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_File(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filebase64` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filebase64(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filebase64sha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filebase64sha256(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filebase64sha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filebase64sha512(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Fileexists` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Fileexists(path *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filemd5` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filemd5(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Fileset` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Fileset(path *string, pattern *string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `pattern`Required + +- _Type:_ \*string + +--- + +##### `Filesha1` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filesha1(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filesha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filesha256(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filesha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Filesha512(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Flatten` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Flatten(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Floor` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Floor(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Format` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Format(format *string, args *[]interface{}) interface{} +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ \*string + +--- + +###### `args`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Formatdate` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Formatdate(format *string, time *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ \*string + +--- + +###### `time`Required + +- _Type:_ \*string + +--- + +##### `Formatlist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Formatlist(format *string, args *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ \*string + +--- + +###### `args`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Indent` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Indent(spaces *f64, str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ \*f64 + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Index` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Index(list interface{}, value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Jsondecode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Jsondecode(str *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Jsonencode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Jsonencode(val interface{}) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ interface{} + +--- + +##### `Keys` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Keys(inputMap interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `inputMap`Required + +- _Type:_ interface{} + +--- + +##### `LengthOf` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_LengthOf(value interface{}) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Log` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Log(num *f64, base *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +###### `base`Required + +- _Type:_ \*f64 + +--- + +##### `Lower` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Lower(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Matchkeys` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Matchkeys(values *[]interface{}, keys *[]interface{}, searchset *[]interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ \*[]interface{} + +--- + +###### `keys`Required + +- _Type:_ \*[]interface{} + +--- + +###### `searchset`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Max` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Max(numbers *[]*f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ *[]*f64 + +--- + +##### `Md5` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Md5(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Merge` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Merge(maps *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Min` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Min(numbers *[]*f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ *[]*f64 + +--- + +##### `Nonsensitive` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Nonsensitive(value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `One` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_One(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Parseint` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Parseint(number interface{}, base *f64) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ interface{} + +--- + +###### `base`Required + +- _Type:_ \*f64 + +--- + +##### `Pathexpand` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Pathexpand(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Plantimestamp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Plantimestamp() *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `Pow` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Pow(num *f64, power *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +###### `power`Required + +- _Type:_ \*f64 + +--- + +##### `Regex` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Regex(pattern *string, str *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ \*string + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Regexall` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Regexall(pattern *string, str *string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ \*string + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Replace` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Replace(str *string, substr *string, replace *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `substr`Required + +- _Type:_ \*string + +--- + +###### `replace`Required + +- _Type:_ \*string + +--- + +##### `Reverse` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Reverse(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Rsadecrypt` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Rsadecrypt(ciphertext *string, privatekey *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ \*string + +--- + +###### `privatekey`Required + +- _Type:_ \*string + +--- + +##### `Sensitive` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Sensitive(value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Setintersection` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Setintersection(first_set *[]interface{}, other_sets *[]*[]interface{}) *[]*string +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ \*[]interface{} + +--- + +###### `other_sets`Required + +- _Type:_ _[]_[]interface{} + +--- + +##### `Setproduct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Setproduct(sets *[]interface{}) interface{} +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Setsubtract` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Setsubtract(a *[]interface{}, b *[]interface{}) *[]*string +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ \*[]interface{} + +--- + +###### `b`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Setunion` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Setunion(first_set *[]interface{}, other_sets *[]*[]interface{}) *[]*string +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ \*[]interface{} + +--- + +###### `other_sets`Required + +- _Type:_ _[]_[]interface{} + +--- + +##### `Sha1` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Sha1(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Sha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Sha256(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Sha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Sha512(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Signum` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Signum(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Slice` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Slice(list interface{}, start_index *f64, end_index *f64) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `start_index`Required + +- _Type:_ \*f64 + +--- + +###### `end_index`Required + +- _Type:_ \*f64 + +--- + +##### `Sort` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Sort(list *[]*string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ *[]*string + +--- + +##### `Split` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Split(separator *string, str *string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ \*string + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Startswith` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Startswith(str *string, prefix *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `prefix`Required + +- _Type:_ \*string + +--- + +##### `Strcontains` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Strcontains(str *string, substr *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `substr`Required + +- _Type:_ \*string + +--- + +##### `Strrev` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Strrev(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Substr` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Substr(str *string, offset *f64, length *f64) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `offset`Required + +- _Type:_ \*f64 + +--- + +###### `length`Required + +- _Type:_ \*f64 + +--- + +##### `Sum` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Sum(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Templatefile` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Templatefile(path *string, vars interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `vars`Required + +- _Type:_ interface{} + +--- + +##### `Textdecodebase64` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Textdecodebase64(source *string, encoding *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ \*string + +--- + +###### `encoding`Required + +- _Type:_ \*string + +--- + +##### `Textencodebase64` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Textencodebase64(str *string, encoding *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `encoding`Required + +- _Type:_ \*string + +--- + +##### `Timeadd` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Timeadd(timestamp *string, duration *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ \*string + +--- + +###### `duration`Required + +- _Type:_ \*string + +--- + +##### `Timecmp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Timecmp(timestamp_a *string, timestamp_b *string) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ \*string + +--- + +###### `timestamp_b`Required + +- _Type:_ \*string + +--- + +##### `Timestamp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Timestamp() *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `Title` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Title(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Tobool` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Tobool(v interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tolist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Tolist(v interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tomap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Tomap(v interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tonumber` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Tonumber(v interface{}) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Toset` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Toset(v interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tostring` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Tostring(v interface{}) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Transpose` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Transpose(values interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ interface{} + +--- + +##### `Trim` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Trim(str *string, cutset *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `cutset`Required + +- _Type:_ \*string + +--- + +##### `Trimprefix` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Trimprefix(str *string, prefix *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `prefix`Required + +- _Type:_ \*string + +--- + +##### `Trimspace` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Trimspace(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Trimsuffix` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Trimsuffix(str *string, suffix *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `suffix`Required + +- _Type:_ \*string + +--- + +##### `Try` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Try(expressions *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Upper` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Upper(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Urlencode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Urlencode(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Uuid` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Uuid() *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `Uuidv5` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Uuidv5(namespace *string, name *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ \*string + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +##### `Values` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Values(mapping interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ interface{} + +--- + +##### `Yamldecode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Yamldecode(src *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ \*string + +--- + +##### `Yamlencode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Yamlencode(value interface{}) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Zipmap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Zipmap(keys *[]*string, values interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ *[]*string + +--- + +###### `values`Required + +- _Type:_ interface{} + +--- + +##### `Bcrypt` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Bcrypt(str *string, cost *f64) *string +``` + +{@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `cost`Optional + +- _Type:_ \*f64 + +--- + +##### `Conditional` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Conditional(condition interface{}, trueValue interface{}, falseValue interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. + +###### `condition`Required + +- _Type:_ interface{} + +--- + +###### `trueValue`Required + +- _Type:_ interface{} + +--- + +###### `falseValue`Required + +- _Type:_ interface{} + +--- + +##### `Join` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Join(separator *string, list *[]*string) *string +``` + +{@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. + +###### `separator`Required + +- _Type:_ \*string + +--- + +###### `list`Required + +- _Type:_ *[]*string + +--- + +##### `Lookup` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Lookup(inputMap interface{}, key *string, defaultValue interface{}) interface{} +``` + +{@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. + +###### `inputMap`Required + +- _Type:_ interface{} + +--- + +###### `key`Required + +- _Type:_ \*string + +--- + +###### `defaultValue`Optional + +- _Type:_ interface{} + +--- + +##### `LookupNested` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_LookupNested(inputMap interface{}, path *[]interface{}) interface{} +``` + +returns a property access expression that accesses the property at the given path in the given inputMap. + +For example lookupNested(x, ["a", "b", "c"]) will return a Terraform expression like x["a"]["b"]["c"] + +###### `inputMap`Required + +- _Type:_ interface{} + +--- + +###### `path`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Range` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_Range(start *f64, limit *f64, step *f64) *[]*string +``` + +{@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. + +###### `start`Required + +- _Type:_ \*f64 + +--- + +###### `limit`Required + +- _Type:_ \*f64 + +--- + +###### `step`Optional + +- _Type:_ \*f64 + +--- + +##### `RawString` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Fn_RawString(str *string) *string +``` + +Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). + +###### `str`Required + +- _Type:_ \*string + +--- + +### FnGenerated + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewFnGenerated() FnGenerated +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| Abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| Alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| Anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| Base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| Base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| Base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| Base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| Base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| Basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| Can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| Ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| Chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| Chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| Cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| Cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| Cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| Cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| Coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| Coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| Compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| Concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| Contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| Csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| Dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| Distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| Element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| Endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| File | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| Filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| Filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| Filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| Fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| Filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| Fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| Filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| Filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| Filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| Flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| Floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| Format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| Formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| Formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| Indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| Index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| Jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| Jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| Keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| LengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| Log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| Lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| Matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| Max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| Md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| Merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| Min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| Nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| One | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| Parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| Pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| Plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| Pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| Regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| Regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| Replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| Reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| Rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| Sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| Setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| Setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| Setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| Setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| Sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| Sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| Sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| Signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| Slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| Sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| Split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| Startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| Strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| Strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| Substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| Sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| Templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| Textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| Textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| Timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| Timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| Timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| Title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| Tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| Tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| Tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| Tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| Toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| Tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| Transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| Trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| Trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| Trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| Trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| Try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| Upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| Urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| Uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| Uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| Values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| Yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| Yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| Zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | + +--- + +##### `Abs` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Abs(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Abspath` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Abspath(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Alltrue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Alltrue(list *[]interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Anytrue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Anytrue(list *[]interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Base64decode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Base64decode(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64encode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Base64encode(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64gzip` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Base64gzip(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64sha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Base64sha256(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Base64sha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Base64sha512(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Basename` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Basename(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Can` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Can(expression interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ interface{} + +--- + +##### `Ceil` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Ceil(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Chomp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Chomp(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Chunklist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Chunklist(list *[]interface{}, size *f64) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +###### `size`Required + +- _Type:_ \*f64 + +--- + +##### `Cidrhost` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Cidrhost(prefix *string, hostnum *f64) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +###### `hostnum`Required + +- _Type:_ \*f64 + +--- + +##### `Cidrnetmask` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Cidrnetmask(prefix *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +##### `Cidrsubnet` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Cidrsubnet(prefix *string, newbits *f64, netnum *f64) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +###### `newbits`Required + +- _Type:_ \*f64 + +--- + +###### `netnum`Required + +- _Type:_ \*f64 + +--- + +##### `Cidrsubnets` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Cidrsubnets(prefix *string, newbits *[]*f64) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ \*string + +--- + +###### `newbits`Required + +- _Type:_ *[]*f64 + +--- + +##### `Coalesce` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Coalesce(vals *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Coalescelist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Coalescelist(vals *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Compact` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Compact(list *[]*string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ *[]*string + +--- + +##### `Concat` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Concat(seqs *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Contains` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Contains(list interface{}, value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Csvdecode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Csvdecode(str *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Dirname` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Dirname(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Distinct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Distinct(list *[]interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Element` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Element(list interface{}, index *f64) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `index`Required + +- _Type:_ \*f64 + +--- + +##### `Endswith` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Endswith(str *string, suffix *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `suffix`Required + +- _Type:_ \*string + +--- + +##### `File` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_File(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filebase64` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filebase64(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filebase64sha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filebase64sha256(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filebase64sha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filebase64sha512(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Fileexists` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Fileexists(path *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filemd5` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filemd5(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Fileset` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Fileset(path *string, pattern *string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `pattern`Required + +- _Type:_ \*string + +--- + +##### `Filesha1` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filesha1(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filesha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filesha256(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Filesha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Filesha512(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Flatten` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Flatten(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Floor` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Floor(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Format` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Format(format *string, args *[]interface{}) interface{} +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ \*string + +--- + +###### `args`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Formatdate` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Formatdate(format *string, time *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ \*string + +--- + +###### `time`Required + +- _Type:_ \*string + +--- + +##### `Formatlist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Formatlist(format *string, args *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ \*string + +--- + +###### `args`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Indent` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Indent(spaces *f64, str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ \*f64 + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Index` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Index(list interface{}, value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Jsondecode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Jsondecode(str *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Jsonencode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Jsonencode(val interface{}) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ interface{} + +--- + +##### `Keys` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Keys(inputMap interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `inputMap`Required + +- _Type:_ interface{} + +--- + +##### `LengthOf` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_LengthOf(value interface{}) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Log` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Log(num *f64, base *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +###### `base`Required + +- _Type:_ \*f64 + +--- + +##### `Lower` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Lower(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Matchkeys` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Matchkeys(values *[]interface{}, keys *[]interface{}, searchset *[]interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ \*[]interface{} + +--- + +###### `keys`Required + +- _Type:_ \*[]interface{} + +--- + +###### `searchset`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Max` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Max(numbers *[]*f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ *[]*f64 + +--- + +##### `Md5` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Md5(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Merge` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Merge(maps *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Min` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Min(numbers *[]*f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ *[]*f64 + +--- + +##### `Nonsensitive` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Nonsensitive(value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `One` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_One(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Parseint` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Parseint(number interface{}, base *f64) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ interface{} + +--- + +###### `base`Required + +- _Type:_ \*f64 + +--- + +##### `Pathexpand` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Pathexpand(path *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ \*string + +--- + +##### `Plantimestamp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Plantimestamp() *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `Pow` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Pow(num *f64, power *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +###### `power`Required + +- _Type:_ \*f64 + +--- + +##### `Regex` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Regex(pattern *string, str *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ \*string + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Regexall` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Regexall(pattern *string, str *string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ \*string + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Replace` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Replace(str *string, substr *string, replace *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `substr`Required + +- _Type:_ \*string + +--- + +###### `replace`Required + +- _Type:_ \*string + +--- + +##### `Reverse` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Reverse(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Rsadecrypt` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Rsadecrypt(ciphertext *string, privatekey *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ \*string + +--- + +###### `privatekey`Required + +- _Type:_ \*string + +--- + +##### `Sensitive` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Sensitive(value interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Setintersection` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Setintersection(first_set *[]interface{}, other_sets *[]*[]interface{}) *[]*string +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ \*[]interface{} + +--- + +###### `other_sets`Required + +- _Type:_ _[]_[]interface{} + +--- + +##### `Setproduct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Setproduct(sets *[]interface{}) interface{} +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Setsubtract` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Setsubtract(a *[]interface{}, b *[]interface{}) *[]*string +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ \*[]interface{} + +--- + +###### `b`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Setunion` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Setunion(first_set *[]interface{}, other_sets *[]*[]interface{}) *[]*string +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ \*[]interface{} + +--- + +###### `other_sets`Required + +- _Type:_ _[]_[]interface{} + +--- + +##### `Sha1` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Sha1(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Sha256` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Sha256(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Sha512` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Sha512(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Signum` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Signum(num *f64) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ \*f64 + +--- + +##### `Slice` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Slice(list interface{}, start_index *f64, end_index *f64) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +###### `start_index`Required + +- _Type:_ \*f64 + +--- + +###### `end_index`Required + +- _Type:_ \*f64 + +--- + +##### `Sort` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Sort(list *[]*string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ *[]*string + +--- + +##### `Split` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Split(separator *string, str *string) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ \*string + +--- + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Startswith` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Startswith(str *string, prefix *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `prefix`Required + +- _Type:_ \*string + +--- + +##### `Strcontains` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Strcontains(str *string, substr *string) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `substr`Required + +- _Type:_ \*string + +--- + +##### `Strrev` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Strrev(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Substr` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Substr(str *string, offset *f64, length *f64) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `offset`Required + +- _Type:_ \*f64 + +--- + +###### `length`Required + +- _Type:_ \*f64 + +--- + +##### `Sum` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Sum(list interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `Templatefile` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Templatefile(path *string, vars interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `vars`Required + +- _Type:_ interface{} + +--- + +##### `Textdecodebase64` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Textdecodebase64(source *string, encoding *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ \*string + +--- + +###### `encoding`Required + +- _Type:_ \*string + +--- + +##### `Textencodebase64` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Textencodebase64(str *string, encoding *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `encoding`Required + +- _Type:_ \*string + +--- + +##### `Timeadd` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Timeadd(timestamp *string, duration *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ \*string + +--- + +###### `duration`Required + +- _Type:_ \*string + +--- + +##### `Timecmp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Timecmp(timestamp_a *string, timestamp_b *string) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ \*string + +--- + +###### `timestamp_b`Required + +- _Type:_ \*string + +--- + +##### `Timestamp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Timestamp() *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `Title` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Title(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Tobool` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Tobool(v interface{}) IResolvable +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tolist` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Tolist(v interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tomap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Tomap(v interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tonumber` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Tonumber(v interface{}) *f64 +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Toset` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Toset(v interface{}) *[]*string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Tostring` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Tostring(v interface{}) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ interface{} + +--- + +##### `Transpose` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Transpose(values interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ interface{} + +--- + +##### `Trim` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Trim(str *string, cutset *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `cutset`Required + +- _Type:_ \*string + +--- + +##### `Trimprefix` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Trimprefix(str *string, prefix *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `prefix`Required + +- _Type:_ \*string + +--- + +##### `Trimspace` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Trimspace(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Trimsuffix` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Trimsuffix(str *string, suffix *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +###### `suffix`Required + +- _Type:_ \*string + +--- + +##### `Try` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Try(expressions *[]interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ \*[]interface{} + +--- + +##### `Upper` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Upper(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Urlencode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Urlencode(str *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ \*string + +--- + +##### `Uuid` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Uuid() *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `Uuidv5` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Uuidv5(namespace *string, name *string) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ \*string + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +##### `Values` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Values(mapping interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ interface{} + +--- + +##### `Yamldecode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Yamldecode(src *string) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ \*string + +--- + +##### `Yamlencode` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Yamlencode(value interface{}) *string +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `Zipmap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.FnGenerated_Zipmap(keys *[]*string, values interface{}) interface{} +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ *[]*string + +--- + +###### `values`Required + +- _Type:_ interface{} + +--- + +### Lazy + +Lazily produce a value. + +Can be used to return a string, list or numeric value whose actual value +will only be calculated later, during synthesis. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewLazy() Lazy +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------- | +| AnyValue | Produces a lazy token from an untyped value. | +| ListValue | Returns a list-ified token for a lazy value. | +| NumberValue | Returns a numberified token for a lazy value. | +| StringValue | Returns a stringified token for a lazy value. | + +--- + +##### `AnyValue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Lazy_AnyValue(producer IAnyProducer, options LazyAnyValueOptions) IResolvable +``` + +Produces a lazy token from an untyped value. + +###### `producer`Required + +- _Type:_ IAnyProducer + +The lazy producer. + +--- + +###### `options`Optional + +- _Type:_ LazyAnyValueOptions + +Options. + +--- + +##### `ListValue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Lazy_ListValue(producer IListProducer, options LazyListValueOptions) *[]*string +``` + +Returns a list-ified token for a lazy value. + +###### `producer`Required + +- _Type:_ IListProducer + +The producer. + +--- + +###### `options`Optional + +- _Type:_ LazyListValueOptions + +Options. + +--- + +##### `NumberValue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Lazy_NumberValue(producer INumberProducer) *f64 +``` + +Returns a numberified token for a lazy value. + +###### `producer`Required + +- _Type:_ INumberProducer + +The producer. + +--- + +##### `StringValue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Lazy_StringValue(producer IStringProducer, options LazyStringValueOptions) *string +``` + +Returns a stringified token for a lazy value. + +###### `producer`Required + +- _Type:_ IStringProducer + +The producer. + +--- + +###### `options`Optional + +- _Type:_ LazyStringValueOptions + +Options. + +--- + +### LazyBase + +- _Implements:_ IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewLazyBase() LazyBase +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| AddPostProcessor | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToJSON | Turn this Token into JSON. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `AddPostProcessor` + +```go +func AddPostProcessor(postProcessor IPostProcessor) +``` + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `Resolve` + +```go +func Resolve(context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToJSON` + +```go +func ToJSON() interface{} +``` + +Turn this Token into JSON. + +Called automatically when JSON.stringify() is called on a Token. + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### ListTerraformIterator + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewListTerraformIterator(list interface{}) ListTerraformIterator +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------------ | ----------------- | +| list | interface{} | _No description._ | + +--- + +##### `list`Required + +- _Type:_ interface{} + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```go +func Dynamic(attributes *map[string]interface{}) IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ \*map[string]interface{} + +--- + +##### `ForExpressionForList` + +```go +func ForExpressionForList(expression interface{}) IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ interface{} + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```go +func ForExpressionForMap(keyExpression interface{}, valueExpression interface{}) IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ interface{} + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ interface{} + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```go +func GetAny(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```go +func GetAnyMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```go +func GetBoolean(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```go +func GetBooleanMap(attribute *string) *map[string]*bool +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetList` + +```go +func GetList(attribute *string) *[]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```go +func GetMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```go +func GetNumber(attribute *string) *f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```go +func GetNumberList(attribute *string) *[]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```go +func GetNumberMap(attribute *string) *map[string]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetString` + +```go +func GetString(attribute *string) *string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```go +func GetStringMap(attribute *string) *map[string]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `Keys` + +```go +func Keys() IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```go +func PluckProperty(property *string) IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ \*string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```go +func Values() IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ListTerraformIterator_FromComplexList(list interface{}, mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```go +// Example automatically generated from non-compiling source. May contain errors. +cert := NewAcmCertificate(this, jsii.String("cert"), map[string]*string{ + "domainName": jsii.String("example.com"), + "validationMethod": jsii.String("DNS"), +}) + +dvoIterator := terraformIterator_FromComplexList(cert.domainValidationOptions, jsii.String("domain_name")) + +NewRoute53Record(this, jsii.String("record"), map[string]interface{}{ + "allowOverwrite": jsii.Boolean(true), + "name": dvoIterator.getString(jsii.String("name")), + "records": []interface{}{ + dvoIterator.getString(jsii.String("record")), + }, + "ttl": jsii.Number(60), + "type": dvoIterator.getString(jsii.String("type")), + "zoneId": Token_asString(dataAwsRoute53ZoneExample.zoneId), + "forEach": dvoIterator, +}) +``` + +###### `list`Required + +- _Type:_ interface{} + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ListTerraformIterator_FromDataSources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ListTerraformIterator_FromList(list interface{}) ListTerraformIterator +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `FromMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ListTerraformIterator_FromMap(map interface{}) MapTerraformIterator +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ interface{} + +--- + +##### `FromResources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ListTerraformIterator_FromResources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ------------------------ | --------------------------------------------------------------------------- | +| Key | interface{} | Returns the currently entry in the list or set that is being iterated over. | +| Value | interface{} | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```go +func Key() interface{} +``` + +- _Type:_ interface{} + +Returns the currently entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `Value`Required + +```go +func Value() interface{} +``` + +- _Type:_ interface{} + +Returns the value of the current item iterated over. + +--- + +### Manifest + +- _Implements:_ IManifest + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewManifest(version *string, outdir *string, hclOutput *bool) Manifest +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ----------------- | +| version | \*string | _No description._ | +| outdir | \*string | _No description._ | +| hclOutput | \*bool | _No description._ | + +--- + +##### `version`Required + +- _Type:_ \*string + +--- + +##### `outdir`Required + +- _Type:_ \*string + +--- + +##### `hclOutput`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | ----------------- | +| BuildManifest | _No description._ | +| ForStack | _No description._ | +| WriteToFile | _No description._ | + +--- + +##### `BuildManifest` + +```go +func BuildManifest() IManifest +``` + +##### `ForStack` + +```go +func ForStack(stack TerraformStack) StackManifest +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `WriteToFile` + +```go +func WriteToFile() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----------------- | +| HclOutput | \*bool | _No description._ | +| Outdir | \*string | _No description._ | +| StackFileName | \*string | _No description._ | +| Stacks | \*map[string]StackManifest | _No description._ | +| Version | \*string | _No description._ | + +--- + +##### `HclOutput`Required + +```go +func HclOutput() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Outdir`Required + +```go +func Outdir() *string +``` + +- _Type:_ \*string + +--- + +##### `StackFileName`Required + +```go +func StackFileName() *string +``` + +- _Type:_ \*string + +--- + +##### `Stacks`Required + +```go +func Stacks() *map[string]StackManifest +``` + +- _Type:_ \*map[string]StackManifest + +--- + +##### `Version`Required + +```go +func Version() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| FileName | \*string | _No description._ | +| StackMetadataPath | \*string | _No description._ | +| StacksFolder | \*string | _No description._ | + +--- + +##### `FileName`Required + +```go +func FileName() *string +``` + +- _Type:_ \*string + +--- + +##### `StackMetadataPath`Required + +```go +func StackMetadataPath() *string +``` + +- _Type:_ \*string + +--- + +##### `StacksFolder`Required + +```go +func StacksFolder() *string +``` + +- _Type:_ \*string + +--- + +### MapList + +- _Implements:_ ITerraformAddressable, IInterpolatingParent, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewMapList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) MapList +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### MapTerraformIterator + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewMapTerraformIterator(map interface{}) MapTerraformIterator +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------ | ----------------- | +| map | interface{} | _No description._ | + +--- + +##### `map`Required + +- _Type:_ interface{} + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```go +func Dynamic(attributes *map[string]interface{}) IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ \*map[string]interface{} + +--- + +##### `ForExpressionForList` + +```go +func ForExpressionForList(expression interface{}) IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ interface{} + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```go +func ForExpressionForMap(keyExpression interface{}, valueExpression interface{}) IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ interface{} + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ interface{} + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```go +func GetAny(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```go +func GetAnyMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```go +func GetBoolean(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```go +func GetBooleanMap(attribute *string) *map[string]*bool +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetList` + +```go +func GetList(attribute *string) *[]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```go +func GetMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```go +func GetNumber(attribute *string) *f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```go +func GetNumberList(attribute *string) *[]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```go +func GetNumberMap(attribute *string) *map[string]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetString` + +```go +func GetString(attribute *string) *string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```go +func GetStringMap(attribute *string) *map[string]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `Keys` + +```go +func Keys() IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```go +func PluckProperty(property *string) IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ \*string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```go +func Values() IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.MapTerraformIterator_FromComplexList(list interface{}, mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```go +// Example automatically generated from non-compiling source. May contain errors. +cert := NewAcmCertificate(this, jsii.String("cert"), map[string]*string{ + "domainName": jsii.String("example.com"), + "validationMethod": jsii.String("DNS"), +}) + +dvoIterator := terraformIterator_FromComplexList(cert.domainValidationOptions, jsii.String("domain_name")) + +NewRoute53Record(this, jsii.String("record"), map[string]interface{}{ + "allowOverwrite": jsii.Boolean(true), + "name": dvoIterator.getString(jsii.String("name")), + "records": []interface{}{ + dvoIterator.getString(jsii.String("record")), + }, + "ttl": jsii.Number(60), + "type": dvoIterator.getString(jsii.String("type")), + "zoneId": Token_asString(dataAwsRoute53ZoneExample.zoneId), + "forEach": dvoIterator, +}) +``` + +###### `list`Required + +- _Type:_ interface{} + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.MapTerraformIterator_FromDataSources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.MapTerraformIterator_FromList(list interface{}) ListTerraformIterator +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `FromMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.MapTerraformIterator_FromMap(map interface{}) MapTerraformIterator +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ interface{} + +--- + +##### `FromResources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.MapTerraformIterator_FromResources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------- | +| Key | \*string | Returns the key of the current entry in the map that is being iterated over. | +| Value | interface{} | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```go +func Key() *string +``` + +- _Type:_ \*string + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `Value`Required + +```go +func Value() interface{} +``` + +- _Type:_ interface{} + +Returns the value of the current item iterated over. + +--- + +### MigrateIds + +- _Implements:_ IAspect + +For migrating past 0.17 where the feature flag for the old id generation logic was removed after being deprecated since 0.15. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewMigrateIds() MigrateIds +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------------ | +| Visit | All aspects can visit an IConstruct. | + +--- + +##### `Visit` + +```go +func Visit(node IConstruct) +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +--- + +### NamedCloudWorkspace + +The name of a single Terraform Cloud workspace. + +You will only be able to use the workspace specified in the configuration with this working directory, and cannot manage workspaces from the CLI (e.g. terraform workspace select or terraform workspace new). + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewNamedCloudWorkspace(name *string, project *string) NamedCloudWorkspace +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| name | \*string | _No description._ | +| project | \*string | _No description._ | + +--- + +##### `name`Required + +- _Type:_ \*string + +--- + +##### `project`Optional + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------- | +| ToTerraform | _No description._ | +| ToHclTerraform | _No description._ | + +--- + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | --------------------- | ----------------- | +| Name | \*string | _No description._ | +| Project | \*string | _No description._ | + +--- + +##### `Name`Required + +```go +func Name() *string +``` + +- _Type:_ \*string + +--- + +##### `Project`Optional + +```go +func Project() *string +``` + +- _Type:_ \*string + +--- + +### NamedRemoteWorkspace + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewNamedRemoteWorkspace(name *string) NamedRemoteWorkspace +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| name | \*string | _No description._ | + +--- + +##### `name`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | --------------------- | ----------------- | +| Name | \*string | _No description._ | + +--- + +##### `Name`Required + +```go +func Name() *string +``` + +- _Type:_ \*string + +--- + +### NumberListList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewNumberListList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) NumberListList +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```go +func AllWithMapKey(mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) *[]*f64 +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### NumberListMap + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewNumberListMap(terraformResource IInterpolatingParent, terraformAttribute *string) NumberListMap +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(key *string) *[]*f64 +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### NumberMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewNumberMap(terraformResource IInterpolatingParent, terraformAttribute *string) NumberMap +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Lookup` + +```go +func Lookup(key *string) *f64 +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### NumberMapList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewNumberMapList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) NumberMapList +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) NumberMap +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### Op + +This class contains static functions for all arithmetical and logical operators in the Terraform configuration language. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewOp() Op +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------- | ------------------------ | +| Add | Renders left + right. | +| And | Renders left && right. | +| Div | Renders left / right. | +| Eq | Renders left == right. | +| Gt | Renders left > right. | +| Gte | Renders left >= right. | +| Lt | Renders left < right. | +| Lte | Renders left < = right. | +| Mod | Renders left % right. | +| Mul | Renders left \* right. | +| Negate | Renders -expression. | +| Neq | Renders left != right. | +| Not | Renders !expression. | +| Or | Renders left \|\| right. | +| Sub | Renders left - right. | + +--- + +##### `Add` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Add(left interface{}, right interface{}) *f64 +``` + +Renders left + right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `And` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_And(left interface{}, right interface{}) IResolvable +``` + +Renders left && right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Div` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Div(left interface{}, right interface{}) *f64 +``` + +Renders left / right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Eq` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Eq(left interface{}, right interface{}) IResolvable +``` + +Renders left == right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Gt` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Gt(left interface{}, right interface{}) IResolvable +``` + +Renders left > right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Gte` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Gte(left interface{}, right interface{}) IResolvable +``` + +Renders left >= right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Lt` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Lt(left interface{}, right interface{}) IResolvable +``` + +Renders left < right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Lte` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Lte(left interface{}, right interface{}) IResolvable +``` + +Renders left < = right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Mod` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Mod(left interface{}, right interface{}) *f64 +``` + +Renders left % right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Mul` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Mul(left interface{}, right interface{}) *f64 +``` + +Renders left \* right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Negate` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Negate(expression interface{}) *f64 +``` + +Renders -expression. + +###### `expression`Required + +- _Type:_ interface{} + +--- + +##### `Neq` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Neq(left interface{}, right interface{}) IResolvable +``` + +Renders left != right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Not` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Not(expression interface{}) IResolvable +``` + +Renders !expression. + +###### `expression`Required + +- _Type:_ interface{} + +--- + +##### `Or` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Or(left interface{}, right interface{}) IResolvable +``` + +Renders left || right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +##### `Sub` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Op_Sub(left interface{}, right interface{}) *f64 +``` + +Renders left - right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +### PrefixedRemoteWorkspaces + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewPrefixedRemoteWorkspaces(prefix *string) PrefixedRemoteWorkspaces +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| prefix | \*string | _No description._ | + +--- + +##### `prefix`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ----------------- | +| Prefix | \*string | _No description._ | + +--- + +##### `Prefix`Required + +```go +func Prefix() *string +``` + +- _Type:_ \*string + +--- + +### ResourceTerraformIterator + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewResourceTerraformIterator(element ITerraformResource) ResourceTerraformIterator +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| element | ITerraformResource | _No description._ | + +--- + +##### `element`Required + +- _Type:_ ITerraformResource + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```go +func Dynamic(attributes *map[string]interface{}) IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ \*map[string]interface{} + +--- + +##### `ForExpressionForList` + +```go +func ForExpressionForList(expression interface{}) IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ interface{} + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```go +func ForExpressionForMap(keyExpression interface{}, valueExpression interface{}) IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ interface{} + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ interface{} + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```go +func GetAny(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```go +func GetAnyMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```go +func GetBoolean(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```go +func GetBooleanMap(attribute *string) *map[string]*bool +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetList` + +```go +func GetList(attribute *string) *[]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```go +func GetMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```go +func GetNumber(attribute *string) *f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```go +func GetNumberList(attribute *string) *[]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```go +func GetNumberMap(attribute *string) *map[string]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetString` + +```go +func GetString(attribute *string) *string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```go +func GetStringMap(attribute *string) *map[string]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `Keys` + +```go +func Keys() IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```go +func PluckProperty(property *string) IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ \*string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```go +func Values() IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ResourceTerraformIterator_FromComplexList(list interface{}, mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```go +// Example automatically generated from non-compiling source. May contain errors. +cert := NewAcmCertificate(this, jsii.String("cert"), map[string]*string{ + "domainName": jsii.String("example.com"), + "validationMethod": jsii.String("DNS"), +}) + +dvoIterator := terraformIterator_FromComplexList(cert.domainValidationOptions, jsii.String("domain_name")) + +NewRoute53Record(this, jsii.String("record"), map[string]interface{}{ + "allowOverwrite": jsii.Boolean(true), + "name": dvoIterator.getString(jsii.String("name")), + "records": []interface{}{ + dvoIterator.getString(jsii.String("record")), + }, + "ttl": jsii.Number(60), + "type": dvoIterator.getString(jsii.String("type")), + "zoneId": Token_asString(dataAwsRoute53ZoneExample.zoneId), + "forEach": dvoIterator, +}) +``` + +###### `list`Required + +- _Type:_ interface{} + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ResourceTerraformIterator_FromDataSources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ResourceTerraformIterator_FromList(list interface{}) ListTerraformIterator +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `FromMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ResourceTerraformIterator_FromMap(map interface{}) MapTerraformIterator +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ interface{} + +--- + +##### `FromResources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ResourceTerraformIterator_FromResources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------- | +| Key | interface{} | Returns the current entry in the list or set that is being iterated over. | +| Value | interface{} | Returns the value of the current item iterated over. | + +--- + +##### `Key`Required + +```go +func Key() interface{} +``` + +- _Type:_ interface{} + +Returns the current entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `Value`Required + +```go +func Value() interface{} +``` + +- _Type:_ interface{} + +Returns the value of the current item iterated over. + +--- + +### StringConcat + +- _Implements:_ IFragmentConcatenator + +Converts all fragments to strings and concats those. + +Drops 'undefined's. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewStringConcat() StringConcat +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------ | +| Join | Concatenates string fragments. | + +--- + +##### `Join` + +```go +func Join(left interface{}, right interface{}) interface{} +``` + +Concatenates string fragments. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +### StringListList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewStringListList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) StringListList +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| AllWithMapKey | Creating an iterator for this complex list. | +| ComputeFqn | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `AllWithMapKey` + +```go +func AllWithMapKey(mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) *[]*string +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### StringListMap + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewStringListMap(terraformResource IInterpolatingParent, terraformAttribute *string) StringListMap +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(key *string) *[]*string +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### StringMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewStringMap(terraformResource IInterpolatingParent, terraformAttribute *string) StringMap +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| Lookup | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `Lookup` + +```go +func Lookup(key *string) *string +``` + +###### `key`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### StringMapList + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewStringMapList(terraformResource IInterpolatingParent, terraformAttribute *string, wrapsSet *bool) StringMapList +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | \*string | _No description._ | +| wrapsSet | \*bool | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `wrapsSet`Required + +- _Type:_ \*bool + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| ComputeFqn | _No description._ | +| InterpolationForAttribute | _No description._ | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | +| Get | _No description._ | + +--- + +##### `ComputeFqn` + +```go +func ComputeFqn() *string +``` + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(property *string) IResolvable +``` + +###### `property`Required + +- _Type:_ \*string + +--- + +##### `Resolve` + +```go +func Resolve(_context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `Get` + +```go +func Get(index *f64) StringMap +``` + +###### `index`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| Fqn | \*string | _No description._ | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### TaggedCloudWorkspaces + +A set of Terraform Cloud workspace tags. + +You will be able to use this working directory with any workspaces that have all of the specified tags, and can use the terraform workspace commands to switch between them or create new workspaces. New workspaces will automatically have the specified tags. This option conflicts with name. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTaggedCloudWorkspaces(tags *[]*string, project *string) TaggedCloudWorkspaces +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------- | ----------------- | +| tags | *[]*string | _No description._ | +| project | \*string | _No description._ | + +--- + +##### `tags`Required + +- _Type:_ *[]*string + +--- + +##### `project`Optional + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------- | +| ToTerraform | _No description._ | +| ToHclTerraform | _No description._ | + +--- + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------- | ----------------- | +| Tags | *[]*string | _No description._ | +| Project | \*string | _No description._ | + +--- + +##### `Tags`Required + +```go +func Tags() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `Project`Optional + +```go +func Project() *string +``` + +- _Type:_ \*string + +--- + +### TerraformCount + +Iterator for the Terraform count property. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| ToString | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +##### `ToTerraform` + +```go +func ToTerraform() *f64 +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------- | +| IsTerraformCount | _No description._ | +| Of | _No description._ | + +--- + +##### `IsTerraformCount` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformCount_IsTerraformCount(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `Of` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformCount_Of(count *f64) TerraformCount +``` + +###### `count`Required + +- _Type:_ \*f64 + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------- | ------------------ | ----------------- | +| Index | \*f64 | _No description._ | + +--- + +##### `Index`Required + +```go +func Index() *f64 +``` + +- _Type:_ \*f64 + +--- + +### TerraformIterator + +- _Implements:_ ITerraformIterator + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformIterator() TerraformIterator +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| ForExpressionForList | Creates a for expression that results in a list. | +| ForExpressionForMap | Creates a for expression that results in a map. | +| GetAny | _No description._ | +| GetAnyMap | _No description._ | +| GetBoolean | _No description._ | +| GetBooleanMap | _No description._ | +| GetList | _No description._ | +| GetMap | _No description._ | +| GetNumber | _No description._ | +| GetNumberList | _No description._ | +| GetNumberMap | _No description._ | +| GetString | _No description._ | +| GetStringMap | _No description._ | +| Keys | Creates a for expression that maps the iterators to its keys. | +| PluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| Values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `Dynamic` + +```go +func Dynamic(attributes *map[string]interface{}) IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ \*map[string]interface{} + +--- + +##### `ForExpressionForList` + +```go +func ForExpressionForList(expression interface{}) IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ interface{} + +The expression to use in the for mapping. + +--- + +##### `ForExpressionForMap` + +```go +func ForExpressionForMap(keyExpression interface{}, valueExpression interface{}) IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ interface{} + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ interface{} + +The expression to use as value in the for mapping. + +--- + +##### `GetAny` + +```go +func GetAny(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetAnyMap` + +```go +func GetAnyMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBoolean` + +```go +func GetBoolean(attribute *string) IResolvable +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetBooleanMap` + +```go +func GetBooleanMap(attribute *string) *map[string]*bool +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetList` + +```go +func GetList(attribute *string) *[]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetMap` + +```go +func GetMap(attribute *string) *map[string]interface{} +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumber` + +```go +func GetNumber(attribute *string) *f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberList` + +```go +func GetNumberList(attribute *string) *[]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetNumberMap` + +```go +func GetNumberMap(attribute *string) *map[string]*f64 +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetString` + +```go +func GetString(attribute *string) *string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `GetStringMap` + +```go +func GetStringMap(attribute *string) *map[string]*string +``` + +###### `attribute`Required + +- _Type:_ \*string + +name of the property to retrieve. + +--- + +##### `Keys` + +```go +func Keys() IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `PluckProperty` + +```go +func PluckProperty(property *string) IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ \*string + +The property of the iterators values to map to. + +--- + +##### `Values` + +```go +func Values() IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| FromComplexList | Creates a new iterator from a complex list. | +| FromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| FromList | Creates a new iterator from a list. | +| FromMap | Creates a new iterator from a map. | +| FromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `FromComplexList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformIterator_FromComplexList(list interface{}, mapKeyAttributeName *string) DynamicListTerraformIterator +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```go +// Example automatically generated from non-compiling source. May contain errors. +cert := NewAcmCertificate(this, jsii.String("cert"), map[string]*string{ + "domainName": jsii.String("example.com"), + "validationMethod": jsii.String("DNS"), +}) + +dvoIterator := terraformIterator_FromComplexList(cert.domainValidationOptions, jsii.String("domain_name")) + +NewRoute53Record(this, jsii.String("record"), map[string]interface{}{ + "allowOverwrite": jsii.Boolean(true), + "name": dvoIterator.getString(jsii.String("name")), + "records": []interface{}{ + dvoIterator.getString(jsii.String("record")), + }, + "ttl": jsii.Number(60), + "type": dvoIterator.getString(jsii.String("type")), + "zoneId": Token_asString(dataAwsRoute53ZoneExample.zoneId), + "forEach": dvoIterator, +}) +``` + +###### `list`Required + +- _Type:_ interface{} + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ \*string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `FromDataSources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformIterator_FromDataSources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `FromList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformIterator_FromList(list interface{}) ListTerraformIterator +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ interface{} + +--- + +##### `FromMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformIterator_FromMap(map interface{}) MapTerraformIterator +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ interface{} + +--- + +##### `FromResources` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformIterator_FromResources(resource ITerraformResource) ResourceTerraformIterator +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +### TerraformResourceTargets + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformResourceTargets() TerraformResourceTargets +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------- | +| AddResourceTarget | _No description._ | +| GetResourceByTarget | _No description._ | + +--- + +##### `AddResourceTarget` + +```go +func AddResourceTarget(resource TerraformResource, target *string) +``` + +###### `resource`Required + +- _Type:_ TerraformResource + +--- + +###### `target`Required + +- _Type:_ \*string + +--- + +##### `GetResourceByTarget` + +```go +func GetResourceByTarget(target *string) TerraformResource +``` + +###### `target`Required + +- _Type:_ \*string + +--- + +### TerraformSelf + +Expressions in connection blocks cannot refer to their parent resource by name. + +References create dependencies, and referring to a resource by name within its own block would create a dependency cycle. +Instead, expressions can use the self object, which represents the connection's parent resource and has all of that resource's attributes. +For example, use self.public_ip to reference an aws_instance's public_ip attribute. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformSelf() TerraformSelf +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| GetAny | Only usable within a connection block to reference the connections parent resource. | +| GetNumber | Only usable within a connection block to reference the connections parent resource. | +| GetString | Only usable within a connection block to reference the connections parent resource. | + +--- + +##### `GetAny` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformSelf_GetAny(key *string) interface{} +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getAny("hostPort")` + +###### `key`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformSelf_GetNumber(key *string) *f64 +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getNumber("hostPort")` + +###### `key`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformSelf_GetString(key *string) *string +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getString("publicIp")` + +###### `key`Required + +- _Type:_ \*string + +--- + +### Testing + +Testing utilities for cdktf applications. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTesting() Testing +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| App | Returns an app for testing with the following properties: - Output directory is a temp dir. | +| EnableFutureFlags | _No description._ | +| FakeCdktfJsonPath | _No description._ | +| FullSynth | _No description._ | +| RenderConstructTree | _No description._ | +| SetupJest | _No description._ | +| StubVersion | _No description._ | +| Synth | Returns the Terraform synthesized JSON. | +| SynthHcl | Returns the Terraform synthesized JSON. | +| SynthScope | _No description._ | +| ToBeValidTerraform | _No description._ | +| ToHaveDataSource | _No description._ | +| ToHaveDataSourceWithProperties | _No description._ | +| ToHaveProvider | _No description._ | +| ToHaveProviderWithProperties | _No description._ | +| ToHaveResource | _No description._ | +| ToHaveResourceWithProperties | _No description._ | + +--- + +##### `App` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_App(options TestingAppConfig) App +``` + +Returns an app for testing with the following properties: - Output directory is a temp dir. + +###### `options`Optional + +- _Type:_ TestingAppConfig + +--- + +##### `EnableFutureFlags` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_EnableFutureFlags(app App) App +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `FakeCdktfJsonPath` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_FakeCdktfJsonPath(app App) App +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `FullSynth` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_FullSynth(stack TerraformStack) *string +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `RenderConstructTree` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_RenderConstructTree(construct IConstruct) *string +``` + +###### `construct`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +--- + +##### `SetupJest` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_SetupJest() +``` + +##### `StubVersion` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_StubVersion(app App) App +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `Synth` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_Synth(stack TerraformStack, runValidations *bool) *string +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `runValidations`Optional + +- _Type:_ \*bool + +--- + +##### `SynthHcl` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_SynthHcl(stack TerraformStack, runValidations *bool, returnMetadata *bool) interface{} +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `runValidations`Optional + +- _Type:_ \*bool + +--- + +###### `returnMetadata`Optional + +- _Type:_ \*bool + +--- + +##### `SynthScope` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_SynthScope(fn IScopeCallback) *string +``` + +###### `fn`Required + +- _Type:_ IScopeCallback + +--- + +##### `ToBeValidTerraform` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToBeValidTerraform(received *string) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +##### `ToHaveDataSource` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToHaveDataSource(received *string, resourceType *string) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +###### `resourceType`Required + +- _Type:_ \*string + +--- + +##### `ToHaveDataSourceWithProperties` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToHaveDataSourceWithProperties(received *string, resourceType *string, properties *map[string]interface{}) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +###### `resourceType`Required + +- _Type:_ \*string + +--- + +###### `properties`Optional + +- _Type:_ \*map[string]interface{} + +--- + +##### `ToHaveProvider` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToHaveProvider(received *string, resourceType *string) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +###### `resourceType`Required + +- _Type:_ \*string + +--- + +##### `ToHaveProviderWithProperties` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToHaveProviderWithProperties(received *string, resourceType *string, properties *map[string]interface{}) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +###### `resourceType`Required + +- _Type:_ \*string + +--- + +###### `properties`Optional + +- _Type:_ \*map[string]interface{} + +--- + +##### `ToHaveResource` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToHaveResource(received *string, resourceType *string) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +###### `resourceType`Required + +- _Type:_ \*string + +--- + +##### `ToHaveResourceWithProperties` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Testing_ToHaveResourceWithProperties(received *string, resourceType *string, properties *map[string]interface{}) *bool +``` + +###### `received`Required + +- _Type:_ \*string + +--- + +###### `resourceType`Required + +- _Type:_ \*string + +--- + +###### `properties`Optional + +- _Type:_ \*map[string]interface{} + +--- + +### Token + +Represents a special or lazily-evaluated value. + +Can be used to delay evaluation of a certain value in case, for example, +that it requires some context or late-bound data. Can also be used to +mark values that need special processing at document rendering time. + +Tokens can be embedded into strings while retaining their original +semantics. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewToken() Token +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------- | -------------------------------------------------------- | +| AsAny | Return a resolvable representation of the given value. | +| AsAnyMap | Return a reversible map representation of this token. | +| AsBooleanMap | Return a reversible map representation of this token. | +| AsList | Return a reversible list representation of this token. | +| AsMap | Return a reversible map representation of this token. | +| AsNumber | Return a reversible number representation of this token. | +| AsNumberList | Return a reversible list representation of this token. | +| AsNumberMap | Return a reversible map representation of this token. | +| AsString | Return a reversible string representation of this token. | +| AsStringMap | Return a reversible map representation of this token. | +| IsUnresolved | Returns true if obj represents an unresolved value. | +| NullValue | Return a Token containing a `null` value. | + +--- + +##### `AsAny` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsAny(value interface{}) IResolvable +``` + +Return a resolvable representation of the given value. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `AsAnyMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsAnyMap(value interface{}, options EncodingOptions) *map[string]interface{} +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsBooleanMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsBooleanMap(value interface{}, options EncodingOptions) *map[string]*bool +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsList(value interface{}, options EncodingOptions) *[]*string +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsMap(value interface{}, mapValue interface{}, options EncodingOptions) *map[string]interface{} +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `mapValue`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsNumber` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsNumber(value interface{}) *f64 +``` + +Return a reversible number representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `AsNumberList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsNumberList(value interface{}) *[]*f64 +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `AsNumberMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsNumberMap(value interface{}, options EncodingOptions) *map[string]*f64 +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsString` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsString(value interface{}, options EncodingOptions) *string +``` + +Return a reversible string representation of this token. + +If the Token is initialized with a literal, the stringified value of the +literal is returned. Otherwise, a special quoted string representation +of the Token is returned that can be embedded into other strings. + +Strings with quoted Tokens in them can be restored back into +complex values with the Tokens restored by calling `resolve()` +on the string. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `AsStringMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_AsStringMap(value interface{}, options EncodingOptions) *map[string]*string +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ interface{} + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `IsUnresolved` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_IsUnresolved(obj interface{}) *bool +``` + +Returns true if obj represents an unresolved value. + +One of these must be true: + +- `obj` is an IResolvable +- `obj` is a string containing at least one encoded `IResolvable` +- `obj` is either an encoded number or list + +This does NOT recurse into lists or objects to see if they +containing resolvables. + +###### `obj`Required + +- _Type:_ interface{} + +The object to test. + +--- + +##### `NullValue` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Token_NullValue() IResolvable +``` + +Return a Token containing a `null` value. + +Note: This is different than `undefined`, `nil`, `None` or similar +as it will end up in the Terraform config and can be used to explicitly +not set an attribute (which is sometimes required by Terraform providers) + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------- | -------------------------------------- | +| AnyMapTokenValue | \*string | Any map token representation. | +| NumberMapTokenValue | \*f64 | Number Map token value representation. | +| StringMapTokenValue | \*string | String Map token value representation. | + +--- + +##### `AnyMapTokenValue`Required + +```go +func AnyMapTokenValue() *string +``` + +- _Type:_ \*string + +Any map token representation. + +--- + +##### `NumberMapTokenValue`Required + +```go +func NumberMapTokenValue() *f64 +``` + +- _Type:_ \*f64 + +Number Map token value representation. + +--- + +##### `StringMapTokenValue`Required + +```go +func StringMapTokenValue() *string +``` + +- _Type:_ \*string + +String Map token value representation. + +--- + +### Tokenization + +Less oft-needed functions to manipulate Tokens. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTokenization() Tokenization +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| IsResolvable | Return whether the given object is an IResolvable object. | +| Resolve | Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. | +| Reverse | Reverse any value into Resolvables, if possible. | +| ReverseList | Un-encode a Tokenized value from a list. | +| ReverseMap | Un-encode a Tokenized value from a map. | +| ReverseNumber | Un-encode a Tokenized value from a number. | +| ReverseNumberList | Un-encode a Tokenized value from a list. | +| ReverseString | Un-encode a string potentially containing encoded tokens. | +| StringifyNumber | Stringify a number directly or lazily if it's a Token. | + +--- + +##### `IsResolvable` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_IsResolvable(obj interface{}) *bool +``` + +Return whether the given object is an IResolvable object. + +This is different from Token.isUnresolved() which will also check for +encoded Tokens, whereas this method will only do a type check on the given +object. + +###### `obj`Required + +- _Type:_ interface{} + +--- + +##### `Resolve` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_Resolve(obj interface{}, options ResolveOptions) interface{} +``` + +Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. + +Values can only be primitives, arrays or tokens. Other objects (i.e. with methods) will be rejected. + +###### `obj`Required + +- _Type:_ interface{} + +The object to resolve. + +--- + +###### `options`Required + +- _Type:_ ResolveOptions + +Prefix key path components for diagnostics. + +--- + +##### `Reverse` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_Reverse(x interface{}) *[]IResolvable +``` + +Reverse any value into Resolvables, if possible. + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `ReverseList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_ReverseList(l *[]*string) IResolvable +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ *[]*string + +--- + +##### `ReverseMap` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_ReverseMap(m *map[string]interface{}) IResolvable +``` + +Un-encode a Tokenized value from a map. + +###### `m`Required + +- _Type:_ \*map[string]interface{} + +--- + +##### `ReverseNumber` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_ReverseNumber(n *f64) IResolvable +``` + +Un-encode a Tokenized value from a number. + +###### `n`Required + +- _Type:_ \*f64 + +--- + +##### `ReverseNumberList` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_ReverseNumberList(l *[]*f64) IResolvable +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ *[]*f64 + +--- + +##### `ReverseString` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_ReverseString(s *string) TokenizedStringFragments +``` + +Un-encode a string potentially containing encoded tokens. + +###### `s`Required + +- _Type:_ \*string + +--- + +##### `StringifyNumber` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Tokenization_StringifyNumber(x *f64) *string +``` + +Stringify a number directly or lazily if it's a Token. + +If it is an object (i.e., { Ref: 'SomeLogicalId' }), return it as-is. + +###### `x`Required + +- _Type:_ \*f64 + +--- + +### TokenizedStringFragments + +Fragments of a concatenated string containing stringified Tokens. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTokenizedStringFragments() TokenizedStringFragments +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------ | +| AddEscape | _No description._ | +| AddIntrinsic | Adds an intrinsic fragment. | +| AddLiteral | Adds a literal fragment. | +| AddToken | Adds a token fragment. | +| Concat | _No description._ | +| Join | Combine the string fragments using the given joiner. | +| MapTokens | Apply a transformation function to all tokens in the string. | + +--- + +##### `AddEscape` + +```go +func AddEscape(kind *string) +``` + +###### `kind`Required + +- _Type:_ \*string + +--- + +##### `AddIntrinsic` + +```go +func AddIntrinsic(value interface{}) +``` + +Adds an intrinsic fragment. + +###### `value`Required + +- _Type:_ interface{} + +the intrinsic value to add. + +--- + +##### `AddLiteral` + +```go +func AddLiteral(lit interface{}) +``` + +Adds a literal fragment. + +###### `lit`Required + +- _Type:_ interface{} + +the literal to add. + +--- + +##### `AddToken` + +```go +func AddToken(token IResolvable) +``` + +Adds a token fragment. + +###### `token`Required + +- _Type:_ IResolvable + +the token to add. + +--- + +##### `Concat` + +```go +func Concat(other TokenizedStringFragments) +``` + +###### `other`Required + +- _Type:_ TokenizedStringFragments + +--- + +##### `Join` + +```go +func Join(concat IFragmentConcatenator) interface{} +``` + +Combine the string fragments using the given joiner. + +If there are any + +###### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +##### `MapTokens` + +```go +func MapTokens(context IResolveContext) TokenizedStringFragments +``` + +Apply a transformation function to all tokens in the string. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------ | +| Escapes | \*[]IResolvable | Return all escape fragments from this string. | +| FirstValue | interface{} | Returns the first value. | +| Intrinsic | \*[]IResolvable | Return all intrinsic fragments from this string. | +| Length | \*f64 | Returns the number of fragments. | +| Literals | \*[]IResolvable | Return all literals from this string. | +| Tokens | \*[]IResolvable | Return all Tokens from this string. | +| FirstToken | IResolvable | Returns the first token. | + +--- + +##### `Escapes`Required + +```go +func Escapes() *[]IResolvable +``` + +- _Type:_ \*[]IResolvable + +Return all escape fragments from this string. + +--- + +##### `FirstValue`Required + +```go +func FirstValue() interface{} +``` + +- _Type:_ interface{} + +Returns the first value. + +--- + +##### `Intrinsic`Required + +```go +func Intrinsic() *[]IResolvable +``` + +- _Type:_ \*[]IResolvable + +Return all intrinsic fragments from this string. + +--- + +##### `Length`Required + +```go +func Length() *f64 +``` + +- _Type:_ \*f64 + +Returns the number of fragments. + +--- + +##### `Literals`Required + +```go +func Literals() *[]IResolvable +``` + +- _Type:_ \*[]IResolvable + +Return all literals from this string. + +--- + +##### `Tokens`Required + +```go +func Tokens() *[]IResolvable +``` + +- _Type:_ \*[]IResolvable + +Return all Tokens from this string. + +--- + +##### `FirstToken`Optional + +```go +func FirstToken() IResolvable +``` + +- _Type:_ IResolvable + +Returns the first token. + +--- + +### VariableType + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewVariableType() VariableType +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------ | ----------------- | +| List | _No description._ | +| Map | _No description._ | +| Object | _No description._ | +| Set | _No description._ | +| Tuple | _No description._ | + +--- + +##### `List` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.VariableType_List(type *string) *string +``` + +###### `type`Required + +- _Type:_ \*string + +--- + +##### `Map` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.VariableType_Map(type *string) *string +``` + +###### `type`Required + +- _Type:_ \*string + +--- + +##### `Object` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.VariableType_Object(attributes *map[string]*string) *string +``` + +###### `attributes`Required + +- _Type:_ *map[string]*string + +--- + +##### `Set` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.VariableType_Set(type *string) *string +``` + +###### `type`Required + +- _Type:_ \*string + +--- + +##### `Tuple` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.VariableType_Tuple(elements ...*string) *string +``` + +###### `elements`Required + +- _Type:_ ...\*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | --------------------- | ----------------- | +| Any | \*string | _No description._ | +| Bool | \*string | _No description._ | +| List | \*string | _No description._ | +| ListBool | \*string | _No description._ | +| ListNumber | \*string | _No description._ | +| ListString | \*string | _No description._ | +| Map | \*string | _No description._ | +| MapBool | \*string | _No description._ | +| MapNumber | \*string | _No description._ | +| MapString | \*string | _No description._ | +| Number | \*string | _No description._ | +| Set | \*string | _No description._ | +| SetBool | \*string | _No description._ | +| SetNumber | \*string | _No description._ | +| SetString | \*string | _No description._ | +| String | \*string | _No description._ | + +--- + +##### `Any`Required + +```go +func Any() *string +``` + +- _Type:_ \*string + +--- + +##### `Bool`Required + +```go +func Bool() *string +``` + +- _Type:_ \*string + +--- + +##### `List`Required + +```go +func List() *string +``` + +- _Type:_ \*string + +--- + +##### `ListBool`Required + +```go +func ListBool() *string +``` + +- _Type:_ \*string + +--- + +##### `ListNumber`Required + +```go +func ListNumber() *string +``` + +- _Type:_ \*string + +--- + +##### `ListString`Required + +```go +func ListString() *string +``` + +- _Type:_ \*string + +--- + +##### `Map`Required + +```go +func Map() *string +``` + +- _Type:_ \*string + +--- + +##### `MapBool`Required + +```go +func MapBool() *string +``` + +- _Type:_ \*string + +--- + +##### `MapNumber`Required + +```go +func MapNumber() *string +``` + +- _Type:_ \*string + +--- + +##### `MapString`Required + +```go +func MapString() *string +``` + +- _Type:_ \*string + +--- + +##### `Number`Required + +```go +func Number() *string +``` + +- _Type:_ \*string + +--- + +##### `Set`Required + +```go +func Set() *string +``` + +- _Type:_ \*string + +--- + +##### `SetBool`Required + +```go +func SetBool() *string +``` + +- _Type:_ \*string + +--- + +##### `SetNumber`Required + +```go +func SetNumber() *string +``` + +- _Type:_ \*string + +--- + +##### `SetString`Required + +```go +func SetString() *string +``` + +- _Type:_ \*string + +--- + +##### `String`Required + +```go +func String() *string +``` + +- _Type:_ \*string + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/constructs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/constructs.mdx new file mode 100644 index 0000000000..416e4952c9 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/constructs.mdx @@ -0,0 +1,12379 @@ +--- +page_title: Go Reference for Constructs +description: CDKTF Core API Reference for Constructs in Go. +--- + + + +# Go: Constructs + +### App + +Represents a cdktf application. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewApp(config AppConfig) App +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------------- | --------------- | +| config | AppConfig | configuration. | + +--- + +##### `config`Optional + +- _Type:_ AppConfig + +configuration. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| CrossStackReference | Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. | +| Synth | Synthesizes all resources to the output directory. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `CrossStackReference` + +```go +func CrossStackReference(fromStack TerraformStack, toStack TerraformStack, identifier *string) *string +``` + +Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. + +###### `fromStack`Required + +- _Type:_ TerraformStack + +--- + +###### `toStack`Required + +- _Type:_ TerraformStack + +--- + +###### `identifier`Required + +- _Type:_ \*string + +--- + +##### `Synth` + +```go +func Synth() +``` + +Synthesizes all resources to the output directory. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsApp | _No description._ | +| Of | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.App_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsApp` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.App_IsApp(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `Of` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.App_Of(construct IConstruct) App +``` + +###### `construct`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | --------------------------------------------------------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| HclOutput | \*bool | _No description._ | +| Manifest | Manifest | _No description._ | +| Outdir | \*string | The output directory into which resources will be synthesized. | +| SkipBackendValidation | \*bool | Whether to skip backend validation during synthesis of the app. | +| SkipValidation | \*bool | Whether to skip all validations during synthesis of the app. | +| TargetStackId | \*string | The stack which will be synthesized. | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `HclOutput`Required + +```go +func HclOutput() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Manifest`Required + +```go +func Manifest() Manifest +``` + +- _Type:_ Manifest + +--- + +##### `Outdir`Required + +```go +func Outdir() *string +``` + +- _Type:_ \*string + +The output directory into which resources will be synthesized. + +--- + +##### `SkipBackendValidation`Required + +```go +func SkipBackendValidation() *bool +``` + +- _Type:_ \*bool + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `SkipValidation`Required + +```go +func SkipValidation() *bool +``` + +- _Type:_ \*bool + +Whether to skip all validations during synthesis of the app. + +--- + +##### `TargetStackId`Optional + +```go +func TargetStackId() *string +``` + +- _Type:_ \*string + +The stack which will be synthesized. + +If not set, all stacks will be synthesized. + +--- + +### AzurermBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewAzurermBackend(scope Construct, props AzurermBackendConfig) AzurermBackend +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | AzurermBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ AzurermBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.AzurermBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.AzurermBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.AzurermBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### CloudBackend + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewCloudBackend(scope Construct, props CloudBackendConfig) CloudBackend +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | CloudBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ CloudBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.CloudBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.CloudBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.CloudBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### ConsulBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewConsulBackend(scope Construct, props ConsulBackendConfig) ConsulBackend +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | ConsulBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ ConsulBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ConsulBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ConsulBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ConsulBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### CosBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewCosBackend(scope Construct, props CosBackendConfig) CosBackend +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | CosBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ CosBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.CosBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.CosBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.CosBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### DataResource + +The DataResource implements the standard resource lifecycle, but does not directly take any other actions. + +You can use the DataResource resource without requiring or configuring a provider. + +The DataResource resource is useful for storing values which need to follow a manage resource lifecycle, and for triggering provisioners when there is no other logical managed resource in which to place them. + +It requires Terraform 1.4 or later. + +It is also possible to generate these bindings by adding "terraform.io/builtin/terraform" to the "terraformProviders" key in your cdktf.json file and running "cdktf get". + +https://developer.hashicorp.com/terraform/language/resources/terraform-data + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataResource(scope Construct, id *string, config DataConfig) DataResource +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------ | -------------------------------------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | The scope in which to define this construct. | +| id | \*string | The scoped construct ID. | +| config | DataConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +The scope in which to define this construct. + +--- + +##### `id`Required + +- _Type:_ \*string + +The scoped construct ID. + +Must be unique amongst siblings in the same scope + +--- + +##### `config`Optional + +- _Type:_ DataConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| AddMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| HasResourceMove | _No description._ | +| ImportFrom | _No description._ | +| InterpolationForAttribute | _No description._ | +| MoveFromId | Move the resource corresponding to "id" to this resource. | +| MoveTo | Moves this resource to the target resource given by moveTarget. | +| MoveToId | Moves this resource to the resource corresponding to "id". | +| ResetInput | _No description._ | +| ResetTriggersReplace | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `AddMoveTarget` + +```go +func AddMoveTarget(moveTarget *string) +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `moveTarget`Required + +- _Type:_ \*string + +The string move target that will correspond to this resource. + +--- + +##### `GetAnyMapAttribute` + +```go +func GetAnyMapAttribute(terraformAttribute *string) *map[string]interface{} +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanAttribute` + +```go +func GetBooleanAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanMapAttribute` + +```go +func GetBooleanMapAttribute(terraformAttribute *string) *map[string]*bool +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetListAttribute` + +```go +func GetListAttribute(terraformAttribute *string) *[]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberAttribute` + +```go +func GetNumberAttribute(terraformAttribute *string) *f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberListAttribute` + +```go +func GetNumberListAttribute(terraformAttribute *string) *[]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberMapAttribute` + +```go +func GetNumberMapAttribute(terraformAttribute *string) *map[string]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringAttribute` + +```go +func GetStringAttribute(terraformAttribute *string) *string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringMapAttribute` + +```go +func GetStringMapAttribute(terraformAttribute *string) *map[string]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `HasResourceMove` + +```go +func HasResourceMove() interface{} +``` + +##### `ImportFrom` + +```go +func ImportFrom(id *string, provider TerraformProvider) +``` + +###### `id`Required + +- _Type:_ \*string + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `MoveFromId` + +```go +func MoveFromId(id *string) +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ \*string + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `MoveTo` + +```go +func MoveTo(moveTarget *string, index interface{}) +``` + +Moves this resource to the target resource given by moveTarget. + +###### `moveTarget`Required + +- _Type:_ \*string + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ interface{} + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `MoveToId` + +```go +func MoveToId(id *string) +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ \*string + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +##### `ResetInput` + +```go +func ResetInput() +``` + +##### `ResetTriggersReplace` + +```go +func ResetTriggersReplace() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformResource | _No description._ | +| GenerateConfigForImport | Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataResource_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataResource_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsTerraformResource` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataResource_IsTerraformResource(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `GenerateConfigForImport` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataResource_GenerateConfigForImport(scope Construct, importToId *string, importFromId *string, provider TerraformProvider) ImportableResource +``` + +Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +The scope in which to define this construct. + +--- + +###### `importToId`Required + +- _Type:_ \*string + +The construct id used in the generated config for the Data to import. + +--- + +###### `importFromId`Required + +- _Type:_ \*string + +The id of the existing Data that should be imported. + +Refer to the {@link https://terraform.io/providers/builtin/terraform/latest/docs/resources/data#import import section} in the documentation of this resource for the id to use + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +? Optional instance of the provider where the Data to import is found. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| TerraformMetaArguments | \*map[string]interface{} | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| Connection | interface{} | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | *[]*string | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | \*[]interface{} | _No description._ | +| Id | \*string | _No description._ | +| Output | AnyMap | _No description._ | +| InputInput | \*map[string]interface{} | _No description._ | +| TriggersReplaceInput | \*map[string]interface{} | _No description._ | +| Input | \*map[string]interface{} | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| TriggersReplace | \*map[string]interface{} | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformMetaArguments`Required + +```go +func TerraformMetaArguments() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `TerraformResourceType`Required + +```go +func TerraformResourceType() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```go +func TerraformGeneratorMetadata() TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `Connection`Optional + +```go +func Connection() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Count`Optional + +```go +func Count() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `ForEach`Optional + +```go +func ForEach() ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +func Lifecycle() TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +func Provider() TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```go +func Provisioners() *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `Id`Required + +```go +func Id() *string +``` + +- _Type:_ \*string + +--- + +##### `Output`Required + +```go +func Output() AnyMap +``` + +- _Type:_ AnyMap + +--- + +##### `InputInput`Optional + +```go +func InputInput() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `TriggersReplaceInput`Optional + +```go +func TriggersReplaceInput() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Input`Required + +```go +func Input() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `TriggersReplace`Required + +```go +func TriggersReplace() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteState + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteState(scope Construct, id *string, config DataTerraformRemoteStateRemoteConfig) DataTerraformRemoteState +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateRemoteConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateRemoteConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteState_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteState_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateAzurerm + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateAzurerm(scope Construct, id *string, config DataTerraformRemoteStateAzurermConfig) DataTerraformRemoteStateAzurerm +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateAzurermConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateAzurermConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateAzurerm_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateAzurerm_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateConsul + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateConsul(scope Construct, id *string, config DataTerraformRemoteStateConsulConfig) DataTerraformRemoteStateConsul +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateConsulConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateConsulConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateConsul_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateConsul_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateCos + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateCos(scope Construct, id *string, config DataTerraformRemoteStateCosConfig) DataTerraformRemoteStateCos +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateCosConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateCosConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateCos_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateCos_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateGcs + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateGcs(scope Construct, id *string, config DataTerraformRemoteStateGcsConfig) DataTerraformRemoteStateGcs +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateGcsConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateGcsConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateGcs_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateGcs_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateHttp + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateHttp(scope Construct, id *string, config DataTerraformRemoteStateHttpConfig) DataTerraformRemoteStateHttp +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateHttpConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateHttpConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateHttp_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateHttp_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateLocal + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateLocal(scope Construct, id *string, config DataTerraformRemoteStateLocalConfig) DataTerraformRemoteStateLocal +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateLocalConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateLocalConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateLocal_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateLocal_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateOss + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateOss(scope Construct, id *string, config DataTerraformRemoteStateOssConfig) DataTerraformRemoteStateOss +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateOssConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateOssConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateOss_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateOss_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStatePg + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStatePg(scope Construct, id *string, config DataTerraformRemoteStatePgConfig) DataTerraformRemoteStatePg +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStatePgConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStatePgConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStatePg_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStatePg_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateS3 + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateS3(scope Construct, id *string, config DataTerraformRemoteStateS3Config) DataTerraformRemoteStateS3 +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateS3Config | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateS3Config + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateS3_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateS3_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateSwift + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewDataTerraformRemoteStateSwift(scope Construct, id *string, config DataTerraformRemoteStateSwiftConfig) DataTerraformRemoteStateSwift +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | DataTerraformRemoteStateSwiftConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateSwiftConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### ~~`ToString`~~ + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### ~~`AddOverride`~~ + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### ~~`OverrideLogicalId`~~ + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### ~~`ResetOverrideLogicalId`~~ + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`ToHclTerraform`~~ + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### ~~`ToMetadata`~~ + +```go +func ToMetadata() interface{} +``` + +##### ~~`ToTerraform`~~ + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### ~~`Get`~~ + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### ~~`GetBoolean`~~ + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### ~~`GetList`~~ + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### ~~`GetNumber`~~ + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### ~~`GetString`~~ + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### ~~`IsConstruct`~~ + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateSwift_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### ~~`IsTerraformElement`~~ + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.DataTerraformRemoteStateSwift_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### ~~`Node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### ~~`CdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`Fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### ~~`FriendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### ~~`TfResourceType`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### GcsBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewGcsBackend(scope Construct, props GcsBackendConfig) GcsBackend +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | GcsBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ GcsBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.GcsBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.GcsBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.GcsBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### HttpBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewHttpBackend(scope Construct, props HttpBackendConfig) HttpBackend +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | HttpBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ HttpBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.HttpBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.HttpBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.HttpBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### ImportableResource + +Class used to represent an importable resource. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewImportableResource(scope Construct, name *string, config IImportableConfig) ImportableResource +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| name | \*string | _No description._ | +| config | IImportableConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `name`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ IImportableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ImportableResource_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.ImportableResource_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### LocalBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewLocalBackend(scope Construct, props LocalBackendConfig) LocalBackend +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | LocalBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Optional + +- _Type:_ LocalBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.LocalBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.LocalBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.LocalBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### OssBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewOssBackend(scope Construct, props OssBackendConfig) OssBackend +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | OssBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ OssBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.OssBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.OssBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.OssBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### PgBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewPgBackend(scope Construct, props PgBackendConfig) PgBackend +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | PgBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ PgBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.PgBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.PgBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.PgBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### RemoteBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewRemoteBackend(scope Construct, props RemoteBackendConfig) RemoteBackend +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | RemoteBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ RemoteBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.RemoteBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.RemoteBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.RemoteBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### Resource + +- _Implements:_ IResource + +A construct which represents a resource. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewResource(scope Construct, id *string) Resource +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------ | -------------------------------------------------- | +| ToString | Returns a string representation of this construct. | + +--- + +##### ~~`ToString`~~ + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | + +--- + +##### ~~`IsConstruct`~~ + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.Resource_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| Stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### ~~`Node`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### ~~`Stack`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```go +func Stack() TerraformStack +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### S3Backend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewS3Backend(scope Construct, props S3BackendConfig) S3Backend +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | S3BackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ S3BackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.S3Backend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.S3Backend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.S3Backend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### SwiftBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewSwiftBackend(scope Construct, props SwiftBackendConfig) SwiftBackend +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| props | SwiftBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `props`Required + +- _Type:_ SwiftBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### ~~`ToString`~~ + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### ~~`AddOverride`~~ + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### ~~`OverrideLogicalId`~~ + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### ~~`ResetOverrideLogicalId`~~ + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`ToHclTerraform`~~ + +```go +func ToHclTerraform() interface{} +``` + +##### ~~`ToMetadata`~~ + +```go +func ToMetadata() interface{} +``` + +##### ~~`ToTerraform`~~ + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### ~~`GetRemoteStateDataSource`~~ + +```go +func GetRemoteStateDataSource(scope Construct, name *string, _fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `_fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### ~~`IsConstruct`~~ + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.SwiftBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### ~~`IsTerraformElement`~~ + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.SwiftBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### ~~`IsBackend`~~ + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.SwiftBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### ~~`Node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### ~~`CdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`Fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### ~~`FriendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### TerraformAsset + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformAsset(scope Construct, id *string, config TerraformAssetConfig) TerraformAsset +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | TerraformAssetConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ TerraformAssetConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | -------------------------------------------------- | +| ToString | Returns a string representation of this construct. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformAsset_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| FileName | \*string | Name of the asset. | +| Path | \*string | The path relative to the root of the terraform directory in posix format Use this property to reference the asset. | +| AssetHash | \*string | _No description._ | +| Type | AssetType | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `FileName`Required + +```go +func FileName() *string +``` + +- _Type:_ \*string + +Name of the asset. + +--- + +##### `Path`Required + +```go +func Path() *string +``` + +- _Type:_ \*string + +The path relative to the root of the terraform directory in posix format Use this property to reference the asset. + +--- + +##### `AssetHash`Required + +```go +func AssetHash() *string +``` + +- _Type:_ \*string + +--- + +##### `Type`Required + +```go +func Type() AssetType +``` + +- _Type:_ AssetType + +--- + +### TerraformBackend + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformBackend(scope Construct, id *string, name *string) TerraformBackend +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| name | \*string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `name`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetRemoteStateDataSource` + +```go +func GetRemoteStateDataSource(scope Construct, name *string, fromStack *string) TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +###### `name`Required + +- _Type:_ \*string + +--- + +###### `fromStack`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsBackend | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformBackend_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformBackend_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsBackend` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformBackend_IsBackend(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### TerraformDataSource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformDataSource(scope Construct, id *string, config TerraformResourceConfig) TerraformDataSource +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | TerraformResourceConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ TerraformResourceConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| InterpolationForAttribute | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `GetAnyMapAttribute` + +```go +func GetAnyMapAttribute(terraformAttribute *string) *map[string]interface{} +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanAttribute` + +```go +func GetBooleanAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanMapAttribute` + +```go +func GetBooleanMapAttribute(terraformAttribute *string) *map[string]*bool +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetListAttribute` + +```go +func GetListAttribute(terraformAttribute *string) *[]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberAttribute` + +```go +func GetNumberAttribute(terraformAttribute *string) *f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberListAttribute` + +```go +func GetNumberListAttribute(terraformAttribute *string) *[]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberMapAttribute` + +```go +func GetNumberMapAttribute(terraformAttribute *string) *map[string]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringAttribute` + +```go +func GetStringAttribute(terraformAttribute *string) *string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringMapAttribute` + +```go +func GetStringMapAttribute(terraformAttribute *string) *map[string]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformDataSource | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformDataSource_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformDataSource_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsTerraformDataSource` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformDataSource_IsTerraformDataSource(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| TerraformMetaArguments | \*map[string]interface{} | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | *[]*string | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformMetaArguments`Required + +```go +func TerraformMetaArguments() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `TerraformResourceType`Required + +```go +func TerraformResourceType() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```go +func TerraformGeneratorMetadata() TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `Count`Optional + +```go +func Count() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `ForEach`Optional + +```go +func ForEach() ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +func Lifecycle() TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +func Provider() TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformElement + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformElement(scope Construct, id *string, elementType *string) TerraformElement +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| elementType | \*string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `elementType`Optional + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformElement_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformElement_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +### TerraformHclModule + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformHclModule(scope Construct, id *string, options TerraformHclModuleConfig) TerraformHclModule +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| options | TerraformHclModuleConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `options`Required + +- _Type:_ TerraformHclModuleConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | +| AddProvider | _No description._ | +| GetString | _No description._ | +| InterpolationForOutput | _No description._ | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| Set | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +##### `AddProvider` + +```go +func AddProvider(provider interface{}) +``` + +###### `provider`Required + +- _Type:_ interface{} + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `InterpolationForOutput` + +```go +func InterpolationForOutput(moduleOutput *string) IResolvable +``` + +###### `moduleOutput`Required + +- _Type:_ \*string + +--- + +##### `Get` + +```go +func Get(output *string) interface{} +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `Set` + +```go +func Set(variable *string, value interface{}) +``` + +###### `variable`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformHclModule_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformHclModule_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| Source | \*string | _No description._ | +| Providers | \*[]interface{} | _No description._ | +| SkipAssetCreationFromLocalModules | \*bool | _No description._ | +| Version | \*string | _No description._ | +| DependsOn | *[]*string | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Variables | \*map[string]interface{} | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `Source`Required + +```go +func Source() *string +``` + +- _Type:_ \*string + +--- + +##### `Providers`Optional + +```go +func Providers() *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```go +func SkipAssetCreationFromLocalModules() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Version`Optional + +```go +func Version() *string +``` + +- _Type:_ \*string + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `ForEach`Optional + +```go +func ForEach() ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Variables`Optional + +```go +func Variables() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +### TerraformLocal + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformLocal(scope Construct, id *string, expression interface{}) TerraformLocal +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| expression | interface{} | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `expression`Required + +- _Type:_ interface{} + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformLocal_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformLocal_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| AsAnyMap | \*map[string]interface{} | _No description._ | +| AsBoolean | IResolvable | _No description._ | +| AsBooleanMap | *map[string]*bool | _No description._ | +| AsList | *[]*string | _No description._ | +| AsNumber | \*f64 | _No description._ | +| AsNumberMap | *map[string]*f64 | _No description._ | +| AsString | \*string | _No description._ | +| AsStringMap | *map[string]*string | _No description._ | +| Expression | interface{} | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `AsAnyMap`Required + +```go +func AsAnyMap() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `AsBoolean`Required + +```go +func AsBoolean() IResolvable +``` + +- _Type:_ IResolvable + +--- + +##### `AsBooleanMap`Required + +```go +func AsBooleanMap() *map[string]*bool +``` + +- _Type:_ *map[string]*bool + +--- + +##### `AsList`Required + +```go +func AsList() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `AsNumber`Required + +```go +func AsNumber() *f64 +``` + +- _Type:_ \*f64 + +--- + +##### `AsNumberMap`Required + +```go +func AsNumberMap() *map[string]*f64 +``` + +- _Type:_ *map[string]*f64 + +--- + +##### `AsString`Required + +```go +func AsString() *string +``` + +- _Type:_ \*string + +--- + +##### `AsStringMap`Required + +```go +func AsStringMap() *map[string]*string +``` + +- _Type:_ *map[string]*string + +--- + +##### `Expression`Required + +```go +func Expression() interface{} +``` + +- _Type:_ interface{} + +--- + +### TerraformModule + +- _Implements:_ ITerraformDependable + +TerraformModule can be used to reference a local terraform module or a module from the Terraform Registry. + +It should be used if you can not use generated bindings for the module as you would get by adding the module +to your cdktf.json files "terraformModules" array and running cdktf get. + +This class is not creating a Terraform module to be used outside of CDKTF. +If you want to bundle certain resources together like you would do with a Terraform module, +you should use Constructs instead, see http://cdk.tf/constructs for more details. + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformModule(scope Construct, id *string, options TerraformModuleConfig) TerraformModule +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| options | TerraformModuleConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `options`Required + +- _Type:_ TerraformModuleConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | +| AddProvider | _No description._ | +| GetString | _No description._ | +| InterpolationForOutput | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +##### `AddProvider` + +```go +func AddProvider(provider interface{}) +``` + +###### `provider`Required + +- _Type:_ interface{} + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `InterpolationForOutput` + +```go +func InterpolationForOutput(moduleOutput *string) IResolvable +``` + +###### `moduleOutput`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformModule_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformModule_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| Source | \*string | _No description._ | +| Providers | \*[]interface{} | _No description._ | +| SkipAssetCreationFromLocalModules | \*bool | _No description._ | +| Version | \*string | _No description._ | +| DependsOn | *[]*string | _No description._ | +| ForEach | ITerraformIterator | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `Source`Required + +```go +func Source() *string +``` + +- _Type:_ \*string + +--- + +##### `Providers`Optional + +```go +func Providers() *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```go +func SkipAssetCreationFromLocalModules() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Version`Optional + +```go +func Version() *string +``` + +- _Type:_ \*string + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `ForEach`Optional + +```go +func ForEach() ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +### TerraformOutput + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformOutput(scope Construct, id *string, config TerraformOutputConfig) TerraformOutput +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | TerraformOutputConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ TerraformOutputConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformOutput | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformOutput_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformOutput_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsTerraformOutput` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformOutput_IsTerraformOutput(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| StaticId | \*bool | _No description._ | +| Value | interface{} | _No description._ | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| Description | \*string | _No description._ | +| Precondition | Precondition | _No description._ | +| Sensitive | \*bool | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `StaticId`Required + +```go +func StaticId() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Value`Required + +```go +func Value() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `Description`Optional + +```go +func Description() *string +``` + +- _Type:_ \*string + +--- + +##### `Precondition`Optional + +```go +func Precondition() Precondition +``` + +- _Type:_ Precondition + +--- + +##### `Sensitive`Optional + +```go +func Sensitive() *bool +``` + +- _Type:_ \*bool + +--- + +### TerraformProvider + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformProvider(scope Construct, id *string, config TerraformProviderConfig) TerraformProvider +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | TerraformProviderConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ TerraformProviderConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformProvider | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformProvider_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformProvider_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsTerraformProvider` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformProvider_IsTerraformProvider(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| MetaAttributes | \*map[string]interface{} | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| TerraformProviderSource | \*string | _No description._ | +| Alias | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `MetaAttributes`Required + +```go +func MetaAttributes() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `TerraformResourceType`Required + +```go +func TerraformResourceType() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```go +func TerraformGeneratorMetadata() TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `TerraformProviderSource`Optional + +```go +func TerraformProviderSource() *string +``` + +- _Type:_ \*string + +--- + +##### `Alias`Optional + +```go +func Alias() *string +``` + +- _Type:_ \*string + +--- + +### TerraformRemoteState + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformRemoteState(scope Construct, id *string, backend *string, config DataTerraformRemoteStateConfig) TerraformRemoteState +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| backend | \*string | _No description._ | +| config | DataTerraformRemoteStateConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `backend`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | Adds this resource to the terraform JSON output. | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| Get | _No description._ | +| GetBoolean | _No description._ | +| GetList | _No description._ | +| GetNumber | _No description._ | +| GetString | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `Get` + +```go +func Get(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetBoolean` + +```go +func GetBoolean(output *string) IResolvable +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetList` + +```go +func GetList(output *string) *[]*string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetNumber` + +```go +func GetNumber(output *string) *f64 +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +##### `GetString` + +```go +func GetString(output *string) *string +``` + +###### `output`Required + +- _Type:_ \*string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformRemoteState_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformRemoteState_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +func TfResourceType() *string +``` + +- _Type:_ \*string + +--- + +### TerraformResource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformResource(scope Construct, id *string, config TerraformResourceConfig) TerraformResource +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | TerraformResourceConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ TerraformResourceConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | Adds this resource to the terraform JSON output. | +| AddMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| GetAnyMapAttribute | _No description._ | +| GetBooleanAttribute | _No description._ | +| GetBooleanMapAttribute | _No description._ | +| GetListAttribute | _No description._ | +| GetNumberAttribute | _No description._ | +| GetNumberListAttribute | _No description._ | +| GetNumberMapAttribute | _No description._ | +| GetStringAttribute | _No description._ | +| GetStringMapAttribute | _No description._ | +| HasResourceMove | _No description._ | +| ImportFrom | _No description._ | +| InterpolationForAttribute | _No description._ | +| MoveFromId | Move the resource corresponding to "id" to this resource. | +| MoveTo | Moves this resource to the target resource given by moveTarget. | +| MoveToId | Moves this resource to the resource corresponding to "id". | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +Adds this resource to the terraform JSON output. + +##### `AddMoveTarget` + +```go +func AddMoveTarget(moveTarget *string) +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `moveTarget`Required + +- _Type:_ \*string + +The string move target that will correspond to this resource. + +--- + +##### `GetAnyMapAttribute` + +```go +func GetAnyMapAttribute(terraformAttribute *string) *map[string]interface{} +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanAttribute` + +```go +func GetBooleanAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetBooleanMapAttribute` + +```go +func GetBooleanMapAttribute(terraformAttribute *string) *map[string]*bool +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetListAttribute` + +```go +func GetListAttribute(terraformAttribute *string) *[]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberAttribute` + +```go +func GetNumberAttribute(terraformAttribute *string) *f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberListAttribute` + +```go +func GetNumberListAttribute(terraformAttribute *string) *[]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetNumberMapAttribute` + +```go +func GetNumberMapAttribute(terraformAttribute *string) *map[string]*f64 +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringAttribute` + +```go +func GetStringAttribute(terraformAttribute *string) *string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `GetStringMapAttribute` + +```go +func GetStringMapAttribute(terraformAttribute *string) *map[string]*string +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `HasResourceMove` + +```go +func HasResourceMove() interface{} +``` + +##### `ImportFrom` + +```go +func ImportFrom(id *string, provider TerraformProvider) +``` + +###### `id`Required + +- _Type:_ \*string + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +##### `MoveFromId` + +```go +func MoveFromId(id *string) +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ \*string + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `MoveTo` + +```go +func MoveTo(moveTarget *string, index interface{}) +``` + +Moves this resource to the target resource given by moveTarget. + +###### `moveTarget`Required + +- _Type:_ \*string + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ interface{} + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `MoveToId` + +```go +func MoveToId(id *string) +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ \*string + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | +| IsTerraformResource | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformResource_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformResource_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `IsTerraformResource` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformResource_IsTerraformResource(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| TerraformMetaArguments | \*map[string]interface{} | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| Connection | interface{} | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | *[]*string | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | \*[]interface{} | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformMetaArguments`Required + +```go +func TerraformMetaArguments() *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `TerraformResourceType`Required + +```go +func TerraformResourceType() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```go +func TerraformGeneratorMetadata() TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `Connection`Optional + +```go +func Connection() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Count`Optional + +```go +func Count() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `ForEach`Optional + +```go +func ForEach() ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +func Lifecycle() TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +func Provider() TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```go +func Provisioners() *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +### TerraformStack + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformStack(scope Construct, id *string) TerraformStack +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------ | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddDependency | _No description._ | +| AddOverride | _No description._ | +| AllProviders | _No description._ | +| DependsOn | _No description._ | +| EnsureBackendExists | _No description._ | +| GetLogicalId | _No description._ | +| HasResourceMove | _No description._ | +| PrepareStack | _No description._ | +| RegisterIncomingCrossStackReference | _No description._ | +| RegisterOutgoingCrossStackReference | _No description._ | +| RunAllValidations | Run all validations on the stack. | +| ToHclTerraform | _No description._ | +| ToTerraform | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddDependency` + +```go +func AddDependency(dependency TerraformStack) +``` + +###### `dependency`Required + +- _Type:_ TerraformStack + +--- + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `AllProviders` + +```go +func AllProviders() *[]TerraformProvider +``` + +##### `DependsOn` + +```go +func DependsOn(stack TerraformStack) *bool +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `EnsureBackendExists` + +```go +func EnsureBackendExists() TerraformBackend +``` + +##### `GetLogicalId` + +```go +func GetLogicalId(tfElement interface{}) *string +``` + +###### `tfElement`Required + +- _Type:_ interface{} + +--- + +##### `HasResourceMove` + +```go +func HasResourceMove() *bool +``` + +##### `PrepareStack` + +```go +func PrepareStack() +``` + +##### `RegisterIncomingCrossStackReference` + +```go +func RegisterIncomingCrossStackReference(fromStack TerraformStack) TerraformRemoteState +``` + +###### `fromStack`Required + +- _Type:_ TerraformStack + +--- + +##### `RegisterOutgoingCrossStackReference` + +```go +func RegisterOutgoingCrossStackReference(identifier *string) TerraformOutput +``` + +###### `identifier`Required + +- _Type:_ \*string + +--- + +##### `RunAllValidations` + +```go +func RunAllValidations() +``` + +Run all validations on the stack. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() *map[string]interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsStack | _No description._ | +| Of | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformStack_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsStack` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformStack_IsStack(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +##### `Of` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformStack_Of(construct IConstruct) TerraformStack +``` + +###### `construct`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| Dependencies | \*[]TerraformStack | _No description._ | +| MoveTargets | TerraformResourceTargets | _No description._ | +| Synthesizer | IStackSynthesizer | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `Dependencies`Required + +```go +func Dependencies() *[]TerraformStack +``` + +- _Type:_ \*[]TerraformStack + +--- + +##### `MoveTargets`Required + +```go +func MoveTargets() TerraformResourceTargets +``` + +- _Type:_ TerraformResourceTargets + +--- + +##### `Synthesizer`Required + +```go +func Synthesizer() IStackSynthesizer +``` + +- _Type:_ IStackSynthesizer + +--- + +### TerraformVariable + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.NewTerraformVariable(scope Construct, id *string, config TerraformVariableConfig) TerraformVariable +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | github.com/aws/constructs-go/constructs/v10.Construct | _No description._ | +| id | \*string | _No description._ | +| config | TerraformVariableConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Construct + +--- + +##### `id`Required + +- _Type:_ \*string + +--- + +##### `config`Required + +- _Type:_ TerraformVariableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| ToString | Returns a string representation of this construct. | +| AddOverride | _No description._ | +| OverrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| ResetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| ToHclTerraform | _No description._ | +| ToMetadata | _No description._ | +| ToTerraform | _No description._ | +| AddValidation | _No description._ | +| SynthesizeAttributes | _No description._ | +| SynthesizeHclAttributes | _No description._ | + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Returns a string representation of this construct. + +##### `AddOverride` + +```go +func AddOverride(path *string, value interface{}) +``` + +###### `path`Required + +- _Type:_ \*string + +--- + +###### `value`Required + +- _Type:_ interface{} + +--- + +##### `OverrideLogicalId` + +```go +func OverrideLogicalId(newLogicalId *string) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ \*string + +The new logical ID to use for this stack element. + +--- + +##### `ResetOverrideLogicalId` + +```go +func ResetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `ToHclTerraform` + +```go +func ToHclTerraform() interface{} +``` + +##### `ToMetadata` + +```go +func ToMetadata() interface{} +``` + +##### `ToTerraform` + +```go +func ToTerraform() interface{} +``` + +##### `AddValidation` + +```go +func AddValidation(validation TerraformVariableValidationConfig) +``` + +###### `validation`Required + +- _Type:_ TerraformVariableValidationConfig + +--- + +##### `SynthesizeAttributes` + +```go +func SynthesizeAttributes() *map[string]interface{} +``` + +##### `SynthesizeHclAttributes` + +```go +func SynthesizeHclAttributes() *map[string]interface{} +``` + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | +| IsConstruct | Checks if `x` is a construct. | +| IsTerraformElement | _No description._ | + +--- + +##### `IsConstruct` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformVariable_IsConstruct(x interface{}) *bool +``` + +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. + +###### `x`Required + +- _Type:_ interface{} + +Any object. + +--- + +##### `IsTerraformElement` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +cdktf.TerraformVariable_IsTerraformElement(x interface{}) *bool +``` + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| CdktfStack | TerraformStack | _No description._ | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| BooleanValue | IResolvable | _No description._ | +| ListValue | *[]*string | _No description._ | +| NumberValue | \*f64 | _No description._ | +| StringValue | \*string | _No description._ | +| Value | interface{} | _No description._ | +| Default | interface{} | _No description._ | +| Description | \*string | _No description._ | +| Nullable | \*bool | _No description._ | +| Sensitive | \*bool | _No description._ | +| Type | \*string | _No description._ | +| Validation | \*[]TerraformVariableValidationConfig | _No description._ | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `CdktfStack`Required + +```go +func CdktfStack() TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `BooleanValue`Required + +```go +func BooleanValue() IResolvable +``` + +- _Type:_ IResolvable + +--- + +##### `ListValue`Required + +```go +func ListValue() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `NumberValue`Required + +```go +func NumberValue() *f64 +``` + +- _Type:_ \*f64 + +--- + +##### `StringValue`Required + +```go +func StringValue() *string +``` + +- _Type:_ \*string + +--- + +##### `Value`Required + +```go +func Value() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Default`Optional + +```go +func Default() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Description`Optional + +```go +func Description() *string +``` + +- _Type:_ \*string + +--- + +##### `Nullable`Optional + +```go +func Nullable() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Sensitive`Optional + +```go +func Sensitive() *bool +``` + +- _Type:_ \*bool + +--- + +##### `Type`Optional + +```go +func Type() *string +``` + +- _Type:_ \*string + +--- + +##### `Validation`Optional + +```go +func Validation() *[]TerraformVariableValidationConfig +``` + +- _Type:_ \*[]TerraformVariableValidationConfig + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/enums.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/enums.mdx new file mode 100644 index 0000000000..8510e5bd84 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/enums.mdx @@ -0,0 +1,56 @@ +--- +page_title: Go Reference for Enums +description: CDKTF Core API Reference for Enums in Go. +--- + + + +# Go: Enums + +### AnnotationMetadataEntryType + +#### Members + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------- | +| AnnotationMetadataEntryType_INFO | _No description._ | +| AnnotationMetadataEntryType_WARN | _No description._ | +| AnnotationMetadataEntryType_ERROR | _No description._ | + +--- + +##### `AnnotationMetadataEntryType_INFO` + +--- + +##### `AnnotationMetadataEntryType_WARN` + +--- + +##### `AnnotationMetadataEntryType_ERROR` + +--- + +### AssetType + +#### Members + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| AssetType_FILE | _No description._ | +| AssetType_DIRECTORY | _No description._ | +| AssetType_ARCHIVE | _No description._ | + +--- + +##### `AssetType_FILE` + +--- + +##### `AssetType_DIRECTORY` + +--- + +##### `AssetType_ARCHIVE` + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/index.mdx new file mode 100644 index 0000000000..ee2ae4abc5 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/index.mdx @@ -0,0 +1,14 @@ +--- +page_title: Go API resource reference overview +description: Learn about the API resources available in the Terraform CDK library for golang. +--- + +# Go API resource reference overview + +The Go API reference includes the following resources: + +- [Classes](/terraform/cdktf/api-reference/go/classes) +- [Constructs](/terraform/cdktf/api-reference/go/constructs) +- [Enums](/terraform/cdktf/api-reference/go/enums) +- [Protocols](/terraform/cdktf/api-reference/go/protocols) +- [Structs](/terraform/cdktf/api-reference/go/structs) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/protocols.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/protocols.mdx new file mode 100644 index 0000000000..45b96e8e1c --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/protocols.mdx @@ -0,0 +1,967 @@ +--- +page_title: Go Reference for Protocols +description: CDKTF Core API Reference for Protocols in Go. +--- + + + +# Go: Protocols + +### IAnyProducer + +- _Implemented By:_ IAnyProducer + +Interface for lazy untyped value producers. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | ------------------ | +| Produce | Produce the value. | + +--- + +##### `Produce` + +```go +func Produce(context IResolveContext) interface{} +``` + +Produce the value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IAspect + +- _Implemented By:_ MigrateIds, IAspect + +Represents an Aspect. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------- | ------------------------------------ | +| Visit | All aspects can visit an IConstruct. | + +--- + +##### `Visit` + +```go +func Visit(node IConstruct) +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +--- + +### IFragmentConcatenator + +- _Implemented By:_ StringConcat, IFragmentConcatenator + +Function used to concatenate symbols in the target document language. + +Interface so it could potentially be exposed over jsii. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ----------------------------------------------- | +| Join | Join the fragment on the left and on the right. | + +--- + +##### `Join` + +```go +func Join(left interface{}, right interface{}) interface{} +``` + +Join the fragment on the left and on the right. + +###### `left`Required + +- _Type:_ interface{} + +--- + +###### `right`Required + +- _Type:_ interface{} + +--- + +### IImportableConfig + +- _Implemented By:_ IImportableConfig + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| ImportId | \*string | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `ImportId`Required + +```go +func ImportId() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformResourceType`Required + +```go +func TerraformResourceType() *string +``` + +- _Type:_ \*string + +--- + +##### `Provider`Optional + +```go +func Provider() TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### IInterpolatingParent + +- _Implemented By:_ AnyMapList, BooleanMapList, ComplexComputedList, ComplexObject, DataResource, MapList, NumberMapList, StringMapList, TerraformDataSource, TerraformResource, IInterpolatingParent + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ----------------- | +| InterpolationForAttribute | _No description._ | + +--- + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +### IListProducer + +- _Implemented By:_ IListProducer + +Interface for lazy list producers. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------------- | +| Produce | Produce the list value. | + +--- + +##### `Produce` + +```go +func Produce(context IResolveContext) *[]*string +``` + +Produce the list value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IManifest + +- _Implemented By:_ Manifest, IManifest + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----------------- | +| Stacks | \*map[string]StackManifest | _No description._ | +| Version | \*string | _No description._ | + +--- + +##### `Stacks`Required + +```go +func Stacks() *map[string]StackManifest +``` + +- _Type:_ \*map[string]StackManifest + +--- + +##### `Version`Required + +```go +func Version() *string +``` + +- _Type:_ \*string + +--- + +### INumberProducer + +- _Implemented By:_ INumberProducer + +Interface for lazy number producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| Produce | Produce the number value. | + +--- + +##### `Produce` + +```go +func Produce(context IResolveContext) *f64 +``` + +Produce the number value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IPostProcessor + +- _Implemented By:_ IPostProcessor + +A Token that can post-process the complete resolved value, after resolve() has recursed over it. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| PostProcess | Process the completely resolved value, after full recursion/resolution has happened. | + +--- + +##### `PostProcess` + +```go +func PostProcess(input interface{}, context IResolveContext) interface{} +``` + +Process the completely resolved value, after full recursion/resolution has happened. + +###### `input`Required + +- _Type:_ interface{} + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IRemoteWorkspace + +- _Implemented By:_ NamedRemoteWorkspace, PrefixedRemoteWorkspaces, IRemoteWorkspace + +### IResolvable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, LazyBase, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, IResolvable + +Interface for values that can be resolvable later. + +Tokens are special objects that participate in synthesis. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------- | +| Resolve | Produce the Token's value at resolution time. | +| ToString | Return a string representation of this resolvable object. | + +--- + +##### `Resolve` + +```go +func Resolve(context IResolveContext) interface{} +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ToString` + +```go +func ToString() *string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------ | +| CreationStack | *[]*string | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `CreationStack`Required + +```go +func CreationStack() *[]*string +``` + +- _Type:_ *[]*string + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### IResolveContext + +- _Implemented By:_ IResolveContext + +Current resolution context for tokens. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| RegisterPostProcessor | Use this postprocessor after the entire token structure has been resolved. | +| Resolve | Resolve an inner object. | + +--- + +##### `RegisterPostProcessor` + +```go +func RegisterPostProcessor(postProcessor IPostProcessor) +``` + +Use this postprocessor after the entire token structure has been resolved. + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `Resolve` + +```go +func Resolve(x interface{}) interface{} +``` + +Resolve an inner object. + +###### `x`Required + +- _Type:_ interface{} + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Preparing | \*bool | True when we are still preparing, false if we're rendering the final output. | +| Scope | github.com/aws/constructs-go/constructs/v10.IConstruct | The scope from which resolution has been initiated. | +| IgnoreEscapes | \*bool | True when ${} should not be parsed, and treated as literals. | +| IteratorContext | \*string | TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. | +| SuppressBraces | \*bool | True when ${} should be ommitted (because already inside them), false otherwise. | +| WarnEscapes | \*bool | True when ${} should not be included in the string to be resolved, outputs a warning. | + +--- + +##### `Preparing`Required + +```go +func Preparing() *bool +``` + +- _Type:_ \*bool + +True when we are still preparing, false if we're rendering the final output. + +--- + +##### `Scope`Required + +```go +func Scope() IConstruct +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +The scope from which resolution has been initiated. + +--- + +##### `IgnoreEscapes`Optional + +```go +func IgnoreEscapes() *bool +``` + +- _Type:_ \*bool + +True when ${} should not be parsed, and treated as literals. + +--- + +##### `IteratorContext`Optional + +```go +func IteratorContext() *string +``` + +- _Type:_ \*string + +TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. + +--- + +##### `SuppressBraces`Optional + +```go +func SuppressBraces() *bool +``` + +- _Type:_ \*bool + +True when ${} should be ommitted (because already inside them), false otherwise. + +--- + +##### `WarnEscapes`Optional + +```go +func WarnEscapes() *bool +``` + +- _Type:_ \*bool + +True when ${} should not be included in the string to be resolved, outputs a warning. + +Default: false + +--- + +### IResource + +- _Extends:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +- _Implemented By:_ Resource, IResource + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| Node | github.com/aws/constructs-go/constructs/v10.Node | The tree node. | +| Stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### `Node`Required + +```go +func Node() Node +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.Node + +The tree node. + +--- + +##### `Stack`Required + +```go +func Stack() TerraformStack +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### IResourceConstructor + +- _Implemented By:_ IResourceConstructor + +### IScopeCallback + +- _Implemented By:_ IScopeCallback + +### IStackSynthesizer + +- _Implemented By:_ IStackSynthesizer + +Encodes information how a certain Stack should be deployed inspired by AWS CDK v2 implementation (synth functionality was removed in constructs v10). + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------- | +| Synthesize | Synthesize the associated stack to the session. | + +--- + +##### `Synthesize` + +```go +func Synthesize(session ISynthesisSession) +``` + +Synthesize the associated stack to the session. + +###### `session`Required + +- _Type:_ ISynthesisSession + +--- + +### IStringProducer + +- _Implemented By:_ IStringProducer + +Interface for lazy string producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| Produce | Produce the string value. | + +--- + +##### `Produce` + +```go +func Produce(context IResolveContext) *string +``` + +Produce the string value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### ISynthesisSession + +- _Implemented By:_ ISynthesisSession + +Represents a single session of synthesis. + +Passed into `TerraformStack.onSynthesize()` methods. +originally from aws/constructs lib v3.3.126 (synth functionality was removed in constructs v10) + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------------------ | +| Manifest | Manifest | _No description._ | +| Outdir | \*string | The output directory for this synthesis session. | +| SkipValidation | \*bool | _No description._ | + +--- + +##### `Manifest`Required + +```go +func Manifest() Manifest +``` + +- _Type:_ Manifest + +--- + +##### `Outdir`Required + +```go +func Outdir() *string +``` + +- _Type:_ \*string + +The output directory for this synthesis session. + +--- + +##### `SkipValidation`Optional + +```go +func SkipValidation() *bool +``` + +- _Type:_ \*bool + +--- + +### ITerraformAddressable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, DataResource, DataTerraformRemoteState, DataTerraformRemoteStateAzurerm, DataTerraformRemoteStateConsul, DataTerraformRemoteStateCos, DataTerraformRemoteStateGcs, DataTerraformRemoteStateHttp, DataTerraformRemoteStateLocal, DataTerraformRemoteStateOss, DataTerraformRemoteStatePg, DataTerraformRemoteStateS3, DataTerraformRemoteStateSwift, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, TerraformDataSource, TerraformHclModule, TerraformLocal, TerraformModule, TerraformRemoteState, TerraformResource, TerraformVariable, ITerraformAddressable, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------ | --------------------- | ----------------- | +| Fqn | \*string | _No description._ | + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### ITerraformDependable + +- _Extends:_ ITerraformAddressable + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformHclModule, TerraformModule, TerraformResource, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------- | --------------------- | ----------------- | +| Fqn | \*string | _No description._ | + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +### ITerraformIterator + +- _Implemented By:_ DynamicListTerraformIterator, ListTerraformIterator, MapTerraformIterator, ResourceTerraformIterator, TerraformIterator, ITerraformIterator + +### ITerraformResource + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformResource, ITerraformResource + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------- | +| InterpolationForAttribute | _No description._ | + +--- + +##### `InterpolationForAttribute` + +```go +func InterpolationForAttribute(terraformAttribute *string) IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ \*string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| Fqn | \*string | _No description._ | +| FriendlyUniqueId | \*string | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | *[]*string | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `Fqn`Required + +```go +func Fqn() *string +``` + +- _Type:_ \*string + +--- + +##### `FriendlyUniqueId`Required + +```go +func FriendlyUniqueId() *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformResourceType`Required + +```go +func TerraformResourceType() *string +``` + +- _Type:_ \*string + +--- + +##### `Count`Optional + +```go +func Count() interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +func DependsOn() *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `ForEach`Optional + +```go +func ForEach() ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +func Lifecycle() TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +func Provider() TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### ITokenMapper + +- _Implemented By:_ ITokenMapper + +Interface to apply operation to tokens in a string. + +Interface so it can be exported via jsii. + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------- | ----------------------- | +| MapToken | Replace a single token. | + +--- + +##### `MapToken` + +```go +func MapToken(t IResolvable) interface{} +``` + +Replace a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +### ITokenResolver + +- _Implemented By:_ DefaultTokenResolver, ITokenResolver + +How to resolve tokens. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------------- | +| ResolveList | Resolve a tokenized list. | +| ResolveMap | Resolve a tokenized map. | +| ResolveNumberList | Resolve a tokenized number list. | +| ResolveString | Resolve a string with at least one stringified token in it. | +| ResolveToken | Resolve a single token. | + +--- + +##### `ResolveList` + +```go +func ResolveList(l *[]*string, context IResolveContext) interface{} +``` + +Resolve a tokenized list. + +###### `l`Required + +- _Type:_ *[]*string + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveMap` + +```go +func ResolveMap(m *map[string]interface{}, context IResolveContext) interface{} +``` + +Resolve a tokenized map. + +###### `m`Required + +- _Type:_ \*map[string]interface{} + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveNumberList` + +```go +func ResolveNumberList(l *[]*f64, context IResolveContext) interface{} +``` + +Resolve a tokenized number list. + +###### `l`Required + +- _Type:_ *[]*f64 + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveString` + +```go +func ResolveString(s TokenizedStringFragments, context IResolveContext) interface{} +``` + +Resolve a string with at least one stringified token in it. + +(May use concatenation) + +###### `s`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `ResolveToken` + +```go +func ResolveToken(t IResolvable, context IResolveContext, postProcessor IPostProcessor) interface{} +``` + +Resolve a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/structs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/structs.mdx new file mode 100644 index 0000000000..9fd84c7a33 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/go/structs.mdx @@ -0,0 +1,10162 @@ +--- +page_title: Go Reference for Structs +description: CDKTF Core API Reference for Structs in Go. +--- + + + +# Go: Structs + +### AppConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.AppConfig { + Context: *map[string]interface{}, + HclOutput: *bool, + Outdir: *string, + SkipBackendValidation: *bool, + SkipValidation: *bool, + StackTraces: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------------------------- | --------------------------------------------------------------- | +| Context | \*map[string]interface{} | Additional context values for the application. | +| HclOutput | \*bool | _No description._ | +| Outdir | \*string | The directory to output Terraform resources. | +| SkipBackendValidation | \*bool | Whether to skip backend validation during synthesis of the app. | +| SkipValidation | \*bool | Whether to skip all validations during synthesis of the app. | +| StackTraces | \*bool | _No description._ | + +--- + +##### `Context`Optional + +```go +Context *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `HclOutput`Optional + +```go +HclOutput *bool +``` + +- _Type:_ \*bool + +--- + +##### `Outdir`Optional + +```go +Outdir *string +``` + +- _Type:_ \*string +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `SkipBackendValidation`Optional + +```go +SkipBackendValidation *bool +``` + +- _Type:_ \*bool +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `SkipValidation`Optional + +```go +SkipValidation *bool +``` + +- _Type:_ \*bool +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `StackTraces`Optional + +```go +StackTraces *bool +``` + +- _Type:_ \*bool + +--- + +### AzurermBackendConfig + +Stores the state as a Blob with the given Key within the Blob Container within the Blob Storage Account. + +This backend supports state locking and consistency checking +with Azure Blob Storage native capabilities. + +Note: By default the Azure Backend uses ADAL for authentication which is deprecated +in favour of MSAL - MSAL can be used by setting use_microsoft_graph to true. +The default for this will change in Terraform 1.2, +so that MSAL authentication is used by default. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/azurerm + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.AzurermBackendConfig { + ContainerName: *string, + Key: *string, + StorageAccountName: *string, + AccessKey: *string, + ClientCertificatePassword: *string, + ClientCertificatePath: *string, + ClientId: *string, + ClientSecret: *string, + Endpoint: *string, + Environment: *string, + MetadataHost: *string, + MsiEndpoint: *string, + OidcRequestToken: *string, + OidcRequestUrl: *string, + OidcToken: *string, + OidcTokenFilePath: *string, + ResourceGroupName: *string, + SasToken: *string, + Snapshot: *bool, + SubscriptionId: *string, + TenantId: *string, + UseAzureadAuth: *bool, + UseMicrosoftGraph: *bool, + UseMsi: *bool, + UseOidc: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ContainerName | \*string | (Required) The Name of the Storage Container within the Storage Account. | +| Key | \*string | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| StorageAccountName | \*string | (Required) The Name of the Storage Account. | +| AccessKey | \*string | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| ClientCertificatePassword | \*string | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| ClientCertificatePath | \*string | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| ClientId | \*string | (Optional) The Client ID of the Service Principal. | +| ClientSecret | \*string | (Optional) The Client Secret of the Service Principal. | +| Endpoint | \*string | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| Environment | \*string | (Optional) The Azure Environment which should be used. | +| MetadataHost | \*string | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| MsiEndpoint | \*string | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| OidcRequestToken | \*string | (Optional) The bearer token for the request to the OIDC provider. | +| OidcRequestUrl | \*string | (Optional) The URL for the OIDC provider from which to request an ID token. | +| OidcToken | \*string | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| OidcTokenFilePath | \*string | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| ResourceGroupName | \*string | (Required) The Name of the Resource Group in which the Storage Account exists. | +| SasToken | \*string | (Optional) The SAS Token used to access the Blob Storage Account. | +| Snapshot | \*bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| SubscriptionId | \*string | (Optional) The Subscription ID in which the Storage Account exists. | +| TenantId | \*string | (Optional) The Tenant ID in which the Subscription exists. | +| UseAzureadAuth | \*bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| UseMicrosoftGraph | \*bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| UseMsi | \*bool | (Optional) Should Managed Service Identity authentication be used? | +| UseOidc | \*bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `ContainerName`Required + +```go +ContainerName *string +``` + +- _Type:_ \*string + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `Key`Required + +```go +Key *string +``` + +- _Type:_ \*string + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `StorageAccountName`Required + +```go +StorageAccountName *string +``` + +- _Type:_ \*string + +(Required) The Name of the Storage Account. + +--- + +##### `AccessKey`Optional + +```go +AccessKey *string +``` + +- _Type:_ \*string + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `ClientCertificatePassword`Optional + +```go +ClientCertificatePassword *string +``` + +- _Type:_ \*string + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `ClientCertificatePath`Optional + +```go +ClientCertificatePath *string +``` + +- _Type:_ \*string + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `ClientId`Optional + +```go +ClientId *string +``` + +- _Type:_ \*string + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `ClientSecret`Optional + +```go +ClientSecret *string +``` + +- _Type:_ \*string + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `Endpoint`Optional + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `Environment`Optional + +```go +Environment *string +``` + +- _Type:_ \*string + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `MetadataHost`Optional + +```go +MetadataHost *string +``` + +- _Type:_ \*string + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `MsiEndpoint`Optional + +```go +MsiEndpoint *string +``` + +- _Type:_ \*string + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `OidcRequestToken`Optional + +```go +OidcRequestToken *string +``` + +- _Type:_ \*string + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `OidcRequestUrl`Optional + +```go +OidcRequestUrl *string +``` + +- _Type:_ \*string + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `OidcToken`Optional + +```go +OidcToken *string +``` + +- _Type:_ \*string + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `OidcTokenFilePath`Optional + +```go +OidcTokenFilePath *string +``` + +- _Type:_ \*string + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `ResourceGroupName`Optional + +```go +ResourceGroupName *string +``` + +- _Type:_ \*string + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `SasToken`Optional + +```go +SasToken *string +``` + +- _Type:_ \*string + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `Snapshot`Optional + +```go +Snapshot *bool +``` + +- _Type:_ \*bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `SubscriptionId`Optional + +```go +SubscriptionId *string +``` + +- _Type:_ \*string + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `TenantId`Optional + +```go +TenantId *string +``` + +- _Type:_ \*string + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `UseAzureadAuth`Optional + +```go +UseAzureadAuth *bool +``` + +- _Type:_ \*bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `UseMicrosoftGraph`Optional + +```go +UseMicrosoftGraph *bool +``` + +- _Type:_ \*bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `UseMsi`Optional + +```go +UseMsi *bool +``` + +- _Type:_ \*bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `UseOidc`Optional + +```go +UseOidc *bool +``` + +- _Type:_ \*bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### CloudBackendConfig + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +https://developer.hashicorp.com/terraform/cli/cloud/settings#arguments + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.CloudBackendConfig { + Organization: *string, + Workspaces: interface{}, + Hostname: *string, + Token: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------- | +| Organization | \*string | The name of the organization containing the workspace(s) the current configuration should use. | +| Workspaces | interface{} | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| Hostname | \*string | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| Token | \*string | The token used to authenticate with Terraform Cloud. | + +--- + +##### `Organization`Required + +```go +Organization *string +``` + +- _Type:_ \*string + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `Workspaces`Required + +```go +Workspaces interface{} +``` + +- _Type:_ interface{} + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `Hostname`Optional + +```go +Hostname *string +``` + +- _Type:_ \*string +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `Token`Optional + +```go +Token *string +``` + +- _Type:_ \*string + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +### ConsulBackendConfig + +Stores the state in the Consul KV store at a given path. This backend supports state locking. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/consul + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.ConsulBackendConfig { + AccessToken: *string, + Path: *string, + Address: *string, + CaFile: *string, + CertFile: *string, + Datacenter: *string, + Gzip: *bool, + HttpAuth: *string, + KeyFile: *string, + Lock: *bool, + Scheme: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| AccessToken | \*string | (Required) Access token. | +| Path | \*string | (Required) Path in the Consul KV store. | +| Address | \*string | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| CaFile | \*string | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| CertFile | \*string | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| Datacenter | \*string | (Optional) The datacenter to use. | +| Gzip | \*bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| HttpAuth | \*string | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| KeyFile | \*string | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| Lock | \*bool | (Optional) false to disable locking. | +| Scheme | \*string | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `AccessToken`Required + +```go +AccessToken *string +``` + +- _Type:_ \*string + +(Required) Access token. + +--- + +##### `Path`Required + +```go +Path *string +``` + +- _Type:_ \*string + +(Required) Path in the Consul KV store. + +--- + +##### `Address`Optional + +```go +Address *string +``` + +- _Type:_ \*string + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `CaFile`Optional + +```go +CaFile *string +``` + +- _Type:_ \*string + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `CertFile`Optional + +```go +CertFile *string +``` + +- _Type:_ \*string + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `Datacenter`Optional + +```go +Datacenter *string +``` + +- _Type:_ \*string + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `Gzip`Optional + +```go +Gzip *bool +``` + +- _Type:_ \*bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `HttpAuth`Optional + +```go +HttpAuth *string +``` + +- _Type:_ \*string + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `KeyFile`Optional + +```go +KeyFile *string +``` + +- _Type:_ \*string + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `Lock`Optional + +```go +Lock *bool +``` + +- _Type:_ \*bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `Scheme`Optional + +```go +Scheme *string +``` + +- _Type:_ \*string + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### CosBackendAssumeRole + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.CosBackendAssumeRole { + RoleArn: *string, + SessionDuration: *f64, + SessionName: *string, + Policy: interface{}, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------------------ | ----------------------------------------------------------------------- | +| RoleArn | \*string | (Required) The ARN of the role to assume. | +| SessionDuration | \*f64 | (Required) The duration of the session when making the AssumeRole call. | +| SessionName | \*string | (Required) The session name to use when making the AssumeRole call. | +| Policy | interface{} | (Optional) A more restrictive policy when making the AssumeRole call. | + +--- + +##### `RoleArn`Required + +```go +RoleArn *string +``` + +- _Type:_ \*string + +(Required) The ARN of the role to assume. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_ARN. + +--- + +##### `SessionDuration`Required + +```go +SessionDuration *f64 +``` + +- _Type:_ \*f64 + +(Required) The duration of the session when making the AssumeRole call. + +Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION. + +--- + +##### `SessionName`Required + +```go +SessionName *string +``` + +- _Type:_ \*string + +(Required) The session name to use when making the AssumeRole call. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `Policy`Optional + +```go +Policy interface{} +``` + +- _Type:_ interface{} + +(Optional) A more restrictive policy when making the AssumeRole call. + +Its content must not contains principal elements. +Please refer to {@link https://www.tencentcloud.com/document/product/598/10603 policies syntax logic}. + +--- + +### CosBackendConfig + +Stores the state as an object in a configurable prefix in a given bucket on Tencent Cloud Object Storage (COS). + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the COS bucket to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/cos + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.CosBackendConfig { + Bucket: *string, + Accelerate: *bool, + Acl: *string, + AssumeRole: github.com/hashicorp/terraform-cdk-go/cdktf.CosBackendAssumeRole, + Domain: *string, + Encrypt: *bool, + Endpoint: *string, + Key: *string, + Prefix: *string, + Region: *string, + SecretId: *string, + SecretKey: *string, + SecurityToken: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Bucket | \*string | (Required) The name of the COS bucket. | +| Accelerate | \*bool | (Optional) Whether to enable global Acceleration. | +| Acl | \*string | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| AssumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| Domain | \*string | (Optional) The root domain of the API request. | +| Encrypt | \*bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | \*string | (Optional) The Custom Endpoint for the COS backend. | +| Key | \*string | (Optional) The path for saving the state file in bucket. | +| Prefix | \*string | (Optional) The directory for saving the state file in bucket. | +| Region | \*string | (Optional) The region of the COS bucket. | +| SecretId | \*string | (Optional) Secret id of Tencent Cloud. | +| SecretKey | \*string | (Optional) Secret key of Tencent Cloud. | +| SecurityToken | \*string | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `Accelerate`Optional + +```go +Accelerate *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `Acl`Optional + +```go +Acl *string +``` + +- _Type:_ \*string + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `AssumeRole`Optional + +```go +AssumeRole CosBackendAssumeRole +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `Domain`Optional + +```go +Domain *string +``` + +- _Type:_ \*string + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `Encrypt`Optional + +```go +Encrypt *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `Key`Optional + +```go +Key *string +``` + +- _Type:_ \*string + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```go +Prefix *string +``` + +- _Type:_ \*string + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `Region`Optional + +```go +Region *string +``` + +- _Type:_ \*string + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `SecretId`Optional + +```go +SecretId *string +``` + +- _Type:_ \*string + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `SecretKey`Optional + +```go +SecretKey *string +``` + +- _Type:_ \*string + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `SecurityToken`Optional + +```go +SecurityToken *string +``` + +- _Type:_ \*string + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataConfig { + Connection: interface{}, + Count: interface{}, + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + ForEach: github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformIterator, + Lifecycle: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformResourceLifecycle, + Provider: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProvider, + Provisioners: *[]interface{}, + Input: *map[string]interface{}, + TriggersReplace: *map[string]interface{}, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| Connection | interface{} | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | \*[]interface{} | _No description._ | +| Input | \*map[string]interface{} | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| TriggersReplace | \*map[string]interface{} | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `Connection`Optional + +```go +Connection interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Count`Optional + +```go +Count interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `ForEach`Optional + +```go +ForEach ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +Lifecycle TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +Provider TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```go +Provisioners *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `Input`Optional + +```go +Input *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `TriggersReplace`Optional + +```go +TriggersReplace *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +### DataTerraformRemoteStateAzurermConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateAzurermConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + ContainerName: *string, + Key: *string, + StorageAccountName: *string, + AccessKey: *string, + ClientCertificatePassword: *string, + ClientCertificatePath: *string, + ClientId: *string, + ClientSecret: *string, + Endpoint: *string, + Environment: *string, + MetadataHost: *string, + MsiEndpoint: *string, + OidcRequestToken: *string, + OidcRequestUrl: *string, + OidcToken: *string, + OidcTokenFilePath: *string, + ResourceGroupName: *string, + SasToken: *string, + Snapshot: *bool, + SubscriptionId: *string, + TenantId: *string, + UseAzureadAuth: *bool, + UseMicrosoftGraph: *bool, + UseMsi: *bool, + UseOidc: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| ContainerName | \*string | (Required) The Name of the Storage Container within the Storage Account. | +| Key | \*string | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| StorageAccountName | \*string | (Required) The Name of the Storage Account. | +| AccessKey | \*string | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| ClientCertificatePassword | \*string | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| ClientCertificatePath | \*string | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| ClientId | \*string | (Optional) The Client ID of the Service Principal. | +| ClientSecret | \*string | (Optional) The Client Secret of the Service Principal. | +| Endpoint | \*string | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| Environment | \*string | (Optional) The Azure Environment which should be used. | +| MetadataHost | \*string | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| MsiEndpoint | \*string | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| OidcRequestToken | \*string | (Optional) The bearer token for the request to the OIDC provider. | +| OidcRequestUrl | \*string | (Optional) The URL for the OIDC provider from which to request an ID token. | +| OidcToken | \*string | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| OidcTokenFilePath | \*string | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| ResourceGroupName | \*string | (Required) The Name of the Resource Group in which the Storage Account exists. | +| SasToken | \*string | (Optional) The SAS Token used to access the Blob Storage Account. | +| Snapshot | \*bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| SubscriptionId | \*string | (Optional) The Subscription ID in which the Storage Account exists. | +| TenantId | \*string | (Optional) The Tenant ID in which the Subscription exists. | +| UseAzureadAuth | \*bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| UseMicrosoftGraph | \*bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| UseMsi | \*bool | (Optional) Should Managed Service Identity authentication be used? | +| UseOidc | \*bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `ContainerName`Required + +```go +ContainerName *string +``` + +- _Type:_ \*string + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `Key`Required + +```go +Key *string +``` + +- _Type:_ \*string + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `StorageAccountName`Required + +```go +StorageAccountName *string +``` + +- _Type:_ \*string + +(Required) The Name of the Storage Account. + +--- + +##### `AccessKey`Optional + +```go +AccessKey *string +``` + +- _Type:_ \*string + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `ClientCertificatePassword`Optional + +```go +ClientCertificatePassword *string +``` + +- _Type:_ \*string + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `ClientCertificatePath`Optional + +```go +ClientCertificatePath *string +``` + +- _Type:_ \*string + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `ClientId`Optional + +```go +ClientId *string +``` + +- _Type:_ \*string + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `ClientSecret`Optional + +```go +ClientSecret *string +``` + +- _Type:_ \*string + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `Endpoint`Optional + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `Environment`Optional + +```go +Environment *string +``` + +- _Type:_ \*string + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `MetadataHost`Optional + +```go +MetadataHost *string +``` + +- _Type:_ \*string + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `MsiEndpoint`Optional + +```go +MsiEndpoint *string +``` + +- _Type:_ \*string + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `OidcRequestToken`Optional + +```go +OidcRequestToken *string +``` + +- _Type:_ \*string + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `OidcRequestUrl`Optional + +```go +OidcRequestUrl *string +``` + +- _Type:_ \*string + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `OidcToken`Optional + +```go +OidcToken *string +``` + +- _Type:_ \*string + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `OidcTokenFilePath`Optional + +```go +OidcTokenFilePath *string +``` + +- _Type:_ \*string + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `ResourceGroupName`Optional + +```go +ResourceGroupName *string +``` + +- _Type:_ \*string + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `SasToken`Optional + +```go +SasToken *string +``` + +- _Type:_ \*string + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `Snapshot`Optional + +```go +Snapshot *bool +``` + +- _Type:_ \*bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `SubscriptionId`Optional + +```go +SubscriptionId *string +``` + +- _Type:_ \*string + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `TenantId`Optional + +```go +TenantId *string +``` + +- _Type:_ \*string + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `UseAzureadAuth`Optional + +```go +UseAzureadAuth *bool +``` + +- _Type:_ \*bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `UseMicrosoftGraph`Optional + +```go +UseMicrosoftGraph *bool +``` + +- _Type:_ \*bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `UseMsi`Optional + +```go +UseMsi *bool +``` + +- _Type:_ \*bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `UseOidc`Optional + +```go +UseOidc *bool +``` + +- _Type:_ \*bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### DataTerraformRemoteStateConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateConfig { + Defaults: *map[string]interface{}, + Workspace: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ------------------------------------- | ----------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateConsulConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateConsulConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + AccessToken: *string, + Path: *string, + Address: *string, + CaFile: *string, + CertFile: *string, + Datacenter: *string, + Gzip: *bool, + HttpAuth: *string, + KeyFile: *string, + Lock: *bool, + Scheme: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| AccessToken | \*string | (Required) Access token. | +| Path | \*string | (Required) Path in the Consul KV store. | +| Address | \*string | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| CaFile | \*string | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| CertFile | \*string | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| Datacenter | \*string | (Optional) The datacenter to use. | +| Gzip | \*bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| HttpAuth | \*string | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| KeyFile | \*string | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| Lock | \*bool | (Optional) false to disable locking. | +| Scheme | \*string | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `AccessToken`Required + +```go +AccessToken *string +``` + +- _Type:_ \*string + +(Required) Access token. + +--- + +##### `Path`Required + +```go +Path *string +``` + +- _Type:_ \*string + +(Required) Path in the Consul KV store. + +--- + +##### `Address`Optional + +```go +Address *string +``` + +- _Type:_ \*string + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `CaFile`Optional + +```go +CaFile *string +``` + +- _Type:_ \*string + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `CertFile`Optional + +```go +CertFile *string +``` + +- _Type:_ \*string + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `Datacenter`Optional + +```go +Datacenter *string +``` + +- _Type:_ \*string + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `Gzip`Optional + +```go +Gzip *bool +``` + +- _Type:_ \*bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `HttpAuth`Optional + +```go +HttpAuth *string +``` + +- _Type:_ \*string + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `KeyFile`Optional + +```go +KeyFile *string +``` + +- _Type:_ \*string + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `Lock`Optional + +```go +Lock *bool +``` + +- _Type:_ \*bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `Scheme`Optional + +```go +Scheme *string +``` + +- _Type:_ \*string + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### DataTerraformRemoteStateCosConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateCosConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Bucket: *string, + Accelerate: *bool, + Acl: *string, + AssumeRole: github.com/hashicorp/terraform-cdk-go/cdktf.CosBackendAssumeRole, + Domain: *string, + Encrypt: *bool, + Endpoint: *string, + Key: *string, + Prefix: *string, + Region: *string, + SecretId: *string, + SecretKey: *string, + SecurityToken: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Bucket | \*string | (Required) The name of the COS bucket. | +| Accelerate | \*bool | (Optional) Whether to enable global Acceleration. | +| Acl | \*string | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| AssumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| Domain | \*string | (Optional) The root domain of the API request. | +| Encrypt | \*bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | \*string | (Optional) The Custom Endpoint for the COS backend. | +| Key | \*string | (Optional) The path for saving the state file in bucket. | +| Prefix | \*string | (Optional) The directory for saving the state file in bucket. | +| Region | \*string | (Optional) The region of the COS bucket. | +| SecretId | \*string | (Optional) Secret id of Tencent Cloud. | +| SecretKey | \*string | (Optional) Secret key of Tencent Cloud. | +| SecurityToken | \*string | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `Accelerate`Optional + +```go +Accelerate *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `Acl`Optional + +```go +Acl *string +``` + +- _Type:_ \*string + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `AssumeRole`Optional + +```go +AssumeRole CosBackendAssumeRole +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `Domain`Optional + +```go +Domain *string +``` + +- _Type:_ \*string + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `Encrypt`Optional + +```go +Encrypt *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `Key`Optional + +```go +Key *string +``` + +- _Type:_ \*string + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```go +Prefix *string +``` + +- _Type:_ \*string + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `Region`Optional + +```go +Region *string +``` + +- _Type:_ \*string + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `SecretId`Optional + +```go +SecretId *string +``` + +- _Type:_ \*string + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `SecretKey`Optional + +```go +SecretKey *string +``` + +- _Type:_ \*string + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `SecurityToken`Optional + +```go +SecurityToken *string +``` + +- _Type:_ \*string + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataTerraformRemoteStateGcsConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateGcsConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Bucket: *string, + AccessToken: *string, + Credentials: *string, + EncryptionKey: *string, + ImpersonateServiceAccount: *string, + ImpersonateServiceAccountDelegates: *[]*string, + KmsEncryptionKey: *string, + Prefix: *string, + StoreageCustomEndpoint: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Bucket | \*string | (Required) The name of the GCS bucket. | +| AccessToken | \*string | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| Credentials | \*string | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| EncryptionKey | \*string | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| ImpersonateServiceAccount | \*string | (Optional) The service account to impersonate for accessing the State Bucket. | +| ImpersonateServiceAccountDelegates | *[]*string | (Optional) The delegation chain for an impersonating a service account. | +| KmsEncryptionKey | \*string | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| Prefix | \*string | (Optional) GCS prefix inside the bucket. | +| StoreageCustomEndpoint | \*string | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `AccessToken`Optional + +```go +AccessToken *string +``` + +- _Type:_ \*string + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `Credentials`Optional + +```go +Credentials *string +``` + +- _Type:_ \*string + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `EncryptionKey`Optional + +```go +EncryptionKey *string +``` + +- _Type:_ \*string + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `ImpersonateServiceAccount`Optional + +```go +ImpersonateServiceAccount *string +``` + +- _Type:_ \*string + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `ImpersonateServiceAccountDelegates`Optional + +```go +ImpersonateServiceAccountDelegates *[]*string +``` + +- _Type:_ *[]*string + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `KmsEncryptionKey`Optional + +```go +KmsEncryptionKey *string +``` + +- _Type:_ \*string + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `Prefix`Optional + +```go +Prefix *string +``` + +- _Type:_ \*string + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `StoreageCustomEndpoint`Optional + +```go +StoreageCustomEndpoint *string +``` + +- _Type:_ \*string + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### DataTerraformRemoteStateHttpConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateHttpConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Address: *string, + ClientCaCertificatePem: *string, + ClientCertificatePem: *string, + ClientPrivateKeyPem: *string, + LockAddress: *string, + LockMethod: *string, + Password: *string, + RetryMax: *f64, + RetryWaitMax: *f64, + RetryWaitMin: *f64, + SkipCertVerification: *bool, + UnlockAddress: *string, + UnlockMethod: *string, + UpdateMethod: *string, + Username: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Address | \*string | (Required) The address of the REST endpoint. | +| ClientCaCertificatePem | \*string | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| ClientCertificatePem | \*string | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| ClientPrivateKeyPem | \*string | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| LockAddress | \*string | (Optional) The address of the lock REST endpoint. | +| LockMethod | \*string | (Optional) The HTTP method to use when locking. | +| Password | \*string | (Optional) The password for HTTP basic authentication. | +| RetryMax | \*f64 | (Optional) The number of HTTP request retries. | +| RetryWaitMax | \*f64 | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| RetryWaitMin | \*f64 | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| SkipCertVerification | \*bool | (Optional) Whether to skip TLS verification. | +| UnlockAddress | \*string | (Optional) The address of the unlock REST endpoint. | +| UnlockMethod | \*string | (Optional) The HTTP method to use when unlocking. | +| UpdateMethod | \*string | (Optional) HTTP method to use when updating state. | +| Username | \*string | (Optional) The username for HTTP basic authentication. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Address`Required + +```go +Address *string +``` + +- _Type:_ \*string + +(Required) The address of the REST endpoint. + +--- + +##### `ClientCaCertificatePem`Optional + +```go +ClientCaCertificatePem *string +``` + +- _Type:_ \*string + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `ClientCertificatePem`Optional + +```go +ClientCertificatePem *string +``` + +- _Type:_ \*string + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `ClientPrivateKeyPem`Optional + +```go +ClientPrivateKeyPem *string +``` + +- _Type:_ \*string + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `LockAddress`Optional + +```go +LockAddress *string +``` + +- _Type:_ \*string + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `LockMethod`Optional + +```go +LockMethod *string +``` + +- _Type:_ \*string + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `Password`Optional + +```go +Password *string +``` + +- _Type:_ \*string + +(Optional) The password for HTTP basic authentication. + +--- + +##### `RetryMax`Optional + +```go +RetryMax *f64 +``` + +- _Type:_ \*f64 + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `RetryWaitMax`Optional + +```go +RetryWaitMax *f64 +``` + +- _Type:_ \*f64 + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `RetryWaitMin`Optional + +```go +RetryWaitMin *f64 +``` + +- _Type:_ \*f64 + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `SkipCertVerification`Optional + +```go +SkipCertVerification *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `UnlockAddress`Optional + +```go +UnlockAddress *string +``` + +- _Type:_ \*string + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `UnlockMethod`Optional + +```go +UnlockMethod *string +``` + +- _Type:_ \*string + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `UpdateMethod`Optional + +```go +UpdateMethod *string +``` + +- _Type:_ \*string + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `Username`Optional + +```go +Username *string +``` + +- _Type:_ \*string + +(Optional) The username for HTTP basic authentication. + +--- + +### DataTerraformRemoteStateLocalConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateLocalConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Path: *string, + WorkspaceDir: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------- | ---------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Path | \*string | Path where the state file is stored. | +| WorkspaceDir | \*string | (Optional) The path to non-default workspaces. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Path`Optional + +```go +Path *string +``` + +- _Type:_ \*string +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `WorkspaceDir`Optional + +```go +WorkspaceDir *string +``` + +- _Type:_ \*string + +(Optional) The path to non-default workspaces. + +--- + +### DataTerraformRemoteStateOssConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateOssConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Bucket: *string, + AccessKey: *string, + Acl: *string, + AssumeRole: github.com/hashicorp/terraform-cdk-go/cdktf.OssAssumeRole, + AssumeRolePolicy: *string, + AssumeRoleRoleArn: *string, + AssumeRoleSessionExpiration: *f64, + AssumeRoleSessionName: *string, + EcsRoleName: *string, + Encrypt: *bool, + Endpoint: *string, + Key: *string, + Prefix: *string, + Profile: *string, + Region: *string, + SecretKey: *string, + SecurityToken: *string, + SharedCredentialsFile: *string, + StsEndpoint: *string, + TablestoreEndpoint: *string, + TablestoreTable: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Bucket | \*string | (Required) The name of the OSS bucket. | +| AccessKey | \*string | (Optional) Alibaba Cloud access key. | +| Acl | \*string | (Optional) Object ACL to be applied to the state file. | +| AssumeRole | OssAssumeRole | _No description._ | +| AssumeRolePolicy | \*string | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| AssumeRoleRoleArn | \*string | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| AssumeRoleSessionExpiration | \*f64 | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| AssumeRoleSessionName | \*string | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| EcsRoleName | \*string | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| Encrypt | \*bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | \*string | (Optional) A custom endpoint for the OSS API. | +| Key | \*string | (Optional) The name of the state file. | +| Prefix | \*string | (Optional) The path directory of the state file will be stored. | +| Profile | \*string | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| Region | \*string | (Optional) The region of the OSS bucket. | +| SecretKey | \*string | (Optional) Alibaba Cloud secret access key. | +| SecurityToken | \*string | (Optional) STS access token. | +| SharedCredentialsFile | \*string | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| StsEndpoint | \*string | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| TablestoreEndpoint | \*string | (Optional) A custom endpoint for the TableStore API. | +| TablestoreTable | \*string | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +(Required) The name of the OSS bucket. + +--- + +##### `AccessKey`Optional + +```go +AccessKey *string +``` + +- _Type:_ \*string + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `Acl`Optional + +```go +Acl *string +``` + +- _Type:_ \*string + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`AssumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```go +AssumeRole OssAssumeRole +``` + +- _Type:_ OssAssumeRole + +--- + +##### `AssumeRolePolicy`Optional + +```go +AssumeRolePolicy *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `AssumeRoleRoleArn`Optional + +```go +AssumeRoleRoleArn *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `AssumeRoleSessionExpiration`Optional + +```go +AssumeRoleSessionExpiration *f64 +``` + +- _Type:_ \*f64 + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `AssumeRoleSessionName`Optional + +```go +AssumeRoleSessionName *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `EcsRoleName`Optional + +```go +EcsRoleName *string +``` + +- _Type:_ \*string + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `Encrypt`Optional + +```go +Encrypt *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `Key`Optional + +```go +Key *string +``` + +- _Type:_ \*string + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```go +Prefix *string +``` + +- _Type:_ \*string + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `Profile`Optional + +```go +Profile *string +``` + +- _Type:_ \*string + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `Region`Optional + +```go +Region *string +``` + +- _Type:_ \*string + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `SecretKey`Optional + +```go +SecretKey *string +``` + +- _Type:_ \*string + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `SecurityToken`Optional + +```go +SecurityToken *string +``` + +- _Type:_ \*string + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `SharedCredentialsFile`Optional + +```go +SharedCredentialsFile *string +``` + +- _Type:_ \*string + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `StsEndpoint`Optional + +```go +StsEndpoint *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `TablestoreEndpoint`Optional + +```go +TablestoreEndpoint *string +``` + +- _Type:_ \*string + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `TablestoreTable`Optional + +```go +TablestoreTable *string +``` + +- _Type:_ \*string + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### DataTerraformRemoteStatePgConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStatePgConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + ConnStr: *string, + SchemaName: *string, + SkipIndexCreation: *bool, + SkipSchemaCreation: *bool, + SkipTableCreation: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| ConnStr | \*string | Postgres connection string; | +| SchemaName | \*string | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| SkipIndexCreation | \*bool | If set to true, the Postgres index must already exist. | +| SkipSchemaCreation | \*bool | If set to true, the Postgres schema must already exist. | +| SkipTableCreation | \*bool | If set to true, the Postgres table must already exist. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `ConnStr`Required + +```go +ConnStr *string +``` + +- _Type:_ \*string + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `SchemaName`Optional + +```go +SchemaName *string +``` + +- _Type:_ \*string + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `SkipIndexCreation`Optional + +```go +SkipIndexCreation *bool +``` + +- _Type:_ \*bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipSchemaCreation`Optional + +```go +SkipSchemaCreation *bool +``` + +- _Type:_ \*bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipTableCreation`Optional + +```go +SkipTableCreation *bool +``` + +- _Type:_ \*bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### DataTerraformRemoteStateRemoteConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateRemoteConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Organization: *string, + Workspaces: github.com/hashicorp/terraform-cdk-go/cdktf.IRemoteWorkspace, + Hostname: *string, + Token: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Organization | \*string | _No description._ | +| Workspaces | IRemoteWorkspace | _No description._ | +| Hostname | \*string | _No description._ | +| Token | \*string | _No description._ | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Organization`Required + +```go +Organization *string +``` + +- _Type:_ \*string + +--- + +##### `Workspaces`Required + +```go +Workspaces IRemoteWorkspace +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `Hostname`Optional + +```go +Hostname *string +``` + +- _Type:_ \*string + +--- + +##### `Token`Optional + +```go +Token *string +``` + +- _Type:_ \*string + +--- + +### DataTerraformRemoteStateS3Config + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateS3Config { + Defaults: *map[string]interface{}, + Workspace: *string, + Bucket: *string, + Key: *string, + AccessKey: *string, + Acl: *string, + AllowedAccountIds: *[]*string, + AssumeRole: github.com/hashicorp/terraform-cdk-go/cdktf.S3BackendAssumeRoleConfig, + AssumeRolePolicy: *string, + AssumeRolePolicyArns: *[]*string, + AssumeRoleTags: *map[string]*string, + AssumeRoleTransitiveTagKeys: *[]*string, + AssumeRoleWithWebIdentity: github.com/hashicorp/terraform-cdk-go/cdktf.S3BackendAssumeRoleWithWebIdentityConfig, + CustomCaBundle: *string, + DynamodbEndpoint: *string, + DynamodbTable: *string, + Ec2MetadataServiceEndpoint: *string, + Ec2MetadataServiceEndpointMode: *string, + Encrypt: *bool, + Endpoint: *string, + Endpoints: github.com/hashicorp/terraform-cdk-go/cdktf.S3BackendEndpointConfig, + ExternalId: *string, + ForbiddenAccountIds: *[]*string, + ForcePathStyle: *bool, + HttpProxy: *string, + HttpsProxy: *string, + IamEndpoint: *string, + Insecure: *bool, + KmsKeyId: *string, + MaxRetries: *f64, + NoProxy: *string, + Profile: *string, + Region: *string, + RetryMode: *string, + RoleArn: *string, + SecretKey: *string, + SessionName: *string, + SharedConfigFiles: *[]*string, + SharedCredentialsFile: *string, + SharedCredentialsFiles: *[]*string, + SkipCredentialsValidation: *bool, + SkipMetadataApiCheck: *bool, + SkipRegionValidation: *bool, + SkipRequestingAccountId: *bool, + SkipS3Checksum: *bool, + SseCustomerKey: *string, + StsEndpoint: *string, + StsRegion: *string, + Token: *string, + UseLegacyWorkflow: *bool, + UsePathStyle: *bool, + WorkspaceKeyPrefix: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Bucket | \*string | Name of the S3 Bucket. | +| Key | \*string | Path to the state file inside the S3 Bucket. | +| AccessKey | \*string | (Optional) AWS access key. | +| Acl | \*string | (Optional) Canned ACL to be applied to the state file. | +| AllowedAccountIds | *[]*string | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| AssumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| AssumeRolePolicy | \*string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| AssumeRolePolicyArns | *[]*string | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| AssumeRoleTags | *map[string]*string | (Optional) Map of assume role session tags. | +| AssumeRoleTransitiveTagKeys | *[]*string | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| AssumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| CustomCaBundle | \*string | (Optional) File containing custom root and intermediate certificates. | +| DynamodbEndpoint | \*string | (Optional) Custom endpoint for the AWS DynamoDB API. | +| DynamodbTable | \*string | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| Ec2MetadataServiceEndpoint | \*string | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| Ec2MetadataServiceEndpointMode | \*string | (Optional) Mode to use in communicating with the metadata service. | +| Encrypt | \*bool | (Optional) Enable server side encryption of the state file. | +| Endpoint | \*string | (Optional) Custom endpoint for the AWS S3 API. | +| Endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| ExternalId | \*string | (Optional) External identifier to use when assuming the role. | +| ForbiddenAccountIds | *[]*string | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| ForcePathStyle | \*bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| HttpProxy | \*string | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| HttpsProxy | \*string | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| IamEndpoint | \*string | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| Insecure | \*bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| KmsKeyId | \*string | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| MaxRetries | \*f64 | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| NoProxy | \*string | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| Profile | \*string | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| Region | \*string | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| RetryMode | \*string | (Optional) Specifies how retries are attempted. | +| RoleArn | \*string | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| SecretKey | \*string | (Optional) AWS secret access key. | +| SessionName | \*string | (Optional) Session name to use when assuming the role. | +| SharedConfigFiles | *[]*string | (Optional) List of paths to AWS shared configuration files. | +| SharedCredentialsFile | \*string | (Optional) Path to the AWS shared credentials file. | +| SharedCredentialsFiles | *[]*string | (Optional) List of paths to AWS shared credentials files. | +| SkipCredentialsValidation | \*bool | (Optional) Skip credentials validation via the STS API. | +| SkipMetadataApiCheck | \*bool | (Optional) Skip usage of EC2 Metadata API. | +| SkipRegionValidation | \*bool | (Optional) Skip validation of provided region name. | +| SkipRequestingAccountId | \*bool | (Optional) Whether to skip requesting the account ID. | +| SkipS3Checksum | \*bool | (Optional) Do not include checksum when uploading S3 Objects. | +| SseCustomerKey | \*string | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| StsEndpoint | \*string | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| StsRegion | \*string | (Optional) AWS region for STS. | +| Token | \*string | (Optional) Multi-Factor Authentication (MFA) token. | +| UseLegacyWorkflow | \*bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| UsePathStyle | \*bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| WorkspaceKeyPrefix | \*string | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `Defaults`Optional + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `Workspace`Optional + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +Name of the S3 Bucket. + +--- + +##### `Key`Required + +```go +Key *string +``` + +- _Type:_ \*string + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `AccessKey`Optional + +```go +AccessKey *string +``` + +- _Type:_ \*string + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `Acl`Optional + +```go +Acl *string +``` + +- _Type:_ \*string + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `AllowedAccountIds`Optional + +```go +AllowedAccountIds *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `AssumeRole`Optional + +```go +AssumeRole S3BackendAssumeRoleConfig +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`AssumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```go +AssumeRolePolicy *string +``` + +- _Type:_ \*string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```go +AssumeRolePolicyArns *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```go +AssumeRoleTags *map[string]*string +``` + +- _Type:_ *map[string]*string + +(Optional) Map of assume role session tags. + +--- + +##### ~~`AssumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```go +AssumeRoleTransitiveTagKeys *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `AssumeRoleWithWebIdentity`Optional + +```go +AssumeRoleWithWebIdentity S3BackendAssumeRoleWithWebIdentityConfig +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `CustomCaBundle`Optional + +```go +CustomCaBundle *string +``` + +- _Type:_ \*string + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`DynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```go +DynamodbEndpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `DynamodbTable`Optional + +```go +DynamodbTable *string +``` + +- _Type:_ \*string + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `Ec2MetadataServiceEndpoint`Optional + +```go +Ec2MetadataServiceEndpoint *string +``` + +- _Type:_ \*string + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `Ec2MetadataServiceEndpointMode`Optional + +```go +Ec2MetadataServiceEndpointMode *string +``` + +- _Type:_ \*string + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `Encrypt`Optional + +```go +Encrypt *bool +``` + +- _Type:_ \*bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`Endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `Endpoints`Optional + +```go +Endpoints S3BackendEndpointConfig +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`ExternalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```go +ExternalId *string +``` + +- _Type:_ \*string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `ForbiddenAccountIds`Optional + +```go +ForbiddenAccountIds *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`ForcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```go +ForcePathStyle *bool +``` + +- _Type:_ \*bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `HttpProxy`Optional + +```go +HttpProxy *string +``` + +- _Type:_ \*string + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `HttpsProxy`Optional + +```go +HttpsProxy *string +``` + +- _Type:_ \*string + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`IamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```go +IamEndpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `Insecure`Optional + +```go +Insecure *bool +``` + +- _Type:_ \*bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `KmsKeyId`Optional + +```go +KmsKeyId *string +``` + +- _Type:_ \*string + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `MaxRetries`Optional + +```go +MaxRetries *f64 +``` + +- _Type:_ \*f64 + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `NoProxy`Optional + +```go +NoProxy *string +``` + +- _Type:_ \*string + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `Profile`Optional + +```go +Profile *string +``` + +- _Type:_ \*string + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `Region`Optional + +```go +Region *string +``` + +- _Type:_ \*string + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `RetryMode`Optional + +```go +RetryMode *string +``` + +- _Type:_ \*string + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`RoleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```go +RoleArn *string +``` + +- _Type:_ \*string + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `SecretKey`Optional + +```go +SecretKey *string +``` + +- _Type:_ \*string + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`SessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```go +SessionName *string +``` + +- _Type:_ \*string + +(Optional) Session name to use when assuming the role. + +--- + +##### `SharedConfigFiles`Optional + +```go +SharedConfigFiles *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `SharedCredentialsFile`Optional + +```go +SharedCredentialsFile *string +``` + +- _Type:_ \*string + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `SharedCredentialsFiles`Optional + +```go +SharedCredentialsFiles *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `SkipCredentialsValidation`Optional + +```go +SkipCredentialsValidation *bool +``` + +- _Type:_ \*bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `SkipMetadataApiCheck`Optional + +```go +SkipMetadataApiCheck *bool +``` + +- _Type:_ \*bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `SkipRegionValidation`Optional + +```go +SkipRegionValidation *bool +``` + +- _Type:_ \*bool + +(Optional) Skip validation of provided region name. + +--- + +##### `SkipRequestingAccountId`Optional + +```go +SkipRequestingAccountId *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `SkipS3Checksum`Optional + +```go +SkipS3Checksum *bool +``` + +- _Type:_ \*bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `SseCustomerKey`Optional + +```go +SseCustomerKey *string +``` + +- _Type:_ \*string + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`StsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```go +StsEndpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `StsRegion`Optional + +```go +StsRegion *string +``` + +- _Type:_ \*string + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `Token`Optional + +```go +Token *string +``` + +- _Type:_ \*string + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `UseLegacyWorkflow`Optional + +```go +UseLegacyWorkflow *bool +``` + +- _Type:_ \*bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `UsePathStyle`Optional + +```go +UsePathStyle *bool +``` + +- _Type:_ \*bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `WorkspaceKeyPrefix`Optional + +```go +WorkspaceKeyPrefix *string +``` + +- _Type:_ \*string + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### DataTerraformRemoteStateSwiftConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.DataTerraformRemoteStateSwiftConfig { + Defaults: *map[string]interface{}, + Workspace: *string, + Container: *string, + ApplicationCredentialId: *string, + ApplicationCredentialName: *string, + ApplicationCredentialSecret: *string, + ArchiveContainer: *string, + AuthUrl: *string, + CacertFile: *string, + Cert: *string, + Cloud: *string, + DefaultDomain: *string, + DomainId: *string, + DomainName: *string, + ExpireAfter: *string, + Insecure: *bool, + Key: *string, + Password: *string, + ProjectDomainId: *string, + ProjectDomainName: *string, + RegionName: *string, + StateName: *string, + TenantId: *string, + TenantName: *string, + Token: *string, + UserDomainId: *string, + UserDomainName: *string, + UserId: *string, + UserName: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ----------------- | +| Defaults | \*map[string]interface{} | _No description._ | +| Workspace | \*string | _No description._ | +| Container | \*string | _No description._ | +| ApplicationCredentialId | \*string | _No description._ | +| ApplicationCredentialName | \*string | _No description._ | +| ApplicationCredentialSecret | \*string | _No description._ | +| ArchiveContainer | \*string | _No description._ | +| AuthUrl | \*string | _No description._ | +| CacertFile | \*string | _No description._ | +| Cert | \*string | _No description._ | +| Cloud | \*string | _No description._ | +| DefaultDomain | \*string | _No description._ | +| DomainId | \*string | _No description._ | +| DomainName | \*string | _No description._ | +| ExpireAfter | \*string | _No description._ | +| Insecure | \*bool | _No description._ | +| Key | \*string | _No description._ | +| Password | \*string | _No description._ | +| ProjectDomainId | \*string | _No description._ | +| ProjectDomainName | \*string | _No description._ | +| RegionName | \*string | _No description._ | +| StateName | \*string | _No description._ | +| TenantId | \*string | _No description._ | +| TenantName | \*string | _No description._ | +| Token | \*string | _No description._ | +| UserDomainId | \*string | _No description._ | +| UserDomainName | \*string | _No description._ | +| UserId | \*string | _No description._ | +| UserName | \*string | _No description._ | + +--- + +##### ~~`Defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Defaults *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### ~~`Workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Workspace *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Container *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ApplicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ApplicationCredentialId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ApplicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ApplicationCredentialName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ApplicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ApplicationCredentialSecret *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ArchiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ArchiveContainer *string +``` + +- _Type:_ \*string + +--- + +##### ~~`AuthUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +AuthUrl *string +``` + +- _Type:_ \*string + +--- + +##### ~~`CacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +CacertFile *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Cert *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Cloud *string +``` + +- _Type:_ \*string + +--- + +##### ~~`DefaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +DefaultDomain *string +``` + +- _Type:_ \*string + +--- + +##### ~~`DomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +DomainId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`DomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +DomainName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ExpireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ExpireAfter *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Insecure *bool +``` + +- _Type:_ \*bool + +--- + +##### ~~`Key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Key *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Password *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ProjectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ProjectDomainId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ProjectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ProjectDomainName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`RegionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +RegionName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`StateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +StateName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`TenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +TenantId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`TenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +TenantName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Token *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserDomainId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserDomainName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserName *string +``` + +- _Type:_ \*string + +--- + +### EncodingOptions + +Properties to string encodings. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.EncodingOptions { + DisplayHint: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ---------------------------------------------------- | +| DisplayHint | \*string | A hint for the Token's purpose when stringifying it. | + +--- + +##### `DisplayHint`Optional + +```go +DisplayHint *string +``` + +- _Type:_ \*string +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +### FileProvisioner + +The file provisioner copies files or directories from the machine running Terraform to the newly created resource. + +The file provisioner supports both ssh and winrm type connections. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/file file} + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.FileProvisioner { + Destination: *string, + Type: *string, + Connection: interface{}, + Content: *string, + Source: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| Destination | \*string | The source file or directory. | +| Type | \*string | _No description._ | +| Connection | interface{} | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| Content | \*string | The destination path to write to on the remote system. | +| Source | \*string | The direct content to copy on the destination. | + +--- + +##### `Destination`Required + +```go +Destination *string +``` + +- _Type:_ \*string + +The source file or directory. + +Specify it either relative to the current working directory or as an absolute path. +This argument cannot be combined with content. + +--- + +##### `Type`Required + +```go +Type *string +``` + +- _Type:_ \*string + +--- + +##### `Connection`Optional + +```go +Connection interface{} +``` + +- _Type:_ interface{} + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +--- + +##### `Content`Optional + +```go +Content *string +``` + +- _Type:_ \*string + +The destination path to write to on the remote system. + +See Destination Paths below for more information. + +--- + +##### `Source`Optional + +```go +Source *string +``` + +- _Type:_ \*string + +The direct content to copy on the destination. + +If destination is a file, the content will be written on that file. +In case of a directory, a file named tf-file-content is created inside that directory. +We recommend using a file as the destination when using content. +This argument cannot be combined with source. + +--- + +### GcsBackendConfig + +Stores the state as an object in a configurable prefix in a pre-existing bucket on Google Cloud Storage (GCS). + +The bucket must exist prior to configuring the backend. + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the GCS bucket +to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/gcs + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.GcsBackendConfig { + Bucket: *string, + AccessToken: *string, + Credentials: *string, + EncryptionKey: *string, + ImpersonateServiceAccount: *string, + ImpersonateServiceAccountDelegates: *[]*string, + KmsEncryptionKey: *string, + Prefix: *string, + StoreageCustomEndpoint: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bucket | \*string | (Required) The name of the GCS bucket. | +| AccessToken | \*string | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| Credentials | \*string | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| EncryptionKey | \*string | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| ImpersonateServiceAccount | \*string | (Optional) The service account to impersonate for accessing the State Bucket. | +| ImpersonateServiceAccountDelegates | *[]*string | (Optional) The delegation chain for an impersonating a service account. | +| KmsEncryptionKey | \*string | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| Prefix | \*string | (Optional) GCS prefix inside the bucket. | +| StoreageCustomEndpoint | \*string | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `AccessToken`Optional + +```go +AccessToken *string +``` + +- _Type:_ \*string + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `Credentials`Optional + +```go +Credentials *string +``` + +- _Type:_ \*string + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `EncryptionKey`Optional + +```go +EncryptionKey *string +``` + +- _Type:_ \*string + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `ImpersonateServiceAccount`Optional + +```go +ImpersonateServiceAccount *string +``` + +- _Type:_ \*string + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `ImpersonateServiceAccountDelegates`Optional + +```go +ImpersonateServiceAccountDelegates *[]*string +``` + +- _Type:_ *[]*string + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `KmsEncryptionKey`Optional + +```go +KmsEncryptionKey *string +``` + +- _Type:_ \*string + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `Prefix`Optional + +```go +Prefix *string +``` + +- _Type:_ \*string + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `StoreageCustomEndpoint`Optional + +```go +StoreageCustomEndpoint *string +``` + +- _Type:_ \*string + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### HttpBackendConfig + +Stores the state using a simple REST client. + +State will be fetched via GET, updated via POST, and purged with DELETE. +The method used for updating is configurable. + +This backend optionally supports state locking. +When locking support is enabled it will use LOCK and UNLOCK requests providing the lock info in the body. +The endpoint should return a 423: Locked or 409: Conflict with the holding lock info when +it's already taken, 200: OK for success. Any other status will be considered an error. +The ID of the holding lock info will be added as a query parameter to state updates requests. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/http + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.HttpBackendConfig { + Address: *string, + ClientCaCertificatePem: *string, + ClientCertificatePem: *string, + ClientPrivateKeyPem: *string, + LockAddress: *string, + LockMethod: *string, + Password: *string, + RetryMax: *f64, + RetryWaitMax: *f64, + RetryWaitMin: *f64, + SkipCertVerification: *bool, + UnlockAddress: *string, + UnlockMethod: *string, + UpdateMethod: *string, + Username: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| Address | \*string | (Required) The address of the REST endpoint. | +| ClientCaCertificatePem | \*string | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| ClientCertificatePem | \*string | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| ClientPrivateKeyPem | \*string | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| LockAddress | \*string | (Optional) The address of the lock REST endpoint. | +| LockMethod | \*string | (Optional) The HTTP method to use when locking. | +| Password | \*string | (Optional) The password for HTTP basic authentication. | +| RetryMax | \*f64 | (Optional) The number of HTTP request retries. | +| RetryWaitMax | \*f64 | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| RetryWaitMin | \*f64 | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| SkipCertVerification | \*bool | (Optional) Whether to skip TLS verification. | +| UnlockAddress | \*string | (Optional) The address of the unlock REST endpoint. | +| UnlockMethod | \*string | (Optional) The HTTP method to use when unlocking. | +| UpdateMethod | \*string | (Optional) HTTP method to use when updating state. | +| Username | \*string | (Optional) The username for HTTP basic authentication. | + +--- + +##### `Address`Required + +```go +Address *string +``` + +- _Type:_ \*string + +(Required) The address of the REST endpoint. + +--- + +##### `ClientCaCertificatePem`Optional + +```go +ClientCaCertificatePem *string +``` + +- _Type:_ \*string + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `ClientCertificatePem`Optional + +```go +ClientCertificatePem *string +``` + +- _Type:_ \*string + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `ClientPrivateKeyPem`Optional + +```go +ClientPrivateKeyPem *string +``` + +- _Type:_ \*string + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `LockAddress`Optional + +```go +LockAddress *string +``` + +- _Type:_ \*string + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `LockMethod`Optional + +```go +LockMethod *string +``` + +- _Type:_ \*string + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `Password`Optional + +```go +Password *string +``` + +- _Type:_ \*string + +(Optional) The password for HTTP basic authentication. + +--- + +##### `RetryMax`Optional + +```go +RetryMax *f64 +``` + +- _Type:_ \*f64 + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `RetryWaitMax`Optional + +```go +RetryWaitMax *f64 +``` + +- _Type:_ \*f64 + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `RetryWaitMin`Optional + +```go +RetryWaitMin *f64 +``` + +- _Type:_ \*f64 + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `SkipCertVerification`Optional + +```go +SkipCertVerification *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `UnlockAddress`Optional + +```go +UnlockAddress *string +``` + +- _Type:_ \*string + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `UnlockMethod`Optional + +```go +UnlockMethod *string +``` + +- _Type:_ \*string + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `UpdateMethod`Optional + +```go +UpdateMethod *string +``` + +- _Type:_ \*string + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `Username`Optional + +```go +Username *string +``` + +- _Type:_ \*string + +(Optional) The username for HTTP basic authentication. + +--- + +### LazyAnyValueOptions + +Options for creating lazy untyped tokens. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.LazyAnyValueOptions { + DisplayHint: *string, + OmitEmptyArray: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------ | +| DisplayHint | \*string | Use the given name as a display hint. | +| OmitEmptyArray | \*bool | If the produced value is an array and it is empty, return 'undefined' instead. | + +--- + +##### `DisplayHint`Optional + +```go +DisplayHint *string +``` + +- _Type:_ \*string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `OmitEmptyArray`Optional + +```go +OmitEmptyArray *bool +``` + +- _Type:_ \*bool +- _Default:_ false + +If the produced value is an array and it is empty, return 'undefined' instead. + +--- + +### LazyListValueOptions + +Options for creating a lazy list token. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.LazyListValueOptions { + DisplayHint: *string, + OmitEmpty: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------- | ---------------------------------------------------------- | +| DisplayHint | \*string | Use the given name as a display hint. | +| OmitEmpty | \*bool | If the produced list is empty, return 'undefined' instead. | + +--- + +##### `DisplayHint`Optional + +```go +DisplayHint *string +``` + +- _Type:_ \*string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `OmitEmpty`Optional + +```go +OmitEmpty *bool +``` + +- _Type:_ \*bool +- _Default:_ false + +If the produced list is empty, return 'undefined' instead. + +--- + +### LazyStringValueOptions + +Options for creating a lazy string token. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.LazyStringValueOptions { + DisplayHint: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------- | ------------------------------------- | +| DisplayHint | \*string | Use the given name as a display hint. | + +--- + +##### `DisplayHint`Optional + +```go +DisplayHint *string +``` + +- _Type:_ \*string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +### LocalBackendConfig + +The local backend stores state on the local filesystem, locks that state using system APIs, and performs operations locally. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/local + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.LocalBackendConfig { + Path: *string, + WorkspaceDir: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------- | ---------------------------------------------- | +| Path | \*string | Path where the state file is stored. | +| WorkspaceDir | \*string | (Optional) The path to non-default workspaces. | + +--- + +##### `Path`Optional + +```go +Path *string +``` + +- _Type:_ \*string +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `WorkspaceDir`Optional + +```go +WorkspaceDir *string +``` + +- _Type:_ \*string + +(Optional) The path to non-default workspaces. + +--- + +### LocalExecProvisioner + +The local-exec provisioner invokes a local executable after a resource is created. + +This invokes a process on the machine running Terraform, not on the resource. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec local-exec} + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.LocalExecProvisioner { + Command: *string, + Type: *string, + Environment: *map[string]*string, + Interpreter: *[]*string, + When: *string, + WorkingDir: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------- | +| Command | \*string | This is the command to execute. | +| Type | \*string | _No description._ | +| Environment | *map[string]*string | A record of key value pairs representing the environment of the executed command. | +| Interpreter | *[]*string | If provided, this is a list of interpreter arguments used to execute the command. | +| When | \*string | If provided, specifies when Terraform will execute the command. | +| WorkingDir | \*string | If provided, specifies the working directory where command will be executed. | + +--- + +##### `Command`Required + +```go +Command *string +``` + +- _Type:_ \*string + +This is the command to execute. + +It can be provided as a relative path to the current working directory or as an absolute path. +It is evaluated in a shell, and can use environment variables or Terraform variables. + +--- + +##### `Type`Required + +```go +Type *string +``` + +- _Type:_ \*string + +--- + +##### `Environment`Optional + +```go +Environment *map[string]*string +``` + +- _Type:_ *map[string]*string + +A record of key value pairs representing the environment of the executed command. + +It inherits the current process environment. + +--- + +##### `Interpreter`Optional + +```go +Interpreter *[]*string +``` + +- _Type:_ *[]*string + +If provided, this is a list of interpreter arguments used to execute the command. + +The first argument is the interpreter itself. +It can be provided as a relative path to the current working directory or as an absolute path +The remaining arguments are appended prior to the command. +This allows building command lines of the form "/bin/bash", "-c", "echo foo". +If interpreter is unspecified, sensible defaults will be chosen based on the system OS. + +--- + +##### `When`Optional + +```go +When *string +``` + +- _Type:_ \*string + +If provided, specifies when Terraform will execute the command. + +For example, when = destroy specifies that the provisioner will run when the associated resource is destroyed + +--- + +##### `WorkingDir`Optional + +```go +WorkingDir *string +``` + +- _Type:_ \*string + +If provided, specifies the working directory where command will be executed. + +It can be provided as a relative path to the current working directory or as an absolute path. +The directory must exist. + +--- + +### OssAssumeRole + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.OssAssumeRole { + RoleArn: *string, + Policy: *string, + SessionExpiration: *f64, + SessionName: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| RoleArn | \*string | _No description._ | +| Policy | \*string | _No description._ | +| SessionExpiration | \*f64 | _No description._ | +| SessionName | \*string | _No description._ | + +--- + +##### `RoleArn`Required + +```go +RoleArn *string +``` + +- _Type:_ \*string + +--- + +##### `Policy`Optional + +```go +Policy *string +``` + +- _Type:_ \*string + +--- + +##### `SessionExpiration`Optional + +```go +SessionExpiration *f64 +``` + +- _Type:_ \*f64 + +--- + +##### `SessionName`Optional + +```go +SessionName *string +``` + +- _Type:_ \*string + +--- + +### OssBackendConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.OssBackendConfig { + Bucket: *string, + AccessKey: *string, + Acl: *string, + AssumeRole: github.com/hashicorp/terraform-cdk-go/cdktf.OssAssumeRole, + AssumeRolePolicy: *string, + AssumeRoleRoleArn: *string, + AssumeRoleSessionExpiration: *f64, + AssumeRoleSessionName: *string, + EcsRoleName: *string, + Encrypt: *bool, + Endpoint: *string, + Key: *string, + Prefix: *string, + Profile: *string, + Region: *string, + SecretKey: *string, + SecurityToken: *string, + SharedCredentialsFile: *string, + StsEndpoint: *string, + TablestoreEndpoint: *string, + TablestoreTable: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bucket | \*string | (Required) The name of the OSS bucket. | +| AccessKey | \*string | (Optional) Alibaba Cloud access key. | +| Acl | \*string | (Optional) Object ACL to be applied to the state file. | +| AssumeRole | OssAssumeRole | _No description._ | +| AssumeRolePolicy | \*string | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| AssumeRoleRoleArn | \*string | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| AssumeRoleSessionExpiration | \*f64 | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| AssumeRoleSessionName | \*string | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| EcsRoleName | \*string | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| Encrypt | \*bool | (Optional) Whether to enable server side encryption of the state file. | +| Endpoint | \*string | (Optional) A custom endpoint for the OSS API. | +| Key | \*string | (Optional) The name of the state file. | +| Prefix | \*string | (Optional) The path directory of the state file will be stored. | +| Profile | \*string | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| Region | \*string | (Optional) The region of the OSS bucket. | +| SecretKey | \*string | (Optional) Alibaba Cloud secret access key. | +| SecurityToken | \*string | (Optional) STS access token. | +| SharedCredentialsFile | \*string | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| StsEndpoint | \*string | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| TablestoreEndpoint | \*string | (Optional) A custom endpoint for the TableStore API. | +| TablestoreTable | \*string | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +(Required) The name of the OSS bucket. + +--- + +##### `AccessKey`Optional + +```go +AccessKey *string +``` + +- _Type:_ \*string + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `Acl`Optional + +```go +Acl *string +``` + +- _Type:_ \*string + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`AssumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```go +AssumeRole OssAssumeRole +``` + +- _Type:_ OssAssumeRole + +--- + +##### `AssumeRolePolicy`Optional + +```go +AssumeRolePolicy *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `AssumeRoleRoleArn`Optional + +```go +AssumeRoleRoleArn *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `AssumeRoleSessionExpiration`Optional + +```go +AssumeRoleSessionExpiration *f64 +``` + +- _Type:_ \*f64 + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `AssumeRoleSessionName`Optional + +```go +AssumeRoleSessionName *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `EcsRoleName`Optional + +```go +EcsRoleName *string +``` + +- _Type:_ \*string + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `Encrypt`Optional + +```go +Encrypt *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `Endpoint`Optional + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `Key`Optional + +```go +Key *string +``` + +- _Type:_ \*string + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `Prefix`Optional + +```go +Prefix *string +``` + +- _Type:_ \*string + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `Profile`Optional + +```go +Profile *string +``` + +- _Type:_ \*string + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `Region`Optional + +```go +Region *string +``` + +- _Type:_ \*string + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `SecretKey`Optional + +```go +SecretKey *string +``` + +- _Type:_ \*string + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `SecurityToken`Optional + +```go +SecurityToken *string +``` + +- _Type:_ \*string + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `SharedCredentialsFile`Optional + +```go +SharedCredentialsFile *string +``` + +- _Type:_ \*string + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `StsEndpoint`Optional + +```go +StsEndpoint *string +``` + +- _Type:_ \*string + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `TablestoreEndpoint`Optional + +```go +TablestoreEndpoint *string +``` + +- _Type:_ \*string + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `TablestoreTable`Optional + +```go +TablestoreTable *string +``` + +- _Type:_ \*string + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### PgBackendConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.PgBackendConfig { + ConnStr: *string, + SchemaName: *string, + SkipIndexCreation: *bool, + SkipSchemaCreation: *bool, + SkipTableCreation: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------- | +| ConnStr | \*string | Postgres connection string; | +| SchemaName | \*string | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| SkipIndexCreation | \*bool | If set to true, the Postgres index must already exist. | +| SkipSchemaCreation | \*bool | If set to true, the Postgres schema must already exist. | +| SkipTableCreation | \*bool | If set to true, the Postgres table must already exist. | + +--- + +##### `ConnStr`Required + +```go +ConnStr *string +``` + +- _Type:_ \*string + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `SchemaName`Optional + +```go +SchemaName *string +``` + +- _Type:_ \*string + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `SkipIndexCreation`Optional + +```go +SkipIndexCreation *bool +``` + +- _Type:_ \*bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipSchemaCreation`Optional + +```go +SkipSchemaCreation *bool +``` + +- _Type:_ \*bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `SkipTableCreation`Optional + +```go +SkipTableCreation *bool +``` + +- _Type:_ \*bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### Postcondition + +Terraform checks a postcondition after evaluating the object it is associated with. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.Postcondition { + Condition: interface{}, + ErrorMessage: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | interface{} | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | \*string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```go +Condition interface{} +``` + +- _Type:_ interface{} + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```go +ErrorMessage *string +``` + +- _Type:_ \*string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### Precondition + +Terraform checks a precondition before evaluating the object it is associated with. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.Precondition { + Condition: interface{}, + ErrorMessage: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | interface{} | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | \*string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```go +Condition interface{} +``` + +- _Type:_ interface{} + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```go +ErrorMessage *string +``` + +- _Type:_ \*string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### RemoteBackendConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.RemoteBackendConfig { + Organization: *string, + Workspaces: github.com/hashicorp/terraform-cdk-go/cdktf.IRemoteWorkspace, + Hostname: *string, + Token: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| Organization | \*string | _No description._ | +| Workspaces | IRemoteWorkspace | _No description._ | +| Hostname | \*string | _No description._ | +| Token | \*string | _No description._ | + +--- + +##### `Organization`Required + +```go +Organization *string +``` + +- _Type:_ \*string + +--- + +##### `Workspaces`Required + +```go +Workspaces IRemoteWorkspace +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `Hostname`Optional + +```go +Hostname *string +``` + +- _Type:_ \*string + +--- + +##### `Token`Optional + +```go +Token *string +``` + +- _Type:_ \*string + +--- + +### RemoteExecProvisioner + +The remote-exec provisioner invokes a script on a remote resource after it is created. + +This can be used to run a configuration management tool, bootstrap into a cluster, etc +The remote-exec provisioner requires a connection and supports both ssh and winrm. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/remote-exec remote-exec} + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.RemoteExecProvisioner { + Type: *string, + Connection: interface{}, + Inline: *[]*string, + Script: *string, + Scripts: *[]*string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| Type | \*string | _No description._ | +| Connection | interface{} | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| Inline | *[]*string | This is a list of command strings. | +| Script | \*string | This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. | +| Scripts | *[]*string | This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. | + +--- + +##### `Type`Required + +```go +Type *string +``` + +- _Type:_ \*string + +--- + +##### `Connection`Optional + +```go +Connection interface{} +``` + +- _Type:_ interface{} + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +A connection must be provided here or in the parent resource. + +--- + +##### `Inline`Optional + +```go +Inline *[]*string +``` + +- _Type:_ *[]*string + +This is a list of command strings. + +They are executed in the order they are provided. +This cannot be provided with script or scripts. + +--- + +##### `Script`Optional + +```go +Script *string +``` + +- _Type:_ \*string + +This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. + +This cannot be provided with inline or scripts. + +--- + +##### `Scripts`Optional + +```go +Scripts *[]*string +``` + +- _Type:_ *[]*string + +This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. + +They are executed in the order they are provided. +This cannot be provided with inline or script. + +--- + +### ResolveOptions + +Options to the resolve() operation. + +NOT the same as the ResolveContext; ResolveContext is exposed to Token +implementors and resolution hooks, whereas this struct is just to bundle +a number of things that would otherwise be arguments to resolve() in a +readable way. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.ResolveOptions { + Resolver: github.com/hashicorp/terraform-cdk-go/cdktf.ITokenResolver, + Scope: github.com/aws/constructs-go/constructs/v10.IConstruct, + Preparing: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| Resolver | ITokenResolver | The resolver to apply to any resolvable tokens found. | +| Scope | github.com/aws/constructs-go/constructs/v10.IConstruct | The scope from which resolution is performed. | +| Preparing | \*bool | Whether the resolution is being executed during the prepare phase or not. | + +--- + +##### `Resolver`Required + +```go +Resolver ITokenResolver +``` + +- _Type:_ ITokenResolver + +The resolver to apply to any resolvable tokens found. + +--- + +##### `Scope`Required + +```go +Scope IConstruct +``` + +- _Type:_ github.com/aws/constructs-go/constructs/v10.IConstruct + +The scope from which resolution is performed. + +--- + +##### `Preparing`Optional + +```go +Preparing *bool +``` + +- _Type:_ \*bool +- _Default:_ false + +Whether the resolution is being executed during the prepare phase or not. + +--- + +### S3BackendAssumeRoleConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.S3BackendAssumeRoleConfig { + RoleArn: *string, + Duration: *string, + ExternalId: *string, + Policy: *string, + PolicyArns: *[]*string, + SessionName: *string, + SourceIdentity: *string, + Tags: *map[string]*string, + TransitiveTagKeys: *[]*string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| RoleArn | \*string | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| Duration | \*string | (Optional) The duration individual credentials will be valid. | +| ExternalId | \*string | (Optional) External identifier to use when assuming the role. | +| Policy | \*string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| PolicyArns | *[]*string | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| SessionName | \*string | (Optional) Session name to use when assuming the role. | +| SourceIdentity | \*string | (Optional) Source identity specified by the principal assuming the. | +| Tags | *map[string]*string | (Optional) Map of assume role session tags. | +| TransitiveTagKeys | *[]*string | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | + +--- + +##### `RoleArn`Required + +```go +RoleArn *string +``` + +- _Type:_ \*string + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `Duration`Optional + +```go +Duration *string +``` + +- _Type:_ \*string + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `ExternalId`Optional + +```go +ExternalId *string +``` + +- _Type:_ \*string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `Policy`Optional + +```go +Policy *string +``` + +- _Type:_ \*string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `PolicyArns`Optional + +```go +PolicyArns *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `SessionName`Optional + +```go +SessionName *string +``` + +- _Type:_ \*string + +(Optional) Session name to use when assuming the role. + +--- + +##### `SourceIdentity`Optional + +```go +SourceIdentity *string +``` + +- _Type:_ \*string + +(Optional) Source identity specified by the principal assuming the. + +--- + +##### `Tags`Optional + +```go +Tags *map[string]*string +``` + +- _Type:_ *map[string]*string + +(Optional) Map of assume role session tags. + +--- + +##### `TransitiveTagKeys`Optional + +```go +TransitiveTagKeys *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +### S3BackendAssumeRoleWithWebIdentityConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.S3BackendAssumeRoleWithWebIdentityConfig { + Duration: *string, + Policy: *string, + PolicyArns: *[]*string, + RoleArn: *string, + SessionName: *string, + WebIdentityToken: *string, + WebIdentityTokenFile: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| Duration | \*string | (Optional) The duration individual credentials will be valid. | +| Policy | \*string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| PolicyArns | *[]*string | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| RoleArn | \*string | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| SessionName | \*string | (Optional) Session name to use when assuming the role. | +| WebIdentityToken | \*string | (Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. | +| WebIdentityTokenFile | \*string | (Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. | + +--- + +##### `Duration`Optional + +```go +Duration *string +``` + +- _Type:_ \*string + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `Policy`Optional + +```go +Policy *string +``` + +- _Type:_ \*string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `PolicyArns`Optional + +```go +PolicyArns *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `RoleArn`Optional + +```go +RoleArn *string +``` + +- _Type:_ \*string + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +Can also be set with the AWS_ROLE_ARN environment variable. + +--- + +##### `SessionName`Optional + +```go +SessionName *string +``` + +- _Type:_ \*string + +(Optional) Session name to use when assuming the role. + +Can also be set with the AWS_ROLE_SESSION_NAME environment variable. + +--- + +##### `WebIdentityToken`Optional + +```go +WebIdentityToken *string +``` + +- _Type:_ \*string + +(Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token or web_identity_token_file is required. + +--- + +##### `WebIdentityTokenFile`Optional + +```go +WebIdentityTokenFile *string +``` + +- _Type:_ \*string + +(Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token_file or web_identity_token is required. +Can also be set with the AWS_WEB_IDENTITY_TOKEN_FILE environment variable. + +--- + +### S3BackendConfig + +Stores the state as a given key in a given bucket on Amazon S3. + +This backend +also supports state locking and consistency checking via Dynamo DB, which +can be enabled by setting the dynamodb_table field to an existing DynamoDB +table name. A single DynamoDB table can be used to lock multiple remote +state files. Terraform generates key names that include the values of the +bucket and key variables. + +Warning! It is highly recommended that you enable Bucket Versioning on the +S3 bucket to allow for state recovery in the case of accidental deletions +and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/s3 + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.S3BackendConfig { + Bucket: *string, + Key: *string, + AccessKey: *string, + Acl: *string, + AllowedAccountIds: *[]*string, + AssumeRole: github.com/hashicorp/terraform-cdk-go/cdktf.S3BackendAssumeRoleConfig, + AssumeRolePolicy: *string, + AssumeRolePolicyArns: *[]*string, + AssumeRoleTags: *map[string]*string, + AssumeRoleTransitiveTagKeys: *[]*string, + AssumeRoleWithWebIdentity: github.com/hashicorp/terraform-cdk-go/cdktf.S3BackendAssumeRoleWithWebIdentityConfig, + CustomCaBundle: *string, + DynamodbEndpoint: *string, + DynamodbTable: *string, + Ec2MetadataServiceEndpoint: *string, + Ec2MetadataServiceEndpointMode: *string, + Encrypt: *bool, + Endpoint: *string, + Endpoints: github.com/hashicorp/terraform-cdk-go/cdktf.S3BackendEndpointConfig, + ExternalId: *string, + ForbiddenAccountIds: *[]*string, + ForcePathStyle: *bool, + HttpProxy: *string, + HttpsProxy: *string, + IamEndpoint: *string, + Insecure: *bool, + KmsKeyId: *string, + MaxRetries: *f64, + NoProxy: *string, + Profile: *string, + Region: *string, + RetryMode: *string, + RoleArn: *string, + SecretKey: *string, + SessionName: *string, + SharedConfigFiles: *[]*string, + SharedCredentialsFile: *string, + SharedCredentialsFiles: *[]*string, + SkipCredentialsValidation: *bool, + SkipMetadataApiCheck: *bool, + SkipRegionValidation: *bool, + SkipRequestingAccountId: *bool, + SkipS3Checksum: *bool, + SseCustomerKey: *string, + StsEndpoint: *string, + StsRegion: *string, + Token: *string, + UseLegacyWorkflow: *bool, + UsePathStyle: *bool, + WorkspaceKeyPrefix: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bucket | \*string | Name of the S3 Bucket. | +| Key | \*string | Path to the state file inside the S3 Bucket. | +| AccessKey | \*string | (Optional) AWS access key. | +| Acl | \*string | (Optional) Canned ACL to be applied to the state file. | +| AllowedAccountIds | *[]*string | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| AssumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| AssumeRolePolicy | \*string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| AssumeRolePolicyArns | *[]*string | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| AssumeRoleTags | *map[string]*string | (Optional) Map of assume role session tags. | +| AssumeRoleTransitiveTagKeys | *[]*string | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| AssumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| CustomCaBundle | \*string | (Optional) File containing custom root and intermediate certificates. | +| DynamodbEndpoint | \*string | (Optional) Custom endpoint for the AWS DynamoDB API. | +| DynamodbTable | \*string | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| Ec2MetadataServiceEndpoint | \*string | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| Ec2MetadataServiceEndpointMode | \*string | (Optional) Mode to use in communicating with the metadata service. | +| Encrypt | \*bool | (Optional) Enable server side encryption of the state file. | +| Endpoint | \*string | (Optional) Custom endpoint for the AWS S3 API. | +| Endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| ExternalId | \*string | (Optional) External identifier to use when assuming the role. | +| ForbiddenAccountIds | *[]*string | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| ForcePathStyle | \*bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| HttpProxy | \*string | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| HttpsProxy | \*string | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| IamEndpoint | \*string | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| Insecure | \*bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| KmsKeyId | \*string | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| MaxRetries | \*f64 | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| NoProxy | \*string | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| Profile | \*string | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| Region | \*string | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| RetryMode | \*string | (Optional) Specifies how retries are attempted. | +| RoleArn | \*string | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| SecretKey | \*string | (Optional) AWS secret access key. | +| SessionName | \*string | (Optional) Session name to use when assuming the role. | +| SharedConfigFiles | *[]*string | (Optional) List of paths to AWS shared configuration files. | +| SharedCredentialsFile | \*string | (Optional) Path to the AWS shared credentials file. | +| SharedCredentialsFiles | *[]*string | (Optional) List of paths to AWS shared credentials files. | +| SkipCredentialsValidation | \*bool | (Optional) Skip credentials validation via the STS API. | +| SkipMetadataApiCheck | \*bool | (Optional) Skip usage of EC2 Metadata API. | +| SkipRegionValidation | \*bool | (Optional) Skip validation of provided region name. | +| SkipRequestingAccountId | \*bool | (Optional) Whether to skip requesting the account ID. | +| SkipS3Checksum | \*bool | (Optional) Do not include checksum when uploading S3 Objects. | +| SseCustomerKey | \*string | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| StsEndpoint | \*string | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| StsRegion | \*string | (Optional) AWS region for STS. | +| Token | \*string | (Optional) Multi-Factor Authentication (MFA) token. | +| UseLegacyWorkflow | \*bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| UsePathStyle | \*bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| WorkspaceKeyPrefix | \*string | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `Bucket`Required + +```go +Bucket *string +``` + +- _Type:_ \*string + +Name of the S3 Bucket. + +--- + +##### `Key`Required + +```go +Key *string +``` + +- _Type:_ \*string + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `AccessKey`Optional + +```go +AccessKey *string +``` + +- _Type:_ \*string + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `Acl`Optional + +```go +Acl *string +``` + +- _Type:_ \*string + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `AllowedAccountIds`Optional + +```go +AllowedAccountIds *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `AssumeRole`Optional + +```go +AssumeRole S3BackendAssumeRoleConfig +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`AssumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```go +AssumeRolePolicy *string +``` + +- _Type:_ \*string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```go +AssumeRolePolicyArns *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`AssumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```go +AssumeRoleTags *map[string]*string +``` + +- _Type:_ *map[string]*string + +(Optional) Map of assume role session tags. + +--- + +##### ~~`AssumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```go +AssumeRoleTransitiveTagKeys *[]*string +``` + +- _Type:_ *[]*string + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `AssumeRoleWithWebIdentity`Optional + +```go +AssumeRoleWithWebIdentity S3BackendAssumeRoleWithWebIdentityConfig +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `CustomCaBundle`Optional + +```go +CustomCaBundle *string +``` + +- _Type:_ \*string + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`DynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```go +DynamodbEndpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `DynamodbTable`Optional + +```go +DynamodbTable *string +``` + +- _Type:_ \*string + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `Ec2MetadataServiceEndpoint`Optional + +```go +Ec2MetadataServiceEndpoint *string +``` + +- _Type:_ \*string + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `Ec2MetadataServiceEndpointMode`Optional + +```go +Ec2MetadataServiceEndpointMode *string +``` + +- _Type:_ \*string + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `Encrypt`Optional + +```go +Encrypt *bool +``` + +- _Type:_ \*bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`Endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```go +Endpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `Endpoints`Optional + +```go +Endpoints S3BackendEndpointConfig +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`ExternalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```go +ExternalId *string +``` + +- _Type:_ \*string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `ForbiddenAccountIds`Optional + +```go +ForbiddenAccountIds *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`ForcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```go +ForcePathStyle *bool +``` + +- _Type:_ \*bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `HttpProxy`Optional + +```go +HttpProxy *string +``` + +- _Type:_ \*string + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `HttpsProxy`Optional + +```go +HttpsProxy *string +``` + +- _Type:_ \*string + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`IamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```go +IamEndpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `Insecure`Optional + +```go +Insecure *bool +``` + +- _Type:_ \*bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `KmsKeyId`Optional + +```go +KmsKeyId *string +``` + +- _Type:_ \*string + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `MaxRetries`Optional + +```go +MaxRetries *f64 +``` + +- _Type:_ \*f64 + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `NoProxy`Optional + +```go +NoProxy *string +``` + +- _Type:_ \*string + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `Profile`Optional + +```go +Profile *string +``` + +- _Type:_ \*string + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `Region`Optional + +```go +Region *string +``` + +- _Type:_ \*string + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `RetryMode`Optional + +```go +RetryMode *string +``` + +- _Type:_ \*string + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`RoleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```go +RoleArn *string +``` + +- _Type:_ \*string + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `SecretKey`Optional + +```go +SecretKey *string +``` + +- _Type:_ \*string + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`SessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```go +SessionName *string +``` + +- _Type:_ \*string + +(Optional) Session name to use when assuming the role. + +--- + +##### `SharedConfigFiles`Optional + +```go +SharedConfigFiles *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `SharedCredentialsFile`Optional + +```go +SharedCredentialsFile *string +``` + +- _Type:_ \*string + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `SharedCredentialsFiles`Optional + +```go +SharedCredentialsFiles *[]*string +``` + +- _Type:_ *[]*string + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `SkipCredentialsValidation`Optional + +```go +SkipCredentialsValidation *bool +``` + +- _Type:_ \*bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `SkipMetadataApiCheck`Optional + +```go +SkipMetadataApiCheck *bool +``` + +- _Type:_ \*bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `SkipRegionValidation`Optional + +```go +SkipRegionValidation *bool +``` + +- _Type:_ \*bool + +(Optional) Skip validation of provided region name. + +--- + +##### `SkipRequestingAccountId`Optional + +```go +SkipRequestingAccountId *bool +``` + +- _Type:_ \*bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `SkipS3Checksum`Optional + +```go +SkipS3Checksum *bool +``` + +- _Type:_ \*bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `SseCustomerKey`Optional + +```go +SseCustomerKey *string +``` + +- _Type:_ \*string + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`StsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```go +StsEndpoint *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `StsRegion`Optional + +```go +StsRegion *string +``` + +- _Type:_ \*string + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `Token`Optional + +```go +Token *string +``` + +- _Type:_ \*string + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `UseLegacyWorkflow`Optional + +```go +UseLegacyWorkflow *bool +``` + +- _Type:_ \*bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `UsePathStyle`Optional + +```go +UsePathStyle *bool +``` + +- _Type:_ \*bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `WorkspaceKeyPrefix`Optional + +```go +WorkspaceKeyPrefix *string +``` + +- _Type:_ \*string + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### S3BackendEndpointConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.S3BackendEndpointConfig { + Dynamodb: *string, + Iam: *string, + S3: *string, + Sso: *string, + Sts: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ----------------------------------------------------------------------------------------------- | +| Dynamodb | \*string | (Optional) Custom endpoint URL for the AWS DynamoDB API. | +| Iam | \*string | (Optional) Custom endpoint URL for the AWS IAM API. | +| S3 | \*string | (Optional) Custom endpoint URL for the AWS S3 API. | +| Sso | \*string | (Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. | +| Sts | \*string | (Optional) Custom endpoint URL for the AWS STS API. | + +--- + +##### `Dynamodb`Optional + +```go +Dynamodb *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint URL for the AWS DynamoDB API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_DYNAMODB or the deprecated environment variable AWS_DYNAMODB_ENDPOINT. + +--- + +##### `Iam`Optional + +```go +Iam *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint URL for the AWS IAM API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_IAM or the deprecated environment variable AWS_IAM_ENDPOINT. + +--- + +##### `S3`Optional + +```go +S3 *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint URL for the AWS S3 API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_S3 or the deprecated environment variable AWS_S3_ENDPOINT. + +--- + +##### `Sso`Optional + +```go +Sso *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_SSO. + +--- + +##### `Sts`Optional + +```go +Sts *string +``` + +- _Type:_ \*string + +(Optional) Custom endpoint URL for the AWS STS API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_STS or the deprecated environment variable AWS_STS_ENDPOINT. + +--- + +### SSHProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.SSHProvisionerConnection { + Host: *string, + Type: *string, + Agent: *string, + AgentIdentity: *string, + BastionCertificate: *string, + BastionHost: *string, + BastionHostKey: *string, + BastionPassword: *string, + BastionPort: *f64, + BastionPrivateKey: *string, + BastionUser: *string, + Certificate: *string, + HostKey: *string, + Password: *string, + Port: *f64, + PrivateKey: *string, + ProxyHost: *string, + ProxyPort: *f64, + ProxyScheme: *string, + ProxyUserName: *string, + ProxyUserPassword: *string, + ScriptPath: *string, + TargetPlatform: *string, + Timeout: *string, + User: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------- | +| Host | \*string | The address of the resource to connect to. | +| Type | \*string | The connection type. | +| Agent | \*string | Set to false to disable using ssh-agent to authenticate. | +| AgentIdentity | \*string | The preferred identity from the ssh agent for authentication. | +| BastionCertificate | \*string | The contents of a signed CA Certificate. | +| BastionHost | \*string | Setting this enables the bastion Host connection. | +| BastionHostKey | \*string | The public key from the remote host or the signing CA, used to verify the host connection. | +| BastionPassword | \*string | The password to use for the bastion host. | +| BastionPort | \*f64 | The port to use connect to the bastion host. | +| BastionPrivateKey | \*string | The contents of an SSH key file to use for the bastion host. | +| BastionUser | \*string | The user for the connection to the bastion host. | +| Certificate | \*string | The contents of a signed CA Certificate. | +| HostKey | \*string | The public key from the remote host or the signing CA, used to verify the connection. | +| Password | \*string | The password to use for the connection. | +| Port | \*f64 | The port to connect to. | +| PrivateKey | \*string | The contents of an SSH key to use for the connection. | +| ProxyHost | \*string | Setting this enables the SSH over HTTP connection. | +| ProxyPort | \*f64 | The port to use connect to the proxy host. | +| ProxyScheme | \*string | The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. | +| ProxyUserName | \*string | The username to use connect to the private proxy host. | +| ProxyUserPassword | \*string | The password to use connect to the private proxy host. | +| ScriptPath | \*string | The path used to copy scripts meant for remote execution. | +| TargetPlatform | \*string | The target platform to connect to. | +| Timeout | \*string | The timeout to wait for the connection to become available. | +| User | \*string | The user to use for the connection. | + +--- + +##### `Host`Required + +```go +Host *string +``` + +- _Type:_ \*string + +The address of the resource to connect to. + +--- + +##### `Type`Required + +```go +Type *string +``` + +- _Type:_ \*string + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `Agent`Optional + +```go +Agent *string +``` + +- _Type:_ \*string + +Set to false to disable using ssh-agent to authenticate. + +On Windows the only supported SSH authentication agent is Pageant. + +--- + +##### `AgentIdentity`Optional + +```go +AgentIdentity *string +``` + +- _Type:_ \*string + +The preferred identity from the ssh agent for authentication. + +--- + +##### `BastionCertificate`Optional + +```go +BastionCertificate *string +``` + +- _Type:_ \*string + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a bastion_private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `BastionHost`Optional + +```go +BastionHost *string +``` + +- _Type:_ \*string + +Setting this enables the bastion Host connection. + +The provisioner will connect to bastion_host first, and then connect from there to host. + +--- + +##### `BastionHostKey`Optional + +```go +BastionHostKey *string +``` + +- _Type:_ \*string + +The public key from the remote host or the signing CA, used to verify the host connection. + +--- + +##### `BastionPassword`Optional + +```go +BastionPassword *string +``` + +- _Type:_ \*string + +The password to use for the bastion host. + +--- + +##### `BastionPort`Optional + +```go +BastionPort *f64 +``` + +- _Type:_ \*f64 + +The port to use connect to the bastion host. + +--- + +##### `BastionPrivateKey`Optional + +```go +BastionPrivateKey *string +``` + +- _Type:_ \*string + +The contents of an SSH key file to use for the bastion host. + +These can be loaded from a file on disk using the file function. + +--- + +##### `BastionUser`Optional + +```go +BastionUser *string +``` + +- _Type:_ \*string + +The user for the connection to the bastion host. + +--- + +##### `Certificate`Optional + +```go +Certificate *string +``` + +- _Type:_ \*string + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `HostKey`Optional + +```go +HostKey *string +``` + +- _Type:_ \*string + +The public key from the remote host or the signing CA, used to verify the connection. + +--- + +##### `Password`Optional + +```go +Password *string +``` + +- _Type:_ \*string + +The password to use for the connection. + +--- + +##### `Port`Optional + +```go +Port *f64 +``` + +- _Type:_ \*f64 +- _Default:_ 22 + +The port to connect to. + +--- + +##### `PrivateKey`Optional + +```go +PrivateKey *string +``` + +- _Type:_ \*string + +The contents of an SSH key to use for the connection. + +These can be loaded from a file on disk using the file function. +This takes preference over password if provided. + +--- + +##### `ProxyHost`Optional + +```go +ProxyHost *string +``` + +- _Type:_ \*string + +Setting this enables the SSH over HTTP connection. + +This host will be connected to first, and then the host or bastion_host connection will be made from there. + +--- + +##### `ProxyPort`Optional + +```go +ProxyPort *f64 +``` + +- _Type:_ \*f64 + +The port to use connect to the proxy host. + +--- + +##### `ProxyScheme`Optional + +```go +ProxyScheme *string +``` + +- _Type:_ \*string + +The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. + +--- + +##### `ProxyUserName`Optional + +```go +ProxyUserName *string +``` + +- _Type:_ \*string + +The username to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `ProxyUserPassword`Optional + +```go +ProxyUserPassword *string +``` + +- _Type:_ \*string + +The password to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `ScriptPath`Optional + +```go +ScriptPath *string +``` + +- _Type:_ \*string + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `TargetPlatform`Optional + +```go +TargetPlatform *string +``` + +- _Type:_ \*string +- _Default:_ unix + +The target platform to connect to. + +Valid values are "windows" and "unix". +If the platform is set to windows, the default script*path is c:\windows\temp\terraform*%RAND%.cmd, assuming the SSH default shell is cmd.exe. +If the SSH default shell is PowerShell, set script*path to "c:/windows/temp/terraform*%RAND%.ps1" + +--- + +##### `Timeout`Optional + +```go +Timeout *string +``` + +- _Type:_ \*string +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `User`Optional + +```go +User *string +``` + +- _Type:_ \*string +- _Default:_ root + +The user to use for the connection. + +--- + +### StackAnnotation + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.StackAnnotation { + ConstructPath: *string, + Level: github.com/hashicorp/terraform-cdk-go/cdktf.AnnotationMetadataEntryType, + Message: *string, + Stacktrace: *[]*string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | +| ConstructPath | \*string | _No description._ | +| Level | AnnotationMetadataEntryType | _No description._ | +| Message | \*string | _No description._ | +| Stacktrace | *[]*string | _No description._ | + +--- + +##### `ConstructPath`Required + +```go +ConstructPath *string +``` + +- _Type:_ \*string + +--- + +##### `Level`Required + +```go +Level AnnotationMetadataEntryType +``` + +- _Type:_ AnnotationMetadataEntryType + +--- + +##### `Message`Required + +```go +Message *string +``` + +- _Type:_ \*string + +--- + +##### `Stacktrace`Optional + +```go +Stacktrace *[]*string +``` + +- _Type:_ *[]*string + +--- + +### StackManifest + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.StackManifest { + Annotations: *[]github.com/hashicorp/terraform-cdk-go/cdktf.StackAnnotation, + ConstructPath: *string, + Dependencies: *[]*string, + Name: *string, + StackMetadataPath: *string, + SynthesizedStackPath: *string, + WorkingDirectory: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| Annotations | \*[]StackAnnotation | _No description._ | +| ConstructPath | \*string | _No description._ | +| Dependencies | *[]*string | _No description._ | +| Name | \*string | _No description._ | +| StackMetadataPath | \*string | _No description._ | +| SynthesizedStackPath | \*string | _No description._ | +| WorkingDirectory | \*string | _No description._ | + +--- + +##### `Annotations`Required + +```go +Annotations *[]StackAnnotation +``` + +- _Type:_ \*[]StackAnnotation + +--- + +##### `ConstructPath`Required + +```go +ConstructPath *string +``` + +- _Type:_ \*string + +--- + +##### `Dependencies`Required + +```go +Dependencies *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `Name`Required + +```go +Name *string +``` + +- _Type:_ \*string + +--- + +##### `StackMetadataPath`Required + +```go +StackMetadataPath *string +``` + +- _Type:_ \*string + +--- + +##### `SynthesizedStackPath`Required + +```go +SynthesizedStackPath *string +``` + +- _Type:_ \*string + +--- + +##### `WorkingDirectory`Required + +```go +WorkingDirectory *string +``` + +- _Type:_ \*string + +--- + +### SwiftBackendConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.SwiftBackendConfig { + Container: *string, + ApplicationCredentialId: *string, + ApplicationCredentialName: *string, + ApplicationCredentialSecret: *string, + ArchiveContainer: *string, + AuthUrl: *string, + CacertFile: *string, + Cert: *string, + Cloud: *string, + DefaultDomain: *string, + DomainId: *string, + DomainName: *string, + ExpireAfter: *string, + Insecure: *bool, + Key: *string, + Password: *string, + ProjectDomainId: *string, + ProjectDomainName: *string, + RegionName: *string, + StateName: *string, + TenantId: *string, + TenantName: *string, + Token: *string, + UserDomainId: *string, + UserDomainName: *string, + UserId: *string, + UserName: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| Container | \*string | _No description._ | +| ApplicationCredentialId | \*string | _No description._ | +| ApplicationCredentialName | \*string | _No description._ | +| ApplicationCredentialSecret | \*string | _No description._ | +| ArchiveContainer | \*string | _No description._ | +| AuthUrl | \*string | _No description._ | +| CacertFile | \*string | _No description._ | +| Cert | \*string | _No description._ | +| Cloud | \*string | _No description._ | +| DefaultDomain | \*string | _No description._ | +| DomainId | \*string | _No description._ | +| DomainName | \*string | _No description._ | +| ExpireAfter | \*string | _No description._ | +| Insecure | \*bool | _No description._ | +| Key | \*string | _No description._ | +| Password | \*string | _No description._ | +| ProjectDomainId | \*string | _No description._ | +| ProjectDomainName | \*string | _No description._ | +| RegionName | \*string | _No description._ | +| StateName | \*string | _No description._ | +| TenantId | \*string | _No description._ | +| TenantName | \*string | _No description._ | +| Token | \*string | _No description._ | +| UserDomainId | \*string | _No description._ | +| UserDomainName | \*string | _No description._ | +| UserId | \*string | _No description._ | +| UserName | \*string | _No description._ | + +--- + +##### ~~`Container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Container *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ApplicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ApplicationCredentialId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ApplicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ApplicationCredentialName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ApplicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ApplicationCredentialSecret *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ArchiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ArchiveContainer *string +``` + +- _Type:_ \*string + +--- + +##### ~~`AuthUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +AuthUrl *string +``` + +- _Type:_ \*string + +--- + +##### ~~`CacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +CacertFile *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Cert *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Cloud *string +``` + +- _Type:_ \*string + +--- + +##### ~~`DefaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +DefaultDomain *string +``` + +- _Type:_ \*string + +--- + +##### ~~`DomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +DomainId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`DomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +DomainName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ExpireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ExpireAfter *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Insecure *bool +``` + +- _Type:_ \*bool + +--- + +##### ~~`Key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Key *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Password *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ProjectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ProjectDomainId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`ProjectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +ProjectDomainName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`RegionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +RegionName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`StateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +StateName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`TenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +TenantId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`TenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +TenantName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`Token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +Token *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserDomainId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserDomainName *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserId *string +``` + +- _Type:_ \*string + +--- + +##### ~~`UserName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```go +UserName *string +``` + +- _Type:_ \*string + +--- + +### TerraformAssetConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformAssetConfig { + Path: *string, + AssetHash: *string, + Type: github.com/hashicorp/terraform-cdk-go/cdktf.AssetType, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------- | +| Path | \*string | _No description._ | +| AssetHash | \*string | _No description._ | +| Type | AssetType | _No description._ | + +--- + +##### `Path`Required + +```go +Path *string +``` + +- _Type:_ \*string + +--- + +##### `AssetHash`Optional + +```go +AssetHash *string +``` + +- _Type:_ \*string + +--- + +##### `Type`Optional + +```go +Type AssetType +``` + +- _Type:_ AssetType + +--- + +### TerraformCondition + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformCondition { + Condition: interface{}, + ErrorMessage: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | interface{} | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | \*string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```go +Condition interface{} +``` + +- _Type:_ interface{} + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```go +ErrorMessage *string +``` + +- _Type:_ \*string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TerraformConstructor + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf/testingmatchers" + +&testingmatchers.TerraformConstructor { + TfResourceType: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| TfResourceType | \*string | _No description._ | + +--- + +##### `TfResourceType`Required + +```go +TfResourceType *string +``` + +- _Type:_ \*string + +--- + +### TerraformElementMetadata + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformElementMetadata { + Path: *string, + StackTrace: *[]*string, + UniqueId: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------- | ----------------- | +| Path | \*string | _No description._ | +| StackTrace | *[]*string | _No description._ | +| UniqueId | \*string | _No description._ | + +--- + +##### `Path`Required + +```go +Path *string +``` + +- _Type:_ \*string + +--- + +##### `StackTrace`Required + +```go +StackTrace *[]*string +``` + +- _Type:_ *[]*string + +--- + +##### `UniqueId`Required + +```go +UniqueId *string +``` + +- _Type:_ \*string + +--- + +### TerraformHclModuleConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformHclModuleConfig { + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + ForEach: github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformIterator, + Providers: *[]interface{}, + SkipAssetCreationFromLocalModules: *bool, + Source: *string, + Version: *string, + Variables: *map[string]interface{}, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ----------------- | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Providers | \*[]interface{} | _No description._ | +| SkipAssetCreationFromLocalModules | \*bool | _No description._ | +| Source | \*string | _No description._ | +| Version | \*string | _No description._ | +| Variables | \*map[string]interface{} | _No description._ | + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `ForEach`Optional + +```go +ForEach ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Providers`Optional + +```go +Providers *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```go +SkipAssetCreationFromLocalModules *bool +``` + +- _Type:_ \*bool + +--- + +##### `Source`Required + +```go +Source *string +``` + +- _Type:_ \*string + +--- + +##### `Version`Optional + +```go +Version *string +``` + +- _Type:_ \*string + +--- + +##### `Variables`Optional + +```go +Variables *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +### TerraformMetaArguments + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformMetaArguments { + Connection: interface{}, + Count: interface{}, + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + ForEach: github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformIterator, + Lifecycle: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformResourceLifecycle, + Provider: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProvider, + Provisioners: *[]interface{}, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| Connection | interface{} | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | \*[]interface{} | _No description._ | + +--- + +##### `Connection`Optional + +```go +Connection interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Count`Optional + +```go +Count interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `ForEach`Optional + +```go +ForEach ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +Lifecycle TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +Provider TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```go +Provisioners *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +### TerraformModuleConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformModuleConfig { + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + ForEach: github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformIterator, + Providers: *[]interface{}, + SkipAssetCreationFromLocalModules: *bool, + Source: *string, + Version: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ----------------- | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Providers | \*[]interface{} | _No description._ | +| SkipAssetCreationFromLocalModules | \*bool | _No description._ | +| Source | \*string | _No description._ | +| Version | \*string | _No description._ | + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `ForEach`Optional + +```go +ForEach ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Providers`Optional + +```go +Providers *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```go +SkipAssetCreationFromLocalModules *bool +``` + +- _Type:_ \*bool + +--- + +##### `Source`Required + +```go +Source *string +``` + +- _Type:_ \*string + +--- + +##### `Version`Optional + +```go +Version *string +``` + +- _Type:_ \*string + +--- + +### TerraformModuleProvider + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformModuleProvider { + ModuleAlias: *string, + Provider: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProvider, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| ModuleAlias | \*string | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `ModuleAlias`Required + +```go +ModuleAlias *string +``` + +- _Type:_ \*string + +--- + +##### `Provider`Required + +```go +Provider TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformModuleUserConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformModuleUserConfig { + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + ForEach: github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformIterator, + Providers: *[]interface{}, + SkipAssetCreationFromLocalModules: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ----------------- | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Providers | \*[]interface{} | _No description._ | +| SkipAssetCreationFromLocalModules | \*bool | _No description._ | + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `ForEach`Optional + +```go +ForEach ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Providers`Optional + +```go +Providers *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `SkipAssetCreationFromLocalModules`Optional + +```go +SkipAssetCreationFromLocalModules *bool +``` + +- _Type:_ \*bool + +--- + +### TerraformOutputConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformOutputConfig { + Value: interface{}, + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + Description: *string, + Precondition: github.com/hashicorp/terraform-cdk-go/cdktf.Precondition, + Sensitive: *bool, + StaticId: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Value | interface{} | _No description._ | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| Description | \*string | _No description._ | +| Precondition | Precondition | _No description._ | +| Sensitive | \*bool | _No description._ | +| StaticId | \*bool | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `Value`Required + +```go +Value interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `Description`Optional + +```go +Description *string +``` + +- _Type:_ \*string + +--- + +##### `Precondition`Optional + +```go +Precondition Precondition +``` + +- _Type:_ Precondition + +--- + +##### `Sensitive`Optional + +```go +Sensitive *bool +``` + +- _Type:_ \*bool + +--- + +##### `StaticId`Optional + +```go +StaticId *bool +``` + +- _Type:_ \*bool +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +### TerraformProviderConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformProviderConfig { + TerraformResourceType: *string, + TerraformGeneratorMetadata: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProviderGeneratorMetadata, + TerraformProviderSource: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| TerraformResourceType | \*string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| TerraformProviderSource | \*string | _No description._ | + +--- + +##### `TerraformResourceType`Required + +```go +TerraformResourceType *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```go +TerraformGeneratorMetadata TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `TerraformProviderSource`Optional + +```go +TerraformProviderSource *string +``` + +- _Type:_ \*string + +--- + +### TerraformProviderGeneratorMetadata + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformProviderGeneratorMetadata { + ProviderName: *string, + ProviderVersion: *string, + ProviderVersionConstraint: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| ProviderName | \*string | _No description._ | +| ProviderVersion | \*string | _No description._ | +| ProviderVersionConstraint | \*string | _No description._ | + +--- + +##### `ProviderName`Required + +```go +ProviderName *string +``` + +- _Type:_ \*string + +--- + +##### `ProviderVersion`Optional + +```go +ProviderVersion *string +``` + +- _Type:_ \*string + +--- + +##### `ProviderVersionConstraint`Optional + +```go +ProviderVersionConstraint *string +``` + +- _Type:_ \*string + +--- + +### TerraformResourceConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformResourceConfig { + Connection: interface{}, + Count: interface{}, + DependsOn: *[]github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformDependable, + ForEach: github.com/hashicorp/terraform-cdk-go/cdktf.ITerraformIterator, + Lifecycle: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformResourceLifecycle, + Provider: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProvider, + Provisioners: *[]interface{}, + TerraformResourceType: *string, + TerraformGeneratorMetadata: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProviderGeneratorMetadata, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| Connection | interface{} | _No description._ | +| Count | interface{} | _No description._ | +| DependsOn | \*[]ITerraformDependable | _No description._ | +| ForEach | ITerraformIterator | _No description._ | +| Lifecycle | TerraformResourceLifecycle | _No description._ | +| Provider | TerraformProvider | _No description._ | +| Provisioners | \*[]interface{} | _No description._ | +| TerraformResourceType | \*string | _No description._ | +| TerraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `Connection`Optional + +```go +Connection interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Count`Optional + +```go +Count interface{} +``` + +- _Type:_ interface{} + +--- + +##### `DependsOn`Optional + +```go +DependsOn *[]ITerraformDependable +``` + +- _Type:_ \*[]ITerraformDependable + +--- + +##### `ForEach`Optional + +```go +ForEach ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `Lifecycle`Optional + +```go +Lifecycle TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `Provider`Optional + +```go +Provider TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `Provisioners`Optional + +```go +Provisioners *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +##### `TerraformResourceType`Required + +```go +TerraformResourceType *string +``` + +- _Type:_ \*string + +--- + +##### `TerraformGeneratorMetadata`Optional + +```go +TerraformGeneratorMetadata TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +### TerraformResourceImport + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformResourceImport { + Id: *string, + Provider: github.com/hashicorp/terraform-cdk-go/cdktf.TerraformProvider, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| Id | \*string | _No description._ | +| Provider | TerraformProvider | _No description._ | + +--- + +##### `Id`Required + +```go +Id *string +``` + +- _Type:_ \*string + +--- + +##### `Provider`Optional + +```go +Provider TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformResourceLifecycle + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformResourceLifecycle { + CreateBeforeDestroy: *bool, + IgnoreChanges: interface{}, + Postcondition: *[]github.com/hashicorp/terraform-cdk-go/cdktf.Postcondition, + Precondition: *[]github.com/hashicorp/terraform-cdk-go/cdktf.Precondition, + PreventDestroy: *bool, + ReplaceTriggeredBy: *[]interface{}, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | +| CreateBeforeDestroy | \*bool | _No description._ | +| IgnoreChanges | interface{} | _No description._ | +| Postcondition | \*[]Postcondition | _No description._ | +| Precondition | \*[]Precondition | _No description._ | +| PreventDestroy | \*bool | _No description._ | +| ReplaceTriggeredBy | \*[]interface{} | _No description._ | + +--- + +##### `CreateBeforeDestroy`Optional + +```go +CreateBeforeDestroy *bool +``` + +- _Type:_ \*bool + +--- + +##### `IgnoreChanges`Optional + +```go +IgnoreChanges interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Postcondition`Optional + +```go +Postcondition *[]Postcondition +``` + +- _Type:_ \*[]Postcondition + +--- + +##### `Precondition`Optional + +```go +Precondition *[]Precondition +``` + +- _Type:_ \*[]Precondition + +--- + +##### `PreventDestroy`Optional + +```go +PreventDestroy *bool +``` + +- _Type:_ \*bool + +--- + +##### `ReplaceTriggeredBy`Optional + +```go +ReplaceTriggeredBy *[]interface{} +``` + +- _Type:_ \*[]interface{} + +--- + +### TerraformResourceMoveById + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformResourceMoveById { + From: *string, + To: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | --------------------- | ----------------- | +| From | \*string | _No description._ | +| To | \*string | _No description._ | + +--- + +##### `From`Required + +```go +From *string +``` + +- _Type:_ \*string + +--- + +##### `To`Required + +```go +To *string +``` + +- _Type:_ \*string + +--- + +### TerraformResourceMoveByTarget + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformResourceMoveByTarget { + MoveTarget: *string, + Index: interface{}, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------------ | ----------------- | +| MoveTarget | \*string | _No description._ | +| Index | interface{} | _No description._ | + +--- + +##### `MoveTarget`Required + +```go +MoveTarget *string +``` + +- _Type:_ \*string + +--- + +##### `Index`Optional + +```go +Index interface{} +``` + +- _Type:_ interface{} + +--- + +### TerraformStackMetadata + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformStackMetadata { + Backend: *string, + StackName: *string, + Version: *string, + Cloud: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| Backend | \*string | _No description._ | +| StackName | \*string | _No description._ | +| Version | \*string | _No description._ | +| Cloud | \*string | _No description._ | + +--- + +##### `Backend`Required + +```go +Backend *string +``` + +- _Type:_ \*string + +--- + +##### `StackName`Required + +```go +StackName *string +``` + +- _Type:_ \*string + +--- + +##### `Version`Required + +```go +Version *string +``` + +- _Type:_ \*string + +--- + +##### `Cloud`Optional + +```go +Cloud *string +``` + +- _Type:_ \*string + +--- + +### TerraformVariableConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformVariableConfig { + Default: interface{}, + Description: *string, + Nullable: *bool, + Sensitive: *bool, + Type: *string, + Validation: *[]github.com/hashicorp/terraform-cdk-go/cdktf.TerraformVariableValidationConfig, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| Default | interface{} | _No description._ | +| Description | \*string | _No description._ | +| Nullable | \*bool | _No description._ | +| Sensitive | \*bool | _No description._ | +| Type | \*string | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| Validation | \*[]TerraformVariableValidationConfig | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `Default`Optional + +```go +Default interface{} +``` + +- _Type:_ interface{} + +--- + +##### `Description`Optional + +```go +Description *string +``` + +- _Type:_ \*string + +--- + +##### `Nullable`Optional + +```go +Nullable *bool +``` + +- _Type:_ \*bool + +--- + +##### `Sensitive`Optional + +```go +Sensitive *bool +``` + +- _Type:_ \*bool + +--- + +##### `Type`Optional + +```go +Type *string +``` + +- _Type:_ \*string + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(< TYPE >) +- set(< TYPE >) +- map(< TYPE >) +- object({< ATTR NAME > = < TYPE >, ... }) +- tuple([< TYPE >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `Validation`Optional + +```go +Validation *[]TerraformVariableValidationConfig +``` + +- _Type:_ \*[]TerraformVariableValidationConfig + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +### TerraformVariableValidationConfig + +Add one or more validation blocks within the variable block to specify custom conditions. + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TerraformVariableValidationConfig { + Condition: interface{}, + ErrorMessage: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| Condition | interface{} | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| ErrorMessage | \*string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `Condition`Required + +```go +Condition interface{} +``` + +- _Type:_ interface{} + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `ErrorMessage`Required + +```go +ErrorMessage *string +``` + +- _Type:_ \*string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TestingAppConfig + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.TestingAppConfig { + Context: *map[string]interface{}, + EnableFutureFlags: *bool, + FakeCdktfJsonPath: *bool, + Outdir: *string, + StackTraces: *bool, + StubVersion: *bool, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------------------------------- | ----------------- | +| Context | \*map[string]interface{} | _No description._ | +| EnableFutureFlags | \*bool | _No description._ | +| FakeCdktfJsonPath | \*bool | _No description._ | +| Outdir | \*string | _No description._ | +| StackTraces | \*bool | _No description._ | +| StubVersion | \*bool | _No description._ | + +--- + +##### `Context`Optional + +```go +Context *map[string]interface{} +``` + +- _Type:_ \*map[string]interface{} + +--- + +##### `EnableFutureFlags`Optional + +```go +EnableFutureFlags *bool +``` + +- _Type:_ \*bool + +--- + +##### `FakeCdktfJsonPath`Optional + +```go +FakeCdktfJsonPath *bool +``` + +- _Type:_ \*bool + +--- + +##### `Outdir`Optional + +```go +Outdir *string +``` + +- _Type:_ \*string + +--- + +##### `StackTraces`Optional + +```go +StackTraces *bool +``` + +- _Type:_ \*bool + +--- + +##### `StubVersion`Optional + +```go +StubVersion *bool +``` + +- _Type:_ \*bool + +--- + +### WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" + +&cdktf.WinrmProvisionerConnection { + Host: *string, + Type: *string, + Cacert: *string, + Https: *bool, + Insecure: *bool, + Password: *string, + Port: *f64, + ScriptPath: *string, + Timeout: *string, + UseNtlm: *bool, + User: *string, +} +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Host | \*string | The address of the resource to connect to. | +| Type | \*string | The connection type. | +| Cacert | \*string | The CA certificate to validate against. | +| Https | \*bool | Set to true to connect using HTTPS instead of HTTP. | +| Insecure | \*bool | Set to true to skip validating the HTTPS certificate chain. | +| Password | \*string | The password to use for the connection. | +| Port | \*f64 | The port to connect to. | +| ScriptPath | \*string | The path used to copy scripts meant for remote execution. | +| Timeout | \*string | The timeout to wait for the connection to become available. | +| UseNtlm | \*bool | Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. | +| User | \*string | The user to use for the connection. | + +--- + +##### `Host`Required + +```go +Host *string +``` + +- _Type:_ \*string + +The address of the resource to connect to. + +--- + +##### `Type`Required + +```go +Type *string +``` + +- _Type:_ \*string + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `Cacert`Optional + +```go +Cacert *string +``` + +- _Type:_ \*string + +The CA certificate to validate against. + +--- + +##### `Https`Optional + +```go +Https *bool +``` + +- _Type:_ \*bool + +Set to true to connect using HTTPS instead of HTTP. + +--- + +##### `Insecure`Optional + +```go +Insecure *bool +``` + +- _Type:_ \*bool + +Set to true to skip validating the HTTPS certificate chain. + +--- + +##### `Password`Optional + +```go +Password *string +``` + +- _Type:_ \*string + +The password to use for the connection. + +--- + +##### `Port`Optional + +```go +Port *f64 +``` + +- _Type:_ \*f64 +- _Default:_ 22 + +The port to connect to. + +--- + +##### `ScriptPath`Optional + +```go +ScriptPath *string +``` + +- _Type:_ \*string + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `Timeout`Optional + +```go +Timeout *string +``` + +- _Type:_ \*string +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `UseNtlm`Optional + +```go +UseNtlm *bool +``` + +- _Type:_ \*bool + +Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. + +Refer to Authentication for Remote Connections in the Windows App Development documentation for more details. + +--- + +##### `User`Optional + +```go +User *string +``` + +- _Type:_ \*string +- _Default:_ root + +The user to use for the connection. + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/index.mdx new file mode 100644 index 0000000000..527b674f79 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/index.mdx @@ -0,0 +1,17 @@ +--- +page_title: API Reference - CDKTF Core Library +description: >- + Use the CDKTF core library with generated provider bindings to write your CDKTF program. It is available in TypeScript, Python, Java, CSharp, and Go. +--- + +# Core Library API Reference + +The CDK for Terraform (CDKTF) core library lets you define infrastructure resources using familiar programming languages. CDKTF translates the API into the following supported languages. + +- [Typescript](/terraform/cdktf/api-reference/typescript) +- [Python](/terraform/cdktf/api-reference/python) +- [Java](/terraform/cdktf/api-reference/java) +- [CSharp](/terraform/cdktf/api-reference/csharp) +- [Go](/terraform/cdktf/api-reference/go) + +In addition to the core library, you can use [generated provider bindings](/terraform/cdktf/concepts/providers) and [Constructs](https://constructs.dev/search?q=&cdk=cdktf&offset=0) in CDKTF applications. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/classes.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/classes.mdx new file mode 100644 index 0000000000..d7fa583678 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/classes.mdx @@ -0,0 +1,13117 @@ +--- +page_title: Java Reference for Classes +description: CDKTF Core API Reference for Classes in Java. +--- + + + +# Java: Classes + +### Annotations + +Includes API for attaching annotations such as warning messages to constructs. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ------------------------------------------------------------------ | +| addError | Adds an { "error": < message > } metadata entry to this construct. | +| addInfo | Adds an info metadata entry to this construct. | +| addWarning | Adds a warning metadata entry to this construct. | + +--- + +##### `addError` + +```java +public void addError(java.lang.String message) +``` + +Adds an { "error": < message > } metadata entry to this construct. + +The toolkit will fail synthesis when errors are reported. + +###### `message`Required + +- _Type:_ java.lang.String + +The error message. + +--- + +##### `addInfo` + +```java +public void addInfo(java.lang.String message) +``` + +Adds an info metadata entry to this construct. + +The CLI will display the info message when apps are synthesized. + +###### `message`Required + +- _Type:_ java.lang.String + +The info message. + +--- + +##### `addWarning` + +```java +public void addWarning(java.lang.String message) +``` + +Adds a warning metadata entry to this construct. + +The CLI will display the warning when an app is synthesized. +In a future release the CLI might introduce a --strict flag which +will then fail the synthesis if it encounters a warning. + +###### `message`Required + +- _Type:_ java.lang.String + +The warning message. + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------- | -------------------------------------------------- | +| of | Returns the annotations API for a construct scope. | + +--- + +##### `of` + +```java +import com.hashicorp.cdktf.Annotations; + +Annotations.of(IConstruct scope) +``` + +Returns the annotations API for a construct scope. + +###### `scope`Required + +- _Type:_ software.constructs.IConstruct + +The scope. + +--- + +### AnyListList + +#### Initializers + +```java +import com.hashicorp.cdktf.AnyListList; + +new AnyListList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```java +public DynamicListTerraformIterator allWithMapKey(java.lang.String mapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public IResolvable get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### AnyListMap + +#### Initializers + +```java +import com.hashicorp.cdktf.AnyListMap; + +new AnyListMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public IResolvable get(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### AnyMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.AnyMap; + +new AnyMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `lookup` + +```java +public java.lang.Object lookup(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### AnyMapList + +#### Initializers + +```java +import com.hashicorp.cdktf.AnyMapList; + +new AnyMapList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public AnyMap get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### Aspects + +Aspects can be applied to CDK tree scopes and can operate on the tree before synthesis. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------- | ---------------------------------------------------- | +| add | Adds an aspect to apply this scope before synthesis. | + +--- + +##### `add` + +```java +public void add(IAspect aspect) +``` + +Adds an aspect to apply this scope before synthesis. + +###### `aspect`Required + +- _Type:_ IAspect + +The aspect to add. + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------- | --------------------------------------------------------------- | +| of | Returns the `Aspects` object associated with a construct scope. | + +--- + +##### `of` + +```java +import com.hashicorp.cdktf.Aspects; + +Aspects.of(IConstruct scope) +``` + +Returns the `Aspects` object associated with a construct scope. + +###### `scope`Required + +- _Type:_ software.constructs.IConstruct + +The scope for which these aspects will apply. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------- | ------------------------------------------------------------------ | -------------------------------------------------------------- | +| all | java.util.List< IAspect> | The list of aspects which were directly applied on this scope. | + +--- + +##### `all`Required + +```java +public java.util.List< IAspect > getAll(); +``` + +- _Type:_ java.util.List< IAspect> + +The list of aspects which were directly applied on this scope. + +--- + +### AssertionReturn + +Class representing the contents of a return by an assertion. + +#### Initializers + +```java +import com.hashicorp.cdktf.testing_matchers.AssertionReturn; + +new AssertionReturn(java.lang.String message, java.lang.Boolean pass); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------- | +| message | java.lang.String | - String message containing information about the result of the assertion. | +| pass | java.lang.Boolean | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +- _Type:_ java.lang.String + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +- _Type:_ java.lang.Boolean + +Boolean pass denoting the success of the assertion. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------ | -------------------------------------------------------------------------- | +| message | java.lang.String | - String message containing information about the result of the assertion. | +| pass | java.lang.Boolean | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +```java +public java.lang.String getMessage(); +``` + +- _Type:_ java.lang.String + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +```java +public java.lang.Boolean getPass(); +``` + +- _Type:_ java.lang.Boolean + +Boolean pass denoting the success of the assertion. + +--- + +### BooleanList + +#### Initializers + +```java +import com.hashicorp.cdktf.BooleanList; + +new BooleanList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```java +public DynamicListTerraformIterator allWithMapKey(java.lang.String mapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public IResolvable get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### BooleanListList + +#### Initializers + +```java +import com.hashicorp.cdktf.BooleanListList; + +new BooleanListList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```java +public DynamicListTerraformIterator allWithMapKey(java.lang.String mapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public IResolvable get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### BooleanListMap + +#### Initializers + +```java +import com.hashicorp.cdktf.BooleanListMap; + +new BooleanListMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public IResolvable get(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### BooleanMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.BooleanMap; + +new BooleanMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `lookup` + +```java +public IResolvable lookup(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### BooleanMapList + +#### Initializers + +```java +import com.hashicorp.cdktf.BooleanMapList; + +new BooleanMapList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public BooleanMap get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### CloudWorkspace + +A cloud workspace can either be a single named workspace, or a list of tagged workspaces. + +#### Initializers + +```java +import com.hashicorp.cdktf.CloudWorkspace; + +new CloudWorkspace(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| toTerraform | _No description._ | + +--- + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +### ComplexComputedList + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```java +import com.hashicorp.cdktf.ComplexComputedList; + +new ComplexComputedList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.String complexComputedListIndex);,new ComplexComputedList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.String complexComputedListIndex, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| complexComputedListIndex | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `complexComputedListIndex`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Optional + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### ~~`computeFqn`~~ + +```java +public java.lang.String computeFqn() +``` + +##### ~~`getAnyMapAttribute`~~ + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getBooleanAttribute`~~ + +```java +public IResolvable getBooleanAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getBooleanMapAttribute`~~ + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getListAttribute`~~ + +```java +public java.util.List< java.lang.String > getListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getNumberAttribute`~~ + +```java +public java.lang.Number getNumberAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getNumberListAttribute`~~ + +```java +public java.util.List< java.lang.Number > getNumberListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getNumberMapAttribute`~~ + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getStringAttribute`~~ + +```java +public java.lang.String getStringAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getStringMapAttribute`~~ + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`interpolationForAttribute`~~ + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`resolve`~~ + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### ~~`toString`~~ + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### ~~`creationStack`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### ComplexList + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.ComplexList; + +new ComplexList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `allWithMapKey` + +```java +public DynamicListTerraformIterator allWithMapKey(java.lang.String mapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### ComplexMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.ComplexMap; + +new ComplexMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### ComplexObject + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```java +import com.hashicorp.cdktf.ComplexObject; + +new ComplexObject(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean complexObjectIsFromSet);,new ComplexObject(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean complexObjectIsFromSet, java.lang.String OR java.lang.Number complexObjectIndex); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| complexObjectIsFromSet | java.lang.Boolean | set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. | +| complexObjectIndex | java.lang.String OR java.lang.Number | the index of the complex object in a list. | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `complexObjectIsFromSet`Required + +- _Type:_ java.lang.Boolean + +set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. + +--- + +##### `complexObjectIndex`Optional + +- _Type:_ java.lang.String OR java.lang.Number + +the index of the complex object in a list. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `getAnyMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanAttribute` + +```java +public IResolvable getBooleanAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getListAttribute` + +```java +public java.util.List< java.lang.String > getListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberAttribute` + +```java +public java.lang.Number getNumberAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberListAttribute` + +```java +public java.util.List< java.lang.Number > getNumberListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringAttribute` + +```java +public java.lang.String getStringAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### DefaultTokenResolver + +- _Implements:_ ITokenResolver + +Default resolver implementation. + +#### Initializers + +```java +import com.hashicorp.cdktf.DefaultTokenResolver; + +new DefaultTokenResolver(IFragmentConcatenator concat); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------- | +| concat | IFragmentConcatenator | _No description._ | + +--- + +##### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------- | +| resolveList | Resolves a list of string. | +| resolveMap | Resolves a map token. | +| resolveNumberList | Resolves a list of numbers. | +| resolveString | Resolve string fragments to Tokens. | +| resolveToken | Default Token resolution. | + +--- + +##### `resolveList` + +```java +public java.lang.Object resolveList(java.util.List< java.lang.String > xs, IResolveContext context) +``` + +Resolves a list of string. + +###### `xs`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveMap` + +```java +public java.lang.Object resolveMap(java.util.Map< java.lang.String, java.lang.Object > xs, IResolveContext context) +``` + +Resolves a map token. + +###### `xs`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveNumberList` + +```java +public java.lang.Object resolveNumberList(java.util.List< java.lang.Number > xs, IResolveContext context) +``` + +Resolves a list of numbers. + +###### `xs`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveString` + +```java +public java.lang.Object resolveString(TokenizedStringFragments fragments, IResolveContext context) +``` + +Resolve string fragments to Tokens. + +###### `fragments`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveToken` + +```java +public java.lang.Object resolveToken(IResolvable t, IResolveContext context, IPostProcessor postProcessor) +``` + +Default Token resolution. + +Resolve the Token, recurse into whatever it returns, +then finally post-process it. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +### DynamicListTerraformIterator + +#### Initializers + +```java +import com.hashicorp.cdktf.DynamicListTerraformIterator; + +new DynamicListTerraformIterator(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list, java.lang.String mapKeyAttributeName); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| list | java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> | _No description._ | +| mapKeyAttributeName | java.lang.String | _No description._ | + +--- + +##### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +##### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```java +public IResolvable dynamic(java.util.Map< java.lang.String, java.lang.Object > attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `forExpressionForList` + +```java +public IResolvable forExpressionForList(java.lang.String OR IResolvable expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```java +public IResolvable forExpressionForMap(java.lang.String OR IResolvable keyExpression, java.lang.String OR IResolvable valueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```java +public IResolvable getAny(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```java +public java.util.List< java.lang.Number > getNumberList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `keys` + +```java +public IResolvable keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```java +public IResolvable pluckProperty(java.lang.String property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ java.lang.String + +The property of the iterators values to map to. + +--- + +##### `values` + +```java +public IResolvable values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```java +import com.hashicorp.cdktf.DynamicListTerraformIterator; + +DynamicListTerraformIterator.fromComplexList(IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList list, java.lang.String mapKeyAttributeName) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```java +// Example automatically generated from non-compiling source. May contain errors. +Object cert = AcmCertificate.Builder.create(this, "cert") + .domainName("example.com") + .validationMethod("DNS") + .build(); + +Object dvoIterator = TerraformIterator.fromComplexList(cert.getDomainValidationOptions(), "domain_name"); + +Route53Record.Builder.create(this, "record") + .allowOverwrite(true) + .name(dvoIterator.getString("name")) + .records(List.of(dvoIterator.getString("record"))) + .ttl(60) + .type(dvoIterator.getString("type")) + .zoneId(Token.asString(dataAwsRoute53ZoneExample.getZoneId())) + .forEach(dvoIterator) + .build(); +``` + +###### `list`Required + +- _Type:_ IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```java +import com.hashicorp.cdktf.DynamicListTerraformIterator; + +DynamicListTerraformIterator.fromDataSources(ITerraformResource resource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```java +import com.hashicorp.cdktf.DynamicListTerraformIterator; + +DynamicListTerraformIterator.fromList(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +##### `fromMap` + +```java +import com.hashicorp.cdktf.DynamicListTerraformIterator; + +DynamicListTerraformIterator.fromMap(ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > map) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > + +--- + +##### `fromResources` + +```java +import com.hashicorp.cdktf.DynamicListTerraformIterator; + +DynamicListTerraformIterator.fromResources(ITerraformResource resource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------- | +| key | java.lang.String | Returns the key of the current entry in the map that is being iterated over. | +| value | java.lang.Object | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +Returns the value of the current item iterated over. + +--- + +### Fn + +#### Initializers + +```java +import com.hashicorp.cdktf.Fn; + +new Fn(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| file | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| lengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| one | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | +| bcrypt | {@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. | +| conditional | {@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. | +| join | {@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. | +| lookup | {@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. | +| lookupNested | returns a property access expression that accesses the property at the given path in the given inputMap. | +| range | {@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. | +| rawString | Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). | + +--- + +##### `abs` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.abs(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `abspath` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.abspath(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `alltrue` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.alltrue(java.util.List< java.lang.Object > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `anytrue` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.anytrue(java.util.List< java.lang.Object > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `base64decode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.base64decode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64encode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.base64encode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64gzip` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.base64gzip(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64sha256` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.base64sha256(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64sha512` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.base64sha512(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `basename` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.basename(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `can` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.can(java.lang.Object expression) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ java.lang.Object + +--- + +##### `ceil` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.ceil(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `chomp` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.chomp(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `chunklist` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.chunklist(java.util.List< java.lang.Object > list, java.lang.Number size) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `size`Required + +- _Type:_ java.lang.Number + +--- + +##### `cidrhost` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.cidrhost(java.lang.String prefix, java.lang.Number hostnum) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +###### `hostnum`Required + +- _Type:_ java.lang.Number + +--- + +##### `cidrnetmask` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.cidrnetmask(java.lang.String prefix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +##### `cidrsubnet` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.cidrsubnet(java.lang.String prefix, java.lang.Number newbits, java.lang.Number netnum) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +###### `newbits`Required + +- _Type:_ java.lang.Number + +--- + +###### `netnum`Required + +- _Type:_ java.lang.Number + +--- + +##### `cidrsubnets` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.cidrsubnets(java.lang.String prefix, java.util.List< java.lang.Number > newbits) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +###### `newbits`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `coalesce` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.coalesce(java.util.List< java.lang.Object > vals) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `coalescelist` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.coalescelist(java.util.List< java.lang.Object > vals) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `compact` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.compact(java.util.List< java.lang.String > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `concat` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.concat(java.util.List< java.lang.Object > seqs) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `contains` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.contains(java.lang.Object list, java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `csvdecode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.csvdecode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `dirname` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.dirname(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `distinct` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.distinct(java.util.List< java.lang.Object > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `element` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.element(java.lang.Object list, java.lang.Number index) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +##### `endswith` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.endswith(java.lang.String str, java.lang.String suffix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `suffix`Required + +- _Type:_ java.lang.String + +--- + +##### `file` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.file(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filebase64` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filebase64(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filebase64sha256` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filebase64sha256(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filebase64sha512` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filebase64sha512(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `fileexists` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.fileexists(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filemd5` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filemd5(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `fileset` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.fileset(java.lang.String path, java.lang.String pattern) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `pattern`Required + +- _Type:_ java.lang.String + +--- + +##### `filesha1` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filesha1(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filesha256` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filesha256(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filesha512` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.filesha512(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `flatten` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.flatten(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `floor` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.floor(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `format` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.format(java.lang.String format, java.util.List< java.lang.Object > args) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ java.lang.String + +--- + +###### `args`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `formatdate` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.formatdate(java.lang.String format, java.lang.String time) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ java.lang.String + +--- + +###### `time`Required + +- _Type:_ java.lang.String + +--- + +##### `formatlist` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.formatlist(java.lang.String format, java.util.List< java.lang.Object > args) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ java.lang.String + +--- + +###### `args`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `indent` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.indent(java.lang.Number spaces, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ java.lang.Number + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `index` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.index(java.lang.Object list, java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `jsondecode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.jsondecode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `jsonencode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.jsonencode(java.lang.Object val) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ java.lang.Object + +--- + +##### `keys` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.keys(java.lang.Object inputMap) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `inputMap`Required + +- _Type:_ java.lang.Object + +--- + +##### `lengthOf` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.lengthOf(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `log` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.log(java.lang.Number num, java.lang.Number base) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +###### `base`Required + +- _Type:_ java.lang.Number + +--- + +##### `lower` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.lower(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `matchkeys` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.matchkeys(java.util.List< java.lang.Object > values, java.util.List< java.lang.Object > keys, java.util.List< java.lang.Object > searchset) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `keys`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `searchset`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `max` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.max(java.util.List< java.lang.Number > numbers) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `md5` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.md5(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `merge` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.merge(java.util.List< java.lang.Object > maps) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `min` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.min(java.util.List< java.lang.Number > numbers) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `nonsensitive` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.nonsensitive(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `one` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.one(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `parseint` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.parseint(java.lang.Object number, java.lang.Number base) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ java.lang.Object + +--- + +###### `base`Required + +- _Type:_ java.lang.Number + +--- + +##### `pathexpand` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.pathexpand(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `plantimestamp` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.plantimestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `pow` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.pow(java.lang.Number num, java.lang.Number power) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +###### `power`Required + +- _Type:_ java.lang.Number + +--- + +##### `regex` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.regex(java.lang.String pattern, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ java.lang.String + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `regexall` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.regexall(java.lang.String pattern, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ java.lang.String + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `replace` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.replace(java.lang.String str, java.lang.String substr, java.lang.String replace) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `substr`Required + +- _Type:_ java.lang.String + +--- + +###### `replace`Required + +- _Type:_ java.lang.String + +--- + +##### `reverse` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.reverse(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `rsadecrypt` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.rsadecrypt(java.lang.String ciphertext, java.lang.String privatekey) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ java.lang.String + +--- + +###### `privatekey`Required + +- _Type:_ java.lang.String + +--- + +##### `sensitive` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.sensitive(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `setintersection` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.setintersection(java.util.List< java.lang.Object > first_set, java.util.List< java.util.List< java.lang.Object >> other_sets) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `other_sets`Required + +- _Type:_ java.util.List< java.util.List< java.lang.Object >> + +--- + +##### `setproduct` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.setproduct(java.util.List< java.lang.Object > sets) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `setsubtract` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.setsubtract(java.util.List< java.lang.Object > a, java.util.List< java.lang.Object > b) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `b`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `setunion` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.setunion(java.util.List< java.lang.Object > first_set, java.util.List< java.util.List< java.lang.Object >> other_sets) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `other_sets`Required + +- _Type:_ java.util.List< java.util.List< java.lang.Object >> + +--- + +##### `sha1` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.sha1(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `sha256` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.sha256(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `sha512` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.sha512(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `signum` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.signum(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `slice` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.slice(java.lang.Object list, java.lang.Number start_index, java.lang.Number end_index) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `start_index`Required + +- _Type:_ java.lang.Number + +--- + +###### `end_index`Required + +- _Type:_ java.lang.Number + +--- + +##### `sort` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.sort(java.util.List< java.lang.String > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `split` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.split(java.lang.String separator, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ java.lang.String + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `startswith` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.startswith(java.lang.String str, java.lang.String prefix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +##### `strcontains` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.strcontains(java.lang.String str, java.lang.String substr) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `substr`Required + +- _Type:_ java.lang.String + +--- + +##### `strrev` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.strrev(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `substr` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.substr(java.lang.String str, java.lang.Number offset, java.lang.Number length) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `offset`Required + +- _Type:_ java.lang.Number + +--- + +###### `length`Required + +- _Type:_ java.lang.Number + +--- + +##### `sum` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.sum(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `templatefile` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.templatefile(java.lang.String path, java.lang.Object vars) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `vars`Required + +- _Type:_ java.lang.Object + +--- + +##### `textdecodebase64` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.textdecodebase64(java.lang.String source, java.lang.String encoding) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ java.lang.String + +--- + +###### `encoding`Required + +- _Type:_ java.lang.String + +--- + +##### `textencodebase64` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.textencodebase64(java.lang.String str, java.lang.String encoding) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `encoding`Required + +- _Type:_ java.lang.String + +--- + +##### `timeadd` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.timeadd(java.lang.String timestamp, java.lang.String duration) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ java.lang.String + +--- + +###### `duration`Required + +- _Type:_ java.lang.String + +--- + +##### `timecmp` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.timecmp(java.lang.String timestamp_a, java.lang.String timestamp_b) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ java.lang.String + +--- + +###### `timestamp_b`Required + +- _Type:_ java.lang.String + +--- + +##### `timestamp` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.timestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `title` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.title(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `tobool` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.tobool(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tolist` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.tolist(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tomap` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.tomap(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tonumber` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.tonumber(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `toset` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.toset(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tostring` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.tostring(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `transpose` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.transpose(java.lang.Object values) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ java.lang.Object + +--- + +##### `trim` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.trim(java.lang.String str, java.lang.String cutset) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `cutset`Required + +- _Type:_ java.lang.String + +--- + +##### `trimprefix` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.trimprefix(java.lang.String str, java.lang.String prefix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +##### `trimspace` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.trimspace(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `trimsuffix` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.trimsuffix(java.lang.String str, java.lang.String suffix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `suffix`Required + +- _Type:_ java.lang.String + +--- + +##### `try` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.try(java.util.List< java.lang.Object > expressions) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `upper` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.upper(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `urlencode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.urlencode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `uuid` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.uuid() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `uuidv5` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.uuidv5(java.lang.String namespace, java.lang.String name) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ java.lang.String + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +##### `values` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.values(java.lang.Object mapping) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ java.lang.Object + +--- + +##### `yamldecode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.yamldecode(java.lang.String src) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ java.lang.String + +--- + +##### `yamlencode` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.yamlencode(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `zipmap` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.zipmap(java.util.List< java.lang.String > keys, java.lang.Object values) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +###### `values`Required + +- _Type:_ java.lang.Object + +--- + +##### `bcrypt` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.bcrypt(java.lang.String str),Fn.bcrypt(java.lang.String str, java.lang.Number cost) +``` + +{@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `cost`Optional + +- _Type:_ java.lang.Number + +--- + +##### `conditional` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.conditional(java.lang.Object condition, java.lang.Object trueValue, java.lang.Object falseValue) +``` + +{@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. + +###### `condition`Required + +- _Type:_ java.lang.Object + +--- + +###### `trueValue`Required + +- _Type:_ java.lang.Object + +--- + +###### `falseValue`Required + +- _Type:_ java.lang.Object + +--- + +##### `join` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.join(java.lang.String separator, java.util.List< java.lang.String > list) +``` + +{@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. + +###### `separator`Required + +- _Type:_ java.lang.String + +--- + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `lookup` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.lookup(java.lang.Object inputMap, java.lang.String key),Fn.lookup(java.lang.Object inputMap, java.lang.String key, java.lang.Object defaultValue) +``` + +{@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. + +###### `inputMap`Required + +- _Type:_ java.lang.Object + +--- + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +###### `defaultValue`Optional + +- _Type:_ java.lang.Object + +--- + +##### `lookupNested` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.lookupNested(java.lang.Object inputMap, java.util.List< java.lang.Object > path) +``` + +returns a property access expression that accesses the property at the given path in the given inputMap. + +For example lookupNested(x, ["a", "b", "c"]) will return a Terraform expression like x["a"]["b"]["c"] + +###### `inputMap`Required + +- _Type:_ java.lang.Object + +--- + +###### `path`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `range` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.range(java.lang.Number start, java.lang.Number limit),Fn.range(java.lang.Number start, java.lang.Number limit, java.lang.Number step) +``` + +{@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. + +###### `start`Required + +- _Type:_ java.lang.Number + +--- + +###### `limit`Required + +- _Type:_ java.lang.Number + +--- + +###### `step`Optional + +- _Type:_ java.lang.Number + +--- + +##### `rawString` + +```java +import com.hashicorp.cdktf.Fn; + +Fn.rawString(java.lang.String str) +``` + +Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +### FnGenerated + +#### Initializers + +```java +import com.hashicorp.cdktf.FnGenerated; + +new FnGenerated(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| file | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| lengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| one | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | + +--- + +##### `abs` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.abs(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `abspath` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.abspath(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `alltrue` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.alltrue(java.util.List< java.lang.Object > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `anytrue` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.anytrue(java.util.List< java.lang.Object > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `base64decode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.base64decode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64encode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.base64encode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64gzip` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.base64gzip(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64sha256` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.base64sha256(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `base64sha512` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.base64sha512(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `basename` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.basename(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `can` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.can(java.lang.Object expression) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ java.lang.Object + +--- + +##### `ceil` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.ceil(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `chomp` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.chomp(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `chunklist` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.chunklist(java.util.List< java.lang.Object > list, java.lang.Number size) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `size`Required + +- _Type:_ java.lang.Number + +--- + +##### `cidrhost` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.cidrhost(java.lang.String prefix, java.lang.Number hostnum) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +###### `hostnum`Required + +- _Type:_ java.lang.Number + +--- + +##### `cidrnetmask` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.cidrnetmask(java.lang.String prefix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +##### `cidrsubnet` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.cidrsubnet(java.lang.String prefix, java.lang.Number newbits, java.lang.Number netnum) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +###### `newbits`Required + +- _Type:_ java.lang.Number + +--- + +###### `netnum`Required + +- _Type:_ java.lang.Number + +--- + +##### `cidrsubnets` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.cidrsubnets(java.lang.String prefix, java.util.List< java.lang.Number > newbits) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +###### `newbits`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `coalesce` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.coalesce(java.util.List< java.lang.Object > vals) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `coalescelist` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.coalescelist(java.util.List< java.lang.Object > vals) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `compact` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.compact(java.util.List< java.lang.String > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `concat` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.concat(java.util.List< java.lang.Object > seqs) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `contains` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.contains(java.lang.Object list, java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `csvdecode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.csvdecode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `dirname` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.dirname(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `distinct` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.distinct(java.util.List< java.lang.Object > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `element` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.element(java.lang.Object list, java.lang.Number index) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +##### `endswith` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.endswith(java.lang.String str, java.lang.String suffix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `suffix`Required + +- _Type:_ java.lang.String + +--- + +##### `file` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.file(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filebase64` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filebase64(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filebase64sha256` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filebase64sha256(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filebase64sha512` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filebase64sha512(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `fileexists` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.fileexists(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filemd5` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filemd5(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `fileset` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.fileset(java.lang.String path, java.lang.String pattern) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `pattern`Required + +- _Type:_ java.lang.String + +--- + +##### `filesha1` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filesha1(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filesha256` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filesha256(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `filesha512` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.filesha512(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `flatten` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.flatten(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `floor` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.floor(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `format` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.format(java.lang.String format, java.util.List< java.lang.Object > args) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ java.lang.String + +--- + +###### `args`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `formatdate` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.formatdate(java.lang.String format, java.lang.String time) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ java.lang.String + +--- + +###### `time`Required + +- _Type:_ java.lang.String + +--- + +##### `formatlist` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.formatlist(java.lang.String format, java.util.List< java.lang.Object > args) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ java.lang.String + +--- + +###### `args`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `indent` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.indent(java.lang.Number spaces, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ java.lang.Number + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `index` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.index(java.lang.Object list, java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `jsondecode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.jsondecode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `jsonencode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.jsonencode(java.lang.Object val) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ java.lang.Object + +--- + +##### `keys` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.keys(java.lang.Object inputMap) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `inputMap`Required + +- _Type:_ java.lang.Object + +--- + +##### `lengthOf` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.lengthOf(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `log` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.log(java.lang.Number num, java.lang.Number base) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +###### `base`Required + +- _Type:_ java.lang.Number + +--- + +##### `lower` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.lower(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `matchkeys` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.matchkeys(java.util.List< java.lang.Object > values, java.util.List< java.lang.Object > keys, java.util.List< java.lang.Object > searchset) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `keys`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `searchset`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `max` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.max(java.util.List< java.lang.Number > numbers) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `md5` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.md5(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `merge` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.merge(java.util.List< java.lang.Object > maps) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `min` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.min(java.util.List< java.lang.Number > numbers) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `nonsensitive` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.nonsensitive(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `one` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.one(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `parseint` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.parseint(java.lang.Object number, java.lang.Number base) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ java.lang.Object + +--- + +###### `base`Required + +- _Type:_ java.lang.Number + +--- + +##### `pathexpand` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.pathexpand(java.lang.String path) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `plantimestamp` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.plantimestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `pow` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.pow(java.lang.Number num, java.lang.Number power) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +###### `power`Required + +- _Type:_ java.lang.Number + +--- + +##### `regex` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.regex(java.lang.String pattern, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ java.lang.String + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `regexall` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.regexall(java.lang.String pattern, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ java.lang.String + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `replace` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.replace(java.lang.String str, java.lang.String substr, java.lang.String replace) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `substr`Required + +- _Type:_ java.lang.String + +--- + +###### `replace`Required + +- _Type:_ java.lang.String + +--- + +##### `reverse` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.reverse(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `rsadecrypt` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.rsadecrypt(java.lang.String ciphertext, java.lang.String privatekey) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ java.lang.String + +--- + +###### `privatekey`Required + +- _Type:_ java.lang.String + +--- + +##### `sensitive` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.sensitive(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `setintersection` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.setintersection(java.util.List< java.lang.Object > first_set, java.util.List< java.util.List< java.lang.Object >> other_sets) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `other_sets`Required + +- _Type:_ java.util.List< java.util.List< java.lang.Object >> + +--- + +##### `setproduct` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.setproduct(java.util.List< java.lang.Object > sets) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `setsubtract` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.setsubtract(java.util.List< java.lang.Object > a, java.util.List< java.lang.Object > b) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `b`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `setunion` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.setunion(java.util.List< java.lang.Object > first_set, java.util.List< java.util.List< java.lang.Object >> other_sets) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +###### `other_sets`Required + +- _Type:_ java.util.List< java.util.List< java.lang.Object >> + +--- + +##### `sha1` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.sha1(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `sha256` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.sha256(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `sha512` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.sha512(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `signum` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.signum(java.lang.Number num) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ java.lang.Number + +--- + +##### `slice` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.slice(java.lang.Object list, java.lang.Number start_index, java.lang.Number end_index) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +###### `start_index`Required + +- _Type:_ java.lang.Number + +--- + +###### `end_index`Required + +- _Type:_ java.lang.Number + +--- + +##### `sort` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.sort(java.util.List< java.lang.String > list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `split` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.split(java.lang.String separator, java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ java.lang.String + +--- + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `startswith` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.startswith(java.lang.String str, java.lang.String prefix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +##### `strcontains` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.strcontains(java.lang.String str, java.lang.String substr) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `substr`Required + +- _Type:_ java.lang.String + +--- + +##### `strrev` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.strrev(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `substr` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.substr(java.lang.String str, java.lang.Number offset, java.lang.Number length) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `offset`Required + +- _Type:_ java.lang.Number + +--- + +###### `length`Required + +- _Type:_ java.lang.Number + +--- + +##### `sum` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.sum(java.lang.Object list) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ java.lang.Object + +--- + +##### `templatefile` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.templatefile(java.lang.String path, java.lang.Object vars) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `vars`Required + +- _Type:_ java.lang.Object + +--- + +##### `textdecodebase64` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.textdecodebase64(java.lang.String source, java.lang.String encoding) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ java.lang.String + +--- + +###### `encoding`Required + +- _Type:_ java.lang.String + +--- + +##### `textencodebase64` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.textencodebase64(java.lang.String str, java.lang.String encoding) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `encoding`Required + +- _Type:_ java.lang.String + +--- + +##### `timeadd` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.timeadd(java.lang.String timestamp, java.lang.String duration) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ java.lang.String + +--- + +###### `duration`Required + +- _Type:_ java.lang.String + +--- + +##### `timecmp` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.timecmp(java.lang.String timestamp_a, java.lang.String timestamp_b) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ java.lang.String + +--- + +###### `timestamp_b`Required + +- _Type:_ java.lang.String + +--- + +##### `timestamp` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.timestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `title` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.title(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `tobool` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.tobool(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tolist` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.tolist(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tomap` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.tomap(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tonumber` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.tonumber(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `toset` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.toset(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `tostring` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.tostring(java.lang.Object v) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ java.lang.Object + +--- + +##### `transpose` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.transpose(java.lang.Object values) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ java.lang.Object + +--- + +##### `trim` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.trim(java.lang.String str, java.lang.String cutset) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `cutset`Required + +- _Type:_ java.lang.String + +--- + +##### `trimprefix` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.trimprefix(java.lang.String str, java.lang.String prefix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `prefix`Required + +- _Type:_ java.lang.String + +--- + +##### `trimspace` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.trimspace(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `trimsuffix` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.trimsuffix(java.lang.String str, java.lang.String suffix) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +###### `suffix`Required + +- _Type:_ java.lang.String + +--- + +##### `try` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.try(java.util.List< java.lang.Object > expressions) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ java.util.List< java.lang.Object > + +--- + +##### `upper` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.upper(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `urlencode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.urlencode(java.lang.String str) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ java.lang.String + +--- + +##### `uuid` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.uuid() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `uuidv5` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.uuidv5(java.lang.String namespace, java.lang.String name) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ java.lang.String + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +##### `values` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.values(java.lang.Object mapping) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ java.lang.Object + +--- + +##### `yamldecode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.yamldecode(java.lang.String src) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ java.lang.String + +--- + +##### `yamlencode` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.yamlencode(java.lang.Object value) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `zipmap` + +```java +import com.hashicorp.cdktf.FnGenerated; + +FnGenerated.zipmap(java.util.List< java.lang.String > keys, java.lang.Object values) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +###### `values`Required + +- _Type:_ java.lang.Object + +--- + +### Lazy + +Lazily produce a value. + +Can be used to return a string, list or numeric value whose actual value +will only be calculated later, during synthesis. + +#### Initializers + +```java +import com.hashicorp.cdktf.Lazy; + +new Lazy(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------- | +| anyValue | Produces a lazy token from an untyped value. | +| listValue | Returns a list-ified token for a lazy value. | +| numberValue | Returns a numberified token for a lazy value. | +| stringValue | Returns a stringified token for a lazy value. | + +--- + +##### `anyValue` + +```java +import com.hashicorp.cdktf.Lazy; + +Lazy.anyValue(IAnyProducer producer),Lazy.anyValue(IAnyProducer producer, LazyAnyValueOptions options) +``` + +Produces a lazy token from an untyped value. + +###### `producer`Required + +- _Type:_ IAnyProducer + +The lazy producer. + +--- + +###### `options`Optional + +- _Type:_ LazyAnyValueOptions + +Options. + +--- + +##### `listValue` + +```java +import com.hashicorp.cdktf.Lazy; + +Lazy.listValue(IListProducer producer),Lazy.listValue(IListProducer producer, LazyListValueOptions options) +``` + +Returns a list-ified token for a lazy value. + +###### `producer`Required + +- _Type:_ IListProducer + +The producer. + +--- + +###### `options`Optional + +- _Type:_ LazyListValueOptions + +Options. + +--- + +##### `numberValue` + +```java +import com.hashicorp.cdktf.Lazy; + +Lazy.numberValue(INumberProducer producer) +``` + +Returns a numberified token for a lazy value. + +###### `producer`Required + +- _Type:_ INumberProducer + +The producer. + +--- + +##### `stringValue` + +```java +import com.hashicorp.cdktf.Lazy; + +Lazy.stringValue(IStringProducer producer),Lazy.stringValue(IStringProducer producer, LazyStringValueOptions options) +``` + +Returns a stringified token for a lazy value. + +###### `producer`Required + +- _Type:_ IStringProducer + +The producer. + +--- + +###### `options`Optional + +- _Type:_ LazyStringValueOptions + +Options. + +--- + +### LazyBase + +- _Implements:_ IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.LazyBase; + +new LazyBase(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| addPostProcessor | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toJSON | Turn this Token into JSON. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `addPostProcessor` + +```java +public void addPostProcessor(IPostProcessor postProcessor) +``` + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext context) +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `toJSON` + +```java +public java.lang.Object toJSON() +``` + +Turn this Token into JSON. + +Called automatically when JSON.stringify() is called on a Token. + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### ListTerraformIterator + +#### Initializers + +```java +import com.hashicorp.cdktf.ListTerraformIterator; + +new ListTerraformIterator(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| list | java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> | _No description._ | + +--- + +##### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```java +public IResolvable dynamic(java.util.Map< java.lang.String, java.lang.Object > attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `forExpressionForList` + +```java +public IResolvable forExpressionForList(java.lang.String OR IResolvable expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```java +public IResolvable forExpressionForMap(java.lang.String OR IResolvable keyExpression, java.lang.String OR IResolvable valueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```java +public IResolvable getAny(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```java +public java.util.List< java.lang.Number > getNumberList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `keys` + +```java +public IResolvable keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```java +public IResolvable pluckProperty(java.lang.String property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ java.lang.String + +The property of the iterators values to map to. + +--- + +##### `values` + +```java +public IResolvable values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```java +import com.hashicorp.cdktf.ListTerraformIterator; + +ListTerraformIterator.fromComplexList(IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList list, java.lang.String mapKeyAttributeName) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```java +// Example automatically generated from non-compiling source. May contain errors. +Object cert = AcmCertificate.Builder.create(this, "cert") + .domainName("example.com") + .validationMethod("DNS") + .build(); + +Object dvoIterator = TerraformIterator.fromComplexList(cert.getDomainValidationOptions(), "domain_name"); + +Route53Record.Builder.create(this, "record") + .allowOverwrite(true) + .name(dvoIterator.getString("name")) + .records(List.of(dvoIterator.getString("record"))) + .ttl(60) + .type(dvoIterator.getString("type")) + .zoneId(Token.asString(dataAwsRoute53ZoneExample.getZoneId())) + .forEach(dvoIterator) + .build(); +``` + +###### `list`Required + +- _Type:_ IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```java +import com.hashicorp.cdktf.ListTerraformIterator; + +ListTerraformIterator.fromDataSources(ITerraformResource resource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```java +import com.hashicorp.cdktf.ListTerraformIterator; + +ListTerraformIterator.fromList(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +##### `fromMap` + +```java +import com.hashicorp.cdktf.ListTerraformIterator; + +ListTerraformIterator.fromMap(ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > map) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > + +--- + +##### `fromResources` + +```java +import com.hashicorp.cdktf.ListTerraformIterator; + +ListTerraformIterator.fromResources(ITerraformResource resource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------- | +| key | java.lang.Object | Returns the currently entry in the list or set that is being iterated over. | +| value | java.lang.Object | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```java +public java.lang.Object getKey(); +``` + +- _Type:_ java.lang.Object + +Returns the currently entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +Returns the value of the current item iterated over. + +--- + +### Manifest + +- _Implements:_ IManifest + +#### Initializers + +```java +import com.hashicorp.cdktf.Manifest; + +new Manifest(java.lang.String version, java.lang.String outdir, java.lang.Boolean hclOutput); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------ | ----------------- | +| version | java.lang.String | _No description._ | +| outdir | java.lang.String | _No description._ | +| hclOutput | java.lang.Boolean | _No description._ | + +--- + +##### `version`Required + +- _Type:_ java.lang.String + +--- + +##### `outdir`Required + +- _Type:_ java.lang.String + +--- + +##### `hclOutput`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | ----------------- | +| buildManifest | _No description._ | +| forStack | _No description._ | +| writeToFile | _No description._ | + +--- + +##### `buildManifest` + +```java +public IManifest buildManifest() +``` + +##### `forStack` + +```java +public StackManifest forStack(TerraformStack stack) +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `writeToFile` + +```java +public void writeToFile() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------- | +| hclOutput | java.lang.Boolean | _No description._ | +| outdir | java.lang.String | _No description._ | +| stackFileName | java.lang.String | _No description._ | +| stacks | java.util.Map< java.lang.String, StackManifest> | _No description._ | +| version | java.lang.String | _No description._ | + +--- + +##### `hclOutput`Required + +```java +public java.lang.Boolean getHclOutput(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `outdir`Required + +```java +public java.lang.String getOutdir(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stackFileName`Required + +```java +public java.lang.String getStackFileName(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stacks`Required + +```java +public java.util.Map< java.lang.String, StackManifest > getStacks(); +``` + +- _Type:_ java.util.Map< java.lang.String, StackManifest> + +--- + +##### `version`Required + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| fileName | java.lang.String | _No description._ | +| stackMetadataPath | java.lang.String | _No description._ | +| stacksFolder | java.lang.String | _No description._ | + +--- + +##### `fileName`Required + +```java +public java.lang.String getFileName(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stackMetadataPath`Required + +```java +public java.lang.String getStackMetadataPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stacksFolder`Required + +```java +public java.lang.String getStacksFolder(); +``` + +- _Type:_ java.lang.String + +--- + +### MapList + +- _Implements:_ ITerraformAddressable, IInterpolatingParent, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.MapList; + +new MapList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### MapTerraformIterator + +#### Initializers + +```java +import com.hashicorp.cdktf.MapTerraformIterator; + +new MapTerraformIterator(AnyMap OR StringMap OR NumberMap OR BooleanMap OR ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > map); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| map | AnyMap OR StringMap OR NumberMap OR BooleanMap OR ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > | _No description._ | + +--- + +##### `map`Required + +- _Type:_ AnyMap OR StringMap OR NumberMap OR BooleanMap OR ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```java +public IResolvable dynamic(java.util.Map< java.lang.String, java.lang.Object > attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `forExpressionForList` + +```java +public IResolvable forExpressionForList(java.lang.String OR IResolvable expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```java +public IResolvable forExpressionForMap(java.lang.String OR IResolvable keyExpression, java.lang.String OR IResolvable valueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```java +public IResolvable getAny(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```java +public java.util.List< java.lang.Number > getNumberList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `keys` + +```java +public IResolvable keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```java +public IResolvable pluckProperty(java.lang.String property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ java.lang.String + +The property of the iterators values to map to. + +--- + +##### `values` + +```java +public IResolvable values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```java +import com.hashicorp.cdktf.MapTerraformIterator; + +MapTerraformIterator.fromComplexList(IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList list, java.lang.String mapKeyAttributeName) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```java +// Example automatically generated from non-compiling source. May contain errors. +Object cert = AcmCertificate.Builder.create(this, "cert") + .domainName("example.com") + .validationMethod("DNS") + .build(); + +Object dvoIterator = TerraformIterator.fromComplexList(cert.getDomainValidationOptions(), "domain_name"); + +Route53Record.Builder.create(this, "record") + .allowOverwrite(true) + .name(dvoIterator.getString("name")) + .records(List.of(dvoIterator.getString("record"))) + .ttl(60) + .type(dvoIterator.getString("type")) + .zoneId(Token.asString(dataAwsRoute53ZoneExample.getZoneId())) + .forEach(dvoIterator) + .build(); +``` + +###### `list`Required + +- _Type:_ IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```java +import com.hashicorp.cdktf.MapTerraformIterator; + +MapTerraformIterator.fromDataSources(ITerraformResource resource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```java +import com.hashicorp.cdktf.MapTerraformIterator; + +MapTerraformIterator.fromList(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +##### `fromMap` + +```java +import com.hashicorp.cdktf.MapTerraformIterator; + +MapTerraformIterator.fromMap(ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > map) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > + +--- + +##### `fromResources` + +```java +import com.hashicorp.cdktf.MapTerraformIterator; + +MapTerraformIterator.fromResources(ITerraformResource resource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------- | +| key | java.lang.String | Returns the key of the current entry in the map that is being iterated over. | +| value | java.lang.Object | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +Returns the value of the current item iterated over. + +--- + +### MigrateIds + +- _Implements:_ IAspect + +For migrating past 0.17 where the feature flag for the old id generation logic was removed after being deprecated since 0.15. + +#### Initializers + +```java +import com.hashicorp.cdktf.MigrateIds; + +new MigrateIds(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------------ | +| visit | All aspects can visit an IConstruct. | + +--- + +##### `visit` + +```java +public void visit(IConstruct node) +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ software.constructs.IConstruct + +--- + +### NamedCloudWorkspace + +The name of a single Terraform Cloud workspace. + +You will only be able to use the workspace specified in the configuration with this working directory, and cannot manage workspaces from the CLI (e.g. terraform workspace select or terraform workspace new). + +#### Initializers + +```java +import com.hashicorp.cdktf.NamedCloudWorkspace; + +new NamedCloudWorkspace(java.lang.String name);,new NamedCloudWorkspace(java.lang.String name, java.lang.String project); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| name | java.lang.String | _No description._ | +| project | java.lang.String | _No description._ | + +--- + +##### `name`Required + +- _Type:_ java.lang.String + +--- + +##### `project`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------- | +| toTerraform | _No description._ | +| toHclTerraform | _No description._ | + +--- + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ----------------------------- | ----------------- | +| name | java.lang.String | _No description._ | +| project | java.lang.String | _No description._ | + +--- + +##### `name`Required + +```java +public java.lang.String getName(); +``` + +- _Type:_ java.lang.String + +--- + +##### `project`Optional + +```java +public java.lang.String getProject(); +``` + +- _Type:_ java.lang.String + +--- + +### NamedRemoteWorkspace + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```java +import com.hashicorp.cdktf.NamedRemoteWorkspace; + +new NamedRemoteWorkspace(java.lang.String name); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| name | java.lang.String | _No description._ | + +--- + +##### `name`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| name | java.lang.String | _No description._ | + +--- + +##### `name`Required + +```java +public java.lang.String getName(); +``` + +- _Type:_ java.lang.String + +--- + +### NumberListList + +#### Initializers + +```java +import com.hashicorp.cdktf.NumberListList; + +new NumberListList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```java +public DynamicListTerraformIterator allWithMapKey(java.lang.String mapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public java.util.List< java.lang.Number > get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### NumberListMap + +#### Initializers + +```java +import com.hashicorp.cdktf.NumberListMap; + +new NumberListMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public java.util.List< java.lang.Number > get(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### NumberMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.NumberMap; + +new NumberMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `lookup` + +```java +public java.lang.Number lookup(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### NumberMapList + +#### Initializers + +```java +import com.hashicorp.cdktf.NumberMapList; + +new NumberMapList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public NumberMap get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### Op + +This class contains static functions for all arithmetical and logical operators in the Terraform configuration language. + +#### Initializers + +```java +import com.hashicorp.cdktf.Op; + +new Op(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------- | ------------------------ | +| add | Renders left + right. | +| and | Renders left && right. | +| div | Renders left / right. | +| eq | Renders left == right. | +| gt | Renders left > right. | +| gte | Renders left >= right. | +| lt | Renders left < right. | +| lte | Renders left < = right. | +| mod | Renders left % right. | +| mul | Renders left \* right. | +| negate | Renders -expression. | +| neq | Renders left != right. | +| not | Renders !expression. | +| or | Renders left \|\| right. | +| sub | Renders left - right. | + +--- + +##### `add` + +```java +import com.hashicorp.cdktf.Op; + +Op.add(java.lang.Object left, java.lang.Object right) +``` + +Renders left + right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `and` + +```java +import com.hashicorp.cdktf.Op; + +Op.and(java.lang.Object left, java.lang.Object right) +``` + +Renders left && right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `div` + +```java +import com.hashicorp.cdktf.Op; + +Op.div(java.lang.Object left, java.lang.Object right) +``` + +Renders left / right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `eq` + +```java +import com.hashicorp.cdktf.Op; + +Op.eq(java.lang.Object left, java.lang.Object right) +``` + +Renders left == right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `gt` + +```java +import com.hashicorp.cdktf.Op; + +Op.gt(java.lang.Object left, java.lang.Object right) +``` + +Renders left > right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `gte` + +```java +import com.hashicorp.cdktf.Op; + +Op.gte(java.lang.Object left, java.lang.Object right) +``` + +Renders left >= right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `lt` + +```java +import com.hashicorp.cdktf.Op; + +Op.lt(java.lang.Object left, java.lang.Object right) +``` + +Renders left < right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `lte` + +```java +import com.hashicorp.cdktf.Op; + +Op.lte(java.lang.Object left, java.lang.Object right) +``` + +Renders left < = right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `mod` + +```java +import com.hashicorp.cdktf.Op; + +Op.mod(java.lang.Object left, java.lang.Object right) +``` + +Renders left % right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `mul` + +```java +import com.hashicorp.cdktf.Op; + +Op.mul(java.lang.Object left, java.lang.Object right) +``` + +Renders left \* right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `negate` + +```java +import com.hashicorp.cdktf.Op; + +Op.negate(java.lang.Object expression) +``` + +Renders -expression. + +###### `expression`Required + +- _Type:_ java.lang.Object + +--- + +##### `neq` + +```java +import com.hashicorp.cdktf.Op; + +Op.neq(java.lang.Object left, java.lang.Object right) +``` + +Renders left != right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `not` + +```java +import com.hashicorp.cdktf.Op; + +Op.not(java.lang.Object expression) +``` + +Renders !expression. + +###### `expression`Required + +- _Type:_ java.lang.Object + +--- + +##### `or` + +```java +import com.hashicorp.cdktf.Op; + +Op.or(java.lang.Object left, java.lang.Object right) +``` + +Renders left || right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +##### `sub` + +```java +import com.hashicorp.cdktf.Op; + +Op.sub(java.lang.Object left, java.lang.Object right) +``` + +Renders left - right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +### PrefixedRemoteWorkspaces + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```java +import com.hashicorp.cdktf.PrefixedRemoteWorkspaces; + +new PrefixedRemoteWorkspaces(java.lang.String prefix); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| prefix | java.lang.String | _No description._ | + +--- + +##### `prefix`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| prefix | java.lang.String | _No description._ | + +--- + +##### `prefix`Required + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +--- + +### ResourceTerraformIterator + +#### Initializers + +```java +import com.hashicorp.cdktf.ResourceTerraformIterator; + +new ResourceTerraformIterator(ITerraformResource element); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| element | ITerraformResource | _No description._ | + +--- + +##### `element`Required + +- _Type:_ ITerraformResource + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```java +public IResolvable dynamic(java.util.Map< java.lang.String, java.lang.Object > attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `forExpressionForList` + +```java +public IResolvable forExpressionForList(java.lang.String OR IResolvable expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```java +public IResolvable forExpressionForMap(java.lang.String OR IResolvable keyExpression, java.lang.String OR IResolvable valueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```java +public IResolvable getAny(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```java +public java.util.List< java.lang.Number > getNumberList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `keys` + +```java +public IResolvable keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```java +public IResolvable pluckProperty(java.lang.String property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ java.lang.String + +The property of the iterators values to map to. + +--- + +##### `values` + +```java +public IResolvable values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```java +import com.hashicorp.cdktf.ResourceTerraformIterator; + +ResourceTerraformIterator.fromComplexList(IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList list, java.lang.String mapKeyAttributeName) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```java +// Example automatically generated from non-compiling source. May contain errors. +Object cert = AcmCertificate.Builder.create(this, "cert") + .domainName("example.com") + .validationMethod("DNS") + .build(); + +Object dvoIterator = TerraformIterator.fromComplexList(cert.getDomainValidationOptions(), "domain_name"); + +Route53Record.Builder.create(this, "record") + .allowOverwrite(true) + .name(dvoIterator.getString("name")) + .records(List.of(dvoIterator.getString("record"))) + .ttl(60) + .type(dvoIterator.getString("type")) + .zoneId(Token.asString(dataAwsRoute53ZoneExample.getZoneId())) + .forEach(dvoIterator) + .build(); +``` + +###### `list`Required + +- _Type:_ IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```java +import com.hashicorp.cdktf.ResourceTerraformIterator; + +ResourceTerraformIterator.fromDataSources(ITerraformResource resource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```java +import com.hashicorp.cdktf.ResourceTerraformIterator; + +ResourceTerraformIterator.fromList(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +##### `fromMap` + +```java +import com.hashicorp.cdktf.ResourceTerraformIterator; + +ResourceTerraformIterator.fromMap(ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > map) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > + +--- + +##### `fromResources` + +```java +import com.hashicorp.cdktf.ResourceTerraformIterator; + +ResourceTerraformIterator.fromResources(ITerraformResource resource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------- | +| key | java.lang.Object | Returns the current entry in the list or set that is being iterated over. | +| value | java.lang.Object | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```java +public java.lang.Object getKey(); +``` + +- _Type:_ java.lang.Object + +Returns the current entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +Returns the value of the current item iterated over. + +--- + +### StringConcat + +- _Implements:_ IFragmentConcatenator + +Converts all fragments to strings and concats those. + +Drops 'undefined's. + +#### Initializers + +```java +import com.hashicorp.cdktf.StringConcat; + +new StringConcat(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------ | +| join | Concatenates string fragments. | + +--- + +##### `join` + +```java +public java.lang.Object join(java.lang.Object left, java.lang.Object right) +``` + +Concatenates string fragments. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +### StringListList + +#### Initializers + +```java +import com.hashicorp.cdktf.StringListList; + +new StringListList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```java +public DynamicListTerraformIterator allWithMapKey(java.lang.String mapKeyAttributeName) +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public java.util.List< java.lang.String > get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### StringListMap + +#### Initializers + +```java +import com.hashicorp.cdktf.StringListMap; + +new StringListMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public java.util.List< java.lang.String > get(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### StringMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```java +import com.hashicorp.cdktf.StringMap; + +new StringMap(IInterpolatingParent terraformResource, java.lang.String terraformAttribute); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `lookup` + +```java +public java.lang.String lookup(java.lang.String key) +``` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### StringMapList + +#### Initializers + +```java +import com.hashicorp.cdktf.StringMapList; + +new StringMapList(IInterpolatingParent terraformResource, java.lang.String terraformAttribute, java.lang.Boolean wrapsSet); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | java.lang.String | _No description._ | +| wrapsSet | java.lang.Boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `wrapsSet`Required + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```java +public java.lang.String computeFqn() +``` + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String property) +``` + +###### `property`Required + +- _Type:_ java.lang.String + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext _context) +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```java +public StringMap get(java.lang.Number index) +``` + +###### `index`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | java.lang.String | _No description._ | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### TaggedCloudWorkspaces + +A set of Terraform Cloud workspace tags. + +You will be able to use this working directory with any workspaces that have all of the specified tags, and can use the terraform workspace commands to switch between them or create new workspaces. New workspaces will automatically have the specified tags. This option conflicts with name. + +#### Initializers + +```java +import com.hashicorp.cdktf.TaggedCloudWorkspaces; + +new TaggedCloudWorkspaces(java.util.List< java.lang.String > tags);,new TaggedCloudWorkspaces(java.util.List< java.lang.String > tags, java.lang.String project); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------------------------------- | ----------------- | +| tags | java.util.List< java.lang.String > | _No description._ | +| project | java.lang.String | _No description._ | + +--- + +##### `tags`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `project`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------- | +| toTerraform | _No description._ | +| toHclTerraform | _No description._ | + +--- + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------- | ----------------- | +| tags | java.util.List< java.lang.String > | _No description._ | +| project | java.lang.String | _No description._ | + +--- + +##### `tags`Required + +```java +public java.util.List< java.lang.String > getTags(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `project`Optional + +```java +public java.lang.String getProject(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformCount + +Iterator for the Terraform count property. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| toString | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +##### `toTerraform` + +```java +public java.lang.Number toTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------- | +| isTerraformCount | _No description._ | +| of | _No description._ | + +--- + +##### `isTerraformCount` + +```java +import com.hashicorp.cdktf.TerraformCount; + +TerraformCount.isTerraformCount(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `of` + +```java +import com.hashicorp.cdktf.TerraformCount; + +TerraformCount.of(java.lang.Number count) +``` + +###### `count`Required + +- _Type:_ java.lang.Number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------- | ----------------------------- | ----------------- | +| index | java.lang.Number | _No description._ | + +--- + +##### `index`Required + +```java +public java.lang.Number getIndex(); +``` + +- _Type:_ java.lang.Number + +--- + +### TerraformIterator + +- _Implements:_ ITerraformIterator + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformIterator; + +new TerraformIterator(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```java +public IResolvable dynamic(java.util.Map< java.lang.String, java.lang.Object > attributes) +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `forExpressionForList` + +```java +public IResolvable forExpressionForList(java.lang.String OR IResolvable expression) +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```java +public IResolvable forExpressionForMap(java.lang.String OR IResolvable keyExpression, java.lang.String OR IResolvable valueExpression) +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ java.lang.String OR IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```java +public IResolvable getAny(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getMap` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```java +public java.util.List< java.lang.Number > getNumberList(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMap(java.lang.String attribute) +``` + +###### `attribute`Required + +- _Type:_ java.lang.String + +name of the property to retrieve. + +--- + +##### `keys` + +```java +public IResolvable keys() +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```java +public IResolvable pluckProperty(java.lang.String property) +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ java.lang.String + +The property of the iterators values to map to. + +--- + +##### `values` + +```java +public IResolvable values() +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```java +import com.hashicorp.cdktf.TerraformIterator; + +TerraformIterator.fromComplexList(IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList list, java.lang.String mapKeyAttributeName) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```java +// Example automatically generated from non-compiling source. May contain errors. +Object cert = AcmCertificate.Builder.create(this, "cert") + .domainName("example.com") + .validationMethod("DNS") + .build(); + +Object dvoIterator = TerraformIterator.fromComplexList(cert.getDomainValidationOptions(), "domain_name"); + +Route53Record.Builder.create(this, "record") + .allowOverwrite(true) + .name(dvoIterator.getString("name")) + .records(List.of(dvoIterator.getString("record"))) + .ttl(60) + .type(dvoIterator.getString("type")) + .zoneId(Token.asString(dataAwsRoute53ZoneExample.getZoneId())) + .forEach(dvoIterator) + .build(); +``` + +###### `list`Required + +- _Type:_ IResolvable OR ComplexList OR StringMapList OR NumberMapList OR BooleanMapList OR AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ java.lang.String + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```java +import com.hashicorp.cdktf.TerraformIterator; + +TerraformIterator.fromDataSources(ITerraformResource resource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```java +import com.hashicorp.cdktf.TerraformIterator; + +TerraformIterator.fromList(java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable > list) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ java.util.List< java.lang.String > OR IResolvable OR java.util.List< java.lang.Number > OR java.util.List< java.lang.Boolean OR IResolvable> + +--- + +##### `fromMap` + +```java +import com.hashicorp.cdktf.TerraformIterator; + +TerraformIterator.fromMap(ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > map) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap OR java.util.Map< java.lang.String, java.lang.Object > OR java.util.Map< java.lang.String, java.lang.String > OR java.util.Map< java.lang.String, java.lang.Number > OR java.util.Map< java.lang.String, java.lang.Boolean > + +--- + +##### `fromResources` + +```java +import com.hashicorp.cdktf.TerraformIterator; + +TerraformIterator.fromResources(ITerraformResource resource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +### TerraformResourceTargets + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformResourceTargets; + +new TerraformResourceTargets(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------- | +| addResourceTarget | _No description._ | +| getResourceByTarget | _No description._ | + +--- + +##### `addResourceTarget` + +```java +public void addResourceTarget(TerraformResource resource, java.lang.String target) +``` + +###### `resource`Required + +- _Type:_ TerraformResource + +--- + +###### `target`Required + +- _Type:_ java.lang.String + +--- + +##### `getResourceByTarget` + +```java +public TerraformResource getResourceByTarget(java.lang.String target) +``` + +###### `target`Required + +- _Type:_ java.lang.String + +--- + +### TerraformSelf + +Expressions in connection blocks cannot refer to their parent resource by name. + +References create dependencies, and referring to a resource by name within its own block would create a dependency cycle. +Instead, expressions can use the self object, which represents the connection's parent resource and has all of that resource's attributes. +For example, use self.public_ip to reference an aws_instance's public_ip attribute. + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformSelf; + +new TerraformSelf(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| getAny | Only usable within a connection block to reference the connections parent resource. | +| getNumber | Only usable within a connection block to reference the connections parent resource. | +| getString | Only usable within a connection block to reference the connections parent resource. | + +--- + +##### `getAny` + +```java +import com.hashicorp.cdktf.TerraformSelf; + +TerraformSelf.getAny(java.lang.String key) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getAny("hostPort")` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +import com.hashicorp.cdktf.TerraformSelf; + +TerraformSelf.getNumber(java.lang.String key) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getNumber("hostPort")` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +import com.hashicorp.cdktf.TerraformSelf; + +TerraformSelf.getString(java.lang.String key) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getString("publicIp")` + +###### `key`Required + +- _Type:_ java.lang.String + +--- + +### Testing + +Testing utilities for cdktf applications. + +#### Initializers + +```java +import com.hashicorp.cdktf.Testing; + +new Testing(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| app | Returns an app for testing with the following properties: - Output directory is a temp dir. | +| enableFutureFlags | _No description._ | +| fakeCdktfJsonPath | _No description._ | +| fullSynth | _No description._ | +| renderConstructTree | _No description._ | +| setupJest | _No description._ | +| stubVersion | _No description._ | +| synth | Returns the Terraform synthesized JSON. | +| synthHcl | Returns the Terraform synthesized JSON. | +| synthScope | _No description._ | +| toBeValidTerraform | _No description._ | +| toHaveDataSource | _No description._ | +| toHaveDataSourceWithProperties | _No description._ | +| toHaveProvider | _No description._ | +| toHaveProviderWithProperties | _No description._ | +| toHaveResource | _No description._ | +| toHaveResourceWithProperties | _No description._ | + +--- + +##### `app` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.app(),Testing.app(TestingAppConfig options) +``` + +Returns an app for testing with the following properties: - Output directory is a temp dir. + +###### `options`Optional + +- _Type:_ TestingAppConfig + +--- + +##### `enableFutureFlags` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.enableFutureFlags(App app) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `fakeCdktfJsonPath` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.fakeCdktfJsonPath(App app) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `fullSynth` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.fullSynth(TerraformStack stack) +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `renderConstructTree` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.renderConstructTree(IConstruct construct) +``` + +###### `construct`Required + +- _Type:_ software.constructs.IConstruct + +--- + +##### `setupJest` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.setupJest() +``` + +##### `stubVersion` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.stubVersion(App app) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `synth` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.synth(TerraformStack stack),Testing.synth(TerraformStack stack, java.lang.Boolean runValidations) +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `runValidations`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `synthHcl` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.synthHcl(TerraformStack stack),Testing.synthHcl(TerraformStack stack, java.lang.Boolean runValidations),Testing.synthHcl(TerraformStack stack, java.lang.Boolean runValidations, java.lang.Boolean returnMetadata) +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `runValidations`Optional + +- _Type:_ java.lang.Boolean + +--- + +###### `returnMetadata`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `synthScope` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.synthScope(IScopeCallback fn) +``` + +###### `fn`Required + +- _Type:_ IScopeCallback + +--- + +##### `toBeValidTerraform` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toBeValidTerraform(java.lang.String received) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +##### `toHaveDataSource` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toHaveDataSource(java.lang.String received, java.lang.String resourceType) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +###### `resourceType`Required + +- _Type:_ java.lang.String + +--- + +##### `toHaveDataSourceWithProperties` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toHaveDataSourceWithProperties(java.lang.String received, java.lang.String resourceType),Testing.toHaveDataSourceWithProperties(java.lang.String received, java.lang.String resourceType, java.util.Map< java.lang.String, java.lang.Object > properties) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +###### `resourceType`Required + +- _Type:_ java.lang.String + +--- + +###### `properties`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `toHaveProvider` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toHaveProvider(java.lang.String received, java.lang.String resourceType) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +###### `resourceType`Required + +- _Type:_ java.lang.String + +--- + +##### `toHaveProviderWithProperties` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toHaveProviderWithProperties(java.lang.String received, java.lang.String resourceType),Testing.toHaveProviderWithProperties(java.lang.String received, java.lang.String resourceType, java.util.Map< java.lang.String, java.lang.Object > properties) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +###### `resourceType`Required + +- _Type:_ java.lang.String + +--- + +###### `properties`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `toHaveResource` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toHaveResource(java.lang.String received, java.lang.String resourceType) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +###### `resourceType`Required + +- _Type:_ java.lang.String + +--- + +##### `toHaveResourceWithProperties` + +```java +import com.hashicorp.cdktf.Testing; + +Testing.toHaveResourceWithProperties(java.lang.String received, java.lang.String resourceType),Testing.toHaveResourceWithProperties(java.lang.String received, java.lang.String resourceType, java.util.Map< java.lang.String, java.lang.Object > properties) +``` + +###### `received`Required + +- _Type:_ java.lang.String + +--- + +###### `resourceType`Required + +- _Type:_ java.lang.String + +--- + +###### `properties`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +### Token + +Represents a special or lazily-evaluated value. + +Can be used to delay evaluation of a certain value in case, for example, +that it requires some context or late-bound data. Can also be used to +mark values that need special processing at document rendering time. + +Tokens can be embedded into strings while retaining their original +semantics. + +#### Initializers + +```java +import com.hashicorp.cdktf.Token; + +new Token(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------- | -------------------------------------------------------- | +| asAny | Return a resolvable representation of the given value. | +| asAnyMap | Return a reversible map representation of this token. | +| asBooleanMap | Return a reversible map representation of this token. | +| asList | Return a reversible list representation of this token. | +| asMap | Return a reversible map representation of this token. | +| asNumber | Return a reversible number representation of this token. | +| asNumberList | Return a reversible list representation of this token. | +| asNumberMap | Return a reversible map representation of this token. | +| asString | Return a reversible string representation of this token. | +| asStringMap | Return a reversible map representation of this token. | +| isUnresolved | Returns true if obj represents an unresolved value. | +| nullValue | Return a Token containing a `null` value. | + +--- + +##### `asAny` + +```java +import com.hashicorp.cdktf.Token; + +Token.asAny(java.lang.Object value) +``` + +Return a resolvable representation of the given value. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `asAnyMap` + +```java +import com.hashicorp.cdktf.Token; + +Token.asAnyMap(java.lang.Object value),Token.asAnyMap(java.lang.Object value, EncodingOptions options) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asBooleanMap` + +```java +import com.hashicorp.cdktf.Token; + +Token.asBooleanMap(java.lang.Object value),Token.asBooleanMap(java.lang.Object value, EncodingOptions options) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asList` + +```java +import com.hashicorp.cdktf.Token; + +Token.asList(java.lang.Object value),Token.asList(java.lang.Object value, EncodingOptions options) +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asMap` + +```java +import com.hashicorp.cdktf.Token; + +Token.asMap(java.lang.Object value, java.lang.Object mapValue),Token.asMap(java.lang.Object value, java.lang.Object mapValue, EncodingOptions options) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `mapValue`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asNumber` + +```java +import com.hashicorp.cdktf.Token; + +Token.asNumber(java.lang.Object value) +``` + +Return a reversible number representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `asNumberList` + +```java +import com.hashicorp.cdktf.Token; + +Token.asNumberList(java.lang.Object value) +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `asNumberMap` + +```java +import com.hashicorp.cdktf.Token; + +Token.asNumberMap(java.lang.Object value),Token.asNumberMap(java.lang.Object value, EncodingOptions options) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asString` + +```java +import com.hashicorp.cdktf.Token; + +Token.asString(java.lang.Object value),Token.asString(java.lang.Object value, EncodingOptions options) +``` + +Return a reversible string representation of this token. + +If the Token is initialized with a literal, the stringified value of the +literal is returned. Otherwise, a special quoted string representation +of the Token is returned that can be embedded into other strings. + +Strings with quoted Tokens in them can be restored back into +complex values with the Tokens restored by calling `resolve()` +on the string. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asStringMap` + +```java +import com.hashicorp.cdktf.Token; + +Token.asStringMap(java.lang.Object value),Token.asStringMap(java.lang.Object value, EncodingOptions options) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `isUnresolved` + +```java +import com.hashicorp.cdktf.Token; + +Token.isUnresolved(java.lang.Object obj) +``` + +Returns true if obj represents an unresolved value. + +One of these must be true: + +- `obj` is an IResolvable +- `obj` is a string containing at least one encoded `IResolvable` +- `obj` is either an encoded number or list + +This does NOT recurse into lists or objects to see if they +containing resolvables. + +###### `obj`Required + +- _Type:_ java.lang.Object + +The object to test. + +--- + +##### `nullValue` + +```java +import com.hashicorp.cdktf.Token; + +Token.nullValue() +``` + +Return a Token containing a `null` value. + +Note: This is different than `undefined`, `nil`, `None` or similar +as it will end up in the Terraform config and can be used to explicitly +not set an attribute (which is sometimes required by Terraform providers) + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------- | -------------------------------------- | +| ANY_MAP_TOKEN_VALUE | java.lang.String | Any map token representation. | +| NUMBER_MAP_TOKEN_VALUE | java.lang.Number | Number Map token value representation. | +| STRING_MAP_TOKEN_VALUE | java.lang.String | String Map token value representation. | + +--- + +##### `ANY_MAP_TOKEN_VALUE`Required + +```java +public java.lang.String getAnyMapTokenValue(); +``` + +- _Type:_ java.lang.String + +Any map token representation. + +--- + +##### `NUMBER_MAP_TOKEN_VALUE`Required + +```java +public java.lang.Number getNumberMapTokenValue(); +``` + +- _Type:_ java.lang.Number + +Number Map token value representation. + +--- + +##### `STRING_MAP_TOKEN_VALUE`Required + +```java +public java.lang.String getStringMapTokenValue(); +``` + +- _Type:_ java.lang.String + +String Map token value representation. + +--- + +### Tokenization + +Less oft-needed functions to manipulate Tokens. + +#### Initializers + +```java +import com.hashicorp.cdktf.Tokenization; + +new Tokenization(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| isResolvable | Return whether the given object is an IResolvable object. | +| resolve | Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. | +| reverse | Reverse any value into Resolvables, if possible. | +| reverseList | Un-encode a Tokenized value from a list. | +| reverseMap | Un-encode a Tokenized value from a map. | +| reverseNumber | Un-encode a Tokenized value from a number. | +| reverseNumberList | Un-encode a Tokenized value from a list. | +| reverseString | Un-encode a string potentially containing encoded tokens. | +| stringifyNumber | Stringify a number directly or lazily if it's a Token. | + +--- + +##### `isResolvable` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.isResolvable(java.lang.Object obj) +``` + +Return whether the given object is an IResolvable object. + +This is different from Token.isUnresolved() which will also check for +encoded Tokens, whereas this method will only do a type check on the given +object. + +###### `obj`Required + +- _Type:_ java.lang.Object + +--- + +##### `resolve` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.resolve(java.lang.Object obj, ResolveOptions options) +``` + +Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. + +Values can only be primitives, arrays or tokens. Other objects (i.e. with methods) will be rejected. + +###### `obj`Required + +- _Type:_ java.lang.Object + +The object to resolve. + +--- + +###### `options`Required + +- _Type:_ ResolveOptions + +Prefix key path components for diagnostics. + +--- + +##### `reverse` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.reverse(java.lang.Object x) +``` + +Reverse any value into Resolvables, if possible. + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `reverseList` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.reverseList(java.util.List< java.lang.String > l) +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `reverseMap` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.reverseMap(java.util.Map< java.lang.String, java.lang.Object > m) +``` + +Un-encode a Tokenized value from a map. + +###### `m`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `reverseNumber` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.reverseNumber(java.lang.Number n) +``` + +Un-encode a Tokenized value from a number. + +###### `n`Required + +- _Type:_ java.lang.Number + +--- + +##### `reverseNumberList` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.reverseNumberList(java.util.List< java.lang.Number > l) +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +##### `reverseString` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.reverseString(java.lang.String s) +``` + +Un-encode a string potentially containing encoded tokens. + +###### `s`Required + +- _Type:_ java.lang.String + +--- + +##### `stringifyNumber` + +```java +import com.hashicorp.cdktf.Tokenization; + +Tokenization.stringifyNumber(java.lang.Number x) +``` + +Stringify a number directly or lazily if it's a Token. + +If it is an object (i.e., { Ref: 'SomeLogicalId' }), return it as-is. + +###### `x`Required + +- _Type:_ java.lang.Number + +--- + +### TokenizedStringFragments + +Fragments of a concatenated string containing stringified Tokens. + +#### Initializers + +```java +import com.hashicorp.cdktf.TokenizedStringFragments; + +new TokenizedStringFragments(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------ | +| addEscape | _No description._ | +| addIntrinsic | Adds an intrinsic fragment. | +| addLiteral | Adds a literal fragment. | +| addToken | Adds a token fragment. | +| concat | _No description._ | +| join | Combine the string fragments using the given joiner. | +| mapTokens | Apply a transformation function to all tokens in the string. | + +--- + +##### `addEscape` + +```java +public void addEscape(java.lang.String kind) +``` + +###### `kind`Required + +- _Type:_ java.lang.String + +--- + +##### `addIntrinsic` + +```java +public void addIntrinsic(java.lang.Object value) +``` + +Adds an intrinsic fragment. + +###### `value`Required + +- _Type:_ java.lang.Object + +the intrinsic value to add. + +--- + +##### `addLiteral` + +```java +public void addLiteral(java.lang.Object lit) +``` + +Adds a literal fragment. + +###### `lit`Required + +- _Type:_ java.lang.Object + +the literal to add. + +--- + +##### `addToken` + +```java +public void addToken(IResolvable token) +``` + +Adds a token fragment. + +###### `token`Required + +- _Type:_ IResolvable + +the token to add. + +--- + +##### `concat` + +```java +public void concat(TokenizedStringFragments other) +``` + +###### `other`Required + +- _Type:_ TokenizedStringFragments + +--- + +##### `join` + +```java +public java.lang.Object join(IFragmentConcatenator concat) +``` + +Combine the string fragments using the given joiner. + +If there are any + +###### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +##### `mapTokens` + +```java +public TokenizedStringFragments mapTokens(IResolveContext context) +``` + +Apply a transformation function to all tokens in the string. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------ | +| escapes | java.util.List< IResolvable> | Return all escape fragments from this string. | +| firstValue | java.lang.Object | Returns the first value. | +| intrinsic | java.util.List< IResolvable> | Return all intrinsic fragments from this string. | +| length | java.lang.Number | Returns the number of fragments. | +| literals | java.util.List< IResolvable> | Return all literals from this string. | +| tokens | java.util.List< IResolvable> | Return all Tokens from this string. | +| firstToken | IResolvable | Returns the first token. | + +--- + +##### `escapes`Required + +```java +public java.util.List< IResolvable > getEscapes(); +``` + +- _Type:_ java.util.List< IResolvable> + +Return all escape fragments from this string. + +--- + +##### `firstValue`Required + +```java +public java.lang.Object getFirstValue(); +``` + +- _Type:_ java.lang.Object + +Returns the first value. + +--- + +##### `intrinsic`Required + +```java +public java.util.List< IResolvable > getIntrinsic(); +``` + +- _Type:_ java.util.List< IResolvable> + +Return all intrinsic fragments from this string. + +--- + +##### `length`Required + +```java +public java.lang.Number getLength(); +``` + +- _Type:_ java.lang.Number + +Returns the number of fragments. + +--- + +##### `literals`Required + +```java +public java.util.List< IResolvable > getLiterals(); +``` + +- _Type:_ java.util.List< IResolvable> + +Return all literals from this string. + +--- + +##### `tokens`Required + +```java +public java.util.List< IResolvable > getTokens(); +``` + +- _Type:_ java.util.List< IResolvable> + +Return all Tokens from this string. + +--- + +##### `firstToken`Optional + +```java +public IResolvable getFirstToken(); +``` + +- _Type:_ IResolvable + +Returns the first token. + +--- + +### VariableType + +#### Initializers + +```java +import com.hashicorp.cdktf.VariableType; + +new VariableType(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------ | ----------------- | +| list | _No description._ | +| map | _No description._ | +| object | _No description._ | +| set | _No description._ | +| tuple | _No description._ | + +--- + +##### `list` + +```java +import com.hashicorp.cdktf.VariableType; + +VariableType.list(java.lang.String type) +``` + +###### `type`Required + +- _Type:_ java.lang.String + +--- + +##### `map` + +```java +import com.hashicorp.cdktf.VariableType; + +VariableType.map(java.lang.String type) +``` + +###### `type`Required + +- _Type:_ java.lang.String + +--- + +##### `object` + +```java +import com.hashicorp.cdktf.VariableType; + +VariableType.object(java.util.Map< java.lang.String, java.lang.String > attributes) +``` + +###### `attributes`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +--- + +##### `set` + +```java +import com.hashicorp.cdktf.VariableType; + +VariableType.set(java.lang.String type) +``` + +###### `type`Required + +- _Type:_ java.lang.String + +--- + +##### `tuple` + +```java +import com.hashicorp.cdktf.VariableType; + +VariableType.tuple(java.lang.String... elements) +``` + +###### `elements`Required + +- _Type:_ java.lang.String... + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| ANY | java.lang.String | _No description._ | +| BOOL | java.lang.String | _No description._ | +| LIST | java.lang.String | _No description._ | +| LIST_BOOL | java.lang.String | _No description._ | +| LIST_NUMBER | java.lang.String | _No description._ | +| LIST_STRING | java.lang.String | _No description._ | +| MAP | java.lang.String | _No description._ | +| MAP_BOOL | java.lang.String | _No description._ | +| MAP_NUMBER | java.lang.String | _No description._ | +| MAP_STRING | java.lang.String | _No description._ | +| NUMBER | java.lang.String | _No description._ | +| SET | java.lang.String | _No description._ | +| SET_BOOL | java.lang.String | _No description._ | +| SET_NUMBER | java.lang.String | _No description._ | +| SET_STRING | java.lang.String | _No description._ | +| STRING | java.lang.String | _No description._ | + +--- + +##### `ANY`Required + +```java +public java.lang.String getAny(); +``` + +- _Type:_ java.lang.String + +--- + +##### `BOOL`Required + +```java +public java.lang.String getBool(); +``` + +- _Type:_ java.lang.String + +--- + +##### `LIST`Required + +```java +public java.lang.String getList(); +``` + +- _Type:_ java.lang.String + +--- + +##### `LIST_BOOL`Required + +```java +public java.lang.String getListBool(); +``` + +- _Type:_ java.lang.String + +--- + +##### `LIST_NUMBER`Required + +```java +public java.lang.String getListNumber(); +``` + +- _Type:_ java.lang.String + +--- + +##### `LIST_STRING`Required + +```java +public java.lang.String getListString(); +``` + +- _Type:_ java.lang.String + +--- + +##### `MAP`Required + +```java +public java.lang.String getMap(); +``` + +- _Type:_ java.lang.String + +--- + +##### `MAP_BOOL`Required + +```java +public java.lang.String getMapBool(); +``` + +- _Type:_ java.lang.String + +--- + +##### `MAP_NUMBER`Required + +```java +public java.lang.String getMapNumber(); +``` + +- _Type:_ java.lang.String + +--- + +##### `MAP_STRING`Required + +```java +public java.lang.String getMapString(); +``` + +- _Type:_ java.lang.String + +--- + +##### `NUMBER`Required + +```java +public java.lang.String getNumber(); +``` + +- _Type:_ java.lang.String + +--- + +##### `SET`Required + +```java +public java.lang.String getSet(); +``` + +- _Type:_ java.lang.String + +--- + +##### `SET_BOOL`Required + +```java +public java.lang.String getSetBool(); +``` + +- _Type:_ java.lang.String + +--- + +##### `SET_NUMBER`Required + +```java +public java.lang.String getSetNumber(); +``` + +- _Type:_ java.lang.String + +--- + +##### `SET_STRING`Required + +```java +public java.lang.String getSetString(); +``` + +- _Type:_ java.lang.String + +--- + +##### `STRING`Required + +```java +public java.lang.String getString(); +``` + +- _Type:_ java.lang.String + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/constructs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/constructs.mdx new file mode 100644 index 0000000000..9423b528dc --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/constructs.mdx @@ -0,0 +1,17190 @@ +--- +page_title: Java Reference for Constructs +description: CDKTF Core API Reference for Constructs in Java. +--- + + + +# Java: Constructs + +### App + +Represents a cdktf application. + +#### Initializers + +```java +import com.hashicorp.cdktf.App; + +App.Builder.create() +// .context(java.util.Map< java.lang.String, java.lang.Object >) +// .hclOutput(java.lang.Boolean) +// .outdir(java.lang.String) +// .skipBackendValidation(java.lang.Boolean) +// .skipValidation(java.lang.Boolean) +// .stackTraces(java.lang.Boolean) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------- | +| context | java.util.Map< java.lang.String, java.lang.Object > | Additional context values for the application. | +| hclOutput | java.lang.Boolean | _No description._ | +| outdir | java.lang.String | The directory to output Terraform resources. | +| skipBackendValidation | java.lang.Boolean | Whether to skip backend validation during synthesis of the app. | +| skipValidation | java.lang.Boolean | Whether to skip all validations during synthesis of the app. | +| stackTraces | java.lang.Boolean | _No description._ | + +--- + +##### `context`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `hclOutput`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `outdir`Optional + +- _Type:_ java.lang.String +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `skipBackendValidation`Optional + +- _Type:_ java.lang.Boolean +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skipValidation`Optional + +- _Type:_ java.lang.Boolean +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `stackTraces`Optional + +- _Type:_ java.lang.Boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| crossStackReference | Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. | +| synth | Synthesizes all resources to the output directory. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `crossStackReference` + +```java +public java.lang.String crossStackReference(TerraformStack fromStack, TerraformStack toStack, java.lang.String identifier) +``` + +Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. + +###### `fromStack`Required + +- _Type:_ TerraformStack + +--- + +###### `toStack`Required + +- _Type:_ TerraformStack + +--- + +###### `identifier`Required + +- _Type:_ java.lang.String + +--- + +##### `synth` + +```java +public void synth() +``` + +Synthesizes all resources to the output directory. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isApp | _No description._ | +| of | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.App; + +App.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isApp` + +```java +import com.hashicorp.cdktf.App; + +App.isApp(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `of` + +```java +import com.hashicorp.cdktf.App; + +App.of(IConstruct construct) +``` + +###### `construct`Required + +- _Type:_ software.constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | --------------------------------------------------------------- | +| node | software.constructs.Node | The tree node. | +| hclOutput | java.lang.Boolean | _No description._ | +| manifest | Manifest | _No description._ | +| outdir | java.lang.String | The output directory into which resources will be synthesized. | +| skipBackendValidation | java.lang.Boolean | Whether to skip backend validation during synthesis of the app. | +| skipValidation | java.lang.Boolean | Whether to skip all validations during synthesis of the app. | +| targetStackId | java.lang.String | The stack which will be synthesized. | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `hclOutput`Required + +```java +public java.lang.Boolean getHclOutput(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `manifest`Required + +```java +public Manifest getManifest(); +``` + +- _Type:_ Manifest + +--- + +##### `outdir`Required + +```java +public java.lang.String getOutdir(); +``` + +- _Type:_ java.lang.String + +The output directory into which resources will be synthesized. + +--- + +##### `skipBackendValidation`Required + +```java +public java.lang.Boolean getSkipBackendValidation(); +``` + +- _Type:_ java.lang.Boolean + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skipValidation`Required + +```java +public java.lang.Boolean getSkipValidation(); +``` + +- _Type:_ java.lang.Boolean + +Whether to skip all validations during synthesis of the app. + +--- + +##### `targetStackId`Optional + +```java +public java.lang.String getTargetStackId(); +``` + +- _Type:_ java.lang.String + +The stack which will be synthesized. + +If not set, all stacks will be synthesized. + +--- + +### AzurermBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.AzurermBackend; + +AzurermBackend.Builder.create(Construct scope) + .containerName(java.lang.String) + .key(java.lang.String) + .storageAccountName(java.lang.String) +// .accessKey(java.lang.String) +// .clientCertificatePassword(java.lang.String) +// .clientCertificatePath(java.lang.String) +// .clientId(java.lang.String) +// .clientSecret(java.lang.String) +// .endpoint(java.lang.String) +// .environment(java.lang.String) +// .metadataHost(java.lang.String) +// .msiEndpoint(java.lang.String) +// .oidcRequestToken(java.lang.String) +// .oidcRequestUrl(java.lang.String) +// .oidcToken(java.lang.String) +// .oidcTokenFilePath(java.lang.String) +// .resourceGroupName(java.lang.String) +// .sasToken(java.lang.String) +// .snapshot(java.lang.Boolean) +// .subscriptionId(java.lang.String) +// .tenantId(java.lang.String) +// .useAzureadAuth(java.lang.Boolean) +// .useMicrosoftGraph(java.lang.Boolean) +// .useMsi(java.lang.Boolean) +// .useOidc(java.lang.Boolean) + .build(); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| containerName | java.lang.String | (Required) The Name of the Storage Container within the Storage Account. | +| key | java.lang.String | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storageAccountName | java.lang.String | (Required) The Name of the Storage Account. | +| accessKey | java.lang.String | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| clientCertificatePassword | java.lang.String | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| clientCertificatePath | java.lang.String | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| clientId | java.lang.String | (Optional) The Client ID of the Service Principal. | +| clientSecret | java.lang.String | (Optional) The Client Secret of the Service Principal. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | java.lang.String | (Optional) The Azure Environment which should be used. | +| metadataHost | java.lang.String | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msiEndpoint | java.lang.String | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidcRequestToken | java.lang.String | (Optional) The bearer token for the request to the OIDC provider. | +| oidcRequestUrl | java.lang.String | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidcToken | java.lang.String | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidcTokenFilePath | java.lang.String | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resourceGroupName | java.lang.String | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sasToken | java.lang.String | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | java.lang.Boolean | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscriptionId | java.lang.String | (Optional) The Subscription ID in which the Storage Account exists. | +| tenantId | java.lang.String | (Optional) The Tenant ID in which the Subscription exists. | +| useAzureadAuth | java.lang.Boolean | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| useMicrosoftGraph | java.lang.Boolean | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| useMsi | java.lang.Boolean | (Optional) Should Managed Service Identity authentication be used? | +| useOidc | java.lang.Boolean | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `containerName`Required + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +- _Type:_ java.lang.String + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storageAccountName`Required + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Account. + +--- + +##### `accessKey`Optional + +- _Type:_ java.lang.String + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `clientCertificatePassword`Optional + +- _Type:_ java.lang.String + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `clientCertificatePath`Optional + +- _Type:_ java.lang.String + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `clientId`Optional + +- _Type:_ java.lang.String + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `clientSecret`Optional + +- _Type:_ java.lang.String + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +- _Type:_ java.lang.String + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadataHost`Optional + +- _Type:_ java.lang.String + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msiEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidcRequestToken`Optional + +- _Type:_ java.lang.String + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidcRequestUrl`Optional + +- _Type:_ java.lang.String + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidcToken`Optional + +- _Type:_ java.lang.String + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidcTokenFilePath`Optional + +- _Type:_ java.lang.String + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resourceGroupName`Optional + +- _Type:_ java.lang.String + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sasToken`Optional + +- _Type:_ java.lang.String + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscriptionId`Optional + +- _Type:_ java.lang.String + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenantId`Optional + +- _Type:_ java.lang.String + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `useAzureadAuth`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `useMicrosoftGraph`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `useMsi`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `useOidc`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.AzurermBackend; + +AzurermBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.AzurermBackend; + +AzurermBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.AzurermBackend; + +AzurermBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### CloudBackend + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +#### Initializers + +```java +import com.hashicorp.cdktf.CloudBackend; + +CloudBackend.Builder.create(Construct scope) + .organization(java.lang.String) + .workspaces(NamedCloudWorkspace) + .workspaces(TaggedCloudWorkspaces) +// .hostname(java.lang.String) +// .token(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| organization | java.lang.String | The name of the organization containing the workspace(s) the current configuration should use. | +| workspaces | NamedCloudWorkspace OR TaggedCloudWorkspaces | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| hostname | java.lang.String | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| token | java.lang.String | The token used to authenticate with Terraform Cloud. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `organization`Required + +- _Type:_ java.lang.String + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `workspaces`Required + +- _Type:_ NamedCloudWorkspace OR TaggedCloudWorkspaces + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `hostname`Optional + +- _Type:_ java.lang.String +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `token`Optional + +- _Type:_ java.lang.String + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.CloudBackend; + +CloudBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.CloudBackend; + +CloudBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.CloudBackend; + +CloudBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### ConsulBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.ConsulBackend; + +ConsulBackend.Builder.create(Construct scope) + .accessToken(java.lang.String) + .path(java.lang.String) +// .address(java.lang.String) +// .caFile(java.lang.String) +// .certFile(java.lang.String) +// .datacenter(java.lang.String) +// .gzip(java.lang.Boolean) +// .httpAuth(java.lang.String) +// .keyFile(java.lang.String) +// .lock(java.lang.Boolean) +// .scheme(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| accessToken | java.lang.String | (Required) Access token. | +| path | java.lang.String | (Required) Path in the Consul KV store. | +| address | java.lang.String | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| caFile | java.lang.String | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| certFile | java.lang.String | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | java.lang.String | (Optional) The datacenter to use. | +| gzip | java.lang.Boolean | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| httpAuth | java.lang.String | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| keyFile | java.lang.String | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | java.lang.Boolean | (Optional) false to disable locking. | +| scheme | java.lang.String | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `accessToken`Required + +- _Type:_ java.lang.String + +(Required) Access token. + +--- + +##### `path`Required + +- _Type:_ java.lang.String + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +- _Type:_ java.lang.String + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `caFile`Optional + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `certFile`Optional + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +- _Type:_ java.lang.String + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +- _Type:_ java.lang.Boolean + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `httpAuth`Optional + +- _Type:_ java.lang.String + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `keyFile`Optional + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +- _Type:_ java.lang.Boolean + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +- _Type:_ java.lang.String + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.ConsulBackend; + +ConsulBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.ConsulBackend; + +ConsulBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.ConsulBackend; + +ConsulBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### CosBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.CosBackend; + +CosBackend.Builder.create(Construct scope) + .bucket(java.lang.String) +// .accelerate(java.lang.Boolean) +// .acl(java.lang.String) +// .assumeRole(CosBackendAssumeRole) +// .domain(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .region(java.lang.String) +// .secretId(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| bucket | java.lang.String | (Required) The name of the COS bucket. | +| accelerate | java.lang.Boolean | (Optional) Whether to enable global Acceleration. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | java.lang.String | (Optional) The root domain of the API request. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for the COS backend. | +| key | java.lang.String | (Optional) The path for saving the state file in bucket. | +| prefix | java.lang.String | (Optional) The directory for saving the state file in bucket. | +| region | java.lang.String | (Optional) The region of the COS bucket. | +| secretId | java.lang.String | (Optional) Secret id of Tencent Cloud. | +| secretKey | java.lang.String | (Optional) Secret key of Tencent Cloud. | +| securityToken | java.lang.String | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assumeRole`Optional + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +- _Type:_ java.lang.String + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ java.lang.String + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ java.lang.String + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +- _Type:_ java.lang.String + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secretId`Optional + +- _Type:_ java.lang.String + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secretKey`Optional + +- _Type:_ java.lang.String + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `securityToken`Optional + +- _Type:_ java.lang.String + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.CosBackend; + +CosBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.CosBackend; + +CosBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.CosBackend; + +CosBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### DataResource + +The DataResource implements the standard resource lifecycle, but does not directly take any other actions. + +You can use the DataResource resource without requiring or configuring a provider. + +The DataResource resource is useful for storing values which need to follow a manage resource lifecycle, and for triggering provisioners when there is no other logical managed resource in which to place them. + +It requires Terraform 1.4 or later. + +It is also possible to generate these bindings by adding "terraform.io/builtin/terraform" to the "terraformProviders" key in your cdktf.json file and running "cdktf get". + +https://developer.hashicorp.com/terraform/language/resources/terraform-data + +#### Initializers + +```java +import com.hashicorp.cdktf.DataResource; + +DataResource.Builder.create(Construct scope, java.lang.String id) +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .count(java.lang.Number) +// .count(TerraformCount) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .lifecycle(TerraformResourceLifecycle) +// .provider(TerraformProvider) +// .provisioners(java.util.List< FileProvisioner) +// .provisioners(LocalExecProvisioner) +// .provisioners(RemoteExecProvisioner >) +// .input(java.util.Map< java.lang.String, java.lang.Object >) +// .triggersReplace(java.util.Map< java.lang.String, java.lang.Object >) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | The scope in which to define this construct. | +| id | java.lang.String | The scoped construct ID. | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | +| input | java.util.Map< java.lang.String, java.lang.Object > | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggersReplace | java.util.Map< java.lang.String, java.lang.Object > | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +The scope in which to define this construct. + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +The scoped construct ID. + +Must be unique amongst siblings in the same scope + +--- + +##### `connection`Optional + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +##### `input`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggersReplace`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| addMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| hasResourceMove | _No description._ | +| importFrom | _No description._ | +| interpolationForAttribute | _No description._ | +| moveFromId | Move the resource corresponding to "id" to this resource. | +| moveTo | Moves this resource to the target resource given by moveTarget. | +| moveToId | Moves this resource to the resource corresponding to "id". | +| resetInput | _No description._ | +| resetTriggersReplace | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `addMoveTarget` + +```java +public void addMoveTarget(java.lang.String moveTarget) +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `moveTarget`Required + +- _Type:_ java.lang.String + +The string move target that will correspond to this resource. + +--- + +##### `getAnyMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanAttribute` + +```java +public IResolvable getBooleanAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getListAttribute` + +```java +public java.util.List< java.lang.String > getListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberAttribute` + +```java +public java.lang.Number getNumberAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberListAttribute` + +```java +public java.util.List< java.lang.Number > getNumberListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringAttribute` + +```java +public java.lang.String getStringAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `hasResourceMove` + +```java +public TerraformResourceMoveByTarget OR TerraformResourceMoveById hasResourceMove() +``` + +##### `importFrom` + +```java +public void importFrom(java.lang.String id) +public void importFrom(java.lang.String id, TerraformProvider provider) +``` + +###### `id`Required + +- _Type:_ java.lang.String + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `moveFromId` + +```java +public void moveFromId(java.lang.String id) +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ java.lang.String + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `moveTo` + +```java +public void moveTo(java.lang.String moveTarget) +public void moveTo(java.lang.String moveTarget, java.lang.String OR java.lang.Number index) +``` + +Moves this resource to the target resource given by moveTarget. + +###### `moveTarget`Required + +- _Type:_ java.lang.String + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ java.lang.String OR java.lang.Number + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `moveToId` + +```java +public void moveToId(java.lang.String id) +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ java.lang.String + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +##### `resetInput` + +```java +public void resetInput() +``` + +##### `resetTriggersReplace` + +```java +public void resetTriggersReplace() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformResource | _No description._ | +| generateConfigForImport | Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataResource; + +DataResource.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataResource; + +DataResource.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isTerraformResource` + +```java +import com.hashicorp.cdktf.DataResource; + +DataResource.isTerraformResource(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `generateConfigForImport` + +```java +import com.hashicorp.cdktf.DataResource; + +DataResource.generateConfigForImport(Construct scope, java.lang.String importToId, java.lang.String importFromId),DataResource.generateConfigForImport(Construct scope, java.lang.String importToId, java.lang.String importFromId, TerraformProvider provider) +``` + +Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +The scope in which to define this construct. + +--- + +###### `importToId`Required + +- _Type:_ java.lang.String + +The construct id used in the generated config for the Data to import. + +--- + +###### `importFromId`Required + +- _Type:_ java.lang.String + +The id of the existing Data that should be imported. + +Refer to the {@link https://terraform.io/providers/builtin/terraform/latest/docs/resources/data#import import section} in the documentation of this resource for the id to use + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +? Optional instance of the provider where the Data to import is found. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| terraformMetaArguments | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< java.lang.String > | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | +| id | java.lang.String | _No description._ | +| output | AnyMap | _No description._ | +| inputInput | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| triggersReplaceInput | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| input | java.util.Map< java.lang.String, java.lang.Object > | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggersReplace | java.util.Map< java.lang.String, java.lang.Object > | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformMetaArguments`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getTerraformMetaArguments(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +```java +public TerraformProviderGeneratorMetadata getTerraformGeneratorMetadata(); +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< java.lang.String > getDependsOn(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```java +public java.lang.Object getProvisioners(); +``` + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +##### `id`Required + +```java +public java.lang.String getId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `output`Required + +```java +public AnyMap getOutput(); +``` + +- _Type:_ AnyMap + +--- + +##### `inputInput`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getInputInput(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `triggersReplaceInput`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getTriggersReplaceInput(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `input`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getInput(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggersReplace`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getTriggersReplace(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteState + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteState; + +DataTerraformRemoteState.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .organization(java.lang.String) + .workspaces(IRemoteWorkspace) +// .hostname(java.lang.String) +// .token(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| organization | java.lang.String | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `organization`Required + +- _Type:_ java.lang.String + +--- + +##### `workspaces`Required + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +- _Type:_ java.lang.String + +--- + +##### `token`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteState; + +DataTerraformRemoteState.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteState; + +DataTerraformRemoteState.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateAzurerm + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateAzurerm; + +DataTerraformRemoteStateAzurerm.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .containerName(java.lang.String) + .key(java.lang.String) + .storageAccountName(java.lang.String) +// .accessKey(java.lang.String) +// .clientCertificatePassword(java.lang.String) +// .clientCertificatePath(java.lang.String) +// .clientId(java.lang.String) +// .clientSecret(java.lang.String) +// .endpoint(java.lang.String) +// .environment(java.lang.String) +// .metadataHost(java.lang.String) +// .msiEndpoint(java.lang.String) +// .oidcRequestToken(java.lang.String) +// .oidcRequestUrl(java.lang.String) +// .oidcToken(java.lang.String) +// .oidcTokenFilePath(java.lang.String) +// .resourceGroupName(java.lang.String) +// .sasToken(java.lang.String) +// .snapshot(java.lang.Boolean) +// .subscriptionId(java.lang.String) +// .tenantId(java.lang.String) +// .useAzureadAuth(java.lang.Boolean) +// .useMicrosoftGraph(java.lang.Boolean) +// .useMsi(java.lang.Boolean) +// .useOidc(java.lang.Boolean) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| containerName | java.lang.String | (Required) The Name of the Storage Container within the Storage Account. | +| key | java.lang.String | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storageAccountName | java.lang.String | (Required) The Name of the Storage Account. | +| accessKey | java.lang.String | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| clientCertificatePassword | java.lang.String | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| clientCertificatePath | java.lang.String | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| clientId | java.lang.String | (Optional) The Client ID of the Service Principal. | +| clientSecret | java.lang.String | (Optional) The Client Secret of the Service Principal. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | java.lang.String | (Optional) The Azure Environment which should be used. | +| metadataHost | java.lang.String | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msiEndpoint | java.lang.String | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidcRequestToken | java.lang.String | (Optional) The bearer token for the request to the OIDC provider. | +| oidcRequestUrl | java.lang.String | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidcToken | java.lang.String | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidcTokenFilePath | java.lang.String | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resourceGroupName | java.lang.String | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sasToken | java.lang.String | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | java.lang.Boolean | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscriptionId | java.lang.String | (Optional) The Subscription ID in which the Storage Account exists. | +| tenantId | java.lang.String | (Optional) The Tenant ID in which the Subscription exists. | +| useAzureadAuth | java.lang.Boolean | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| useMicrosoftGraph | java.lang.Boolean | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| useMsi | java.lang.Boolean | (Optional) Should Managed Service Identity authentication be used? | +| useOidc | java.lang.Boolean | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `containerName`Required + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +- _Type:_ java.lang.String + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storageAccountName`Required + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Account. + +--- + +##### `accessKey`Optional + +- _Type:_ java.lang.String + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `clientCertificatePassword`Optional + +- _Type:_ java.lang.String + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `clientCertificatePath`Optional + +- _Type:_ java.lang.String + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `clientId`Optional + +- _Type:_ java.lang.String + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `clientSecret`Optional + +- _Type:_ java.lang.String + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +- _Type:_ java.lang.String + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadataHost`Optional + +- _Type:_ java.lang.String + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msiEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidcRequestToken`Optional + +- _Type:_ java.lang.String + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidcRequestUrl`Optional + +- _Type:_ java.lang.String + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidcToken`Optional + +- _Type:_ java.lang.String + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidcTokenFilePath`Optional + +- _Type:_ java.lang.String + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resourceGroupName`Optional + +- _Type:_ java.lang.String + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sasToken`Optional + +- _Type:_ java.lang.String + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscriptionId`Optional + +- _Type:_ java.lang.String + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenantId`Optional + +- _Type:_ java.lang.String + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `useAzureadAuth`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `useMicrosoftGraph`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `useMsi`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `useOidc`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateAzurerm; + +DataTerraformRemoteStateAzurerm.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateAzurerm; + +DataTerraformRemoteStateAzurerm.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateConsul + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateConsul; + +DataTerraformRemoteStateConsul.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .accessToken(java.lang.String) + .path(java.lang.String) +// .address(java.lang.String) +// .caFile(java.lang.String) +// .certFile(java.lang.String) +// .datacenter(java.lang.String) +// .gzip(java.lang.Boolean) +// .httpAuth(java.lang.String) +// .keyFile(java.lang.String) +// .lock(java.lang.Boolean) +// .scheme(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| accessToken | java.lang.String | (Required) Access token. | +| path | java.lang.String | (Required) Path in the Consul KV store. | +| address | java.lang.String | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| caFile | java.lang.String | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| certFile | java.lang.String | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | java.lang.String | (Optional) The datacenter to use. | +| gzip | java.lang.Boolean | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| httpAuth | java.lang.String | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| keyFile | java.lang.String | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | java.lang.Boolean | (Optional) false to disable locking. | +| scheme | java.lang.String | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `accessToken`Required + +- _Type:_ java.lang.String + +(Required) Access token. + +--- + +##### `path`Required + +- _Type:_ java.lang.String + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +- _Type:_ java.lang.String + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `caFile`Optional + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `certFile`Optional + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +- _Type:_ java.lang.String + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +- _Type:_ java.lang.Boolean + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `httpAuth`Optional + +- _Type:_ java.lang.String + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `keyFile`Optional + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +- _Type:_ java.lang.Boolean + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +- _Type:_ java.lang.String + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateConsul; + +DataTerraformRemoteStateConsul.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateConsul; + +DataTerraformRemoteStateConsul.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateCos + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateCos; + +DataTerraformRemoteStateCos.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) +// .accelerate(java.lang.Boolean) +// .acl(java.lang.String) +// .assumeRole(CosBackendAssumeRole) +// .domain(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .region(java.lang.String) +// .secretId(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | (Required) The name of the COS bucket. | +| accelerate | java.lang.Boolean | (Optional) Whether to enable global Acceleration. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | java.lang.String | (Optional) The root domain of the API request. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for the COS backend. | +| key | java.lang.String | (Optional) The path for saving the state file in bucket. | +| prefix | java.lang.String | (Optional) The directory for saving the state file in bucket. | +| region | java.lang.String | (Optional) The region of the COS bucket. | +| secretId | java.lang.String | (Optional) Secret id of Tencent Cloud. | +| secretKey | java.lang.String | (Optional) Secret key of Tencent Cloud. | +| securityToken | java.lang.String | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assumeRole`Optional + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +- _Type:_ java.lang.String + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ java.lang.String + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ java.lang.String + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +- _Type:_ java.lang.String + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secretId`Optional + +- _Type:_ java.lang.String + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secretKey`Optional + +- _Type:_ java.lang.String + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `securityToken`Optional + +- _Type:_ java.lang.String + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateCos; + +DataTerraformRemoteStateCos.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateCos; + +DataTerraformRemoteStateCos.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateGcs + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateGcs; + +DataTerraformRemoteStateGcs.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) +// .accessToken(java.lang.String) +// .credentials(java.lang.String) +// .encryptionKey(java.lang.String) +// .impersonateServiceAccount(java.lang.String) +// .impersonateServiceAccountDelegates(java.util.List< java.lang.String >) +// .kmsEncryptionKey(java.lang.String) +// .prefix(java.lang.String) +// .storeageCustomEndpoint(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | (Required) The name of the GCS bucket. | +| accessToken | java.lang.String | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | java.lang.String | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryptionKey | java.lang.String | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonateServiceAccount | java.lang.String | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonateServiceAccountDelegates | java.util.List< java.lang.String > | (Optional) The delegation chain for an impersonating a service account. | +| kmsEncryptionKey | java.lang.String | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | java.lang.String | (Optional) GCS prefix inside the bucket. | +| storeageCustomEndpoint | java.lang.String | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `accessToken`Optional + +- _Type:_ java.lang.String + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +- _Type:_ java.lang.String + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryptionKey`Optional + +- _Type:_ java.lang.String + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonateServiceAccount`Optional + +- _Type:_ java.lang.String + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonateServiceAccountDelegates`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kmsEncryptionKey`Optional + +- _Type:_ java.lang.String + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +- _Type:_ java.lang.String + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeageCustomEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateGcs; + +DataTerraformRemoteStateGcs.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateGcs; + +DataTerraformRemoteStateGcs.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateHttp + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateHttp; + +DataTerraformRemoteStateHttp.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .address(java.lang.String) +// .clientCaCertificatePem(java.lang.String) +// .clientCertificatePem(java.lang.String) +// .clientPrivateKeyPem(java.lang.String) +// .lockAddress(java.lang.String) +// .lockMethod(java.lang.String) +// .password(java.lang.String) +// .retryMax(java.lang.Number) +// .retryWaitMax(java.lang.Number) +// .retryWaitMin(java.lang.Number) +// .skipCertVerification(java.lang.Boolean) +// .unlockAddress(java.lang.String) +// .unlockMethod(java.lang.String) +// .updateMethod(java.lang.String) +// .username(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| address | java.lang.String | (Required) The address of the REST endpoint. | +| clientCaCertificatePem | java.lang.String | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| clientCertificatePem | java.lang.String | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| clientPrivateKeyPem | java.lang.String | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lockAddress | java.lang.String | (Optional) The address of the lock REST endpoint. | +| lockMethod | java.lang.String | (Optional) The HTTP method to use when locking. | +| password | java.lang.String | (Optional) The password for HTTP basic authentication. | +| retryMax | java.lang.Number | (Optional) The number of HTTP request retries. | +| retryWaitMax | java.lang.Number | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retryWaitMin | java.lang.Number | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skipCertVerification | java.lang.Boolean | (Optional) Whether to skip TLS verification. | +| unlockAddress | java.lang.String | (Optional) The address of the unlock REST endpoint. | +| unlockMethod | java.lang.String | (Optional) The HTTP method to use when unlocking. | +| updateMethod | java.lang.String | (Optional) HTTP method to use when updating state. | +| username | java.lang.String | (Optional) The username for HTTP basic authentication. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `address`Required + +- _Type:_ java.lang.String + +(Required) The address of the REST endpoint. + +--- + +##### `clientCaCertificatePem`Optional + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `clientCertificatePem`Optional + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `clientPrivateKeyPem`Optional + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lockAddress`Optional + +- _Type:_ java.lang.String + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lockMethod`Optional + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +- _Type:_ java.lang.String + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retryMax`Optional + +- _Type:_ java.lang.Number + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retryWaitMax`Optional + +- _Type:_ java.lang.Number + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retryWaitMin`Optional + +- _Type:_ java.lang.Number + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skipCertVerification`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlockAddress`Optional + +- _Type:_ java.lang.String + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlockMethod`Optional + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `updateMethod`Optional + +- _Type:_ java.lang.String + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +- _Type:_ java.lang.String + +(Optional) The username for HTTP basic authentication. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateHttp; + +DataTerraformRemoteStateHttp.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateHttp; + +DataTerraformRemoteStateHttp.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateLocal + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateLocal; + +DataTerraformRemoteStateLocal.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) +// .path(java.lang.String) +// .workspaceDir(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| path | java.lang.String | Path where the state file is stored. | +| workspaceDir | java.lang.String | (Optional) The path to non-default workspaces. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `path`Optional + +- _Type:_ java.lang.String +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspaceDir`Optional + +- _Type:_ java.lang.String + +(Optional) The path to non-default workspaces. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateLocal; + +DataTerraformRemoteStateLocal.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateLocal; + +DataTerraformRemoteStateLocal.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateOss + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateOss; + +DataTerraformRemoteStateOss.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .assumeRole(OssAssumeRole) +// .assumeRolePolicy(java.lang.String) +// .assumeRoleRoleArn(java.lang.String) +// .assumeRoleSessionExpiration(java.lang.Number) +// .assumeRoleSessionName(java.lang.String) +// .ecsRoleName(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) +// .sharedCredentialsFile(java.lang.String) +// .stsEndpoint(java.lang.String) +// .tablestoreEndpoint(java.lang.String) +// .tablestoreTable(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | (Required) The name of the OSS bucket. | +| accessKey | java.lang.String | (Optional) Alibaba Cloud access key. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file. | +| assumeRole | OssAssumeRole | _No description._ | +| assumeRolePolicy | java.lang.String | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assumeRoleRoleArn | java.lang.String | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assumeRoleSessionExpiration | java.lang.Number | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assumeRoleSessionName | java.lang.String | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecsRoleName | java.lang.String | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) A custom endpoint for the OSS API. | +| key | java.lang.String | (Optional) The name of the state file. | +| prefix | java.lang.String | (Optional) The path directory of the state file will be stored. | +| profile | java.lang.String | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | java.lang.String | (Optional) The region of the OSS bucket. | +| secretKey | java.lang.String | (Optional) Alibaba Cloud secret access key. | +| securityToken | java.lang.String | (Optional) STS access token. | +| sharedCredentialsFile | java.lang.String | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| stsEndpoint | java.lang.String | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestoreEndpoint | java.lang.String | (Optional) A custom endpoint for the TableStore API. | +| tablestoreTable | java.lang.String | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +(Required) The name of the OSS bucket. + +--- + +##### `accessKey`Optional + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +- _Type:_ OssAssumeRole + +--- + +##### `assumeRolePolicy`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assumeRoleRoleArn`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assumeRoleSessionExpiration`Optional + +- _Type:_ java.lang.Number + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assumeRoleSessionName`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecsRoleName`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ java.lang.String + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ java.lang.String + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ java.lang.String + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secretKey`Optional + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `securityToken`Optional + +- _Type:_ java.lang.String + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `sharedCredentialsFile`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `stsEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestoreEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestoreTable`Optional + +- _Type:_ java.lang.String + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateOss; + +DataTerraformRemoteStateOss.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateOss; + +DataTerraformRemoteStateOss.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStatePg + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStatePg; + +DataTerraformRemoteStatePg.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .connStr(java.lang.String) +// .schemaName(java.lang.String) +// .skipIndexCreation(java.lang.Boolean) +// .skipSchemaCreation(java.lang.Boolean) +// .skipTableCreation(java.lang.Boolean) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| connStr | java.lang.String | Postgres connection string; | +| schemaName | java.lang.String | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skipIndexCreation | java.lang.Boolean | If set to true, the Postgres index must already exist. | +| skipSchemaCreation | java.lang.Boolean | If set to true, the Postgres schema must already exist. | +| skipTableCreation | java.lang.Boolean | If set to true, the Postgres table must already exist. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `connStr`Required + +- _Type:_ java.lang.String + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schemaName`Optional + +- _Type:_ java.lang.String + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skipIndexCreation`Optional + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skipSchemaCreation`Optional + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skipTableCreation`Optional + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStatePg; + +DataTerraformRemoteStatePg.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStatePg; + +DataTerraformRemoteStatePg.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateS3 + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateS3; + +DataTerraformRemoteStateS3.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) + .key(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .allowedAccountIds(java.util.List< java.lang.String >) +// .assumeRole(S3BackendAssumeRoleConfig) +// .assumeRolePolicy(java.lang.String) +// .assumeRolePolicyArns(java.util.List< java.lang.String >) +// .assumeRoleTags(java.util.Map< java.lang.String, java.lang.String >) +// .assumeRoleTransitiveTagKeys(java.util.List< java.lang.String >) +// .assumeRoleWithWebIdentity(S3BackendAssumeRoleWithWebIdentityConfig) +// .customCaBundle(java.lang.String) +// .dynamodbEndpoint(java.lang.String) +// .dynamodbTable(java.lang.String) +// .ec2MetadataServiceEndpoint(java.lang.String) +// .ec2MetadataServiceEndpointMode(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .endpoints(S3BackendEndpointConfig) +// .externalId(java.lang.String) +// .forbiddenAccountIds(java.util.List< java.lang.String >) +// .forcePathStyle(java.lang.Boolean) +// .httpProxy(java.lang.String) +// .httpsProxy(java.lang.String) +// .iamEndpoint(java.lang.String) +// .insecure(java.lang.Boolean) +// .kmsKeyId(java.lang.String) +// .maxRetries(java.lang.Number) +// .noProxy(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .retryMode(java.lang.String) +// .roleArn(java.lang.String) +// .secretKey(java.lang.String) +// .sessionName(java.lang.String) +// .sharedConfigFiles(java.util.List< java.lang.String >) +// .sharedCredentialsFile(java.lang.String) +// .sharedCredentialsFiles(java.util.List< java.lang.String >) +// .skipCredentialsValidation(java.lang.Boolean) +// .skipMetadataApiCheck(java.lang.Boolean) +// .skipRegionValidation(java.lang.Boolean) +// .skipRequestingAccountId(java.lang.Boolean) +// .skipS3Checksum(java.lang.Boolean) +// .sseCustomerKey(java.lang.String) +// .stsEndpoint(java.lang.String) +// .stsRegion(java.lang.String) +// .token(java.lang.String) +// .useLegacyWorkflow(java.lang.Boolean) +// .usePathStyle(java.lang.Boolean) +// .workspaceKeyPrefix(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | Name of the S3 Bucket. | +| key | java.lang.String | Path to the state file inside the S3 Bucket. | +| accessKey | java.lang.String | (Optional) AWS access key. | +| acl | java.lang.String | (Optional) Canned ACL to be applied to the state file. | +| allowedAccountIds | java.util.List< java.lang.String > | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assumeRolePolicy | java.lang.String | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assumeRolePolicyArns | java.util.List< java.lang.String > | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assumeRoleTags | java.util.Map< java.lang.String, java.lang.String > | (Optional) Map of assume role session tags. | +| assumeRoleTransitiveTagKeys | java.util.List< java.lang.String > | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| customCaBundle | java.lang.String | (Optional) File containing custom root and intermediate certificates. | +| dynamodbEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodbTable | java.lang.String | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2MetadataServiceEndpoint | java.lang.String | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2MetadataServiceEndpointMode | java.lang.String | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | java.lang.Boolean | (Optional) Enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| externalId | java.lang.String | (Optional) External identifier to use when assuming the role. | +| forbiddenAccountIds | java.util.List< java.lang.String > | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| forcePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| httpProxy | java.lang.String | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| httpsProxy | java.lang.String | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iamEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | java.lang.Boolean | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kmsKeyId | java.lang.String | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| maxRetries | java.lang.Number | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| noProxy | java.lang.String | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | java.lang.String | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | java.lang.String | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retryMode | java.lang.String | (Optional) Specifies how retries are attempted. | +| roleArn | java.lang.String | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secretKey | java.lang.String | (Optional) AWS secret access key. | +| sessionName | java.lang.String | (Optional) Session name to use when assuming the role. | +| sharedConfigFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared configuration files. | +| sharedCredentialsFile | java.lang.String | (Optional) Path to the AWS shared credentials file. | +| sharedCredentialsFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared credentials files. | +| skipCredentialsValidation | java.lang.Boolean | (Optional) Skip credentials validation via the STS API. | +| skipMetadataApiCheck | java.lang.Boolean | (Optional) Skip usage of EC2 Metadata API. | +| skipRegionValidation | java.lang.Boolean | (Optional) Skip validation of provided region name. | +| skipRequestingAccountId | java.lang.Boolean | (Optional) Whether to skip requesting the account ID. | +| skipS3Checksum | java.lang.Boolean | (Optional) Do not include checksum when uploading S3 Objects. | +| sseCustomerKey | java.lang.String | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| stsEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| stsRegion | java.lang.String | (Optional) AWS region for STS. | +| token | java.lang.String | (Optional) Multi-Factor Authentication (MFA) token. | +| useLegacyWorkflow | java.lang.Boolean | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| usePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspaceKeyPrefix | java.lang.String | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +Name of the S3 Bucket. + +--- + +##### `key`Required + +- _Type:_ java.lang.String + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `accessKey`Optional + +- _Type:_ java.lang.String + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +- _Type:_ java.lang.String + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowedAccountIds`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assumeRole`Optional + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +- _Type:_ java.lang.String + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assumeRoleWithWebIdentity`Optional + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `customCaBundle`Optional + +- _Type:_ java.lang.String + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodbTable`Optional + +- _Type:_ java.lang.String + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2MetadataServiceEndpoint`Optional + +- _Type:_ java.lang.String + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2MetadataServiceEndpointMode`Optional + +- _Type:_ java.lang.String + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`externalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +- _Type:_ java.lang.String + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbiddenAccountIds`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`forcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `httpProxy`Optional + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `httpsProxy`Optional + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +- _Type:_ java.lang.Boolean + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kmsKeyId`Optional + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `maxRetries`Optional + +- _Type:_ java.lang.Number + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `noProxy`Optional + +- _Type:_ java.lang.String + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +- _Type:_ java.lang.String + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ java.lang.String + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retryMode`Optional + +- _Type:_ java.lang.String + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`roleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secretKey`Optional + +- _Type:_ java.lang.String + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`sessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +- _Type:_ java.lang.String + +(Optional) Session name to use when assuming the role. + +--- + +##### `sharedConfigFiles`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `sharedCredentialsFile`Optional + +- _Type:_ java.lang.String + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `sharedCredentialsFiles`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skipCredentialsValidation`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skipMetadataApiCheck`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skipRegionValidation`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Skip validation of provided region name. + +--- + +##### `skipRequestingAccountId`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skipS3Checksum`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sseCustomerKey`Optional + +- _Type:_ java.lang.String + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`stsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `stsRegion`Optional + +- _Type:_ java.lang.String + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +- _Type:_ java.lang.String + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `useLegacyWorkflow`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `usePathStyle`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspaceKeyPrefix`Optional + +- _Type:_ java.lang.String + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateS3; + +DataTerraformRemoteStateS3.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateS3; + +DataTerraformRemoteStateS3.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateSwift + +#### Initializers + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateSwift; + +DataTerraformRemoteStateSwift.Builder.create(Construct scope, java.lang.String id) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .container(java.lang.String) +// .applicationCredentialId(java.lang.String) +// .applicationCredentialName(java.lang.String) +// .applicationCredentialSecret(java.lang.String) +// .archiveContainer(java.lang.String) +// .authUrl(java.lang.String) +// .cacertFile(java.lang.String) +// .cert(java.lang.String) +// .cloud(java.lang.String) +// .defaultDomain(java.lang.String) +// .domainId(java.lang.String) +// .domainName(java.lang.String) +// .expireAfter(java.lang.String) +// .insecure(java.lang.Boolean) +// .key(java.lang.String) +// .password(java.lang.String) +// .projectDomainId(java.lang.String) +// .projectDomainName(java.lang.String) +// .regionName(java.lang.String) +// .stateName(java.lang.String) +// .tenantId(java.lang.String) +// .tenantName(java.lang.String) +// .token(java.lang.String) +// .userDomainId(java.lang.String) +// .userDomainName(java.lang.String) +// .userId(java.lang.String) +// .userName(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| container | java.lang.String | _No description._ | +| applicationCredentialId | java.lang.String | _No description._ | +| applicationCredentialName | java.lang.String | _No description._ | +| applicationCredentialSecret | java.lang.String | _No description._ | +| archiveContainer | java.lang.String | _No description._ | +| authUrl | java.lang.String | _No description._ | +| cacertFile | java.lang.String | _No description._ | +| cert | java.lang.String | _No description._ | +| cloud | java.lang.String | _No description._ | +| defaultDomain | java.lang.String | _No description._ | +| domainId | java.lang.String | _No description._ | +| domainName | java.lang.String | _No description._ | +| expireAfter | java.lang.String | _No description._ | +| insecure | java.lang.Boolean | _No description._ | +| key | java.lang.String | _No description._ | +| password | java.lang.String | _No description._ | +| projectDomainId | java.lang.String | _No description._ | +| projectDomainName | java.lang.String | _No description._ | +| regionName | java.lang.String | _No description._ | +| stateName | java.lang.String | _No description._ | +| tenantId | java.lang.String | _No description._ | +| tenantName | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | +| userDomainId | java.lang.String | _No description._ | +| userDomainName | java.lang.String | _No description._ | +| userId | java.lang.String | _No description._ | +| userName | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### ~~`workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`archiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`authUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`cacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`defaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`domainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`domainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`expireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.Boolean + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`regionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`stateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### ~~`toString`~~ + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### ~~`addOverride`~~ + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### ~~`overrideLogicalId`~~ + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### ~~`resetOverrideLogicalId`~~ + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`toHclTerraform`~~ + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### ~~`toMetadata`~~ + +```java +public java.lang.Object toMetadata() +``` + +##### ~~`toTerraform`~~ + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### ~~`get`~~ + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getBoolean`~~ + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getList`~~ + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getNumber`~~ + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### ~~`getString`~~ + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### ~~`isConstruct`~~ + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateSwift; + +DataTerraformRemoteStateSwift.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### ~~`isTerraformElement`~~ + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateSwift; + +DataTerraformRemoteStateSwift.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### ~~`cdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`friendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### ~~`tfResourceType`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### GcsBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.GcsBackend; + +GcsBackend.Builder.create(Construct scope) + .bucket(java.lang.String) +// .accessToken(java.lang.String) +// .credentials(java.lang.String) +// .encryptionKey(java.lang.String) +// .impersonateServiceAccount(java.lang.String) +// .impersonateServiceAccountDelegates(java.util.List< java.lang.String >) +// .kmsEncryptionKey(java.lang.String) +// .prefix(java.lang.String) +// .storeageCustomEndpoint(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| bucket | java.lang.String | (Required) The name of the GCS bucket. | +| accessToken | java.lang.String | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | java.lang.String | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryptionKey | java.lang.String | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonateServiceAccount | java.lang.String | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonateServiceAccountDelegates | java.util.List< java.lang.String > | (Optional) The delegation chain for an impersonating a service account. | +| kmsEncryptionKey | java.lang.String | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | java.lang.String | (Optional) GCS prefix inside the bucket. | +| storeageCustomEndpoint | java.lang.String | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `accessToken`Optional + +- _Type:_ java.lang.String + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +- _Type:_ java.lang.String + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryptionKey`Optional + +- _Type:_ java.lang.String + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonateServiceAccount`Optional + +- _Type:_ java.lang.String + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonateServiceAccountDelegates`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kmsEncryptionKey`Optional + +- _Type:_ java.lang.String + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +- _Type:_ java.lang.String + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeageCustomEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.GcsBackend; + +GcsBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.GcsBackend; + +GcsBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.GcsBackend; + +GcsBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### HttpBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.HttpBackend; + +HttpBackend.Builder.create(Construct scope) + .address(java.lang.String) +// .clientCaCertificatePem(java.lang.String) +// .clientCertificatePem(java.lang.String) +// .clientPrivateKeyPem(java.lang.String) +// .lockAddress(java.lang.String) +// .lockMethod(java.lang.String) +// .password(java.lang.String) +// .retryMax(java.lang.Number) +// .retryWaitMax(java.lang.Number) +// .retryWaitMin(java.lang.Number) +// .skipCertVerification(java.lang.Boolean) +// .unlockAddress(java.lang.String) +// .unlockMethod(java.lang.String) +// .updateMethod(java.lang.String) +// .username(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| address | java.lang.String | (Required) The address of the REST endpoint. | +| clientCaCertificatePem | java.lang.String | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| clientCertificatePem | java.lang.String | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| clientPrivateKeyPem | java.lang.String | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lockAddress | java.lang.String | (Optional) The address of the lock REST endpoint. | +| lockMethod | java.lang.String | (Optional) The HTTP method to use when locking. | +| password | java.lang.String | (Optional) The password for HTTP basic authentication. | +| retryMax | java.lang.Number | (Optional) The number of HTTP request retries. | +| retryWaitMax | java.lang.Number | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retryWaitMin | java.lang.Number | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skipCertVerification | java.lang.Boolean | (Optional) Whether to skip TLS verification. | +| unlockAddress | java.lang.String | (Optional) The address of the unlock REST endpoint. | +| unlockMethod | java.lang.String | (Optional) The HTTP method to use when unlocking. | +| updateMethod | java.lang.String | (Optional) HTTP method to use when updating state. | +| username | java.lang.String | (Optional) The username for HTTP basic authentication. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `address`Required + +- _Type:_ java.lang.String + +(Required) The address of the REST endpoint. + +--- + +##### `clientCaCertificatePem`Optional + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `clientCertificatePem`Optional + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `clientPrivateKeyPem`Optional + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lockAddress`Optional + +- _Type:_ java.lang.String + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lockMethod`Optional + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +- _Type:_ java.lang.String + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retryMax`Optional + +- _Type:_ java.lang.Number + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retryWaitMax`Optional + +- _Type:_ java.lang.Number + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retryWaitMin`Optional + +- _Type:_ java.lang.Number + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skipCertVerification`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlockAddress`Optional + +- _Type:_ java.lang.String + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlockMethod`Optional + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `updateMethod`Optional + +- _Type:_ java.lang.String + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +- _Type:_ java.lang.String + +(Optional) The username for HTTP basic authentication. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.HttpBackend; + +HttpBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.HttpBackend; + +HttpBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.HttpBackend; + +HttpBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### ImportableResource + +Class used to represent an importable resource. + +#### Initializers + +```java +import com.hashicorp.cdktf.ImportableResource; + +new ImportableResource(Construct scope, java.lang.String name, IImportableConfig config); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| name | java.lang.String | _No description._ | +| config | IImportableConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `name`Required + +- _Type:_ java.lang.String + +--- + +##### `config`Required + +- _Type:_ IImportableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.ImportableResource; + +ImportableResource.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.ImportableResource; + +ImportableResource.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### LocalBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.LocalBackend; + +LocalBackend.Builder.create(Construct scope) +// .path(java.lang.String) +// .workspaceDir(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------------------------------ | ---------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| path | java.lang.String | Path where the state file is stored. | +| workspaceDir | java.lang.String | (Optional) The path to non-default workspaces. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `path`Optional + +- _Type:_ java.lang.String +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspaceDir`Optional + +- _Type:_ java.lang.String + +(Optional) The path to non-default workspaces. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.LocalBackend; + +LocalBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.LocalBackend; + +LocalBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.LocalBackend; + +LocalBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### OssBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.OssBackend; + +OssBackend.Builder.create(Construct scope) + .bucket(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .assumeRole(OssAssumeRole) +// .assumeRolePolicy(java.lang.String) +// .assumeRoleRoleArn(java.lang.String) +// .assumeRoleSessionExpiration(java.lang.Number) +// .assumeRoleSessionName(java.lang.String) +// .ecsRoleName(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) +// .sharedCredentialsFile(java.lang.String) +// .stsEndpoint(java.lang.String) +// .tablestoreEndpoint(java.lang.String) +// .tablestoreTable(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| bucket | java.lang.String | (Required) The name of the OSS bucket. | +| accessKey | java.lang.String | (Optional) Alibaba Cloud access key. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file. | +| assumeRole | OssAssumeRole | _No description._ | +| assumeRolePolicy | java.lang.String | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assumeRoleRoleArn | java.lang.String | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assumeRoleSessionExpiration | java.lang.Number | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assumeRoleSessionName | java.lang.String | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecsRoleName | java.lang.String | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) A custom endpoint for the OSS API. | +| key | java.lang.String | (Optional) The name of the state file. | +| prefix | java.lang.String | (Optional) The path directory of the state file will be stored. | +| profile | java.lang.String | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | java.lang.String | (Optional) The region of the OSS bucket. | +| secretKey | java.lang.String | (Optional) Alibaba Cloud secret access key. | +| securityToken | java.lang.String | (Optional) STS access token. | +| sharedCredentialsFile | java.lang.String | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| stsEndpoint | java.lang.String | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestoreEndpoint | java.lang.String | (Optional) A custom endpoint for the TableStore API. | +| tablestoreTable | java.lang.String | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +(Required) The name of the OSS bucket. + +--- + +##### `accessKey`Optional + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +- _Type:_ OssAssumeRole + +--- + +##### `assumeRolePolicy`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assumeRoleRoleArn`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assumeRoleSessionExpiration`Optional + +- _Type:_ java.lang.Number + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assumeRoleSessionName`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecsRoleName`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ java.lang.String + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ java.lang.String + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ java.lang.String + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secretKey`Optional + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `securityToken`Optional + +- _Type:_ java.lang.String + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `sharedCredentialsFile`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `stsEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestoreEndpoint`Optional + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestoreTable`Optional + +- _Type:_ java.lang.String + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.OssBackend; + +OssBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.OssBackend; + +OssBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.OssBackend; + +OssBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### PgBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.PgBackend; + +PgBackend.Builder.create(Construct scope) + .connStr(java.lang.String) +// .schemaName(java.lang.String) +// .skipIndexCreation(java.lang.Boolean) +// .skipSchemaCreation(java.lang.Boolean) +// .skipTableCreation(java.lang.Boolean) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| connStr | java.lang.String | Postgres connection string; | +| schemaName | java.lang.String | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skipIndexCreation | java.lang.Boolean | If set to true, the Postgres index must already exist. | +| skipSchemaCreation | java.lang.Boolean | If set to true, the Postgres schema must already exist. | +| skipTableCreation | java.lang.Boolean | If set to true, the Postgres table must already exist. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `connStr`Required + +- _Type:_ java.lang.String + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schemaName`Optional + +- _Type:_ java.lang.String + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skipIndexCreation`Optional + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skipSchemaCreation`Optional + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skipTableCreation`Optional + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.PgBackend; + +PgBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.PgBackend; + +PgBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.PgBackend; + +PgBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### RemoteBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.RemoteBackend; + +RemoteBackend.Builder.create(Construct scope) + .organization(java.lang.String) + .workspaces(IRemoteWorkspace) +// .hostname(java.lang.String) +// .token(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| organization | java.lang.String | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `organization`Required + +- _Type:_ java.lang.String + +--- + +##### `workspaces`Required + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +- _Type:_ java.lang.String + +--- + +##### `token`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.RemoteBackend; + +RemoteBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.RemoteBackend; + +RemoteBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.RemoteBackend; + +RemoteBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### Resource + +- _Implements:_ IResource + +A construct which represents a resource. + +#### Initializers + +```java +import com.hashicorp.cdktf.Resource; + +new Resource(Construct scope, java.lang.String id); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------ | -------------------------------------------------- | +| toString | Returns a string representation of this construct. | + +--- + +##### ~~`toString`~~ + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | + +--- + +##### ~~`isConstruct`~~ + +```java +import com.hashicorp.cdktf.Resource; + +Resource.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| node | software.constructs.Node | The tree node. | +| stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### ~~`stack`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```java +public TerraformStack getStack(); +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### S3Backend + +#### Initializers + +```java +import com.hashicorp.cdktf.S3Backend; + +S3Backend.Builder.create(Construct scope) + .bucket(java.lang.String) + .key(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .allowedAccountIds(java.util.List< java.lang.String >) +// .assumeRole(S3BackendAssumeRoleConfig) +// .assumeRolePolicy(java.lang.String) +// .assumeRolePolicyArns(java.util.List< java.lang.String >) +// .assumeRoleTags(java.util.Map< java.lang.String, java.lang.String >) +// .assumeRoleTransitiveTagKeys(java.util.List< java.lang.String >) +// .assumeRoleWithWebIdentity(S3BackendAssumeRoleWithWebIdentityConfig) +// .customCaBundle(java.lang.String) +// .dynamodbEndpoint(java.lang.String) +// .dynamodbTable(java.lang.String) +// .ec2MetadataServiceEndpoint(java.lang.String) +// .ec2MetadataServiceEndpointMode(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .endpoints(S3BackendEndpointConfig) +// .externalId(java.lang.String) +// .forbiddenAccountIds(java.util.List< java.lang.String >) +// .forcePathStyle(java.lang.Boolean) +// .httpProxy(java.lang.String) +// .httpsProxy(java.lang.String) +// .iamEndpoint(java.lang.String) +// .insecure(java.lang.Boolean) +// .kmsKeyId(java.lang.String) +// .maxRetries(java.lang.Number) +// .noProxy(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .retryMode(java.lang.String) +// .roleArn(java.lang.String) +// .secretKey(java.lang.String) +// .sessionName(java.lang.String) +// .sharedConfigFiles(java.util.List< java.lang.String >) +// .sharedCredentialsFile(java.lang.String) +// .sharedCredentialsFiles(java.util.List< java.lang.String >) +// .skipCredentialsValidation(java.lang.Boolean) +// .skipMetadataApiCheck(java.lang.Boolean) +// .skipRegionValidation(java.lang.Boolean) +// .skipRequestingAccountId(java.lang.Boolean) +// .skipS3Checksum(java.lang.Boolean) +// .sseCustomerKey(java.lang.String) +// .stsEndpoint(java.lang.String) +// .stsRegion(java.lang.String) +// .token(java.lang.String) +// .useLegacyWorkflow(java.lang.Boolean) +// .usePathStyle(java.lang.Boolean) +// .workspaceKeyPrefix(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| bucket | java.lang.String | Name of the S3 Bucket. | +| key | java.lang.String | Path to the state file inside the S3 Bucket. | +| accessKey | java.lang.String | (Optional) AWS access key. | +| acl | java.lang.String | (Optional) Canned ACL to be applied to the state file. | +| allowedAccountIds | java.util.List< java.lang.String > | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assumeRolePolicy | java.lang.String | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assumeRolePolicyArns | java.util.List< java.lang.String > | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assumeRoleTags | java.util.Map< java.lang.String, java.lang.String > | (Optional) Map of assume role session tags. | +| assumeRoleTransitiveTagKeys | java.util.List< java.lang.String > | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| customCaBundle | java.lang.String | (Optional) File containing custom root and intermediate certificates. | +| dynamodbEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodbTable | java.lang.String | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2MetadataServiceEndpoint | java.lang.String | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2MetadataServiceEndpointMode | java.lang.String | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | java.lang.Boolean | (Optional) Enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| externalId | java.lang.String | (Optional) External identifier to use when assuming the role. | +| forbiddenAccountIds | java.util.List< java.lang.String > | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| forcePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| httpProxy | java.lang.String | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| httpsProxy | java.lang.String | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iamEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | java.lang.Boolean | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kmsKeyId | java.lang.String | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| maxRetries | java.lang.Number | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| noProxy | java.lang.String | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | java.lang.String | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | java.lang.String | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retryMode | java.lang.String | (Optional) Specifies how retries are attempted. | +| roleArn | java.lang.String | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secretKey | java.lang.String | (Optional) AWS secret access key. | +| sessionName | java.lang.String | (Optional) Session name to use when assuming the role. | +| sharedConfigFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared configuration files. | +| sharedCredentialsFile | java.lang.String | (Optional) Path to the AWS shared credentials file. | +| sharedCredentialsFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared credentials files. | +| skipCredentialsValidation | java.lang.Boolean | (Optional) Skip credentials validation via the STS API. | +| skipMetadataApiCheck | java.lang.Boolean | (Optional) Skip usage of EC2 Metadata API. | +| skipRegionValidation | java.lang.Boolean | (Optional) Skip validation of provided region name. | +| skipRequestingAccountId | java.lang.Boolean | (Optional) Whether to skip requesting the account ID. | +| skipS3Checksum | java.lang.Boolean | (Optional) Do not include checksum when uploading S3 Objects. | +| sseCustomerKey | java.lang.String | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| stsEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| stsRegion | java.lang.String | (Optional) AWS region for STS. | +| token | java.lang.String | (Optional) Multi-Factor Authentication (MFA) token. | +| useLegacyWorkflow | java.lang.Boolean | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| usePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspaceKeyPrefix | java.lang.String | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ java.lang.String + +Name of the S3 Bucket. + +--- + +##### `key`Required + +- _Type:_ java.lang.String + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `accessKey`Optional + +- _Type:_ java.lang.String + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +- _Type:_ java.lang.String + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowedAccountIds`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assumeRole`Optional + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +- _Type:_ java.lang.String + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assumeRoleWithWebIdentity`Optional + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `customCaBundle`Optional + +- _Type:_ java.lang.String + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodbTable`Optional + +- _Type:_ java.lang.String + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2MetadataServiceEndpoint`Optional + +- _Type:_ java.lang.String + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2MetadataServiceEndpointMode`Optional + +- _Type:_ java.lang.String + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`externalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +- _Type:_ java.lang.String + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbiddenAccountIds`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`forcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `httpProxy`Optional + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `httpsProxy`Optional + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +- _Type:_ java.lang.Boolean + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kmsKeyId`Optional + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `maxRetries`Optional + +- _Type:_ java.lang.Number + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `noProxy`Optional + +- _Type:_ java.lang.String + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +- _Type:_ java.lang.String + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ java.lang.String + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retryMode`Optional + +- _Type:_ java.lang.String + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`roleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secretKey`Optional + +- _Type:_ java.lang.String + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`sessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +- _Type:_ java.lang.String + +(Optional) Session name to use when assuming the role. + +--- + +##### `sharedConfigFiles`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `sharedCredentialsFile`Optional + +- _Type:_ java.lang.String + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `sharedCredentialsFiles`Optional + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skipCredentialsValidation`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skipMetadataApiCheck`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skipRegionValidation`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Skip validation of provided region name. + +--- + +##### `skipRequestingAccountId`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skipS3Checksum`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sseCustomerKey`Optional + +- _Type:_ java.lang.String + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`stsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `stsRegion`Optional + +- _Type:_ java.lang.String + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +- _Type:_ java.lang.String + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `useLegacyWorkflow`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `usePathStyle`Optional + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspaceKeyPrefix`Optional + +- _Type:_ java.lang.String + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.S3Backend; + +S3Backend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.S3Backend; + +S3Backend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.S3Backend; + +S3Backend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### SwiftBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.SwiftBackend; + +SwiftBackend.Builder.create(Construct scope) + .container(java.lang.String) +// .applicationCredentialId(java.lang.String) +// .applicationCredentialName(java.lang.String) +// .applicationCredentialSecret(java.lang.String) +// .archiveContainer(java.lang.String) +// .authUrl(java.lang.String) +// .cacertFile(java.lang.String) +// .cert(java.lang.String) +// .cloud(java.lang.String) +// .defaultDomain(java.lang.String) +// .domainId(java.lang.String) +// .domainName(java.lang.String) +// .expireAfter(java.lang.String) +// .insecure(java.lang.Boolean) +// .key(java.lang.String) +// .password(java.lang.String) +// .projectDomainId(java.lang.String) +// .projectDomainName(java.lang.String) +// .regionName(java.lang.String) +// .stateName(java.lang.String) +// .tenantId(java.lang.String) +// .tenantName(java.lang.String) +// .token(java.lang.String) +// .userDomainId(java.lang.String) +// .userDomainName(java.lang.String) +// .userId(java.lang.String) +// .userName(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| container | java.lang.String | _No description._ | +| applicationCredentialId | java.lang.String | _No description._ | +| applicationCredentialName | java.lang.String | _No description._ | +| applicationCredentialSecret | java.lang.String | _No description._ | +| archiveContainer | java.lang.String | _No description._ | +| authUrl | java.lang.String | _No description._ | +| cacertFile | java.lang.String | _No description._ | +| cert | java.lang.String | _No description._ | +| cloud | java.lang.String | _No description._ | +| defaultDomain | java.lang.String | _No description._ | +| domainId | java.lang.String | _No description._ | +| domainName | java.lang.String | _No description._ | +| expireAfter | java.lang.String | _No description._ | +| insecure | java.lang.Boolean | _No description._ | +| key | java.lang.String | _No description._ | +| password | java.lang.String | _No description._ | +| projectDomainId | java.lang.String | _No description._ | +| projectDomainName | java.lang.String | _No description._ | +| regionName | java.lang.String | _No description._ | +| stateName | java.lang.String | _No description._ | +| tenantId | java.lang.String | _No description._ | +| tenantName | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | +| userDomainId | java.lang.String | _No description._ | +| userDomainName | java.lang.String | _No description._ | +| userId | java.lang.String | _No description._ | +| userName | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`archiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`authUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`cacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`defaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`domainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`domainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`expireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.Boolean + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`regionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`stateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +##### ~~`userName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### ~~`toString`~~ + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### ~~`addOverride`~~ + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### ~~`overrideLogicalId`~~ + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### ~~`resetOverrideLogicalId`~~ + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`toHclTerraform`~~ + +```java +public java.lang.Object toHclTerraform() +``` + +##### ~~`toMetadata`~~ + +```java +public java.lang.Object toMetadata() +``` + +##### ~~`toTerraform`~~ + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### ~~`getRemoteStateDataSource`~~ + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String _fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `_fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### ~~`isConstruct`~~ + +```java +import com.hashicorp.cdktf.SwiftBackend; + +SwiftBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### ~~`isTerraformElement`~~ + +```java +import com.hashicorp.cdktf.SwiftBackend; + +SwiftBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### ~~`isBackend`~~ + +```java +import com.hashicorp.cdktf.SwiftBackend; + +SwiftBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### ~~`cdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`friendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformAsset + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformAsset; + +TerraformAsset.Builder.create(Construct scope, java.lang.String id) + .path(java.lang.String) +// .assetHash(java.lang.String) +// .type(AssetType) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| path | java.lang.String | _No description._ | +| assetHash | java.lang.String | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `path`Required + +- _Type:_ java.lang.String + +--- + +##### `assetHash`Optional + +- _Type:_ java.lang.String + +--- + +##### `type`Optional + +- _Type:_ AssetType + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | -------------------------------------------------- | +| toString | Returns a string representation of this construct. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformAsset; + +TerraformAsset.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| node | software.constructs.Node | The tree node. | +| fileName | java.lang.String | Name of the asset. | +| path | java.lang.String | The path relative to the root of the terraform directory in posix format Use this property to reference the asset. | +| assetHash | java.lang.String | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `fileName`Required + +```java +public java.lang.String getFileName(); +``` + +- _Type:_ java.lang.String + +Name of the asset. + +--- + +##### `path`Required + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String + +The path relative to the root of the terraform directory in posix format Use this property to reference the asset. + +--- + +##### `assetHash`Required + +```java +public java.lang.String getAssetHash(); +``` + +- _Type:_ java.lang.String + +--- + +##### `type`Required + +```java +public AssetType getType(); +``` + +- _Type:_ AssetType + +--- + +### TerraformBackend + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformBackend; + +new TerraformBackend(Construct scope, java.lang.String id, java.lang.String name); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| name | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `name`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```java +public TerraformRemoteState getRemoteStateDataSource(Construct scope, java.lang.String name, java.lang.String fromStack) +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +###### `name`Required + +- _Type:_ java.lang.String + +--- + +###### `fromStack`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformBackend; + +TerraformBackend.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformBackend; + +TerraformBackend.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isBackend` + +```java +import com.hashicorp.cdktf.TerraformBackend; + +TerraformBackend.isBackend(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformDataSource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformDataSource; + +TerraformDataSource.Builder.create(Construct scope, java.lang.String id) +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .count(java.lang.Number) +// .count(TerraformCount) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .lifecycle(TerraformResourceLifecycle) +// .provider(TerraformProvider) +// .provisioners(java.util.List< FileProvisioner) +// .provisioners(LocalExecProvisioner) +// .provisioners(RemoteExecProvisioner >) + .terraformResourceType(java.lang.String) +// .terraformGeneratorMetadata(TerraformProviderGeneratorMetadata) + .build(); +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `connection`Optional + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +##### `terraformResourceType`Required + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| interpolationForAttribute | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `getAnyMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanAttribute` + +```java +public IResolvable getBooleanAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getListAttribute` + +```java +public java.util.List< java.lang.String > getListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberAttribute` + +```java +public java.lang.Number getNumberAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberListAttribute` + +```java +public java.util.List< java.lang.Number > getNumberListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringAttribute` + +```java +public java.lang.String getStringAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformDataSource | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformDataSource; + +TerraformDataSource.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformDataSource; + +TerraformDataSource.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isTerraformDataSource` + +```java +import com.hashicorp.cdktf.TerraformDataSource; + +TerraformDataSource.isTerraformDataSource(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| terraformMetaArguments | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< java.lang.String > | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformMetaArguments`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getTerraformMetaArguments(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +```java +public TerraformProviderGeneratorMetadata getTerraformGeneratorMetadata(); +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< java.lang.String > getDependsOn(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformElement + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformElement; + +new TerraformElement(Construct scope, java.lang.String id);,new TerraformElement(Construct scope, java.lang.String id, java.lang.String elementType); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| elementType | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `elementType`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformElement; + +TerraformElement.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformElement; + +TerraformElement.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformHclModule + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformHclModule; + +TerraformHclModule.Builder.create(Construct scope, java.lang.String id) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .providers(java.util.List< TerraformProvider) +// .providers(TerraformModuleProvider >) +// .skipAssetCreationFromLocalModules(java.lang.Boolean) + .source(java.lang.String) +// .version(java.lang.String) +// .variables(java.util.Map< java.lang.String, java.lang.Object >) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | +| source | java.lang.String | _No description._ | +| version | java.lang.String | _No description._ | +| variables | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `dependsOn`Optional + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `source`Required + +- _Type:_ java.lang.String + +--- + +##### `version`Optional + +- _Type:_ java.lang.String + +--- + +##### `variables`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | +| addProvider | _No description._ | +| getString | _No description._ | +| interpolationForOutput | _No description._ | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| set | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +##### `addProvider` + +```java +public void addProvider(TerraformProvider OR TerraformModuleProvider provider) +``` + +###### `provider`Required + +- _Type:_ TerraformProvider OR TerraformModuleProvider + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `interpolationForOutput` + +```java +public IResolvable interpolationForOutput(java.lang.String moduleOutput) +``` + +###### `moduleOutput`Required + +- _Type:_ java.lang.String + +--- + +##### `get` + +```java +public java.lang.Object get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `set` + +```java +public void set(java.lang.String variable, java.lang.Object value) +``` + +###### `variable`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformHclModule; + +TerraformHclModule.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformHclModule; + +TerraformHclModule.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| source | java.lang.String | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | +| version | java.lang.String | _No description._ | +| dependsOn | java.util.List< java.lang.String > | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| variables | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `source`Required + +```java +public java.lang.String getSource(); +``` + +- _Type:_ java.lang.String + +--- + +##### `providers`Optional + +```java +public java.lang.Object getProviders(); +``` + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```java +public java.lang.Boolean getSkipAssetCreationFromLocalModules(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `version`Optional + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< java.lang.String > getDependsOn(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `variables`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getVariables(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +### TerraformLocal + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformLocal; + +new TerraformLocal(Construct scope, java.lang.String id, java.lang.Object expression); +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| expression | java.lang.Object | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `expression`Required + +- _Type:_ java.lang.Object + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformLocal; + +TerraformLocal.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformLocal; + +TerraformLocal.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| asAnyMap | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| asBoolean | IResolvable | _No description._ | +| asBooleanMap | java.util.Map< java.lang.String, java.lang.Boolean > | _No description._ | +| asList | java.util.List< java.lang.String > | _No description._ | +| asNumber | java.lang.Number | _No description._ | +| asNumberMap | java.util.Map< java.lang.String, java.lang.Number > | _No description._ | +| asString | java.lang.String | _No description._ | +| asStringMap | java.util.Map< java.lang.String, java.lang.String > | _No description._ | +| expression | java.lang.Object | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `asAnyMap`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAsAnyMap(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `asBoolean`Required + +```java +public IResolvable getAsBoolean(); +``` + +- _Type:_ IResolvable + +--- + +##### `asBooleanMap`Required + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getAsBooleanMap(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Boolean > + +--- + +##### `asList`Required + +```java +public java.util.List< java.lang.String > getAsList(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `asNumber`Required + +```java +public java.lang.Number getAsNumber(); +``` + +- _Type:_ java.lang.Number + +--- + +##### `asNumberMap`Required + +```java +public java.util.Map< java.lang.String, java.lang.Number > getAsNumberMap(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Number > + +--- + +##### `asString`Required + +```java +public java.lang.String getAsString(); +``` + +- _Type:_ java.lang.String + +--- + +##### `asStringMap`Required + +```java +public java.util.Map< java.lang.String, java.lang.String > getAsStringMap(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +--- + +##### `expression`Required + +```java +public java.lang.Object getExpression(); +``` + +- _Type:_ java.lang.Object + +--- + +### TerraformModule + +- _Implements:_ ITerraformDependable + +TerraformModule can be used to reference a local terraform module or a module from the Terraform Registry. + +It should be used if you can not use generated bindings for the module as you would get by adding the module +to your cdktf.json files "terraformModules" array and running cdktf get. + +This class is not creating a Terraform module to be used outside of CDKTF. +If you want to bundle certain resources together like you would do with a Terraform module, +you should use Constructs instead, see http://cdk.tf/constructs for more details. + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformModule; + +TerraformModule.Builder.create(Construct scope, java.lang.String id) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .providers(java.util.List< TerraformProvider) +// .providers(TerraformModuleProvider >) +// .skipAssetCreationFromLocalModules(java.lang.Boolean) + .source(java.lang.String) +// .version(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | +| source | java.lang.String | _No description._ | +| version | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `dependsOn`Optional + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `source`Required + +- _Type:_ java.lang.String + +--- + +##### `version`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | +| addProvider | _No description._ | +| getString | _No description._ | +| interpolationForOutput | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +##### `addProvider` + +```java +public void addProvider(TerraformProvider OR TerraformModuleProvider provider) +``` + +###### `provider`Required + +- _Type:_ TerraformProvider OR TerraformModuleProvider + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `interpolationForOutput` + +```java +public IResolvable interpolationForOutput(java.lang.String moduleOutput) +``` + +###### `moduleOutput`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformModule; + +TerraformModule.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformModule; + +TerraformModule.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| source | java.lang.String | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | +| version | java.lang.String | _No description._ | +| dependsOn | java.util.List< java.lang.String > | _No description._ | +| forEach | ITerraformIterator | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `source`Required + +```java +public java.lang.String getSource(); +``` + +- _Type:_ java.lang.String + +--- + +##### `providers`Optional + +```java +public java.lang.Object getProviders(); +``` + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```java +public java.lang.Boolean getSkipAssetCreationFromLocalModules(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `version`Optional + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< java.lang.String > getDependsOn(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +### TerraformOutput + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformOutput; + +TerraformOutput.Builder.create(Construct scope, java.lang.String id) + .value(java.lang.Object) +// .dependsOn(java.util.List< ITerraformDependable >) +// .description(java.lang.String) +// .precondition(Precondition) +// .sensitive(java.lang.Boolean) +// .staticId(java.lang.Boolean) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| value | java.lang.Object | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| description | java.lang.String | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | java.lang.Boolean | _No description._ | +| staticId | java.lang.Boolean | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `dependsOn`Optional + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `description`Optional + +- _Type:_ java.lang.String + +--- + +##### `precondition`Optional + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `staticId`Optional + +- _Type:_ java.lang.Boolean +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformOutput | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformOutput; + +TerraformOutput.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformOutput; + +TerraformOutput.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isTerraformOutput` + +```java +import com.hashicorp.cdktf.TerraformOutput; + +TerraformOutput.isTerraformOutput(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| staticId | java.lang.Boolean | _No description._ | +| value | java.lang.Object | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| description | java.lang.String | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | java.lang.Boolean | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `staticId`Required + +```java +public java.lang.Boolean getStaticId(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `description`Optional + +```java +public java.lang.String getDescription(); +``` + +- _Type:_ java.lang.String + +--- + +##### `precondition`Optional + +```java +public Precondition getPrecondition(); +``` + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +```java +public java.lang.Boolean getSensitive(); +``` + +- _Type:_ java.lang.Boolean + +--- + +### TerraformProvider + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformProvider; + +TerraformProvider.Builder.create(Construct scope, java.lang.String id) + .terraformResourceType(java.lang.String) +// .terraformGeneratorMetadata(TerraformProviderGeneratorMetadata) +// .terraformProviderSource(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraformProviderSource | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `terraformResourceType`Required + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraformProviderSource`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformProvider | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformProvider; + +TerraformProvider.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformProvider; + +TerraformProvider.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isTerraformProvider` + +```java +import com.hashicorp.cdktf.TerraformProvider; + +TerraformProvider.isTerraformProvider(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| metaAttributes | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraformProviderSource | java.lang.String | _No description._ | +| alias | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `metaAttributes`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getMetaAttributes(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +```java +public TerraformProviderGeneratorMetadata getTerraformGeneratorMetadata(); +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraformProviderSource`Optional + +```java +public java.lang.String getTerraformProviderSource(); +``` + +- _Type:_ java.lang.String + +--- + +##### `alias`Optional + +```java +public java.lang.String getAlias(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformRemoteState + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformRemoteState; + +TerraformRemoteState.Builder.create(Construct scope, java.lang.String id, java.lang.String backend) +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| backend | java.lang.String | _No description._ | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `backend`Required + +- _Type:_ java.lang.String + +--- + +##### `defaults`Optional + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```java +public IResolvable get(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getBoolean` + +```java +public IResolvable getBoolean(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getList` + +```java +public java.util.List< java.lang.String > getList(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumber` + +```java +public java.lang.Number getNumber(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +##### `getString` + +```java +public java.lang.String getString(java.lang.String output) +``` + +###### `output`Required + +- _Type:_ java.lang.String + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformRemoteState; + +TerraformRemoteState.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformRemoteState; + +TerraformRemoteState.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformResource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformResource; + +TerraformResource.Builder.create(Construct scope, java.lang.String id) +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .count(java.lang.Number) +// .count(TerraformCount) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .lifecycle(TerraformResourceLifecycle) +// .provider(TerraformProvider) +// .provisioners(java.util.List< FileProvisioner) +// .provisioners(LocalExecProvisioner) +// .provisioners(RemoteExecProvisioner >) + .terraformResourceType(java.lang.String) +// .terraformGeneratorMetadata(TerraformProviderGeneratorMetadata) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `connection`Optional + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +##### `terraformResourceType`Required + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| addMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| hasResourceMove | _No description._ | +| importFrom | _No description._ | +| interpolationForAttribute | _No description._ | +| moveFromId | Move the resource corresponding to "id" to this resource. | +| moveTo | Moves this resource to the target resource given by moveTarget. | +| moveToId | Moves this resource to the resource corresponding to "id". | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +Adds this resource to the terraform JSON output. + +##### `addMoveTarget` + +```java +public void addMoveTarget(java.lang.String moveTarget) +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `moveTarget`Required + +- _Type:_ java.lang.String + +The string move target that will correspond to this resource. + +--- + +##### `getAnyMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Object > getAnyMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanAttribute` + +```java +public IResolvable getBooleanAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getBooleanMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Boolean > getBooleanMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getListAttribute` + +```java +public java.util.List< java.lang.String > getListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberAttribute` + +```java +public java.lang.Number getNumberAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberListAttribute` + +```java +public java.util.List< java.lang.Number > getNumberListAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getNumberMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.Number > getNumberMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringAttribute` + +```java +public java.lang.String getStringAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `getStringMapAttribute` + +```java +public java.util.Map< java.lang.String, java.lang.String > getStringMapAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `hasResourceMove` + +```java +public TerraformResourceMoveByTarget OR TerraformResourceMoveById hasResourceMove() +``` + +##### `importFrom` + +```java +public void importFrom(java.lang.String id) +public void importFrom(java.lang.String id, TerraformProvider provider) +``` + +###### `id`Required + +- _Type:_ java.lang.String + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +##### `moveFromId` + +```java +public void moveFromId(java.lang.String id) +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ java.lang.String + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `moveTo` + +```java +public void moveTo(java.lang.String moveTarget) +public void moveTo(java.lang.String moveTarget, java.lang.String OR java.lang.Number index) +``` + +Moves this resource to the target resource given by moveTarget. + +###### `moveTarget`Required + +- _Type:_ java.lang.String + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ java.lang.String OR java.lang.Number + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `moveToId` + +```java +public void moveToId(java.lang.String id) +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ java.lang.String + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformResource | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformResource; + +TerraformResource.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformResource; + +TerraformResource.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `isTerraformResource` + +```java +import com.hashicorp.cdktf.TerraformResource; + +TerraformResource.isTerraformResource(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| terraformMetaArguments | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< java.lang.String > | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformMetaArguments`Required + +```java +public java.util.Map< java.lang.String, java.lang.Object > getTerraformMetaArguments(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +```java +public TerraformProviderGeneratorMetadata getTerraformGeneratorMetadata(); +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< java.lang.String > getDependsOn(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```java +public java.lang.Object getProvisioners(); +``` + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +### TerraformStack + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformStack; + +new TerraformStack(Construct scope, java.lang.String id); +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------------------------ | ----------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addDependency | _No description._ | +| addOverride | _No description._ | +| allProviders | _No description._ | +| dependsOn | _No description._ | +| ensureBackendExists | _No description._ | +| getLogicalId | _No description._ | +| hasResourceMove | _No description._ | +| prepareStack | _No description._ | +| registerIncomingCrossStackReference | _No description._ | +| registerOutgoingCrossStackReference | _No description._ | +| runAllValidations | Run all validations on the stack. | +| toHclTerraform | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addDependency` + +```java +public void addDependency(TerraformStack dependency) +``` + +###### `dependency`Required + +- _Type:_ TerraformStack + +--- + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `allProviders` + +```java +public java.util.List< TerraformProvider > allProviders() +``` + +##### `dependsOn` + +```java +public java.lang.Boolean dependsOn(TerraformStack stack) +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `ensureBackendExists` + +```java +public TerraformBackend ensureBackendExists() +``` + +##### `getLogicalId` + +```java +public java.lang.String getLogicalId(Node OR TerraformElement tfElement) +``` + +###### `tfElement`Required + +- _Type:_ software.constructs.Node OR TerraformElement + +--- + +##### `hasResourceMove` + +```java +public java.lang.Boolean hasResourceMove() +``` + +##### `prepareStack` + +```java +public void prepareStack() +``` + +##### `registerIncomingCrossStackReference` + +```java +public TerraformRemoteState registerIncomingCrossStackReference(TerraformStack fromStack) +``` + +###### `fromStack`Required + +- _Type:_ TerraformStack + +--- + +##### `registerOutgoingCrossStackReference` + +```java +public TerraformOutput registerOutgoingCrossStackReference(java.lang.String identifier) +``` + +###### `identifier`Required + +- _Type:_ java.lang.String + +--- + +##### `runAllValidations` + +```java +public void runAllValidations() +``` + +Run all validations on the stack. + +##### `toHclTerraform` + +```java +public java.util.Map< java.lang.String, java.lang.Object > toHclTerraform() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isStack | _No description._ | +| of | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformStack; + +TerraformStack.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isStack` + +```java +import com.hashicorp.cdktf.TerraformStack; + +TerraformStack.isStack(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +##### `of` + +```java +import com.hashicorp.cdktf.TerraformStack; + +TerraformStack.of(IConstruct construct) +``` + +###### `construct`Required + +- _Type:_ software.constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| dependencies | java.util.List< TerraformStack> | _No description._ | +| moveTargets | TerraformResourceTargets | _No description._ | +| synthesizer | IStackSynthesizer | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `dependencies`Required + +```java +public java.util.List< TerraformStack > getDependencies(); +``` + +- _Type:_ java.util.List< TerraformStack> + +--- + +##### `moveTargets`Required + +```java +public TerraformResourceTargets getMoveTargets(); +``` + +- _Type:_ TerraformResourceTargets + +--- + +##### `synthesizer`Required + +```java +public IStackSynthesizer getSynthesizer(); +``` + +- _Type:_ IStackSynthesizer + +--- + +### TerraformVariable + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```java +import com.hashicorp.cdktf.TerraformVariable; + +TerraformVariable.Builder.create(Construct scope, java.lang.String id) +// .default(java.lang.Object) +// .description(java.lang.String) +// .nullable(java.lang.Boolean) +// .sensitive(java.lang.Boolean) +// .type(java.lang.String) +// .validation(java.util.List< TerraformVariableValidationConfig >) + .build(); +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | software.constructs.Construct | _No description._ | +| id | java.lang.String | _No description._ | +| default | java.lang.Object | _No description._ | +| description | java.lang.String | _No description._ | +| nullable | java.lang.Boolean | _No description._ | +| sensitive | java.lang.Boolean | _No description._ | +| type | java.lang.String | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| validation | java.util.List< TerraformVariableValidationConfig> | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `scope`Required + +- _Type:_ software.constructs.Construct + +--- + +##### `id`Required + +- _Type:_ java.lang.String + +--- + +##### `default`Optional + +- _Type:_ java.lang.Object + +--- + +##### `description`Optional + +- _Type:_ java.lang.String + +--- + +##### `nullable`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `sensitive`Optional + +- _Type:_ java.lang.Boolean + +--- + +##### `type`Optional + +- _Type:_ java.lang.String + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(< TYPE >) +- set(< TYPE >) +- map(< TYPE >) +- object({< ATTR NAME > = < TYPE >, ... }) +- tuple([< TYPE >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `validation`Optional + +- _Type:_ java.util.List< TerraformVariableValidationConfig> + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | +| addValidation | _No description._ | +| synthesizeAttributes | _No description._ | +| synthesizeHclAttributes | _No description._ | + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```java +public void addOverride(java.lang.String path, java.lang.Object value) +``` + +###### `path`Required + +- _Type:_ java.lang.String + +--- + +###### `value`Required + +- _Type:_ java.lang.Object + +--- + +##### `overrideLogicalId` + +```java +public void overrideLogicalId(java.lang.String newLogicalId) +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ java.lang.String + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```java +public void resetOverrideLogicalId() +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```java +public java.lang.Object toHclTerraform() +``` + +##### `toMetadata` + +```java +public java.lang.Object toMetadata() +``` + +##### `toTerraform` + +```java +public java.lang.Object toTerraform() +``` + +##### `addValidation` + +```java +public void addValidation(TerraformVariableValidationConfig validation) +``` + +###### `validation`Required + +- _Type:_ TerraformVariableValidationConfig + +--- + +##### `synthesizeAttributes` + +```java +public java.util.Map< java.lang.String, java.lang.Object > synthesizeAttributes() +``` + +##### `synthesizeHclAttributes` + +```java +public java.util.Map< java.lang.String, java.lang.Object > synthesizeHclAttributes() +``` + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```java +import com.hashicorp.cdktf.TerraformVariable; + +TerraformVariable.isConstruct(java.lang.Object x) +``` + +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. + +###### `x`Required + +- _Type:_ java.lang.Object + +Any object. + +--- + +##### `isTerraformElement` + +```java +import com.hashicorp.cdktf.TerraformVariable; + +TerraformVariable.isTerraformElement(java.lang.Object x) +``` + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | software.constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| booleanValue | IResolvable | _No description._ | +| listValue | java.util.List< java.lang.String > | _No description._ | +| numberValue | java.lang.Number | _No description._ | +| stringValue | java.lang.String | _No description._ | +| value | java.lang.Object | _No description._ | +| default | java.lang.Object | _No description._ | +| description | java.lang.String | _No description._ | +| nullable | java.lang.Boolean | _No description._ | +| sensitive | java.lang.Boolean | _No description._ | +| type | java.lang.String | _No description._ | +| validation | java.util.List< TerraformVariableValidationConfig> | _No description._ | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```java +public TerraformStack getCdktfStack(); +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `booleanValue`Required + +```java +public IResolvable getBooleanValue(); +``` + +- _Type:_ IResolvable + +--- + +##### `listValue`Required + +```java +public java.util.List< java.lang.String > getListValue(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `numberValue`Required + +```java +public java.lang.Number getNumberValue(); +``` + +- _Type:_ java.lang.Number + +--- + +##### `stringValue`Required + +```java +public java.lang.String getStringValue(); +``` + +- _Type:_ java.lang.String + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +--- + +##### `default`Optional + +```java +public java.lang.Object getDefault(); +``` + +- _Type:_ java.lang.Object + +--- + +##### `description`Optional + +```java +public java.lang.String getDescription(); +``` + +- _Type:_ java.lang.String + +--- + +##### `nullable`Optional + +```java +public java.lang.Boolean getNullable(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `sensitive`Optional + +```java +public java.lang.Boolean getSensitive(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `type`Optional + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `validation`Optional + +```java +public java.util.List< TerraformVariableValidationConfig > getValidation(); +``` + +- _Type:_ java.util.List< TerraformVariableValidationConfig> + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/enums.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/enums.mdx new file mode 100644 index 0000000000..973c9b44bc --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/enums.mdx @@ -0,0 +1,56 @@ +--- +page_title: Java Reference for Enums +description: CDKTF Core API Reference for Enums in Java. +--- + + + +# Java: Enums + +### AnnotationMetadataEntryType + +#### Members + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| INFO | _No description._ | +| WARN | _No description._ | +| ERROR | _No description._ | + +--- + +##### `INFO` + +--- + +##### `WARN` + +--- + +##### `ERROR` + +--- + +### AssetType + +#### Members + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------- | +| FILE | _No description._ | +| DIRECTORY | _No description._ | +| ARCHIVE | _No description._ | + +--- + +##### `FILE` + +--- + +##### `DIRECTORY` + +--- + +##### `ARCHIVE` + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/index.mdx new file mode 100644 index 0000000000..bc7517fc9c --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/index.mdx @@ -0,0 +1,14 @@ +--- +page_title: Java API resource reference overview +description: Learn about the API resources available in the Terraform CDK library for Java. +--- + +# Java API resource reference overview + +The Java API reference includes the following resources: + +- [Classes](/terraform/cdktf/api-reference/java/classes) +- [Constructs](/terraform/cdktf/api-reference/java/constructs) +- [Enums](/terraform/cdktf/api-reference/java/enums) +- [Protocols](/terraform/cdktf/api-reference/java/protocols) +- [Structs](/terraform/cdktf/api-reference/java/structs) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/protocols.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/protocols.mdx new file mode 100644 index 0000000000..eea6bf1759 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/protocols.mdx @@ -0,0 +1,967 @@ +--- +page_title: Java Reference for Protocols +description: CDKTF Core API Reference for Protocols in Java. +--- + + + +# Java: Protocols + +### IAnyProducer + +- _Implemented By:_ IAnyProducer + +Interface for lazy untyped value producers. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | ------------------ | +| produce | Produce the value. | + +--- + +##### `produce` + +```java +public java.lang.Object produce(IResolveContext context) +``` + +Produce the value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IAspect + +- _Implemented By:_ MigrateIds, IAspect + +Represents an Aspect. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------- | ------------------------------------ | +| visit | All aspects can visit an IConstruct. | + +--- + +##### `visit` + +```java +public void visit(IConstruct node) +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ software.constructs.IConstruct + +--- + +### IFragmentConcatenator + +- _Implemented By:_ StringConcat, IFragmentConcatenator + +Function used to concatenate symbols in the target document language. + +Interface so it could potentially be exposed over jsii. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ----------------------------------------------- | +| join | Join the fragment on the left and on the right. | + +--- + +##### `join` + +```java +public java.lang.Object join(java.lang.Object left, java.lang.Object right) +``` + +Join the fragment on the left and on the right. + +###### `left`Required + +- _Type:_ java.lang.Object + +--- + +###### `right`Required + +- _Type:_ java.lang.Object + +--- + +### IImportableConfig + +- _Implemented By:_ IImportableConfig + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| importId | java.lang.String | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `importId`Required + +```java +public java.lang.String getImportId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +### IInterpolatingParent + +- _Implemented By:_ AnyMapList, BooleanMapList, ComplexComputedList, ComplexObject, DataResource, MapList, NumberMapList, StringMapList, TerraformDataSource, TerraformResource, IInterpolatingParent + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ----------------- | +| interpolationForAttribute | _No description._ | + +--- + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +### IListProducer + +- _Implemented By:_ IListProducer + +Interface for lazy list producers. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------------- | +| produce | Produce the list value. | + +--- + +##### `produce` + +```java +public java.util.List< java.lang.String > produce(IResolveContext context) +``` + +Produce the list value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IManifest + +- _Implemented By:_ Manifest, IManifest + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------- | +| stacks | java.util.Map< java.lang.String, StackManifest> | _No description._ | +| version | java.lang.String | _No description._ | + +--- + +##### `stacks`Required + +```java +public java.util.Map< java.lang.String, StackManifest > getStacks(); +``` + +- _Type:_ java.util.Map< java.lang.String, StackManifest> + +--- + +##### `version`Required + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +### INumberProducer + +- _Implemented By:_ INumberProducer + +Interface for lazy number producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| produce | Produce the number value. | + +--- + +##### `produce` + +```java +public java.lang.Number produce(IResolveContext context) +``` + +Produce the number value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IPostProcessor + +- _Implemented By:_ IPostProcessor + +A Token that can post-process the complete resolved value, after resolve() has recursed over it. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| postProcess | Process the completely resolved value, after full recursion/resolution has happened. | + +--- + +##### `postProcess` + +```java +public java.lang.Object postProcess(java.lang.Object input, IResolveContext context) +``` + +Process the completely resolved value, after full recursion/resolution has happened. + +###### `input`Required + +- _Type:_ java.lang.Object + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IRemoteWorkspace + +- _Implemented By:_ NamedRemoteWorkspace, PrefixedRemoteWorkspaces, IRemoteWorkspace + +### IResolvable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, LazyBase, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, IResolvable + +Interface for values that can be resolvable later. + +Tokens are special objects that participate in synthesis. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------- | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(IResolveContext context) +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```java +public java.lang.String toString() +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | java.util.List< java.lang.String > | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `creationStack`Required + +```java +public java.util.List< java.lang.String > getCreationStack(); +``` + +- _Type:_ java.util.List< java.lang.String > + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### IResolveContext + +- _Implemented By:_ IResolveContext + +Current resolution context for tokens. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| registerPostProcessor | Use this postprocessor after the entire token structure has been resolved. | +| resolve | Resolve an inner object. | + +--- + +##### `registerPostProcessor` + +```java +public void registerPostProcessor(IPostProcessor postProcessor) +``` + +Use this postprocessor after the entire token structure has been resolved. + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `resolve` + +```java +public java.lang.Object resolve(java.lang.Object x) +``` + +Resolve an inner object. + +###### `x`Required + +- _Type:_ java.lang.Object + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| preparing | java.lang.Boolean | True when we are still preparing, false if we're rendering the final output. | +| scope | software.constructs.IConstruct | The scope from which resolution has been initiated. | +| ignoreEscapes | java.lang.Boolean | True when ${} should not be parsed, and treated as literals. | +| iteratorContext | java.lang.String | TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. | +| suppressBraces | java.lang.Boolean | True when ${} should be ommitted (because already inside them), false otherwise. | +| warnEscapes | java.lang.Boolean | True when ${} should not be included in the string to be resolved, outputs a warning. | + +--- + +##### `preparing`Required + +```java +public java.lang.Boolean getPreparing(); +``` + +- _Type:_ java.lang.Boolean + +True when we are still preparing, false if we're rendering the final output. + +--- + +##### `scope`Required + +```java +public IConstruct getScope(); +``` + +- _Type:_ software.constructs.IConstruct + +The scope from which resolution has been initiated. + +--- + +##### `ignoreEscapes`Optional + +```java +public java.lang.Boolean getIgnoreEscapes(); +``` + +- _Type:_ java.lang.Boolean + +True when ${} should not be parsed, and treated as literals. + +--- + +##### `iteratorContext`Optional + +```java +public java.lang.String getIteratorContext(); +``` + +- _Type:_ java.lang.String + +TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. + +--- + +##### `suppressBraces`Optional + +```java +public java.lang.Boolean getSuppressBraces(); +``` + +- _Type:_ java.lang.Boolean + +True when ${} should be ommitted (because already inside them), false otherwise. + +--- + +##### `warnEscapes`Optional + +```java +public java.lang.Boolean getWarnEscapes(); +``` + +- _Type:_ java.lang.Boolean + +True when ${} should not be included in the string to be resolved, outputs a warning. + +Default: false + +--- + +### IResource + +- _Extends:_ software.constructs.IConstruct + +- _Implemented By:_ Resource, IResource + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| node | software.constructs.Node | The tree node. | +| stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### `node`Required + +```java +public Node getNode(); +``` + +- _Type:_ software.constructs.Node + +The tree node. + +--- + +##### `stack`Required + +```java +public TerraformStack getStack(); +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### IResourceConstructor + +- _Implemented By:_ IResourceConstructor + +### IScopeCallback + +- _Implemented By:_ IScopeCallback + +### IStackSynthesizer + +- _Implemented By:_ IStackSynthesizer + +Encodes information how a certain Stack should be deployed inspired by AWS CDK v2 implementation (synth functionality was removed in constructs v10). + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------- | +| synthesize | Synthesize the associated stack to the session. | + +--- + +##### `synthesize` + +```java +public void synthesize(ISynthesisSession session) +``` + +Synthesize the associated stack to the session. + +###### `session`Required + +- _Type:_ ISynthesisSession + +--- + +### IStringProducer + +- _Implemented By:_ IStringProducer + +Interface for lazy string producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| produce | Produce the string value. | + +--- + +##### `produce` + +```java +public java.lang.String produce(IResolveContext context) +``` + +Produce the string value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### ISynthesisSession + +- _Implemented By:_ ISynthesisSession + +Represents a single session of synthesis. + +Passed into `TerraformStack.onSynthesize()` methods. +originally from aws/constructs lib v3.3.126 (synth functionality was removed in constructs v10) + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------------------ | +| manifest | Manifest | _No description._ | +| outdir | java.lang.String | The output directory for this synthesis session. | +| skipValidation | java.lang.Boolean | _No description._ | + +--- + +##### `manifest`Required + +```java +public Manifest getManifest(); +``` + +- _Type:_ Manifest + +--- + +##### `outdir`Required + +```java +public java.lang.String getOutdir(); +``` + +- _Type:_ java.lang.String + +The output directory for this synthesis session. + +--- + +##### `skipValidation`Optional + +```java +public java.lang.Boolean getSkipValidation(); +``` + +- _Type:_ java.lang.Boolean + +--- + +### ITerraformAddressable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, DataResource, DataTerraformRemoteState, DataTerraformRemoteStateAzurerm, DataTerraformRemoteStateConsul, DataTerraformRemoteStateCos, DataTerraformRemoteStateGcs, DataTerraformRemoteStateHttp, DataTerraformRemoteStateLocal, DataTerraformRemoteStateOss, DataTerraformRemoteStatePg, DataTerraformRemoteStateS3, DataTerraformRemoteStateSwift, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, TerraformDataSource, TerraformHclModule, TerraformLocal, TerraformModule, TerraformRemoteState, TerraformResource, TerraformVariable, ITerraformAddressable, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | ----------------- | +| fqn | java.lang.String | _No description._ | + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### ITerraformDependable + +- _Extends:_ ITerraformAddressable + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformHclModule, TerraformModule, TerraformResource, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------- | ----------------------------- | ----------------- | +| fqn | java.lang.String | _No description._ | + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +### ITerraformIterator + +- _Implemented By:_ DynamicListTerraformIterator, ListTerraformIterator, MapTerraformIterator, ResourceTerraformIterator, TerraformIterator, ITerraformIterator + +### ITerraformResource + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformResource, ITerraformResource + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------- | +| interpolationForAttribute | _No description._ | + +--- + +##### `interpolationForAttribute` + +```java +public IResolvable interpolationForAttribute(java.lang.String terraformAttribute) +``` + +###### `terraformAttribute`Required + +- _Type:_ java.lang.String + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| fqn | java.lang.String | _No description._ | +| friendlyUniqueId | java.lang.String | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< java.lang.String > | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `fqn`Required + +```java +public java.lang.String getFqn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `friendlyUniqueId`Required + +```java +public java.lang.String getFriendlyUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< java.lang.String > getDependsOn(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +### ITokenMapper + +- _Implemented By:_ ITokenMapper + +Interface to apply operation to tokens in a string. + +Interface so it can be exported via jsii. + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------- | ----------------------- | +| mapToken | Replace a single token. | + +--- + +##### `mapToken` + +```java +public java.lang.Object mapToken(IResolvable t) +``` + +Replace a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +### ITokenResolver + +- _Implemented By:_ DefaultTokenResolver, ITokenResolver + +How to resolve tokens. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------------- | +| resolveList | Resolve a tokenized list. | +| resolveMap | Resolve a tokenized map. | +| resolveNumberList | Resolve a tokenized number list. | +| resolveString | Resolve a string with at least one stringified token in it. | +| resolveToken | Resolve a single token. | + +--- + +##### `resolveList` + +```java +public java.lang.Object resolveList(java.util.List< java.lang.String > l, IResolveContext context) +``` + +Resolve a tokenized list. + +###### `l`Required + +- _Type:_ java.util.List< java.lang.String > + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveMap` + +```java +public java.lang.Object resolveMap(java.util.Map< java.lang.String, java.lang.Object > m, IResolveContext context) +``` + +Resolve a tokenized map. + +###### `m`Required + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveNumberList` + +```java +public java.lang.Object resolveNumberList(java.util.List< java.lang.Number > l, IResolveContext context) +``` + +Resolve a tokenized number list. + +###### `l`Required + +- _Type:_ java.util.List< java.lang.Number > + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveString` + +```java +public java.lang.Object resolveString(TokenizedStringFragments s, IResolveContext context) +``` + +Resolve a string with at least one stringified token in it. + +(May use concatenation) + +###### `s`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveToken` + +```java +public java.lang.Object resolveToken(IResolvable t, IResolveContext context, IPostProcessor postProcessor) +``` + +Resolve a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/structs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/structs.mdx new file mode 100644 index 0000000000..6c4b3e7a9f --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/java/structs.mdx @@ -0,0 +1,10183 @@ +--- +page_title: Java Reference for Structs +description: CDKTF Core API Reference for Structs in Java. +--- + + + +# Java: Structs + +### AppConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.AppConfig; + +AppConfig.builder() +// .context(java.util.Map< java.lang.String, java.lang.Object >) +// .hclOutput(java.lang.Boolean) +// .outdir(java.lang.String) +// .skipBackendValidation(java.lang.Boolean) +// .skipValidation(java.lang.Boolean) +// .stackTraces(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- | --------------------------------------------------------------- | +| context | java.util.Map< java.lang.String, java.lang.Object > | Additional context values for the application. | +| hclOutput | java.lang.Boolean | _No description._ | +| outdir | java.lang.String | The directory to output Terraform resources. | +| skipBackendValidation | java.lang.Boolean | Whether to skip backend validation during synthesis of the app. | +| skipValidation | java.lang.Boolean | Whether to skip all validations during synthesis of the app. | +| stackTraces | java.lang.Boolean | _No description._ | + +--- + +##### `context`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getContext(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `hclOutput`Optional + +```java +public java.lang.Boolean getHclOutput(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `outdir`Optional + +```java +public java.lang.String getOutdir(); +``` + +- _Type:_ java.lang.String +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `skipBackendValidation`Optional + +```java +public java.lang.Boolean getSkipBackendValidation(); +``` + +- _Type:_ java.lang.Boolean +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skipValidation`Optional + +```java +public java.lang.Boolean getSkipValidation(); +``` + +- _Type:_ java.lang.Boolean +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `stackTraces`Optional + +```java +public java.lang.Boolean getStackTraces(); +``` + +- _Type:_ java.lang.Boolean + +--- + +### AzurermBackendConfig + +Stores the state as a Blob with the given Key within the Blob Container within the Blob Storage Account. + +This backend supports state locking and consistency checking +with Azure Blob Storage native capabilities. + +Note: By default the Azure Backend uses ADAL for authentication which is deprecated +in favour of MSAL - MSAL can be used by setting use_microsoft_graph to true. +The default for this will change in Terraform 1.2, +so that MSAL authentication is used by default. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/azurerm + +#### Initializer + +```java +import com.hashicorp.cdktf.AzurermBackendConfig; + +AzurermBackendConfig.builder() + .containerName(java.lang.String) + .key(java.lang.String) + .storageAccountName(java.lang.String) +// .accessKey(java.lang.String) +// .clientCertificatePassword(java.lang.String) +// .clientCertificatePath(java.lang.String) +// .clientId(java.lang.String) +// .clientSecret(java.lang.String) +// .endpoint(java.lang.String) +// .environment(java.lang.String) +// .metadataHost(java.lang.String) +// .msiEndpoint(java.lang.String) +// .oidcRequestToken(java.lang.String) +// .oidcRequestUrl(java.lang.String) +// .oidcToken(java.lang.String) +// .oidcTokenFilePath(java.lang.String) +// .resourceGroupName(java.lang.String) +// .sasToken(java.lang.String) +// .snapshot(java.lang.Boolean) +// .subscriptionId(java.lang.String) +// .tenantId(java.lang.String) +// .useAzureadAuth(java.lang.Boolean) +// .useMicrosoftGraph(java.lang.Boolean) +// .useMsi(java.lang.Boolean) +// .useOidc(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| containerName | java.lang.String | (Required) The Name of the Storage Container within the Storage Account. | +| key | java.lang.String | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storageAccountName | java.lang.String | (Required) The Name of the Storage Account. | +| accessKey | java.lang.String | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| clientCertificatePassword | java.lang.String | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| clientCertificatePath | java.lang.String | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| clientId | java.lang.String | (Optional) The Client ID of the Service Principal. | +| clientSecret | java.lang.String | (Optional) The Client Secret of the Service Principal. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | java.lang.String | (Optional) The Azure Environment which should be used. | +| metadataHost | java.lang.String | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msiEndpoint | java.lang.String | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidcRequestToken | java.lang.String | (Optional) The bearer token for the request to the OIDC provider. | +| oidcRequestUrl | java.lang.String | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidcToken | java.lang.String | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidcTokenFilePath | java.lang.String | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resourceGroupName | java.lang.String | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sasToken | java.lang.String | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | java.lang.Boolean | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscriptionId | java.lang.String | (Optional) The Subscription ID in which the Storage Account exists. | +| tenantId | java.lang.String | (Optional) The Tenant ID in which the Subscription exists. | +| useAzureadAuth | java.lang.Boolean | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| useMicrosoftGraph | java.lang.Boolean | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| useMsi | java.lang.Boolean | (Optional) Should Managed Service Identity authentication be used? | +| useOidc | java.lang.Boolean | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `containerName`Required + +```java +public java.lang.String getContainerName(); +``` + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storageAccountName`Required + +```java +public java.lang.String getStorageAccountName(); +``` + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Account. + +--- + +##### `accessKey`Optional + +```java +public java.lang.String getAccessKey(); +``` + +- _Type:_ java.lang.String + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `clientCertificatePassword`Optional + +```java +public java.lang.String getClientCertificatePassword(); +``` + +- _Type:_ java.lang.String + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `clientCertificatePath`Optional + +```java +public java.lang.String getClientCertificatePath(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `clientId`Optional + +```java +public java.lang.String getClientId(); +``` + +- _Type:_ java.lang.String + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `clientSecret`Optional + +```java +public java.lang.String getClientSecret(); +``` + +- _Type:_ java.lang.String + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +```java +public java.lang.String getEnvironment(); +``` + +- _Type:_ java.lang.String + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadataHost`Optional + +```java +public java.lang.String getMetadataHost(); +``` + +- _Type:_ java.lang.String + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msiEndpoint`Optional + +```java +public java.lang.String getMsiEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidcRequestToken`Optional + +```java +public java.lang.String getOidcRequestToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidcRequestUrl`Optional + +```java +public java.lang.String getOidcRequestUrl(); +``` + +- _Type:_ java.lang.String + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidcToken`Optional + +```java +public java.lang.String getOidcToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidcTokenFilePath`Optional + +```java +public java.lang.String getOidcTokenFilePath(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resourceGroupName`Optional + +```java +public java.lang.String getResourceGroupName(); +``` + +- _Type:_ java.lang.String + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sasToken`Optional + +```java +public java.lang.String getSasToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +```java +public java.lang.Boolean getSnapshot(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscriptionId`Optional + +```java +public java.lang.String getSubscriptionId(); +``` + +- _Type:_ java.lang.String + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenantId`Optional + +```java +public java.lang.String getTenantId(); +``` + +- _Type:_ java.lang.String + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `useAzureadAuth`Optional + +```java +public java.lang.Boolean getUseAzureadAuth(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `useMicrosoftGraph`Optional + +```java +public java.lang.Boolean getUseMicrosoftGraph(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `useMsi`Optional + +```java +public java.lang.Boolean getUseMsi(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `useOidc`Optional + +```java +public java.lang.Boolean getUseOidc(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### CloudBackendConfig + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +https://developer.hashicorp.com/terraform/cli/cloud/settings#arguments + +#### Initializer + +```java +import com.hashicorp.cdktf.CloudBackendConfig; + +CloudBackendConfig.builder() + .organization(java.lang.String) + .workspaces(NamedCloudWorkspace) + .workspaces(TaggedCloudWorkspaces) +// .hostname(java.lang.String) +// .token(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| organization | java.lang.String | The name of the organization containing the workspace(s) the current configuration should use. | +| workspaces | NamedCloudWorkspace OR TaggedCloudWorkspaces | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| hostname | java.lang.String | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| token | java.lang.String | The token used to authenticate with Terraform Cloud. | + +--- + +##### `organization`Required + +```java +public java.lang.String getOrganization(); +``` + +- _Type:_ java.lang.String + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `workspaces`Required + +```java +public java.lang.Object getWorkspaces(); +``` + +- _Type:_ NamedCloudWorkspace OR TaggedCloudWorkspaces + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `hostname`Optional + +```java +public java.lang.String getHostname(); +``` + +- _Type:_ java.lang.String +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `token`Optional + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +### ConsulBackendConfig + +Stores the state in the Consul KV store at a given path. This backend supports state locking. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/consul + +#### Initializer + +```java +import com.hashicorp.cdktf.ConsulBackendConfig; + +ConsulBackendConfig.builder() + .accessToken(java.lang.String) + .path(java.lang.String) +// .address(java.lang.String) +// .caFile(java.lang.String) +// .certFile(java.lang.String) +// .datacenter(java.lang.String) +// .gzip(java.lang.Boolean) +// .httpAuth(java.lang.String) +// .keyFile(java.lang.String) +// .lock(java.lang.Boolean) +// .scheme(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | +| accessToken | java.lang.String | (Required) Access token. | +| path | java.lang.String | (Required) Path in the Consul KV store. | +| address | java.lang.String | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| caFile | java.lang.String | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| certFile | java.lang.String | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | java.lang.String | (Optional) The datacenter to use. | +| gzip | java.lang.Boolean | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| httpAuth | java.lang.String | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| keyFile | java.lang.String | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | java.lang.Boolean | (Optional) false to disable locking. | +| scheme | java.lang.String | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `accessToken`Required + +```java +public java.lang.String getAccessToken(); +``` + +- _Type:_ java.lang.String + +(Required) Access token. + +--- + +##### `path`Required + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +```java +public java.lang.String getAddress(); +``` + +- _Type:_ java.lang.String + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `caFile`Optional + +```java +public java.lang.String getCaFile(); +``` + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `certFile`Optional + +```java +public java.lang.String getCertFile(); +``` + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +```java +public java.lang.String getDatacenter(); +``` + +- _Type:_ java.lang.String + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +```java +public java.lang.Boolean getGzip(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `httpAuth`Optional + +```java +public java.lang.String getHttpAuth(); +``` + +- _Type:_ java.lang.String + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `keyFile`Optional + +```java +public java.lang.String getKeyFile(); +``` + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +```java +public java.lang.Boolean getLock(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +```java +public java.lang.String getScheme(); +``` + +- _Type:_ java.lang.String + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### CosBackendAssumeRole + +#### Initializer + +```java +import com.hashicorp.cdktf.CosBackendAssumeRole; + +CosBackendAssumeRole.builder() + .roleArn(java.lang.String) + .sessionDuration(java.lang.Number) + .sessionName(java.lang.String) +// .policy(java.lang.Object) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | +| roleArn | java.lang.String | (Required) The ARN of the role to assume. | +| sessionDuration | java.lang.Number | (Required) The duration of the session when making the AssumeRole call. | +| sessionName | java.lang.String | (Required) The session name to use when making the AssumeRole call. | +| policy | java.lang.Object | (Optional) A more restrictive policy when making the AssumeRole call. | + +--- + +##### `roleArn`Required + +```java +public java.lang.String getRoleArn(); +``` + +- _Type:_ java.lang.String + +(Required) The ARN of the role to assume. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_ARN. + +--- + +##### `sessionDuration`Required + +```java +public java.lang.Number getSessionDuration(); +``` + +- _Type:_ java.lang.Number + +(Required) The duration of the session when making the AssumeRole call. + +Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION. + +--- + +##### `sessionName`Required + +```java +public java.lang.String getSessionName(); +``` + +- _Type:_ java.lang.String + +(Required) The session name to use when making the AssumeRole call. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `policy`Optional + +```java +public java.lang.Object getPolicy(); +``` + +- _Type:_ java.lang.Object + +(Optional) A more restrictive policy when making the AssumeRole call. + +Its content must not contains principal elements. +Please refer to {@link https://www.tencentcloud.com/document/product/598/10603 policies syntax logic}. + +--- + +### CosBackendConfig + +Stores the state as an object in a configurable prefix in a given bucket on Tencent Cloud Object Storage (COS). + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the COS bucket to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/cos + +#### Initializer + +```java +import com.hashicorp.cdktf.CosBackendConfig; + +CosBackendConfig.builder() + .bucket(java.lang.String) +// .accelerate(java.lang.Boolean) +// .acl(java.lang.String) +// .assumeRole(CosBackendAssumeRole) +// .domain(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .region(java.lang.String) +// .secretId(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| bucket | java.lang.String | (Required) The name of the COS bucket. | +| accelerate | java.lang.Boolean | (Optional) Whether to enable global Acceleration. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | java.lang.String | (Optional) The root domain of the API request. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for the COS backend. | +| key | java.lang.String | (Optional) The path for saving the state file in bucket. | +| prefix | java.lang.String | (Optional) The directory for saving the state file in bucket. | +| region | java.lang.String | (Optional) The region of the COS bucket. | +| secretId | java.lang.String | (Optional) Secret id of Tencent Cloud. | +| secretKey | java.lang.String | (Optional) Secret key of Tencent Cloud. | +| securityToken | java.lang.String | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +```java +public java.lang.Boolean getAccelerate(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +```java +public java.lang.String getAcl(); +``` + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assumeRole`Optional + +```java +public CosBackendAssumeRole getAssumeRole(); +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +```java +public java.lang.String getDomain(); +``` + +- _Type:_ java.lang.String + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +```java +public java.lang.Boolean getEncrypt(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +```java +public java.lang.String getRegion(); +``` + +- _Type:_ java.lang.String + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secretId`Optional + +```java +public java.lang.String getSecretId(); +``` + +- _Type:_ java.lang.String + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secretKey`Optional + +```java +public java.lang.String getSecretKey(); +``` + +- _Type:_ java.lang.String + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `securityToken`Optional + +```java +public java.lang.String getSecurityToken(); +``` + +- _Type:_ java.lang.String + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataConfig; + +DataConfig.builder() +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .count(java.lang.Number) +// .count(TerraformCount) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .lifecycle(TerraformResourceLifecycle) +// .provider(TerraformProvider) +// .provisioners(java.util.List< FileProvisioner) +// .provisioners(LocalExecProvisioner) +// .provisioners(RemoteExecProvisioner >) +// .input(java.util.Map< java.lang.String, java.lang.Object >) +// .triggersReplace(java.util.Map< java.lang.String, java.lang.Object >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | +| input | java.util.Map< java.lang.String, java.lang.Object > | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggersReplace | java.util.Map< java.lang.String, java.lang.Object > | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```java +public java.lang.Object getProvisioners(); +``` + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +##### `input`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getInput(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggersReplace`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getTriggersReplace(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +### DataTerraformRemoteStateAzurermConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateAzurermConfig; + +DataTerraformRemoteStateAzurermConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .containerName(java.lang.String) + .key(java.lang.String) + .storageAccountName(java.lang.String) +// .accessKey(java.lang.String) +// .clientCertificatePassword(java.lang.String) +// .clientCertificatePath(java.lang.String) +// .clientId(java.lang.String) +// .clientSecret(java.lang.String) +// .endpoint(java.lang.String) +// .environment(java.lang.String) +// .metadataHost(java.lang.String) +// .msiEndpoint(java.lang.String) +// .oidcRequestToken(java.lang.String) +// .oidcRequestUrl(java.lang.String) +// .oidcToken(java.lang.String) +// .oidcTokenFilePath(java.lang.String) +// .resourceGroupName(java.lang.String) +// .sasToken(java.lang.String) +// .snapshot(java.lang.Boolean) +// .subscriptionId(java.lang.String) +// .tenantId(java.lang.String) +// .useAzureadAuth(java.lang.Boolean) +// .useMicrosoftGraph(java.lang.Boolean) +// .useMsi(java.lang.Boolean) +// .useOidc(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| containerName | java.lang.String | (Required) The Name of the Storage Container within the Storage Account. | +| key | java.lang.String | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storageAccountName | java.lang.String | (Required) The Name of the Storage Account. | +| accessKey | java.lang.String | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| clientCertificatePassword | java.lang.String | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| clientCertificatePath | java.lang.String | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| clientId | java.lang.String | (Optional) The Client ID of the Service Principal. | +| clientSecret | java.lang.String | (Optional) The Client Secret of the Service Principal. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | java.lang.String | (Optional) The Azure Environment which should be used. | +| metadataHost | java.lang.String | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msiEndpoint | java.lang.String | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidcRequestToken | java.lang.String | (Optional) The bearer token for the request to the OIDC provider. | +| oidcRequestUrl | java.lang.String | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidcToken | java.lang.String | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidcTokenFilePath | java.lang.String | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resourceGroupName | java.lang.String | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sasToken | java.lang.String | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | java.lang.Boolean | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscriptionId | java.lang.String | (Optional) The Subscription ID in which the Storage Account exists. | +| tenantId | java.lang.String | (Optional) The Tenant ID in which the Subscription exists. | +| useAzureadAuth | java.lang.Boolean | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| useMicrosoftGraph | java.lang.Boolean | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| useMsi | java.lang.Boolean | (Optional) Should Managed Service Identity authentication be used? | +| useOidc | java.lang.Boolean | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `containerName`Required + +```java +public java.lang.String getContainerName(); +``` + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storageAccountName`Required + +```java +public java.lang.String getStorageAccountName(); +``` + +- _Type:_ java.lang.String + +(Required) The Name of the Storage Account. + +--- + +##### `accessKey`Optional + +```java +public java.lang.String getAccessKey(); +``` + +- _Type:_ java.lang.String + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `clientCertificatePassword`Optional + +```java +public java.lang.String getClientCertificatePassword(); +``` + +- _Type:_ java.lang.String + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `clientCertificatePath`Optional + +```java +public java.lang.String getClientCertificatePath(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `clientId`Optional + +```java +public java.lang.String getClientId(); +``` + +- _Type:_ java.lang.String + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `clientSecret`Optional + +```java +public java.lang.String getClientSecret(); +``` + +- _Type:_ java.lang.String + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +```java +public java.lang.String getEnvironment(); +``` + +- _Type:_ java.lang.String + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadataHost`Optional + +```java +public java.lang.String getMetadataHost(); +``` + +- _Type:_ java.lang.String + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msiEndpoint`Optional + +```java +public java.lang.String getMsiEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidcRequestToken`Optional + +```java +public java.lang.String getOidcRequestToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidcRequestUrl`Optional + +```java +public java.lang.String getOidcRequestUrl(); +``` + +- _Type:_ java.lang.String + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidcToken`Optional + +```java +public java.lang.String getOidcToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidcTokenFilePath`Optional + +```java +public java.lang.String getOidcTokenFilePath(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resourceGroupName`Optional + +```java +public java.lang.String getResourceGroupName(); +``` + +- _Type:_ java.lang.String + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sasToken`Optional + +```java +public java.lang.String getSasToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +```java +public java.lang.Boolean getSnapshot(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscriptionId`Optional + +```java +public java.lang.String getSubscriptionId(); +``` + +- _Type:_ java.lang.String + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenantId`Optional + +```java +public java.lang.String getTenantId(); +``` + +- _Type:_ java.lang.String + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `useAzureadAuth`Optional + +```java +public java.lang.Boolean getUseAzureadAuth(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `useMicrosoftGraph`Optional + +```java +public java.lang.Boolean getUseMicrosoftGraph(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `useMsi`Optional + +```java +public java.lang.Boolean getUseMsi(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `useOidc`Optional + +```java +public java.lang.Boolean getUseOidc(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### DataTerraformRemoteStateConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateConfig; + +DataTerraformRemoteStateConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateConsulConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateConsulConfig; + +DataTerraformRemoteStateConsulConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .accessToken(java.lang.String) + .path(java.lang.String) +// .address(java.lang.String) +// .caFile(java.lang.String) +// .certFile(java.lang.String) +// .datacenter(java.lang.String) +// .gzip(java.lang.Boolean) +// .httpAuth(java.lang.String) +// .keyFile(java.lang.String) +// .lock(java.lang.Boolean) +// .scheme(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| accessToken | java.lang.String | (Required) Access token. | +| path | java.lang.String | (Required) Path in the Consul KV store. | +| address | java.lang.String | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| caFile | java.lang.String | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| certFile | java.lang.String | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | java.lang.String | (Optional) The datacenter to use. | +| gzip | java.lang.Boolean | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| httpAuth | java.lang.String | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| keyFile | java.lang.String | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | java.lang.Boolean | (Optional) false to disable locking. | +| scheme | java.lang.String | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `accessToken`Required + +```java +public java.lang.String getAccessToken(); +``` + +- _Type:_ java.lang.String + +(Required) Access token. + +--- + +##### `path`Required + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +```java +public java.lang.String getAddress(); +``` + +- _Type:_ java.lang.String + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `caFile`Optional + +```java +public java.lang.String getCaFile(); +``` + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `certFile`Optional + +```java +public java.lang.String getCertFile(); +``` + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +```java +public java.lang.String getDatacenter(); +``` + +- _Type:_ java.lang.String + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +```java +public java.lang.Boolean getGzip(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `httpAuth`Optional + +```java +public java.lang.String getHttpAuth(); +``` + +- _Type:_ java.lang.String + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `keyFile`Optional + +```java +public java.lang.String getKeyFile(); +``` + +- _Type:_ java.lang.String + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +```java +public java.lang.Boolean getLock(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +```java +public java.lang.String getScheme(); +``` + +- _Type:_ java.lang.String + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### DataTerraformRemoteStateCosConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateCosConfig; + +DataTerraformRemoteStateCosConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) +// .accelerate(java.lang.Boolean) +// .acl(java.lang.String) +// .assumeRole(CosBackendAssumeRole) +// .domain(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .region(java.lang.String) +// .secretId(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | (Required) The name of the COS bucket. | +| accelerate | java.lang.Boolean | (Optional) Whether to enable global Acceleration. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | java.lang.String | (Optional) The root domain of the API request. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) The Custom Endpoint for the COS backend. | +| key | java.lang.String | (Optional) The path for saving the state file in bucket. | +| prefix | java.lang.String | (Optional) The directory for saving the state file in bucket. | +| region | java.lang.String | (Optional) The region of the COS bucket. | +| secretId | java.lang.String | (Optional) Secret id of Tencent Cloud. | +| secretKey | java.lang.String | (Optional) Secret key of Tencent Cloud. | +| securityToken | java.lang.String | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +```java +public java.lang.Boolean getAccelerate(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +```java +public java.lang.String getAcl(); +``` + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assumeRole`Optional + +```java +public CosBackendAssumeRole getAssumeRole(); +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +```java +public java.lang.String getDomain(); +``` + +- _Type:_ java.lang.String + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +```java +public java.lang.Boolean getEncrypt(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +```java +public java.lang.String getRegion(); +``` + +- _Type:_ java.lang.String + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secretId`Optional + +```java +public java.lang.String getSecretId(); +``` + +- _Type:_ java.lang.String + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secretKey`Optional + +```java +public java.lang.String getSecretKey(); +``` + +- _Type:_ java.lang.String + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `securityToken`Optional + +```java +public java.lang.String getSecurityToken(); +``` + +- _Type:_ java.lang.String + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataTerraformRemoteStateGcsConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateGcsConfig; + +DataTerraformRemoteStateGcsConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) +// .accessToken(java.lang.String) +// .credentials(java.lang.String) +// .encryptionKey(java.lang.String) +// .impersonateServiceAccount(java.lang.String) +// .impersonateServiceAccountDelegates(java.util.List< java.lang.String >) +// .kmsEncryptionKey(java.lang.String) +// .prefix(java.lang.String) +// .storeageCustomEndpoint(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | (Required) The name of the GCS bucket. | +| accessToken | java.lang.String | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | java.lang.String | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryptionKey | java.lang.String | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonateServiceAccount | java.lang.String | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonateServiceAccountDelegates | java.util.List< java.lang.String > | (Optional) The delegation chain for an impersonating a service account. | +| kmsEncryptionKey | java.lang.String | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | java.lang.String | (Optional) GCS prefix inside the bucket. | +| storeageCustomEndpoint | java.lang.String | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `accessToken`Optional + +```java +public java.lang.String getAccessToken(); +``` + +- _Type:_ java.lang.String + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +```java +public java.lang.String getCredentials(); +``` + +- _Type:_ java.lang.String + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryptionKey`Optional + +```java +public java.lang.String getEncryptionKey(); +``` + +- _Type:_ java.lang.String + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonateServiceAccount`Optional + +```java +public java.lang.String getImpersonateServiceAccount(); +``` + +- _Type:_ java.lang.String + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonateServiceAccountDelegates`Optional + +```java +public java.util.List< java.lang.String > getImpersonateServiceAccountDelegates(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kmsEncryptionKey`Optional + +```java +public java.lang.String getKmsEncryptionKey(); +``` + +- _Type:_ java.lang.String + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeageCustomEndpoint`Optional + +```java +public java.lang.String getStoreageCustomEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### DataTerraformRemoteStateHttpConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateHttpConfig; + +DataTerraformRemoteStateHttpConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .address(java.lang.String) +// .clientCaCertificatePem(java.lang.String) +// .clientCertificatePem(java.lang.String) +// .clientPrivateKeyPem(java.lang.String) +// .lockAddress(java.lang.String) +// .lockMethod(java.lang.String) +// .password(java.lang.String) +// .retryMax(java.lang.Number) +// .retryWaitMax(java.lang.Number) +// .retryWaitMin(java.lang.Number) +// .skipCertVerification(java.lang.Boolean) +// .unlockAddress(java.lang.String) +// .unlockMethod(java.lang.String) +// .updateMethod(java.lang.String) +// .username(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| address | java.lang.String | (Required) The address of the REST endpoint. | +| clientCaCertificatePem | java.lang.String | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| clientCertificatePem | java.lang.String | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| clientPrivateKeyPem | java.lang.String | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lockAddress | java.lang.String | (Optional) The address of the lock REST endpoint. | +| lockMethod | java.lang.String | (Optional) The HTTP method to use when locking. | +| password | java.lang.String | (Optional) The password for HTTP basic authentication. | +| retryMax | java.lang.Number | (Optional) The number of HTTP request retries. | +| retryWaitMax | java.lang.Number | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retryWaitMin | java.lang.Number | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skipCertVerification | java.lang.Boolean | (Optional) Whether to skip TLS verification. | +| unlockAddress | java.lang.String | (Optional) The address of the unlock REST endpoint. | +| unlockMethod | java.lang.String | (Optional) The HTTP method to use when unlocking. | +| updateMethod | java.lang.String | (Optional) HTTP method to use when updating state. | +| username | java.lang.String | (Optional) The username for HTTP basic authentication. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `address`Required + +```java +public java.lang.String getAddress(); +``` + +- _Type:_ java.lang.String + +(Required) The address of the REST endpoint. + +--- + +##### `clientCaCertificatePem`Optional + +```java +public java.lang.String getClientCaCertificatePem(); +``` + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `clientCertificatePem`Optional + +```java +public java.lang.String getClientCertificatePem(); +``` + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `clientPrivateKeyPem`Optional + +```java +public java.lang.String getClientPrivateKeyPem(); +``` + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lockAddress`Optional + +```java +public java.lang.String getLockAddress(); +``` + +- _Type:_ java.lang.String + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lockMethod`Optional + +```java +public java.lang.String getLockMethod(); +``` + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +```java +public java.lang.String getPassword(); +``` + +- _Type:_ java.lang.String + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retryMax`Optional + +```java +public java.lang.Number getRetryMax(); +``` + +- _Type:_ java.lang.Number + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retryWaitMax`Optional + +```java +public java.lang.Number getRetryWaitMax(); +``` + +- _Type:_ java.lang.Number + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retryWaitMin`Optional + +```java +public java.lang.Number getRetryWaitMin(); +``` + +- _Type:_ java.lang.Number + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skipCertVerification`Optional + +```java +public java.lang.Boolean getSkipCertVerification(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlockAddress`Optional + +```java +public java.lang.String getUnlockAddress(); +``` + +- _Type:_ java.lang.String + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlockMethod`Optional + +```java +public java.lang.String getUnlockMethod(); +``` + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `updateMethod`Optional + +```java +public java.lang.String getUpdateMethod(); +``` + +- _Type:_ java.lang.String + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +```java +public java.lang.String getUsername(); +``` + +- _Type:_ java.lang.String + +(Optional) The username for HTTP basic authentication. + +--- + +### DataTerraformRemoteStateLocalConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateLocalConfig; + +DataTerraformRemoteStateLocalConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) +// .path(java.lang.String) +// .workspaceDir(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| path | java.lang.String | Path where the state file is stored. | +| workspaceDir | java.lang.String | (Optional) The path to non-default workspaces. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `path`Optional + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspaceDir`Optional + +```java +public java.lang.String getWorkspaceDir(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to non-default workspaces. + +--- + +### DataTerraformRemoteStateOssConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateOssConfig; + +DataTerraformRemoteStateOssConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .assumeRole(OssAssumeRole) +// .assumeRolePolicy(java.lang.String) +// .assumeRoleRoleArn(java.lang.String) +// .assumeRoleSessionExpiration(java.lang.Number) +// .assumeRoleSessionName(java.lang.String) +// .ecsRoleName(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) +// .sharedCredentialsFile(java.lang.String) +// .stsEndpoint(java.lang.String) +// .tablestoreEndpoint(java.lang.String) +// .tablestoreTable(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | (Required) The name of the OSS bucket. | +| accessKey | java.lang.String | (Optional) Alibaba Cloud access key. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file. | +| assumeRole | OssAssumeRole | _No description._ | +| assumeRolePolicy | java.lang.String | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assumeRoleRoleArn | java.lang.String | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assumeRoleSessionExpiration | java.lang.Number | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assumeRoleSessionName | java.lang.String | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecsRoleName | java.lang.String | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) A custom endpoint for the OSS API. | +| key | java.lang.String | (Optional) The name of the state file. | +| prefix | java.lang.String | (Optional) The path directory of the state file will be stored. | +| profile | java.lang.String | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | java.lang.String | (Optional) The region of the OSS bucket. | +| secretKey | java.lang.String | (Optional) Alibaba Cloud secret access key. | +| securityToken | java.lang.String | (Optional) STS access token. | +| sharedCredentialsFile | java.lang.String | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| stsEndpoint | java.lang.String | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestoreEndpoint | java.lang.String | (Optional) A custom endpoint for the TableStore API. | +| tablestoreTable | java.lang.String | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the OSS bucket. + +--- + +##### `accessKey`Optional + +```java +public java.lang.String getAccessKey(); +``` + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +```java +public java.lang.String getAcl(); +``` + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```java +public OssAssumeRole getAssumeRole(); +``` + +- _Type:_ OssAssumeRole + +--- + +##### `assumeRolePolicy`Optional + +```java +public java.lang.String getAssumeRolePolicy(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assumeRoleRoleArn`Optional + +```java +public java.lang.String getAssumeRoleRoleArn(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assumeRoleSessionExpiration`Optional + +```java +public java.lang.Number getAssumeRoleSessionExpiration(); +``` + +- _Type:_ java.lang.Number + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assumeRoleSessionName`Optional + +```java +public java.lang.String getAssumeRoleSessionName(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecsRoleName`Optional + +```java +public java.lang.String getEcsRoleName(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +```java +public java.lang.Boolean getEncrypt(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +```java +public java.lang.String getProfile(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +```java +public java.lang.String getRegion(); +``` + +- _Type:_ java.lang.String + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secretKey`Optional + +```java +public java.lang.String getSecretKey(); +``` + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `securityToken`Optional + +```java +public java.lang.String getSecurityToken(); +``` + +- _Type:_ java.lang.String + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `sharedCredentialsFile`Optional + +```java +public java.lang.String getSharedCredentialsFile(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `stsEndpoint`Optional + +```java +public java.lang.String getStsEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestoreEndpoint`Optional + +```java +public java.lang.String getTablestoreEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestoreTable`Optional + +```java +public java.lang.String getTablestoreTable(); +``` + +- _Type:_ java.lang.String + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### DataTerraformRemoteStatePgConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStatePgConfig; + +DataTerraformRemoteStatePgConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .connStr(java.lang.String) +// .schemaName(java.lang.String) +// .skipIndexCreation(java.lang.Boolean) +// .skipSchemaCreation(java.lang.Boolean) +// .skipTableCreation(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| connStr | java.lang.String | Postgres connection string; | +| schemaName | java.lang.String | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skipIndexCreation | java.lang.Boolean | If set to true, the Postgres index must already exist. | +| skipSchemaCreation | java.lang.Boolean | If set to true, the Postgres schema must already exist. | +| skipTableCreation | java.lang.Boolean | If set to true, the Postgres table must already exist. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `connStr`Required + +```java +public java.lang.String getConnStr(); +``` + +- _Type:_ java.lang.String + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schemaName`Optional + +```java +public java.lang.String getSchemaName(); +``` + +- _Type:_ java.lang.String + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skipIndexCreation`Optional + +```java +public java.lang.Boolean getSkipIndexCreation(); +``` + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skipSchemaCreation`Optional + +```java +public java.lang.Boolean getSkipSchemaCreation(); +``` + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skipTableCreation`Optional + +```java +public java.lang.Boolean getSkipTableCreation(); +``` + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### DataTerraformRemoteStateRemoteConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateRemoteConfig; + +DataTerraformRemoteStateRemoteConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .organization(java.lang.String) + .workspaces(IRemoteWorkspace) +// .hostname(java.lang.String) +// .token(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| organization | java.lang.String | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `organization`Required + +```java +public java.lang.String getOrganization(); +``` + +- _Type:_ java.lang.String + +--- + +##### `workspaces`Required + +```java +public IRemoteWorkspace getWorkspaces(); +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +```java +public java.lang.String getHostname(); +``` + +- _Type:_ java.lang.String + +--- + +##### `token`Optional + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +--- + +### DataTerraformRemoteStateS3Config + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateS3Config; + +DataTerraformRemoteStateS3Config.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .bucket(java.lang.String) + .key(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .allowedAccountIds(java.util.List< java.lang.String >) +// .assumeRole(S3BackendAssumeRoleConfig) +// .assumeRolePolicy(java.lang.String) +// .assumeRolePolicyArns(java.util.List< java.lang.String >) +// .assumeRoleTags(java.util.Map< java.lang.String, java.lang.String >) +// .assumeRoleTransitiveTagKeys(java.util.List< java.lang.String >) +// .assumeRoleWithWebIdentity(S3BackendAssumeRoleWithWebIdentityConfig) +// .customCaBundle(java.lang.String) +// .dynamodbEndpoint(java.lang.String) +// .dynamodbTable(java.lang.String) +// .ec2MetadataServiceEndpoint(java.lang.String) +// .ec2MetadataServiceEndpointMode(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .endpoints(S3BackendEndpointConfig) +// .externalId(java.lang.String) +// .forbiddenAccountIds(java.util.List< java.lang.String >) +// .forcePathStyle(java.lang.Boolean) +// .httpProxy(java.lang.String) +// .httpsProxy(java.lang.String) +// .iamEndpoint(java.lang.String) +// .insecure(java.lang.Boolean) +// .kmsKeyId(java.lang.String) +// .maxRetries(java.lang.Number) +// .noProxy(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .retryMode(java.lang.String) +// .roleArn(java.lang.String) +// .secretKey(java.lang.String) +// .sessionName(java.lang.String) +// .sharedConfigFiles(java.util.List< java.lang.String >) +// .sharedCredentialsFile(java.lang.String) +// .sharedCredentialsFiles(java.util.List< java.lang.String >) +// .skipCredentialsValidation(java.lang.Boolean) +// .skipMetadataApiCheck(java.lang.Boolean) +// .skipRegionValidation(java.lang.Boolean) +// .skipRequestingAccountId(java.lang.Boolean) +// .skipS3Checksum(java.lang.Boolean) +// .sseCustomerKey(java.lang.String) +// .stsEndpoint(java.lang.String) +// .stsRegion(java.lang.String) +// .token(java.lang.String) +// .useLegacyWorkflow(java.lang.Boolean) +// .usePathStyle(java.lang.Boolean) +// .workspaceKeyPrefix(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| bucket | java.lang.String | Name of the S3 Bucket. | +| key | java.lang.String | Path to the state file inside the S3 Bucket. | +| accessKey | java.lang.String | (Optional) AWS access key. | +| acl | java.lang.String | (Optional) Canned ACL to be applied to the state file. | +| allowedAccountIds | java.util.List< java.lang.String > | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assumeRolePolicy | java.lang.String | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assumeRolePolicyArns | java.util.List< java.lang.String > | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assumeRoleTags | java.util.Map< java.lang.String, java.lang.String > | (Optional) Map of assume role session tags. | +| assumeRoleTransitiveTagKeys | java.util.List< java.lang.String > | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| customCaBundle | java.lang.String | (Optional) File containing custom root and intermediate certificates. | +| dynamodbEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodbTable | java.lang.String | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2MetadataServiceEndpoint | java.lang.String | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2MetadataServiceEndpointMode | java.lang.String | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | java.lang.Boolean | (Optional) Enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| externalId | java.lang.String | (Optional) External identifier to use when assuming the role. | +| forbiddenAccountIds | java.util.List< java.lang.String > | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| forcePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| httpProxy | java.lang.String | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| httpsProxy | java.lang.String | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iamEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | java.lang.Boolean | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kmsKeyId | java.lang.String | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| maxRetries | java.lang.Number | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| noProxy | java.lang.String | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | java.lang.String | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | java.lang.String | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retryMode | java.lang.String | (Optional) Specifies how retries are attempted. | +| roleArn | java.lang.String | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secretKey | java.lang.String | (Optional) AWS secret access key. | +| sessionName | java.lang.String | (Optional) Session name to use when assuming the role. | +| sharedConfigFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared configuration files. | +| sharedCredentialsFile | java.lang.String | (Optional) Path to the AWS shared credentials file. | +| sharedCredentialsFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared credentials files. | +| skipCredentialsValidation | java.lang.Boolean | (Optional) Skip credentials validation via the STS API. | +| skipMetadataApiCheck | java.lang.Boolean | (Optional) Skip usage of EC2 Metadata API. | +| skipRegionValidation | java.lang.Boolean | (Optional) Skip validation of provided region name. | +| skipRequestingAccountId | java.lang.Boolean | (Optional) Whether to skip requesting the account ID. | +| skipS3Checksum | java.lang.Boolean | (Optional) Do not include checksum when uploading S3 Objects. | +| sseCustomerKey | java.lang.String | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| stsEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| stsRegion | java.lang.String | (Optional) AWS region for STS. | +| token | java.lang.String | (Optional) Multi-Factor Authentication (MFA) token. | +| useLegacyWorkflow | java.lang.Boolean | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| usePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspaceKeyPrefix | java.lang.String | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `defaults`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `workspace`Optional + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +Name of the S3 Bucket. + +--- + +##### `key`Required + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `accessKey`Optional + +```java +public java.lang.String getAccessKey(); +``` + +- _Type:_ java.lang.String + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +```java +public java.lang.String getAcl(); +``` + +- _Type:_ java.lang.String + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowedAccountIds`Optional + +```java +public java.util.List< java.lang.String > getAllowedAccountIds(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assumeRole`Optional + +```java +public S3BackendAssumeRoleConfig getAssumeRole(); +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```java +public java.lang.String getAssumeRolePolicy(); +``` + +- _Type:_ java.lang.String + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```java +public java.util.List< java.lang.String > getAssumeRolePolicyArns(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```java +public java.util.Map< java.lang.String, java.lang.String > getAssumeRoleTags(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```java +public java.util.List< java.lang.String > getAssumeRoleTransitiveTagKeys(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assumeRoleWithWebIdentity`Optional + +```java +public S3BackendAssumeRoleWithWebIdentityConfig getAssumeRoleWithWebIdentity(); +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `customCaBundle`Optional + +```java +public java.lang.String getCustomCaBundle(); +``` + +- _Type:_ java.lang.String + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```java +public java.lang.String getDynamodbEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodbTable`Optional + +```java +public java.lang.String getDynamodbTable(); +``` + +- _Type:_ java.lang.String + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2MetadataServiceEndpoint`Optional + +```java +public java.lang.String getEc2MetadataServiceEndpoint(); +``` + +- _Type:_ java.lang.String + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2MetadataServiceEndpointMode`Optional + +```java +public java.lang.String getEc2MetadataServiceEndpointMode(); +``` + +- _Type:_ java.lang.String + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +```java +public java.lang.Boolean getEncrypt(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +```java +public S3BackendEndpointConfig getEndpoints(); +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`externalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```java +public java.lang.String getExternalId(); +``` + +- _Type:_ java.lang.String + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbiddenAccountIds`Optional + +```java +public java.util.List< java.lang.String > getForbiddenAccountIds(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`forcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```java +public java.lang.Boolean getForcePathStyle(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `httpProxy`Optional + +```java +public java.lang.String getHttpProxy(); +``` + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `httpsProxy`Optional + +```java +public java.lang.String getHttpsProxy(); +``` + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```java +public java.lang.String getIamEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +```java +public java.lang.Boolean getInsecure(); +``` + +- _Type:_ java.lang.Boolean + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kmsKeyId`Optional + +```java +public java.lang.String getKmsKeyId(); +``` + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `maxRetries`Optional + +```java +public java.lang.Number getMaxRetries(); +``` + +- _Type:_ java.lang.Number + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `noProxy`Optional + +```java +public java.lang.String getNoProxy(); +``` + +- _Type:_ java.lang.String + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +```java +public java.lang.String getProfile(); +``` + +- _Type:_ java.lang.String + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +```java +public java.lang.String getRegion(); +``` + +- _Type:_ java.lang.String + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retryMode`Optional + +```java +public java.lang.String getRetryMode(); +``` + +- _Type:_ java.lang.String + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`roleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```java +public java.lang.String getRoleArn(); +``` + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secretKey`Optional + +```java +public java.lang.String getSecretKey(); +``` + +- _Type:_ java.lang.String + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`sessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```java +public java.lang.String getSessionName(); +``` + +- _Type:_ java.lang.String + +(Optional) Session name to use when assuming the role. + +--- + +##### `sharedConfigFiles`Optional + +```java +public java.util.List< java.lang.String > getSharedConfigFiles(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `sharedCredentialsFile`Optional + +```java +public java.lang.String getSharedCredentialsFile(); +``` + +- _Type:_ java.lang.String + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `sharedCredentialsFiles`Optional + +```java +public java.util.List< java.lang.String > getSharedCredentialsFiles(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skipCredentialsValidation`Optional + +```java +public java.lang.Boolean getSkipCredentialsValidation(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skipMetadataApiCheck`Optional + +```java +public java.lang.Boolean getSkipMetadataApiCheck(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skipRegionValidation`Optional + +```java +public java.lang.Boolean getSkipRegionValidation(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Skip validation of provided region name. + +--- + +##### `skipRequestingAccountId`Optional + +```java +public java.lang.Boolean getSkipRequestingAccountId(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skipS3Checksum`Optional + +```java +public java.lang.Boolean getSkipS3Checksum(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sseCustomerKey`Optional + +```java +public java.lang.String getSseCustomerKey(); +``` + +- _Type:_ java.lang.String + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`stsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```java +public java.lang.String getStsEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `stsRegion`Optional + +```java +public java.lang.String getStsRegion(); +``` + +- _Type:_ java.lang.String + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `useLegacyWorkflow`Optional + +```java +public java.lang.Boolean getUseLegacyWorkflow(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `usePathStyle`Optional + +```java +public java.lang.Boolean getUsePathStyle(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspaceKeyPrefix`Optional + +```java +public java.lang.String getWorkspaceKeyPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### DataTerraformRemoteStateSwiftConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.DataTerraformRemoteStateSwiftConfig; + +DataTerraformRemoteStateSwiftConfig.builder() +// .defaults(java.util.Map< java.lang.String, java.lang.Object >) +// .workspace(java.lang.String) + .container(java.lang.String) +// .applicationCredentialId(java.lang.String) +// .applicationCredentialName(java.lang.String) +// .applicationCredentialSecret(java.lang.String) +// .archiveContainer(java.lang.String) +// .authUrl(java.lang.String) +// .cacertFile(java.lang.String) +// .cert(java.lang.String) +// .cloud(java.lang.String) +// .defaultDomain(java.lang.String) +// .domainId(java.lang.String) +// .domainName(java.lang.String) +// .expireAfter(java.lang.String) +// .insecure(java.lang.Boolean) +// .key(java.lang.String) +// .password(java.lang.String) +// .projectDomainId(java.lang.String) +// .projectDomainName(java.lang.String) +// .regionName(java.lang.String) +// .stateName(java.lang.String) +// .tenantId(java.lang.String) +// .tenantName(java.lang.String) +// .token(java.lang.String) +// .userDomainId(java.lang.String) +// .userDomainName(java.lang.String) +// .userId(java.lang.String) +// .userName(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------- | +| defaults | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| workspace | java.lang.String | _No description._ | +| container | java.lang.String | _No description._ | +| applicationCredentialId | java.lang.String | _No description._ | +| applicationCredentialName | java.lang.String | _No description._ | +| applicationCredentialSecret | java.lang.String | _No description._ | +| archiveContainer | java.lang.String | _No description._ | +| authUrl | java.lang.String | _No description._ | +| cacertFile | java.lang.String | _No description._ | +| cert | java.lang.String | _No description._ | +| cloud | java.lang.String | _No description._ | +| defaultDomain | java.lang.String | _No description._ | +| domainId | java.lang.String | _No description._ | +| domainName | java.lang.String | _No description._ | +| expireAfter | java.lang.String | _No description._ | +| insecure | java.lang.Boolean | _No description._ | +| key | java.lang.String | _No description._ | +| password | java.lang.String | _No description._ | +| projectDomainId | java.lang.String | _No description._ | +| projectDomainName | java.lang.String | _No description._ | +| regionName | java.lang.String | _No description._ | +| stateName | java.lang.String | _No description._ | +| tenantId | java.lang.String | _No description._ | +| tenantName | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | +| userDomainId | java.lang.String | _No description._ | +| userDomainName | java.lang.String | _No description._ | +| userId | java.lang.String | _No description._ | +| userName | java.lang.String | _No description._ | + +--- + +##### ~~`defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.util.Map< java.lang.String, java.lang.Object > getDefaults(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### ~~`workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getWorkspace(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getContainer(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getApplicationCredentialId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getApplicationCredentialName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getApplicationCredentialSecret(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`archiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getArchiveContainer(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`authUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getAuthUrl(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`cacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getCacertFile(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getCert(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getCloud(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`defaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getDefaultDomain(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`domainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getDomainId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`domainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getDomainName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`expireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getExpireAfter(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.Boolean getInsecure(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getPassword(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getProjectDomainId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getProjectDomainName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`regionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getRegionName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`stateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getStateName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getTenantId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getTenantName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserDomainId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserDomainName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserName(); +``` + +- _Type:_ java.lang.String + +--- + +### EncodingOptions + +Properties to string encodings. + +#### Initializer + +```java +import com.hashicorp.cdktf.EncodingOptions; + +EncodingOptions.builder() +// .displayHint(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------- | +| displayHint | java.lang.String | A hint for the Token's purpose when stringifying it. | + +--- + +##### `displayHint`Optional + +```java +public java.lang.String getDisplayHint(); +``` + +- _Type:_ java.lang.String +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +### FileProvisioner + +The file provisioner copies files or directories from the machine running Terraform to the newly created resource. + +The file provisioner supports both ssh and winrm type connections. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/file file} + +#### Initializer + +```java +import com.hashicorp.cdktf.FileProvisioner; + +FileProvisioner.builder() + .destination(java.lang.String) + .type(java.lang.String) +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .content(java.lang.String) +// .source(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| destination | java.lang.String | The source file or directory. | +| type | java.lang.String | _No description._ | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| content | java.lang.String | The destination path to write to on the remote system. | +| source | java.lang.String | The direct content to copy on the destination. | + +--- + +##### `destination`Required + +```java +public java.lang.String getDestination(); +``` + +- _Type:_ java.lang.String + +The source file or directory. + +Specify it either relative to the current working directory or as an absolute path. +This argument cannot be combined with content. + +--- + +##### `type`Required + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +--- + +##### `content`Optional + +```java +public java.lang.String getContent(); +``` + +- _Type:_ java.lang.String + +The destination path to write to on the remote system. + +See Destination Paths below for more information. + +--- + +##### `source`Optional + +```java +public java.lang.String getSource(); +``` + +- _Type:_ java.lang.String + +The direct content to copy on the destination. + +If destination is a file, the content will be written on that file. +In case of a directory, a file named tf-file-content is created inside that directory. +We recommend using a file as the destination when using content. +This argument cannot be combined with source. + +--- + +### GcsBackendConfig + +Stores the state as an object in a configurable prefix in a pre-existing bucket on Google Cloud Storage (GCS). + +The bucket must exist prior to configuring the backend. + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the GCS bucket +to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/gcs + +#### Initializer + +```java +import com.hashicorp.cdktf.GcsBackendConfig; + +GcsBackendConfig.builder() + .bucket(java.lang.String) +// .accessToken(java.lang.String) +// .credentials(java.lang.String) +// .encryptionKey(java.lang.String) +// .impersonateServiceAccount(java.lang.String) +// .impersonateServiceAccountDelegates(java.util.List< java.lang.String >) +// .kmsEncryptionKey(java.lang.String) +// .prefix(java.lang.String) +// .storeageCustomEndpoint(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | java.lang.String | (Required) The name of the GCS bucket. | +| accessToken | java.lang.String | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | java.lang.String | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryptionKey | java.lang.String | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonateServiceAccount | java.lang.String | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonateServiceAccountDelegates | java.util.List< java.lang.String > | (Optional) The delegation chain for an impersonating a service account. | +| kmsEncryptionKey | java.lang.String | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | java.lang.String | (Optional) GCS prefix inside the bucket. | +| storeageCustomEndpoint | java.lang.String | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `accessToken`Optional + +```java +public java.lang.String getAccessToken(); +``` + +- _Type:_ java.lang.String + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +```java +public java.lang.String getCredentials(); +``` + +- _Type:_ java.lang.String + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryptionKey`Optional + +```java +public java.lang.String getEncryptionKey(); +``` + +- _Type:_ java.lang.String + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonateServiceAccount`Optional + +```java +public java.lang.String getImpersonateServiceAccount(); +``` + +- _Type:_ java.lang.String + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonateServiceAccountDelegates`Optional + +```java +public java.util.List< java.lang.String > getImpersonateServiceAccountDelegates(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kmsEncryptionKey`Optional + +```java +public java.lang.String getKmsEncryptionKey(); +``` + +- _Type:_ java.lang.String + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeageCustomEndpoint`Optional + +```java +public java.lang.String getStoreageCustomEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### HttpBackendConfig + +Stores the state using a simple REST client. + +State will be fetched via GET, updated via POST, and purged with DELETE. +The method used for updating is configurable. + +This backend optionally supports state locking. +When locking support is enabled it will use LOCK and UNLOCK requests providing the lock info in the body. +The endpoint should return a 423: Locked or 409: Conflict with the holding lock info when +it's already taken, 200: OK for success. Any other status will be considered an error. +The ID of the holding lock info will be added as a query parameter to state updates requests. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/http + +#### Initializer + +```java +import com.hashicorp.cdktf.HttpBackendConfig; + +HttpBackendConfig.builder() + .address(java.lang.String) +// .clientCaCertificatePem(java.lang.String) +// .clientCertificatePem(java.lang.String) +// .clientPrivateKeyPem(java.lang.String) +// .lockAddress(java.lang.String) +// .lockMethod(java.lang.String) +// .password(java.lang.String) +// .retryMax(java.lang.Number) +// .retryWaitMax(java.lang.Number) +// .retryWaitMin(java.lang.Number) +// .skipCertVerification(java.lang.Boolean) +// .unlockAddress(java.lang.String) +// .unlockMethod(java.lang.String) +// .updateMethod(java.lang.String) +// .username(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | +| address | java.lang.String | (Required) The address of the REST endpoint. | +| clientCaCertificatePem | java.lang.String | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| clientCertificatePem | java.lang.String | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| clientPrivateKeyPem | java.lang.String | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lockAddress | java.lang.String | (Optional) The address of the lock REST endpoint. | +| lockMethod | java.lang.String | (Optional) The HTTP method to use when locking. | +| password | java.lang.String | (Optional) The password for HTTP basic authentication. | +| retryMax | java.lang.Number | (Optional) The number of HTTP request retries. | +| retryWaitMax | java.lang.Number | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retryWaitMin | java.lang.Number | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skipCertVerification | java.lang.Boolean | (Optional) Whether to skip TLS verification. | +| unlockAddress | java.lang.String | (Optional) The address of the unlock REST endpoint. | +| unlockMethod | java.lang.String | (Optional) The HTTP method to use when unlocking. | +| updateMethod | java.lang.String | (Optional) HTTP method to use when updating state. | +| username | java.lang.String | (Optional) The username for HTTP basic authentication. | + +--- + +##### `address`Required + +```java +public java.lang.String getAddress(); +``` + +- _Type:_ java.lang.String + +(Required) The address of the REST endpoint. + +--- + +##### `clientCaCertificatePem`Optional + +```java +public java.lang.String getClientCaCertificatePem(); +``` + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `clientCertificatePem`Optional + +```java +public java.lang.String getClientCertificatePem(); +``` + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `clientPrivateKeyPem`Optional + +```java +public java.lang.String getClientPrivateKeyPem(); +``` + +- _Type:_ java.lang.String + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lockAddress`Optional + +```java +public java.lang.String getLockAddress(); +``` + +- _Type:_ java.lang.String + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lockMethod`Optional + +```java +public java.lang.String getLockMethod(); +``` + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +```java +public java.lang.String getPassword(); +``` + +- _Type:_ java.lang.String + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retryMax`Optional + +```java +public java.lang.Number getRetryMax(); +``` + +- _Type:_ java.lang.Number + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retryWaitMax`Optional + +```java +public java.lang.Number getRetryWaitMax(); +``` + +- _Type:_ java.lang.Number + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retryWaitMin`Optional + +```java +public java.lang.Number getRetryWaitMin(); +``` + +- _Type:_ java.lang.Number + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skipCertVerification`Optional + +```java +public java.lang.Boolean getSkipCertVerification(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlockAddress`Optional + +```java +public java.lang.String getUnlockAddress(); +``` + +- _Type:_ java.lang.String + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlockMethod`Optional + +```java +public java.lang.String getUnlockMethod(); +``` + +- _Type:_ java.lang.String + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `updateMethod`Optional + +```java +public java.lang.String getUpdateMethod(); +``` + +- _Type:_ java.lang.String + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +```java +public java.lang.String getUsername(); +``` + +- _Type:_ java.lang.String + +(Optional) The username for HTTP basic authentication. + +--- + +### LazyAnyValueOptions + +Options for creating lazy untyped tokens. + +#### Initializer + +```java +import com.hashicorp.cdktf.LazyAnyValueOptions; + +LazyAnyValueOptions.builder() +// .displayHint(java.lang.String) +// .omitEmptyArray(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------------ | +| displayHint | java.lang.String | Use the given name as a display hint. | +| omitEmptyArray | java.lang.Boolean | If the produced value is an array and it is empty, return 'undefined' instead. | + +--- + +##### `displayHint`Optional + +```java +public java.lang.String getDisplayHint(); +``` + +- _Type:_ java.lang.String +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `omitEmptyArray`Optional + +```java +public java.lang.Boolean getOmitEmptyArray(); +``` + +- _Type:_ java.lang.Boolean +- _Default:_ false + +If the produced value is an array and it is empty, return 'undefined' instead. + +--- + +### LazyListValueOptions + +Options for creating a lazy list token. + +#### Initializer + +```java +import com.hashicorp.cdktf.LazyListValueOptions; + +LazyListValueOptions.builder() +// .displayHint(java.lang.String) +// .omitEmpty(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------------------ | ---------------------------------------------------------- | +| displayHint | java.lang.String | Use the given name as a display hint. | +| omitEmpty | java.lang.Boolean | If the produced list is empty, return 'undefined' instead. | + +--- + +##### `displayHint`Optional + +```java +public java.lang.String getDisplayHint(); +``` + +- _Type:_ java.lang.String +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `omitEmpty`Optional + +```java +public java.lang.Boolean getOmitEmpty(); +``` + +- _Type:_ java.lang.Boolean +- _Default:_ false + +If the produced list is empty, return 'undefined' instead. + +--- + +### LazyStringValueOptions + +Options for creating a lazy string token. + +#### Initializer + +```java +import com.hashicorp.cdktf.LazyStringValueOptions; + +LazyStringValueOptions.builder() +// .displayHint(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------- | +| displayHint | java.lang.String | Use the given name as a display hint. | + +--- + +##### `displayHint`Optional + +```java +public java.lang.String getDisplayHint(); +``` + +- _Type:_ java.lang.String +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +### LocalBackendConfig + +The local backend stores state on the local filesystem, locks that state using system APIs, and performs operations locally. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/local + +#### Initializer + +```java +import com.hashicorp.cdktf.LocalBackendConfig; + +LocalBackendConfig.builder() +// .path(java.lang.String) +// .workspaceDir(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------- | +| path | java.lang.String | Path where the state file is stored. | +| workspaceDir | java.lang.String | (Optional) The path to non-default workspaces. | + +--- + +##### `path`Optional + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspaceDir`Optional + +```java +public java.lang.String getWorkspaceDir(); +``` + +- _Type:_ java.lang.String + +(Optional) The path to non-default workspaces. + +--- + +### LocalExecProvisioner + +The local-exec provisioner invokes a local executable after a resource is created. + +This invokes a process on the machine running Terraform, not on the resource. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec local-exec} + +#### Initializer + +```java +import com.hashicorp.cdktf.LocalExecProvisioner; + +LocalExecProvisioner.builder() + .command(java.lang.String) + .type(java.lang.String) +// .environment(java.util.Map< java.lang.String, java.lang.String >) +// .interpreter(java.util.List< java.lang.String >) +// .when(java.lang.String) +// .workingDir(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| command | java.lang.String | This is the command to execute. | +| type | java.lang.String | _No description._ | +| environment | java.util.Map< java.lang.String, java.lang.String > | A record of key value pairs representing the environment of the executed command. | +| interpreter | java.util.List< java.lang.String > | If provided, this is a list of interpreter arguments used to execute the command. | +| when | java.lang.String | If provided, specifies when Terraform will execute the command. | +| workingDir | java.lang.String | If provided, specifies the working directory where command will be executed. | + +--- + +##### `command`Required + +```java +public java.lang.String getCommand(); +``` + +- _Type:_ java.lang.String + +This is the command to execute. + +It can be provided as a relative path to the current working directory or as an absolute path. +It is evaluated in a shell, and can use environment variables or Terraform variables. + +--- + +##### `type`Required + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `environment`Optional + +```java +public java.util.Map< java.lang.String, java.lang.String > getEnvironment(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +A record of key value pairs representing the environment of the executed command. + +It inherits the current process environment. + +--- + +##### `interpreter`Optional + +```java +public java.util.List< java.lang.String > getInterpreter(); +``` + +- _Type:_ java.util.List< java.lang.String > + +If provided, this is a list of interpreter arguments used to execute the command. + +The first argument is the interpreter itself. +It can be provided as a relative path to the current working directory or as an absolute path +The remaining arguments are appended prior to the command. +This allows building command lines of the form "/bin/bash", "-c", "echo foo". +If interpreter is unspecified, sensible defaults will be chosen based on the system OS. + +--- + +##### `when`Optional + +```java +public java.lang.String getWhen(); +``` + +- _Type:_ java.lang.String + +If provided, specifies when Terraform will execute the command. + +For example, when = destroy specifies that the provisioner will run when the associated resource is destroyed + +--- + +##### `workingDir`Optional + +```java +public java.lang.String getWorkingDir(); +``` + +- _Type:_ java.lang.String + +If provided, specifies the working directory where command will be executed. + +It can be provided as a relative path to the current working directory or as an absolute path. +The directory must exist. + +--- + +### OssAssumeRole + +#### Initializer + +```java +import com.hashicorp.cdktf.OssAssumeRole; + +OssAssumeRole.builder() + .roleArn(java.lang.String) +// .policy(java.lang.String) +// .sessionExpiration(java.lang.Number) +// .sessionName(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| roleArn | java.lang.String | _No description._ | +| policy | java.lang.String | _No description._ | +| sessionExpiration | java.lang.Number | _No description._ | +| sessionName | java.lang.String | _No description._ | + +--- + +##### `roleArn`Required + +```java +public java.lang.String getRoleArn(); +``` + +- _Type:_ java.lang.String + +--- + +##### `policy`Optional + +```java +public java.lang.String getPolicy(); +``` + +- _Type:_ java.lang.String + +--- + +##### `sessionExpiration`Optional + +```java +public java.lang.Number getSessionExpiration(); +``` + +- _Type:_ java.lang.Number + +--- + +##### `sessionName`Optional + +```java +public java.lang.String getSessionName(); +``` + +- _Type:_ java.lang.String + +--- + +### OssBackendConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.OssBackendConfig; + +OssBackendConfig.builder() + .bucket(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .assumeRole(OssAssumeRole) +// .assumeRolePolicy(java.lang.String) +// .assumeRoleRoleArn(java.lang.String) +// .assumeRoleSessionExpiration(java.lang.Number) +// .assumeRoleSessionName(java.lang.String) +// .ecsRoleName(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .key(java.lang.String) +// .prefix(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .secretKey(java.lang.String) +// .securityToken(java.lang.String) +// .sharedCredentialsFile(java.lang.String) +// .stsEndpoint(java.lang.String) +// .tablestoreEndpoint(java.lang.String) +// .tablestoreTable(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | java.lang.String | (Required) The name of the OSS bucket. | +| accessKey | java.lang.String | (Optional) Alibaba Cloud access key. | +| acl | java.lang.String | (Optional) Object ACL to be applied to the state file. | +| assumeRole | OssAssumeRole | _No description._ | +| assumeRolePolicy | java.lang.String | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assumeRoleRoleArn | java.lang.String | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assumeRoleSessionExpiration | java.lang.Number | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assumeRoleSessionName | java.lang.String | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecsRoleName | java.lang.String | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | java.lang.Boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) A custom endpoint for the OSS API. | +| key | java.lang.String | (Optional) The name of the state file. | +| prefix | java.lang.String | (Optional) The path directory of the state file will be stored. | +| profile | java.lang.String | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | java.lang.String | (Optional) The region of the OSS bucket. | +| secretKey | java.lang.String | (Optional) Alibaba Cloud secret access key. | +| securityToken | java.lang.String | (Optional) STS access token. | +| sharedCredentialsFile | java.lang.String | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| stsEndpoint | java.lang.String | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestoreEndpoint | java.lang.String | (Optional) A custom endpoint for the TableStore API. | +| tablestoreTable | java.lang.String | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +(Required) The name of the OSS bucket. + +--- + +##### `accessKey`Optional + +```java +public java.lang.String getAccessKey(); +``` + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +```java +public java.lang.String getAcl(); +``` + +- _Type:_ java.lang.String + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```java +public OssAssumeRole getAssumeRole(); +``` + +- _Type:_ OssAssumeRole + +--- + +##### `assumeRolePolicy`Optional + +```java +public java.lang.String getAssumeRolePolicy(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assumeRoleRoleArn`Optional + +```java +public java.lang.String getAssumeRoleRoleArn(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assumeRoleSessionExpiration`Optional + +```java +public java.lang.Number getAssumeRoleSessionExpiration(); +``` + +- _Type:_ java.lang.Number + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assumeRoleSessionName`Optional + +```java +public java.lang.String getAssumeRoleSessionName(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecsRoleName`Optional + +```java +public java.lang.String getEcsRoleName(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +```java +public java.lang.Boolean getEncrypt(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```java +public java.lang.String getPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +```java +public java.lang.String getProfile(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +```java +public java.lang.String getRegion(); +``` + +- _Type:_ java.lang.String + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secretKey`Optional + +```java +public java.lang.String getSecretKey(); +``` + +- _Type:_ java.lang.String + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `securityToken`Optional + +```java +public java.lang.String getSecurityToken(); +``` + +- _Type:_ java.lang.String + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `sharedCredentialsFile`Optional + +```java +public java.lang.String getSharedCredentialsFile(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `stsEndpoint`Optional + +```java +public java.lang.String getStsEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestoreEndpoint`Optional + +```java +public java.lang.String getTablestoreEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestoreTable`Optional + +```java +public java.lang.String getTablestoreTable(); +``` + +- _Type:_ java.lang.String + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### PgBackendConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.PgBackendConfig; + +PgBackendConfig.builder() + .connStr(java.lang.String) +// .schemaName(java.lang.String) +// .skipIndexCreation(java.lang.Boolean) +// .skipSchemaCreation(java.lang.Boolean) +// .skipTableCreation(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------------------ | ------------------------------------------------------------------------------------- | +| connStr | java.lang.String | Postgres connection string; | +| schemaName | java.lang.String | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skipIndexCreation | java.lang.Boolean | If set to true, the Postgres index must already exist. | +| skipSchemaCreation | java.lang.Boolean | If set to true, the Postgres schema must already exist. | +| skipTableCreation | java.lang.Boolean | If set to true, the Postgres table must already exist. | + +--- + +##### `connStr`Required + +```java +public java.lang.String getConnStr(); +``` + +- _Type:_ java.lang.String + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schemaName`Optional + +```java +public java.lang.String getSchemaName(); +``` + +- _Type:_ java.lang.String + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skipIndexCreation`Optional + +```java +public java.lang.Boolean getSkipIndexCreation(); +``` + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skipSchemaCreation`Optional + +```java +public java.lang.Boolean getSkipSchemaCreation(); +``` + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skipTableCreation`Optional + +```java +public java.lang.Boolean getSkipTableCreation(); +``` + +- _Type:_ java.lang.Boolean + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### Postcondition + +Terraform checks a postcondition after evaluating the object it is associated with. + +#### Initializer + +```java +import com.hashicorp.cdktf.Postcondition; + +Postcondition.builder() + .condition(java.lang.Object) + .errorMessage(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | java.lang.Object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | java.lang.String | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```java +public java.lang.Object getCondition(); +``` + +- _Type:_ java.lang.Object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```java +public java.lang.String getErrorMessage(); +``` + +- _Type:_ java.lang.String + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### Precondition + +Terraform checks a precondition before evaluating the object it is associated with. + +#### Initializer + +```java +import com.hashicorp.cdktf.Precondition; + +Precondition.builder() + .condition(java.lang.Object) + .errorMessage(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | java.lang.Object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | java.lang.String | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```java +public java.lang.Object getCondition(); +``` + +- _Type:_ java.lang.Object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```java +public java.lang.String getErrorMessage(); +``` + +- _Type:_ java.lang.String + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### RemoteBackendConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.RemoteBackendConfig; + +RemoteBackendConfig.builder() + .organization(java.lang.String) + .workspaces(IRemoteWorkspace) +// .hostname(java.lang.String) +// .token(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| organization | java.lang.String | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | + +--- + +##### `organization`Required + +```java +public java.lang.String getOrganization(); +``` + +- _Type:_ java.lang.String + +--- + +##### `workspaces`Required + +```java +public IRemoteWorkspace getWorkspaces(); +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +```java +public java.lang.String getHostname(); +``` + +- _Type:_ java.lang.String + +--- + +##### `token`Optional + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +--- + +### RemoteExecProvisioner + +The remote-exec provisioner invokes a script on a remote resource after it is created. + +This can be used to run a configuration management tool, bootstrap into a cluster, etc +The remote-exec provisioner requires a connection and supports both ssh and winrm. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/remote-exec remote-exec} + +#### Initializer + +```java +import com.hashicorp.cdktf.RemoteExecProvisioner; + +RemoteExecProvisioner.builder() + .type(java.lang.String) +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .inline(java.util.List< java.lang.String >) +// .script(java.lang.String) +// .scripts(java.util.List< java.lang.String >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| type | java.lang.String | _No description._ | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| inline | java.util.List< java.lang.String > | This is a list of command strings. | +| script | java.lang.String | This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. | +| scripts | java.util.List< java.lang.String > | This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. | + +--- + +##### `type`Required + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +A connection must be provided here or in the parent resource. + +--- + +##### `inline`Optional + +```java +public java.util.List< java.lang.String > getInline(); +``` + +- _Type:_ java.util.List< java.lang.String > + +This is a list of command strings. + +They are executed in the order they are provided. +This cannot be provided with script or scripts. + +--- + +##### `script`Optional + +```java +public java.lang.String getScript(); +``` + +- _Type:_ java.lang.String + +This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. + +This cannot be provided with inline or scripts. + +--- + +##### `scripts`Optional + +```java +public java.util.List< java.lang.String > getScripts(); +``` + +- _Type:_ java.util.List< java.lang.String > + +This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. + +They are executed in the order they are provided. +This cannot be provided with inline or script. + +--- + +### ResolveOptions + +Options to the resolve() operation. + +NOT the same as the ResolveContext; ResolveContext is exposed to Token +implementors and resolution hooks, whereas this struct is just to bundle +a number of things that would otherwise be arguments to resolve() in a +readable way. + +#### Initializer + +```java +import com.hashicorp.cdktf.ResolveOptions; + +ResolveOptions.builder() + .resolver(ITokenResolver) + .scope(IConstruct) +// .preparing(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------- | +| resolver | ITokenResolver | The resolver to apply to any resolvable tokens found. | +| scope | software.constructs.IConstruct | The scope from which resolution is performed. | +| preparing | java.lang.Boolean | Whether the resolution is being executed during the prepare phase or not. | + +--- + +##### `resolver`Required + +```java +public ITokenResolver getResolver(); +``` + +- _Type:_ ITokenResolver + +The resolver to apply to any resolvable tokens found. + +--- + +##### `scope`Required + +```java +public IConstruct getScope(); +``` + +- _Type:_ software.constructs.IConstruct + +The scope from which resolution is performed. + +--- + +##### `preparing`Optional + +```java +public java.lang.Boolean getPreparing(); +``` + +- _Type:_ java.lang.Boolean +- _Default:_ false + +Whether the resolution is being executed during the prepare phase or not. + +--- + +### S3BackendAssumeRoleConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.S3BackendAssumeRoleConfig; + +S3BackendAssumeRoleConfig.builder() + .roleArn(java.lang.String) +// .duration(java.lang.String) +// .externalId(java.lang.String) +// .policy(java.lang.String) +// .policyArns(java.util.List< java.lang.String >) +// .sessionName(java.lang.String) +// .sourceIdentity(java.lang.String) +// .tags(java.util.Map< java.lang.String, java.lang.String >) +// .transitiveTagKeys(java.util.List< java.lang.String >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| roleArn | java.lang.String | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| duration | java.lang.String | (Optional) The duration individual credentials will be valid. | +| externalId | java.lang.String | (Optional) External identifier to use when assuming the role. | +| policy | java.lang.String | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| policyArns | java.util.List< java.lang.String > | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| sessionName | java.lang.String | (Optional) Session name to use when assuming the role. | +| sourceIdentity | java.lang.String | (Optional) Source identity specified by the principal assuming the. | +| tags | java.util.Map< java.lang.String, java.lang.String > | (Optional) Map of assume role session tags. | +| transitiveTagKeys | java.util.List< java.lang.String > | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | + +--- + +##### `roleArn`Required + +```java +public java.lang.String getRoleArn(); +``` + +- _Type:_ java.lang.String + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `duration`Optional + +```java +public java.lang.String getDuration(); +``` + +- _Type:_ java.lang.String + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `externalId`Optional + +```java +public java.lang.String getExternalId(); +``` + +- _Type:_ java.lang.String + +(Optional) External identifier to use when assuming the role. + +--- + +##### `policy`Optional + +```java +public java.lang.String getPolicy(); +``` + +- _Type:_ java.lang.String + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `policyArns`Optional + +```java +public java.util.List< java.lang.String > getPolicyArns(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `sessionName`Optional + +```java +public java.lang.String getSessionName(); +``` + +- _Type:_ java.lang.String + +(Optional) Session name to use when assuming the role. + +--- + +##### `sourceIdentity`Optional + +```java +public java.lang.String getSourceIdentity(); +``` + +- _Type:_ java.lang.String + +(Optional) Source identity specified by the principal assuming the. + +--- + +##### `tags`Optional + +```java +public java.util.Map< java.lang.String, java.lang.String > getTags(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +(Optional) Map of assume role session tags. + +--- + +##### `transitiveTagKeys`Optional + +```java +public java.util.List< java.lang.String > getTransitiveTagKeys(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +### S3BackendAssumeRoleWithWebIdentityConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.S3BackendAssumeRoleWithWebIdentityConfig; + +S3BackendAssumeRoleWithWebIdentityConfig.builder() +// .duration(java.lang.String) +// .policy(java.lang.String) +// .policyArns(java.util.List< java.lang.String >) +// .roleArn(java.lang.String) +// .sessionName(java.lang.String) +// .webIdentityToken(java.lang.String) +// .webIdentityTokenFile(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| duration | java.lang.String | (Optional) The duration individual credentials will be valid. | +| policy | java.lang.String | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| policyArns | java.util.List< java.lang.String > | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| roleArn | java.lang.String | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| sessionName | java.lang.String | (Optional) Session name to use when assuming the role. | +| webIdentityToken | java.lang.String | (Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. | +| webIdentityTokenFile | java.lang.String | (Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. | + +--- + +##### `duration`Optional + +```java +public java.lang.String getDuration(); +``` + +- _Type:_ java.lang.String + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `policy`Optional + +```java +public java.lang.String getPolicy(); +``` + +- _Type:_ java.lang.String + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `policyArns`Optional + +```java +public java.util.List< java.lang.String > getPolicyArns(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `roleArn`Optional + +```java +public java.lang.String getRoleArn(); +``` + +- _Type:_ java.lang.String + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +Can also be set with the AWS_ROLE_ARN environment variable. + +--- + +##### `sessionName`Optional + +```java +public java.lang.String getSessionName(); +``` + +- _Type:_ java.lang.String + +(Optional) Session name to use when assuming the role. + +Can also be set with the AWS_ROLE_SESSION_NAME environment variable. + +--- + +##### `webIdentityToken`Optional + +```java +public java.lang.String getWebIdentityToken(); +``` + +- _Type:_ java.lang.String + +(Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token or web_identity_token_file is required. + +--- + +##### `webIdentityTokenFile`Optional + +```java +public java.lang.String getWebIdentityTokenFile(); +``` + +- _Type:_ java.lang.String + +(Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token_file or web_identity_token is required. +Can also be set with the AWS_WEB_IDENTITY_TOKEN_FILE environment variable. + +--- + +### S3BackendConfig + +Stores the state as a given key in a given bucket on Amazon S3. + +This backend +also supports state locking and consistency checking via Dynamo DB, which +can be enabled by setting the dynamodb_table field to an existing DynamoDB +table name. A single DynamoDB table can be used to lock multiple remote +state files. Terraform generates key names that include the values of the +bucket and key variables. + +Warning! It is highly recommended that you enable Bucket Versioning on the +S3 bucket to allow for state recovery in the case of accidental deletions +and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/s3 + +#### Initializer + +```java +import com.hashicorp.cdktf.S3BackendConfig; + +S3BackendConfig.builder() + .bucket(java.lang.String) + .key(java.lang.String) +// .accessKey(java.lang.String) +// .acl(java.lang.String) +// .allowedAccountIds(java.util.List< java.lang.String >) +// .assumeRole(S3BackendAssumeRoleConfig) +// .assumeRolePolicy(java.lang.String) +// .assumeRolePolicyArns(java.util.List< java.lang.String >) +// .assumeRoleTags(java.util.Map< java.lang.String, java.lang.String >) +// .assumeRoleTransitiveTagKeys(java.util.List< java.lang.String >) +// .assumeRoleWithWebIdentity(S3BackendAssumeRoleWithWebIdentityConfig) +// .customCaBundle(java.lang.String) +// .dynamodbEndpoint(java.lang.String) +// .dynamodbTable(java.lang.String) +// .ec2MetadataServiceEndpoint(java.lang.String) +// .ec2MetadataServiceEndpointMode(java.lang.String) +// .encrypt(java.lang.Boolean) +// .endpoint(java.lang.String) +// .endpoints(S3BackendEndpointConfig) +// .externalId(java.lang.String) +// .forbiddenAccountIds(java.util.List< java.lang.String >) +// .forcePathStyle(java.lang.Boolean) +// .httpProxy(java.lang.String) +// .httpsProxy(java.lang.String) +// .iamEndpoint(java.lang.String) +// .insecure(java.lang.Boolean) +// .kmsKeyId(java.lang.String) +// .maxRetries(java.lang.Number) +// .noProxy(java.lang.String) +// .profile(java.lang.String) +// .region(java.lang.String) +// .retryMode(java.lang.String) +// .roleArn(java.lang.String) +// .secretKey(java.lang.String) +// .sessionName(java.lang.String) +// .sharedConfigFiles(java.util.List< java.lang.String >) +// .sharedCredentialsFile(java.lang.String) +// .sharedCredentialsFiles(java.util.List< java.lang.String >) +// .skipCredentialsValidation(java.lang.Boolean) +// .skipMetadataApiCheck(java.lang.Boolean) +// .skipRegionValidation(java.lang.Boolean) +// .skipRequestingAccountId(java.lang.Boolean) +// .skipS3Checksum(java.lang.Boolean) +// .sseCustomerKey(java.lang.String) +// .stsEndpoint(java.lang.String) +// .stsRegion(java.lang.String) +// .token(java.lang.String) +// .useLegacyWorkflow(java.lang.Boolean) +// .usePathStyle(java.lang.Boolean) +// .workspaceKeyPrefix(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | java.lang.String | Name of the S3 Bucket. | +| key | java.lang.String | Path to the state file inside the S3 Bucket. | +| accessKey | java.lang.String | (Optional) AWS access key. | +| acl | java.lang.String | (Optional) Canned ACL to be applied to the state file. | +| allowedAccountIds | java.util.List< java.lang.String > | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assumeRolePolicy | java.lang.String | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assumeRolePolicyArns | java.util.List< java.lang.String > | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assumeRoleTags | java.util.Map< java.lang.String, java.lang.String > | (Optional) Map of assume role session tags. | +| assumeRoleTransitiveTagKeys | java.util.List< java.lang.String > | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| customCaBundle | java.lang.String | (Optional) File containing custom root and intermediate certificates. | +| dynamodbEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodbTable | java.lang.String | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2MetadataServiceEndpoint | java.lang.String | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2MetadataServiceEndpointMode | java.lang.String | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | java.lang.Boolean | (Optional) Enable server side encryption of the state file. | +| endpoint | java.lang.String | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| externalId | java.lang.String | (Optional) External identifier to use when assuming the role. | +| forbiddenAccountIds | java.util.List< java.lang.String > | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| forcePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| httpProxy | java.lang.String | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| httpsProxy | java.lang.String | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iamEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | java.lang.Boolean | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kmsKeyId | java.lang.String | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| maxRetries | java.lang.Number | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| noProxy | java.lang.String | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | java.lang.String | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | java.lang.String | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retryMode | java.lang.String | (Optional) Specifies how retries are attempted. | +| roleArn | java.lang.String | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secretKey | java.lang.String | (Optional) AWS secret access key. | +| sessionName | java.lang.String | (Optional) Session name to use when assuming the role. | +| sharedConfigFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared configuration files. | +| sharedCredentialsFile | java.lang.String | (Optional) Path to the AWS shared credentials file. | +| sharedCredentialsFiles | java.util.List< java.lang.String > | (Optional) List of paths to AWS shared credentials files. | +| skipCredentialsValidation | java.lang.Boolean | (Optional) Skip credentials validation via the STS API. | +| skipMetadataApiCheck | java.lang.Boolean | (Optional) Skip usage of EC2 Metadata API. | +| skipRegionValidation | java.lang.Boolean | (Optional) Skip validation of provided region name. | +| skipRequestingAccountId | java.lang.Boolean | (Optional) Whether to skip requesting the account ID. | +| skipS3Checksum | java.lang.Boolean | (Optional) Do not include checksum when uploading S3 Objects. | +| sseCustomerKey | java.lang.String | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| stsEndpoint | java.lang.String | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| stsRegion | java.lang.String | (Optional) AWS region for STS. | +| token | java.lang.String | (Optional) Multi-Factor Authentication (MFA) token. | +| useLegacyWorkflow | java.lang.Boolean | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| usePathStyle | java.lang.Boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspaceKeyPrefix | java.lang.String | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `bucket`Required + +```java +public java.lang.String getBucket(); +``` + +- _Type:_ java.lang.String + +Name of the S3 Bucket. + +--- + +##### `key`Required + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `accessKey`Optional + +```java +public java.lang.String getAccessKey(); +``` + +- _Type:_ java.lang.String + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +```java +public java.lang.String getAcl(); +``` + +- _Type:_ java.lang.String + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowedAccountIds`Optional + +```java +public java.util.List< java.lang.String > getAllowedAccountIds(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assumeRole`Optional + +```java +public S3BackendAssumeRoleConfig getAssumeRole(); +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```java +public java.lang.String getAssumeRolePolicy(); +``` + +- _Type:_ java.lang.String + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```java +public java.util.List< java.lang.String > getAssumeRolePolicyArns(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```java +public java.util.Map< java.lang.String, java.lang.String > getAssumeRoleTags(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.String > + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```java +public java.util.List< java.lang.String > getAssumeRoleTransitiveTagKeys(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assumeRoleWithWebIdentity`Optional + +```java +public S3BackendAssumeRoleWithWebIdentityConfig getAssumeRoleWithWebIdentity(); +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `customCaBundle`Optional + +```java +public java.lang.String getCustomCaBundle(); +``` + +- _Type:_ java.lang.String + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```java +public java.lang.String getDynamodbEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodbTable`Optional + +```java +public java.lang.String getDynamodbTable(); +``` + +- _Type:_ java.lang.String + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2MetadataServiceEndpoint`Optional + +```java +public java.lang.String getEc2MetadataServiceEndpoint(); +``` + +- _Type:_ java.lang.String + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2MetadataServiceEndpointMode`Optional + +```java +public java.lang.String getEc2MetadataServiceEndpointMode(); +``` + +- _Type:_ java.lang.String + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +```java +public java.lang.Boolean getEncrypt(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```java +public java.lang.String getEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +```java +public S3BackendEndpointConfig getEndpoints(); +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`externalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```java +public java.lang.String getExternalId(); +``` + +- _Type:_ java.lang.String + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbiddenAccountIds`Optional + +```java +public java.util.List< java.lang.String > getForbiddenAccountIds(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`forcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```java +public java.lang.Boolean getForcePathStyle(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `httpProxy`Optional + +```java +public java.lang.String getHttpProxy(); +``` + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `httpsProxy`Optional + +```java +public java.lang.String getHttpsProxy(); +``` + +- _Type:_ java.lang.String + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```java +public java.lang.String getIamEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +```java +public java.lang.Boolean getInsecure(); +``` + +- _Type:_ java.lang.Boolean + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kmsKeyId`Optional + +```java +public java.lang.String getKmsKeyId(); +``` + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `maxRetries`Optional + +```java +public java.lang.Number getMaxRetries(); +``` + +- _Type:_ java.lang.Number + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `noProxy`Optional + +```java +public java.lang.String getNoProxy(); +``` + +- _Type:_ java.lang.String + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +```java +public java.lang.String getProfile(); +``` + +- _Type:_ java.lang.String + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +```java +public java.lang.String getRegion(); +``` + +- _Type:_ java.lang.String + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retryMode`Optional + +```java +public java.lang.String getRetryMode(); +``` + +- _Type:_ java.lang.String + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`roleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```java +public java.lang.String getRoleArn(); +``` + +- _Type:_ java.lang.String + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secretKey`Optional + +```java +public java.lang.String getSecretKey(); +``` + +- _Type:_ java.lang.String + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`sessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```java +public java.lang.String getSessionName(); +``` + +- _Type:_ java.lang.String + +(Optional) Session name to use when assuming the role. + +--- + +##### `sharedConfigFiles`Optional + +```java +public java.util.List< java.lang.String > getSharedConfigFiles(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `sharedCredentialsFile`Optional + +```java +public java.lang.String getSharedCredentialsFile(); +``` + +- _Type:_ java.lang.String + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `sharedCredentialsFiles`Optional + +```java +public java.util.List< java.lang.String > getSharedCredentialsFiles(); +``` + +- _Type:_ java.util.List< java.lang.String > + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skipCredentialsValidation`Optional + +```java +public java.lang.Boolean getSkipCredentialsValidation(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skipMetadataApiCheck`Optional + +```java +public java.lang.Boolean getSkipMetadataApiCheck(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skipRegionValidation`Optional + +```java +public java.lang.Boolean getSkipRegionValidation(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Skip validation of provided region name. + +--- + +##### `skipRequestingAccountId`Optional + +```java +public java.lang.Boolean getSkipRequestingAccountId(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skipS3Checksum`Optional + +```java +public java.lang.Boolean getSkipS3Checksum(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sseCustomerKey`Optional + +```java +public java.lang.String getSseCustomerKey(); +``` + +- _Type:_ java.lang.String + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`stsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```java +public java.lang.String getStsEndpoint(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `stsRegion`Optional + +```java +public java.lang.String getStsRegion(); +``` + +- _Type:_ java.lang.String + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `useLegacyWorkflow`Optional + +```java +public java.lang.Boolean getUseLegacyWorkflow(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `usePathStyle`Optional + +```java +public java.lang.Boolean getUsePathStyle(); +``` + +- _Type:_ java.lang.Boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspaceKeyPrefix`Optional + +```java +public java.lang.String getWorkspaceKeyPrefix(); +``` + +- _Type:_ java.lang.String + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### S3BackendEndpointConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.S3BackendEndpointConfig; + +S3BackendEndpointConfig.builder() +// .dynamodb(java.lang.String) +// .iam(java.lang.String) +// .s3(java.lang.String) +// .sso(java.lang.String) +// .sts(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------------------------------------- | +| dynamodb | java.lang.String | (Optional) Custom endpoint URL for the AWS DynamoDB API. | +| iam | java.lang.String | (Optional) Custom endpoint URL for the AWS IAM API. | +| s3 | java.lang.String | (Optional) Custom endpoint URL for the AWS S3 API. | +| sso | java.lang.String | (Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. | +| sts | java.lang.String | (Optional) Custom endpoint URL for the AWS STS API. | + +--- + +##### `dynamodb`Optional + +```java +public java.lang.String getDynamodb(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint URL for the AWS DynamoDB API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_DYNAMODB or the deprecated environment variable AWS_DYNAMODB_ENDPOINT. + +--- + +##### `iam`Optional + +```java +public java.lang.String getIam(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint URL for the AWS IAM API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_IAM or the deprecated environment variable AWS_IAM_ENDPOINT. + +--- + +##### `s3`Optional + +```java +public java.lang.String getS3(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint URL for the AWS S3 API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_S3 or the deprecated environment variable AWS_S3_ENDPOINT. + +--- + +##### `sso`Optional + +```java +public java.lang.String getSso(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_SSO. + +--- + +##### `sts`Optional + +```java +public java.lang.String getSts(); +``` + +- _Type:_ java.lang.String + +(Optional) Custom endpoint URL for the AWS STS API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_STS or the deprecated environment variable AWS_STS_ENDPOINT. + +--- + +### SSHProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```java +import com.hashicorp.cdktf.SSHProvisionerConnection; + +SSHProvisionerConnection.builder() + .host(java.lang.String) + .type(java.lang.String) +// .agent(java.lang.String) +// .agentIdentity(java.lang.String) +// .bastionCertificate(java.lang.String) +// .bastionHost(java.lang.String) +// .bastionHostKey(java.lang.String) +// .bastionPassword(java.lang.String) +// .bastionPort(java.lang.Number) +// .bastionPrivateKey(java.lang.String) +// .bastionUser(java.lang.String) +// .certificate(java.lang.String) +// .hostKey(java.lang.String) +// .password(java.lang.String) +// .port(java.lang.Number) +// .privateKey(java.lang.String) +// .proxyHost(java.lang.String) +// .proxyPort(java.lang.Number) +// .proxyScheme(java.lang.String) +// .proxyUserName(java.lang.String) +// .proxyUserPassword(java.lang.String) +// .scriptPath(java.lang.String) +// .targetPlatform(java.lang.String) +// .timeout(java.lang.String) +// .user(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------- | +| host | java.lang.String | The address of the resource to connect to. | +| type | java.lang.String | The connection type. | +| agent | java.lang.String | Set to false to disable using ssh-agent to authenticate. | +| agentIdentity | java.lang.String | The preferred identity from the ssh agent for authentication. | +| bastionCertificate | java.lang.String | The contents of a signed CA Certificate. | +| bastionHost | java.lang.String | Setting this enables the bastion Host connection. | +| bastionHostKey | java.lang.String | The public key from the remote host or the signing CA, used to verify the host connection. | +| bastionPassword | java.lang.String | The password to use for the bastion host. | +| bastionPort | java.lang.Number | The port to use connect to the bastion host. | +| bastionPrivateKey | java.lang.String | The contents of an SSH key file to use for the bastion host. | +| bastionUser | java.lang.String | The user for the connection to the bastion host. | +| certificate | java.lang.String | The contents of a signed CA Certificate. | +| hostKey | java.lang.String | The public key from the remote host or the signing CA, used to verify the connection. | +| password | java.lang.String | The password to use for the connection. | +| port | java.lang.Number | The port to connect to. | +| privateKey | java.lang.String | The contents of an SSH key to use for the connection. | +| proxyHost | java.lang.String | Setting this enables the SSH over HTTP connection. | +| proxyPort | java.lang.Number | The port to use connect to the proxy host. | +| proxyScheme | java.lang.String | The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. | +| proxyUserName | java.lang.String | The username to use connect to the private proxy host. | +| proxyUserPassword | java.lang.String | The password to use connect to the private proxy host. | +| scriptPath | java.lang.String | The path used to copy scripts meant for remote execution. | +| targetPlatform | java.lang.String | The target platform to connect to. | +| timeout | java.lang.String | The timeout to wait for the connection to become available. | +| user | java.lang.String | The user to use for the connection. | + +--- + +##### `host`Required + +```java +public java.lang.String getHost(); +``` + +- _Type:_ java.lang.String + +The address of the resource to connect to. + +--- + +##### `type`Required + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `agent`Optional + +```java +public java.lang.String getAgent(); +``` + +- _Type:_ java.lang.String + +Set to false to disable using ssh-agent to authenticate. + +On Windows the only supported SSH authentication agent is Pageant. + +--- + +##### `agentIdentity`Optional + +```java +public java.lang.String getAgentIdentity(); +``` + +- _Type:_ java.lang.String + +The preferred identity from the ssh agent for authentication. + +--- + +##### `bastionCertificate`Optional + +```java +public java.lang.String getBastionCertificate(); +``` + +- _Type:_ java.lang.String + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a bastion_private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `bastionHost`Optional + +```java +public java.lang.String getBastionHost(); +``` + +- _Type:_ java.lang.String + +Setting this enables the bastion Host connection. + +The provisioner will connect to bastion_host first, and then connect from there to host. + +--- + +##### `bastionHostKey`Optional + +```java +public java.lang.String getBastionHostKey(); +``` + +- _Type:_ java.lang.String + +The public key from the remote host or the signing CA, used to verify the host connection. + +--- + +##### `bastionPassword`Optional + +```java +public java.lang.String getBastionPassword(); +``` + +- _Type:_ java.lang.String + +The password to use for the bastion host. + +--- + +##### `bastionPort`Optional + +```java +public java.lang.Number getBastionPort(); +``` + +- _Type:_ java.lang.Number + +The port to use connect to the bastion host. + +--- + +##### `bastionPrivateKey`Optional + +```java +public java.lang.String getBastionPrivateKey(); +``` + +- _Type:_ java.lang.String + +The contents of an SSH key file to use for the bastion host. + +These can be loaded from a file on disk using the file function. + +--- + +##### `bastionUser`Optional + +```java +public java.lang.String getBastionUser(); +``` + +- _Type:_ java.lang.String + +The user for the connection to the bastion host. + +--- + +##### `certificate`Optional + +```java +public java.lang.String getCertificate(); +``` + +- _Type:_ java.lang.String + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `hostKey`Optional + +```java +public java.lang.String getHostKey(); +``` + +- _Type:_ java.lang.String + +The public key from the remote host or the signing CA, used to verify the connection. + +--- + +##### `password`Optional + +```java +public java.lang.String getPassword(); +``` + +- _Type:_ java.lang.String + +The password to use for the connection. + +--- + +##### `port`Optional + +```java +public java.lang.Number getPort(); +``` + +- _Type:_ java.lang.Number +- _Default:_ 22 + +The port to connect to. + +--- + +##### `privateKey`Optional + +```java +public java.lang.String getPrivateKey(); +``` + +- _Type:_ java.lang.String + +The contents of an SSH key to use for the connection. + +These can be loaded from a file on disk using the file function. +This takes preference over password if provided. + +--- + +##### `proxyHost`Optional + +```java +public java.lang.String getProxyHost(); +``` + +- _Type:_ java.lang.String + +Setting this enables the SSH over HTTP connection. + +This host will be connected to first, and then the host or bastion_host connection will be made from there. + +--- + +##### `proxyPort`Optional + +```java +public java.lang.Number getProxyPort(); +``` + +- _Type:_ java.lang.Number + +The port to use connect to the proxy host. + +--- + +##### `proxyScheme`Optional + +```java +public java.lang.String getProxyScheme(); +``` + +- _Type:_ java.lang.String + +The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. + +--- + +##### `proxyUserName`Optional + +```java +public java.lang.String getProxyUserName(); +``` + +- _Type:_ java.lang.String + +The username to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `proxyUserPassword`Optional + +```java +public java.lang.String getProxyUserPassword(); +``` + +- _Type:_ java.lang.String + +The password to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `scriptPath`Optional + +```java +public java.lang.String getScriptPath(); +``` + +- _Type:_ java.lang.String + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `targetPlatform`Optional + +```java +public java.lang.String getTargetPlatform(); +``` + +- _Type:_ java.lang.String +- _Default:_ unix + +The target platform to connect to. + +Valid values are "windows" and "unix". +If the platform is set to windows, the default script*path is c:\windows\temp\terraform*%RAND%.cmd, assuming the SSH default shell is cmd.exe. +If the SSH default shell is PowerShell, set script*path to "c:/windows/temp/terraform*%RAND%.ps1" + +--- + +##### `timeout`Optional + +```java +public java.lang.String getTimeout(); +``` + +- _Type:_ java.lang.String +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `user`Optional + +```java +public java.lang.String getUser(); +``` + +- _Type:_ java.lang.String +- _Default:_ root + +The user to use for the connection. + +--- + +### StackAnnotation + +#### Initializer + +```java +import com.hashicorp.cdktf.StackAnnotation; + +StackAnnotation.builder() + .constructPath(java.lang.String) + .level(AnnotationMetadataEntryType) + .message(java.lang.String) +// .stacktrace(java.util.List< java.lang.String >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | +| constructPath | java.lang.String | _No description._ | +| level | AnnotationMetadataEntryType | _No description._ | +| message | java.lang.String | _No description._ | +| stacktrace | java.util.List< java.lang.String > | _No description._ | + +--- + +##### `constructPath`Required + +```java +public java.lang.String getConstructPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `level`Required + +```java +public AnnotationMetadataEntryType getLevel(); +``` + +- _Type:_ AnnotationMetadataEntryType + +--- + +##### `message`Required + +```java +public java.lang.String getMessage(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stacktrace`Optional + +```java +public java.util.List< java.lang.String > getStacktrace(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +### StackManifest + +#### Initializer + +```java +import com.hashicorp.cdktf.StackManifest; + +StackManifest.builder() + .annotations(java.util.List< StackAnnotation >) + .constructPath(java.lang.String) + .dependencies(java.util.List< java.lang.String >) + .name(java.lang.String) + .stackMetadataPath(java.lang.String) + .synthesizedStackPath(java.lang.String) + .workingDirectory(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------- | +| annotations | java.util.List< StackAnnotation> | _No description._ | +| constructPath | java.lang.String | _No description._ | +| dependencies | java.util.List< java.lang.String > | _No description._ | +| name | java.lang.String | _No description._ | +| stackMetadataPath | java.lang.String | _No description._ | +| synthesizedStackPath | java.lang.String | _No description._ | +| workingDirectory | java.lang.String | _No description._ | + +--- + +##### `annotations`Required + +```java +public java.util.List< StackAnnotation > getAnnotations(); +``` + +- _Type:_ java.util.List< StackAnnotation> + +--- + +##### `constructPath`Required + +```java +public java.lang.String getConstructPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `dependencies`Required + +```java +public java.util.List< java.lang.String > getDependencies(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `name`Required + +```java +public java.lang.String getName(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stackMetadataPath`Required + +```java +public java.lang.String getStackMetadataPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `synthesizedStackPath`Required + +```java +public java.lang.String getSynthesizedStackPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `workingDirectory`Required + +```java +public java.lang.String getWorkingDirectory(); +``` + +- _Type:_ java.lang.String + +--- + +### SwiftBackendConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.SwiftBackendConfig; + +SwiftBackendConfig.builder() + .container(java.lang.String) +// .applicationCredentialId(java.lang.String) +// .applicationCredentialName(java.lang.String) +// .applicationCredentialSecret(java.lang.String) +// .archiveContainer(java.lang.String) +// .authUrl(java.lang.String) +// .cacertFile(java.lang.String) +// .cert(java.lang.String) +// .cloud(java.lang.String) +// .defaultDomain(java.lang.String) +// .domainId(java.lang.String) +// .domainName(java.lang.String) +// .expireAfter(java.lang.String) +// .insecure(java.lang.Boolean) +// .key(java.lang.String) +// .password(java.lang.String) +// .projectDomainId(java.lang.String) +// .projectDomainName(java.lang.String) +// .regionName(java.lang.String) +// .stateName(java.lang.String) +// .tenantId(java.lang.String) +// .tenantName(java.lang.String) +// .token(java.lang.String) +// .userDomainId(java.lang.String) +// .userDomainName(java.lang.String) +// .userId(java.lang.String) +// .userName(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ----------------- | +| container | java.lang.String | _No description._ | +| applicationCredentialId | java.lang.String | _No description._ | +| applicationCredentialName | java.lang.String | _No description._ | +| applicationCredentialSecret | java.lang.String | _No description._ | +| archiveContainer | java.lang.String | _No description._ | +| authUrl | java.lang.String | _No description._ | +| cacertFile | java.lang.String | _No description._ | +| cert | java.lang.String | _No description._ | +| cloud | java.lang.String | _No description._ | +| defaultDomain | java.lang.String | _No description._ | +| domainId | java.lang.String | _No description._ | +| domainName | java.lang.String | _No description._ | +| expireAfter | java.lang.String | _No description._ | +| insecure | java.lang.Boolean | _No description._ | +| key | java.lang.String | _No description._ | +| password | java.lang.String | _No description._ | +| projectDomainId | java.lang.String | _No description._ | +| projectDomainName | java.lang.String | _No description._ | +| regionName | java.lang.String | _No description._ | +| stateName | java.lang.String | _No description._ | +| tenantId | java.lang.String | _No description._ | +| tenantName | java.lang.String | _No description._ | +| token | java.lang.String | _No description._ | +| userDomainId | java.lang.String | _No description._ | +| userDomainName | java.lang.String | _No description._ | +| userId | java.lang.String | _No description._ | +| userName | java.lang.String | _No description._ | + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getContainer(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getApplicationCredentialId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getApplicationCredentialName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`applicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getApplicationCredentialSecret(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`archiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getArchiveContainer(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`authUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getAuthUrl(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`cacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getCacertFile(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getCert(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getCloud(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`defaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getDefaultDomain(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`domainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getDomainId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`domainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getDomainName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`expireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getExpireAfter(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.Boolean getInsecure(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getKey(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getPassword(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getProjectDomainId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`projectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getProjectDomainName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`regionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getRegionName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`stateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getStateName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getTenantId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`tenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getTenantName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getToken(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserDomainId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserDomainName(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserId(); +``` + +- _Type:_ java.lang.String + +--- + +##### ~~`userName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```java +public java.lang.String getUserName(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformAssetConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformAssetConfig; + +TerraformAssetConfig.builder() + .path(java.lang.String) +// .assetHash(java.lang.String) +// .type(AssetType) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------- | +| path | java.lang.String | _No description._ | +| assetHash | java.lang.String | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `path`Required + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `assetHash`Optional + +```java +public java.lang.String getAssetHash(); +``` + +- _Type:_ java.lang.String + +--- + +##### `type`Optional + +```java +public AssetType getType(); +``` + +- _Type:_ AssetType + +--- + +### TerraformCondition + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformCondition; + +TerraformCondition.builder() + .condition(java.lang.Object) + .errorMessage(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | java.lang.Object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | java.lang.String | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```java +public java.lang.Object getCondition(); +``` + +- _Type:_ java.lang.Object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```java +public java.lang.String getErrorMessage(); +``` + +- _Type:_ java.lang.String + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TerraformConstructor + +#### Initializer + +```java +import com.hashicorp.cdktf.testing_matchers.TerraformConstructor; + +TerraformConstructor.builder() + .tfResourceType(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tfResourceType | java.lang.String | _No description._ | + +--- + +##### `tfResourceType`Required + +```java +public java.lang.String getTfResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformElementMetadata + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformElementMetadata; + +TerraformElementMetadata.builder() + .path(java.lang.String) + .stackTrace(java.util.List< java.lang.String >) + .uniqueId(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------- | ----------------- | +| path | java.lang.String | _No description._ | +| stackTrace | java.util.List< java.lang.String > | _No description._ | +| uniqueId | java.lang.String | _No description._ | + +--- + +##### `path`Required + +```java +public java.lang.String getPath(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stackTrace`Required + +```java +public java.util.List< java.lang.String > getStackTrace(); +``` + +- _Type:_ java.util.List< java.lang.String > + +--- + +##### `uniqueId`Required + +```java +public java.lang.String getUniqueId(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformHclModuleConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformHclModuleConfig; + +TerraformHclModuleConfig.builder() +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .providers(java.util.List< TerraformProvider) +// .providers(TerraformModuleProvider >) +// .skipAssetCreationFromLocalModules(java.lang.Boolean) + .source(java.lang.String) +// .version(java.lang.String) +// .variables(java.util.Map< java.lang.String, java.lang.Object >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | +| source | java.lang.String | _No description._ | +| version | java.lang.String | _No description._ | +| variables | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```java +public java.lang.Object getProviders(); +``` + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```java +public java.lang.Boolean getSkipAssetCreationFromLocalModules(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `source`Required + +```java +public java.lang.String getSource(); +``` + +- _Type:_ java.lang.String + +--- + +##### `version`Optional + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +##### `variables`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getVariables(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +### TerraformMetaArguments + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformMetaArguments; + +TerraformMetaArguments.builder() +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .count(java.lang.Number) +// .count(TerraformCount) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .lifecycle(TerraformResourceLifecycle) +// .provider(TerraformProvider) +// .provisioners(java.util.List< FileProvisioner) +// .provisioners(LocalExecProvisioner) +// .provisioners(RemoteExecProvisioner >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```java +public java.lang.Object getProvisioners(); +``` + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +### TerraformModuleConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformModuleConfig; + +TerraformModuleConfig.builder() +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .providers(java.util.List< TerraformProvider) +// .providers(TerraformModuleProvider >) +// .skipAssetCreationFromLocalModules(java.lang.Boolean) + .source(java.lang.String) +// .version(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | +| source | java.lang.String | _No description._ | +| version | java.lang.String | _No description._ | + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```java +public java.lang.Object getProviders(); +``` + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```java +public java.lang.Boolean getSkipAssetCreationFromLocalModules(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `source`Required + +```java +public java.lang.String getSource(); +``` + +- _Type:_ java.lang.String + +--- + +##### `version`Optional + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformModuleProvider + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformModuleProvider; + +TerraformModuleProvider.builder() + .moduleAlias(java.lang.String) + .provider(TerraformProvider) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| moduleAlias | java.lang.String | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `moduleAlias`Required + +```java +public java.lang.String getModuleAlias(); +``` + +- _Type:_ java.lang.String + +--- + +##### `provider`Required + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformModuleUserConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformModuleUserConfig; + +TerraformModuleUserConfig.builder() +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .providers(java.util.List< TerraformProvider) +// .providers(TerraformModuleProvider >) +// .skipAssetCreationFromLocalModules(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | java.util.List< TerraformProvider OR TerraformModuleProvider> | _No description._ | +| skipAssetCreationFromLocalModules | java.lang.Boolean | _No description._ | + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```java +public java.lang.Object getProviders(); +``` + +- _Type:_ java.util.List< TerraformProvider OR TerraformModuleProvider> + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```java +public java.lang.Boolean getSkipAssetCreationFromLocalModules(); +``` + +- _Type:_ java.lang.Boolean + +--- + +### TerraformOutputConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformOutputConfig; + +TerraformOutputConfig.builder() + .value(java.lang.Object) +// .dependsOn(java.util.List< ITerraformDependable >) +// .description(java.lang.String) +// .precondition(Precondition) +// .sensitive(java.lang.Boolean) +// .staticId(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | java.lang.Object | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| description | java.lang.String | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | java.lang.Boolean | _No description._ | +| staticId | java.lang.Boolean | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `value`Required + +```java +public java.lang.Object getValue(); +``` + +- _Type:_ java.lang.Object + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `description`Optional + +```java +public java.lang.String getDescription(); +``` + +- _Type:_ java.lang.String + +--- + +##### `precondition`Optional + +```java +public Precondition getPrecondition(); +``` + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +```java +public java.lang.Boolean getSensitive(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `staticId`Optional + +```java +public java.lang.Boolean getStaticId(); +``` + +- _Type:_ java.lang.Boolean +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +### TerraformProviderConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformProviderConfig; + +TerraformProviderConfig.builder() + .terraformResourceType(java.lang.String) +// .terraformGeneratorMetadata(TerraformProviderGeneratorMetadata) +// .terraformProviderSource(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraformProviderSource | java.lang.String | _No description._ | + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +```java +public TerraformProviderGeneratorMetadata getTerraformGeneratorMetadata(); +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraformProviderSource`Optional + +```java +public java.lang.String getTerraformProviderSource(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformProviderGeneratorMetadata + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformProviderGeneratorMetadata; + +TerraformProviderGeneratorMetadata.builder() + .providerName(java.lang.String) +// .providerVersion(java.lang.String) +// .providerVersionConstraint(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| providerName | java.lang.String | _No description._ | +| providerVersion | java.lang.String | _No description._ | +| providerVersionConstraint | java.lang.String | _No description._ | + +--- + +##### `providerName`Required + +```java +public java.lang.String getProviderName(); +``` + +- _Type:_ java.lang.String + +--- + +##### `providerVersion`Optional + +```java +public java.lang.String getProviderVersion(); +``` + +- _Type:_ java.lang.String + +--- + +##### `providerVersionConstraint`Optional + +```java +public java.lang.String getProviderVersionConstraint(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformResourceConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformResourceConfig; + +TerraformResourceConfig.builder() +// .connection(SSHProvisionerConnection) +// .connection(WinrmProvisionerConnection) +// .count(java.lang.Number) +// .count(TerraformCount) +// .dependsOn(java.util.List< ITerraformDependable >) +// .forEach(ITerraformIterator) +// .lifecycle(TerraformResourceLifecycle) +// .provider(TerraformProvider) +// .provisioners(java.util.List< FileProvisioner) +// .provisioners(LocalExecProvisioner) +// .provisioners(RemoteExecProvisioner >) + .terraformResourceType(java.lang.String) +// .terraformGeneratorMetadata(TerraformProviderGeneratorMetadata) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| connection | SSHProvisionerConnection OR WinrmProvisionerConnection | _No description._ | +| count | java.lang.Number OR TerraformCount | _No description._ | +| dependsOn | java.util.List< ITerraformDependable> | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> | _No description._ | +| terraformResourceType | java.lang.String | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `connection`Optional + +```java +public java.lang.Object getConnection(); +``` + +- _Type:_ SSHProvisionerConnection OR WinrmProvisionerConnection + +--- + +##### `count`Optional + +```java +public java.lang.Object getCount(); +``` + +- _Type:_ java.lang.Number OR TerraformCount + +--- + +##### `dependsOn`Optional + +```java +public java.util.List< ITerraformDependable > getDependsOn(); +``` + +- _Type:_ java.util.List< ITerraformDependable> + +--- + +##### `forEach`Optional + +```java +public ITerraformIterator getForEach(); +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```java +public TerraformResourceLifecycle getLifecycle(); +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```java +public java.lang.Object getProvisioners(); +``` + +- _Type:_ java.util.List< FileProvisioner OR LocalExecProvisioner OR RemoteExecProvisioner> + +--- + +##### `terraformResourceType`Required + +```java +public java.lang.String getTerraformResourceType(); +``` + +- _Type:_ java.lang.String + +--- + +##### `terraformGeneratorMetadata`Optional + +```java +public TerraformProviderGeneratorMetadata getTerraformGeneratorMetadata(); +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +### TerraformResourceImport + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformResourceImport; + +TerraformResourceImport.builder() + .id(java.lang.String) +// .provider(TerraformProvider) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| id | java.lang.String | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `id`Required + +```java +public java.lang.String getId(); +``` + +- _Type:_ java.lang.String + +--- + +##### `provider`Optional + +```java +public TerraformProvider getProvider(); +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformResourceLifecycle + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformResourceLifecycle; + +TerraformResourceLifecycle.builder() +// .createBeforeDestroy(java.lang.Boolean) +// .ignoreChanges(java.util.List< java.lang.String >) +// .ignoreChanges(java.lang.String) +// .postcondition(java.util.List< Postcondition >) +// .precondition(java.util.List< Precondition >) +// .preventDestroy(java.lang.Boolean) +// .replaceTriggeredBy(java.util.List< java.lang.String) +// .replaceTriggeredBy(ITerraformDependable >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ----------------- | +| createBeforeDestroy | java.lang.Boolean | _No description._ | +| ignoreChanges | java.util.List< java.lang.String > OR java.lang.String | _No description._ | +| postcondition | java.util.List< Postcondition> | _No description._ | +| precondition | java.util.List< Precondition> | _No description._ | +| preventDestroy | java.lang.Boolean | _No description._ | +| replaceTriggeredBy | java.util.List< java.lang.String OR ITerraformDependable> | _No description._ | + +--- + +##### `createBeforeDestroy`Optional + +```java +public java.lang.Boolean getCreateBeforeDestroy(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `ignoreChanges`Optional + +```java +public java.lang.Object getIgnoreChanges(); +``` + +- _Type:_ java.util.List< java.lang.String > OR java.lang.String + +--- + +##### `postcondition`Optional + +```java +public java.util.List< Postcondition > getPostcondition(); +``` + +- _Type:_ java.util.List< Postcondition> + +--- + +##### `precondition`Optional + +```java +public java.util.List< Precondition > getPrecondition(); +``` + +- _Type:_ java.util.List< Precondition> + +--- + +##### `preventDestroy`Optional + +```java +public java.lang.Boolean getPreventDestroy(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `replaceTriggeredBy`Optional + +```java +public java.lang.Object getReplaceTriggeredBy(); +``` + +- _Type:_ java.util.List< java.lang.String OR ITerraformDependable> + +--- + +### TerraformResourceMoveById + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformResourceMoveById; + +TerraformResourceMoveById.builder() + .from(java.lang.String) + .to(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ----------------------------- | ----------------- | +| from | java.lang.String | _No description._ | +| to | java.lang.String | _No description._ | + +--- + +##### `from`Required + +```java +public java.lang.String getFrom(); +``` + +- _Type:_ java.lang.String + +--- + +##### `to`Required + +```java +public java.lang.String getTo(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformResourceMoveByTarget + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformResourceMoveByTarget; + +TerraformResourceMoveByTarget.builder() + .moveTarget(java.lang.String) +// .index(java.lang.String) +// .index(java.lang.Number) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------------------------------------- | ----------------- | +| moveTarget | java.lang.String | _No description._ | +| index | java.lang.String OR java.lang.Number | _No description._ | + +--- + +##### `moveTarget`Required + +```java +public java.lang.String getMoveTarget(); +``` + +- _Type:_ java.lang.String + +--- + +##### `index`Optional + +```java +public java.lang.Object getIndex(); +``` + +- _Type:_ java.lang.String OR java.lang.Number + +--- + +### TerraformStackMetadata + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformStackMetadata; + +TerraformStackMetadata.builder() + .backend(java.lang.String) + .stackName(java.lang.String) + .version(java.lang.String) +// .cloud(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| backend | java.lang.String | _No description._ | +| stackName | java.lang.String | _No description._ | +| version | java.lang.String | _No description._ | +| cloud | java.lang.String | _No description._ | + +--- + +##### `backend`Required + +```java +public java.lang.String getBackend(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stackName`Required + +```java +public java.lang.String getStackName(); +``` + +- _Type:_ java.lang.String + +--- + +##### `version`Required + +```java +public java.lang.String getVersion(); +``` + +- _Type:_ java.lang.String + +--- + +##### `cloud`Optional + +```java +public java.lang.String getCloud(); +``` + +- _Type:_ java.lang.String + +--- + +### TerraformVariableConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformVariableConfig; + +TerraformVariableConfig.builder() +// .default(java.lang.Object) +// .description(java.lang.String) +// .nullable(java.lang.Boolean) +// .sensitive(java.lang.Boolean) +// .type(java.lang.String) +// .validation(java.util.List< TerraformVariableValidationConfig >) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| default | java.lang.Object | _No description._ | +| description | java.lang.String | _No description._ | +| nullable | java.lang.Boolean | _No description._ | +| sensitive | java.lang.Boolean | _No description._ | +| type | java.lang.String | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| validation | java.util.List< TerraformVariableValidationConfig> | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `default`Optional + +```java +public java.lang.Object getDefault(); +``` + +- _Type:_ java.lang.Object + +--- + +##### `description`Optional + +```java +public java.lang.String getDescription(); +``` + +- _Type:_ java.lang.String + +--- + +##### `nullable`Optional + +```java +public java.lang.Boolean getNullable(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `sensitive`Optional + +```java +public java.lang.Boolean getSensitive(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `type`Optional + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(< TYPE >) +- set(< TYPE >) +- map(< TYPE >) +- object({< ATTR NAME > = < TYPE >, ... }) +- tuple([< TYPE >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `validation`Optional + +```java +public java.util.List< TerraformVariableValidationConfig > getValidation(); +``` + +- _Type:_ java.util.List< TerraformVariableValidationConfig> + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +### TerraformVariableValidationConfig + +Add one or more validation blocks within the variable block to specify custom conditions. + +#### Initializer + +```java +import com.hashicorp.cdktf.TerraformVariableValidationConfig; + +TerraformVariableValidationConfig.builder() + .condition(java.lang.Object) + .errorMessage(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | java.lang.Object | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | java.lang.String | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```java +public java.lang.Object getCondition(); +``` + +- _Type:_ java.lang.Object + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```java +public java.lang.String getErrorMessage(); +``` + +- _Type:_ java.lang.String + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TestingAppConfig + +#### Initializer + +```java +import com.hashicorp.cdktf.TestingAppConfig; + +TestingAppConfig.builder() +// .context(java.util.Map< java.lang.String, java.lang.Object >) +// .enableFutureFlags(java.lang.Boolean) +// .fakeCdktfJsonPath(java.lang.Boolean) +// .outdir(java.lang.String) +// .stackTraces(java.lang.Boolean) +// .stubVersion(java.lang.Boolean) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ----------------- | +| context | java.util.Map< java.lang.String, java.lang.Object > | _No description._ | +| enableFutureFlags | java.lang.Boolean | _No description._ | +| fakeCdktfJsonPath | java.lang.Boolean | _No description._ | +| outdir | java.lang.String | _No description._ | +| stackTraces | java.lang.Boolean | _No description._ | +| stubVersion | java.lang.Boolean | _No description._ | + +--- + +##### `context`Optional + +```java +public java.util.Map< java.lang.String, java.lang.Object > getContext(); +``` + +- _Type:_ java.util.Map< java.lang.String, java.lang.Object > + +--- + +##### `enableFutureFlags`Optional + +```java +public java.lang.Boolean getEnableFutureFlags(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `fakeCdktfJsonPath`Optional + +```java +public java.lang.Boolean getFakeCdktfJsonPath(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `outdir`Optional + +```java +public java.lang.String getOutdir(); +``` + +- _Type:_ java.lang.String + +--- + +##### `stackTraces`Optional + +```java +public java.lang.Boolean getStackTraces(); +``` + +- _Type:_ java.lang.Boolean + +--- + +##### `stubVersion`Optional + +```java +public java.lang.Boolean getStubVersion(); +``` + +- _Type:_ java.lang.Boolean + +--- + +### WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```java +import com.hashicorp.cdktf.WinrmProvisionerConnection; + +WinrmProvisionerConnection.builder() + .host(java.lang.String) + .type(java.lang.String) +// .cacert(java.lang.String) +// .https(java.lang.Boolean) +// .insecure(java.lang.Boolean) +// .password(java.lang.String) +// .port(java.lang.Number) +// .scriptPath(java.lang.String) +// .timeout(java.lang.String) +// .useNtlm(java.lang.Boolean) +// .user(java.lang.String) + .build(); +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| host | java.lang.String | The address of the resource to connect to. | +| type | java.lang.String | The connection type. | +| cacert | java.lang.String | The CA certificate to validate against. | +| https | java.lang.Boolean | Set to true to connect using HTTPS instead of HTTP. | +| insecure | java.lang.Boolean | Set to true to skip validating the HTTPS certificate chain. | +| password | java.lang.String | The password to use for the connection. | +| port | java.lang.Number | The port to connect to. | +| scriptPath | java.lang.String | The path used to copy scripts meant for remote execution. | +| timeout | java.lang.String | The timeout to wait for the connection to become available. | +| useNtlm | java.lang.Boolean | Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. | +| user | java.lang.String | The user to use for the connection. | + +--- + +##### `host`Required + +```java +public java.lang.String getHost(); +``` + +- _Type:_ java.lang.String + +The address of the resource to connect to. + +--- + +##### `type`Required + +```java +public java.lang.String getType(); +``` + +- _Type:_ java.lang.String + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `cacert`Optional + +```java +public java.lang.String getCacert(); +``` + +- _Type:_ java.lang.String + +The CA certificate to validate against. + +--- + +##### `https`Optional + +```java +public java.lang.Boolean getHttps(); +``` + +- _Type:_ java.lang.Boolean + +Set to true to connect using HTTPS instead of HTTP. + +--- + +##### `insecure`Optional + +```java +public java.lang.Boolean getInsecure(); +``` + +- _Type:_ java.lang.Boolean + +Set to true to skip validating the HTTPS certificate chain. + +--- + +##### `password`Optional + +```java +public java.lang.String getPassword(); +``` + +- _Type:_ java.lang.String + +The password to use for the connection. + +--- + +##### `port`Optional + +```java +public java.lang.Number getPort(); +``` + +- _Type:_ java.lang.Number +- _Default:_ 22 + +The port to connect to. + +--- + +##### `scriptPath`Optional + +```java +public java.lang.String getScriptPath(); +``` + +- _Type:_ java.lang.String + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `timeout`Optional + +```java +public java.lang.String getTimeout(); +``` + +- _Type:_ java.lang.String +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `useNtlm`Optional + +```java +public java.lang.Boolean getUseNtlm(); +``` + +- _Type:_ java.lang.Boolean + +Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. + +Refer to Authentication for Remote Connections in the Windows App Development documentation for more details. + +--- + +##### `user`Optional + +```java +public java.lang.String getUser(); +``` + +- _Type:_ java.lang.String +- _Default:_ root + +The user to use for the connection. + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/provider.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/provider.mdx new file mode 100644 index 0000000000..e5b75e7827 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/provider.mdx @@ -0,0 +1,13 @@ +--- +page_title: API Reference - CDKTF Provider Bindings +description: >- + The CDKTF provider bindings are used to make your CDKTF application run with different Terraform providers +--- + +# Provider API Reference + +A provider is a Terraform plugin that allows users to manage an external API. You can use CDK for Terraform (CDKTF) with every provider available on the [Terraform Registry](https://registry.terraform.io/browse/providers). Refer to [Providers](/terraform/cdktf/concepts/providers) for details about how to import and use providers in your CDKTF application. + +We offer several popular providers as pre-built packages to help reduce the time required to generate provider code bindings for your CDKTF application. These pre-build providers are available in the CDKTF [GitHub namespace](https://github.com/topics/pre-built-provider). + +Documentation for CDKTF provider bindings is available on the [Construct Hub](https://constructs.dev/search?cdk=cdktf&sort=downloadsDesc&offset=0) and in the [Terraform Registry](https://www.hashicorp.com/blog/new-multi-language-docs-simplify-cdk-for-terraform-adoption). diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/classes.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/classes.mdx new file mode 100644 index 0000000000..4f34815ff8 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/classes.mdx @@ -0,0 +1,14452 @@ +--- +page_title: Python Reference for Classes +description: CDKTF Core API Reference for Classes in Python. +--- + + + +# Python: Classes + +### Annotations + +Includes API for attaching annotations such as warning messages to constructs. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------- | ------------------------------------------------------------------ | +| add_error | Adds an { "error": < message > } metadata entry to this construct. | +| add_info | Adds an info metadata entry to this construct. | +| add_warning | Adds a warning metadata entry to this construct. | + +--- + +##### `add_error` + +```python +def add_error( + message: str +) - > None +``` + +Adds an { "error": < message > } metadata entry to this construct. + +The toolkit will fail synthesis when errors are reported. + +###### `message`Required + +- _Type:_ str + +The error message. + +--- + +##### `add_info` + +```python +def add_info( + message: str +) - > None +``` + +Adds an info metadata entry to this construct. + +The CLI will display the info message when apps are synthesized. + +###### `message`Required + +- _Type:_ str + +The info message. + +--- + +##### `add_warning` + +```python +def add_warning( + message: str +) - > None +``` + +Adds a warning metadata entry to this construct. + +The CLI will display the warning when an app is synthesized. +In a future release the CLI might introduce a --strict flag which +will then fail the synthesis if it encounters a warning. + +###### `message`Required + +- _Type:_ str + +The warning message. + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------- | -------------------------------------------------- | +| of | Returns the annotations API for a construct scope. | + +--- + +##### `of` + +```python +import cdktf + +cdktf.Annotations.of( + scope: IConstruct +) +``` + +Returns the annotations API for a construct scope. + +###### `scope`Required + +- _Type:_ constructs.IConstruct + +The scope. + +--- + +### AnyListList + +#### Initializers + +```python +import cdktf + +cdktf.AnyListList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| all_with_map_key | Creating an iterator for this complex list. | +| compute_fqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `all_with_map_key` + +```python +def all_with_map_key( + map_key_attribute_name: str +) - > DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > IResolvable +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### AnyListMap + +#### Initializers + +```python +import cdktf + +cdktf.AnyListMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + key: str +) - > IResolvable +``` + +###### `key`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### AnyMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.AnyMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `lookup` + +```python +def lookup( + key: str +) - > typing.Any +``` + +###### `key`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### AnyMapList + +#### Initializers + +```python +import cdktf + +cdktf.AnyMapList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > AnyMap +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### Aspects + +Aspects can be applied to CDK tree scopes and can operate on the tree before synthesis. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------- | ---------------------------------------------------- | +| add | Adds an aspect to apply this scope before synthesis. | + +--- + +##### `add` + +```python +def add( + aspect: IAspect +) - > None +``` + +Adds an aspect to apply this scope before synthesis. + +###### `aspect`Required + +- _Type:_ IAspect + +The aspect to add. + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------- | --------------------------------------------------------------- | +| of | Returns the `Aspects` object associated with a construct scope. | + +--- + +##### `of` + +```python +import cdktf + +cdktf.Aspects.of( + scope: IConstruct +) +``` + +Returns the `Aspects` object associated with a construct scope. + +###### `scope`Required + +- _Type:_ constructs.IConstruct + +The scope for which these aspects will apply. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| all | typing.List[IAspect] | The list of aspects which were directly applied on this scope. | + +--- + +##### `all`Required + +```python +all: typing.List[IAspect] +``` + +- _Type:_ typing.List[IAspect] + +The list of aspects which were directly applied on this scope. + +--- + +### AssertionReturn + +Class representing the contents of a return by an assertion. + +#### Initializers + +```python +from cdktf import testing_matchers + +testingMatchers.AssertionReturn( + message: str, + pass: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------- | -------------------------------------------------------------------------- | +| message | str | - String message containing information about the result of the assertion. | +| pass | bool | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +- _Type:_ str + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +- _Type:_ bool + +Boolean pass denoting the success of the assertion. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------- | -------------------------------------------------------------------------- | +| message | str | - String message containing information about the result of the assertion. | +| pass | bool | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +```python +message: str +``` + +- _Type:_ str + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +```python +pass: bool +``` + +- _Type:_ bool + +Boolean pass denoting the success of the assertion. + +--- + +### BooleanList + +#### Initializers + +```python +import cdktf + +cdktf.BooleanList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| all_with_map_key | Creating an iterator for this complex list. | +| compute_fqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `all_with_map_key` + +```python +def all_with_map_key( + map_key_attribute_name: str +) - > DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > IResolvable +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### BooleanListList + +#### Initializers + +```python +import cdktf + +cdktf.BooleanListList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------- | --------------------------------------------------------- | +| all_with_map_key | Creating an iterator for this complex list. | +| compute_fqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `all_with_map_key` + +```python +def all_with_map_key( + map_key_attribute_name: str +) - > DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > IResolvable +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### BooleanListMap + +#### Initializers + +```python +import cdktf + +cdktf.BooleanListMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + key: str +) - > IResolvable +``` + +###### `key`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### BooleanMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.BooleanMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `lookup` + +```python +def lookup( + key: str +) - > IResolvable +``` + +###### `key`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### BooleanMapList + +#### Initializers + +```python +import cdktf + +cdktf.BooleanMapList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > BooleanMap +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### CloudWorkspace + +A cloud workspace can either be a single named workspace, or a list of tagged workspaces. + +#### Initializers + +```python +import cdktf + +cdktf.CloudWorkspace() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| to_terraform | _No description._ | + +--- + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +### ComplexComputedList + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```python +import cdktf + +cdktf.ComplexComputedList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + complex_computed_list_index: str, + wraps_set: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| complex_computed_list_index | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `complex_computed_list_index`Required + +- _Type:_ str + +--- + +##### `wraps_set`Optional + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| get_any_map_attribute | _No description._ | +| get_boolean_attribute | _No description._ | +| get_boolean_map_attribute | _No description._ | +| get_list_attribute | _No description._ | +| get_number_attribute | _No description._ | +| get_number_list_attribute | _No description._ | +| get_number_map_attribute | _No description._ | +| get_string_attribute | _No description._ | +| get_string_map_attribute | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### ~~`compute_fqn`~~ + +```python +def compute_fqn() - > str +``` + +##### ~~`get_any_map_attribute`~~ + +```python +def get_any_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_boolean_attribute`~~ + +```python +def get_boolean_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_boolean_map_attribute`~~ + +```python +def get_boolean_map_attribute( + terraform_attribute: str +) - > typing.Mapping[bool] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_list_attribute`~~ + +```python +def get_list_attribute( + terraform_attribute: str +) - > typing.List[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_number_attribute`~~ + +```python +def get_number_attribute( + terraform_attribute: str +) - > typing.Union[int, float] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_number_list_attribute`~~ + +```python +def get_number_list_attribute( + terraform_attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_number_map_attribute`~~ + +```python +def get_number_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_string_attribute`~~ + +```python +def get_string_attribute( + terraform_attribute: str +) - > str +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`get_string_map_attribute`~~ + +```python +def get_string_map_attribute( + terraform_attribute: str +) - > typing.Mapping[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### ~~`interpolation_for_attribute`~~ + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### ~~`resolve`~~ + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### ~~`to_string`~~ + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### ~~`creation_stack`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### ComplexList + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.ComplexList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| all_with_map_key | Creating an iterator for this complex list. | +| compute_fqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `all_with_map_key` + +```python +def all_with_map_key( + map_key_attribute_name: str +) - > DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### ComplexMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.ComplexMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### ComplexObject + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```python +import cdktf + +cdktf.ComplexObject( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + complex_object_is_from_set: bool, + complex_object_index: typing.Union[str, typing.Union[int, float]] = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| complex_object_is_from_set | bool | set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. | +| complex_object_index | typing.Union[str, typing.Union[int, float]] | the index of the complex object in a list. | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `complex_object_is_from_set`Required + +- _Type:_ bool + +set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. + +--- + +##### `complex_object_index`Optional + +- _Type:_ typing.Union[str, typing.Union[int, float]] + +the index of the complex object in a list. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| get_any_map_attribute | _No description._ | +| get_boolean_attribute | _No description._ | +| get_boolean_map_attribute | _No description._ | +| get_list_attribute | _No description._ | +| get_number_attribute | _No description._ | +| get_number_list_attribute | _No description._ | +| get_number_map_attribute | _No description._ | +| get_string_attribute | _No description._ | +| get_string_map_attribute | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `get_any_map_attribute` + +```python +def get_any_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_attribute` + +```python +def get_boolean_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_map_attribute` + +```python +def get_boolean_map_attribute( + terraform_attribute: str +) - > typing.Mapping[bool] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_list_attribute` + +```python +def get_list_attribute( + terraform_attribute: str +) - > typing.List[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_attribute` + +```python +def get_number_attribute( + terraform_attribute: str +) - > typing.Union[int, float] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_list_attribute` + +```python +def get_number_list_attribute( + terraform_attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_map_attribute` + +```python +def get_number_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_attribute` + +```python +def get_string_attribute( + terraform_attribute: str +) - > str +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_map_attribute` + +```python +def get_string_map_attribute( + terraform_attribute: str +) - > typing.Mapping[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### DefaultTokenResolver + +- _Implements:_ ITokenResolver + +Default resolver implementation. + +#### Initializers + +```python +import cdktf + +cdktf.DefaultTokenResolver( + concat: IFragmentConcatenator +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------- | +| concat | IFragmentConcatenator | _No description._ | + +--- + +##### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------------- | +| resolve_list | Resolves a list of string. | +| resolve_map | Resolves a map token. | +| resolve_number_list | Resolves a list of numbers. | +| resolve_string | Resolve string fragments to Tokens. | +| resolve_token | Default Token resolution. | + +--- + +##### `resolve_list` + +```python +def resolve_list( + xs: typing.List[str], + context: IResolveContext +) - > typing.Any +``` + +Resolves a list of string. + +###### `xs`Required + +- _Type:_ typing.List[str] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_map` + +```python +def resolve_map( + xs: typing.Mapping[typing.Any], + context: IResolveContext +) - > typing.Any +``` + +Resolves a map token. + +###### `xs`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_number_list` + +```python +def resolve_number_list( + xs: typing.List[typing.Union[int, float]], + context: IResolveContext +) - > typing.Any +``` + +Resolves a list of numbers. + +###### `xs`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_string` + +```python +def resolve_string( + fragments: TokenizedStringFragments, + context: IResolveContext +) - > typing.Any +``` + +Resolve string fragments to Tokens. + +###### `fragments`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_token` + +```python +def resolve_token( + t: IResolvable, + context: IResolveContext, + post_processor: IPostProcessor +) - > typing.Any +``` + +Default Token resolution. + +Resolve the Token, recurse into whatever it returns, +then finally post-process it. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `post_processor`Required + +- _Type:_ IPostProcessor + +--- + +### DynamicListTerraformIterator + +#### Initializers + +```python +import cdktf + +cdktf.DynamicListTerraformIterator( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]], + map_key_attribute_name: str +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| list | typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] | _No description._ | +| map_key_attribute_name | str | _No description._ | + +--- + +##### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +##### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| for_expression_for_list | Creates a for expression that results in a list. | +| for_expression_for_map | Creates a for expression that results in a map. | +| get_any | _No description._ | +| get_any_map | _No description._ | +| get_boolean | _No description._ | +| get_boolean_map | _No description._ | +| get_list | _No description._ | +| get_map | _No description._ | +| get_number | _No description._ | +| get_number_list | _No description._ | +| get_number_map | _No description._ | +| get_string | _No description._ | +| get_string_map | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluck_property | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```python +def dynamic( + attributes: typing.Mapping[typing.Any] +) - > IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `for_expression_for_list` + +```python +def for_expression_for_list( + expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use in the for mapping. + +--- + +##### `for_expression_for_map` + +```python +def for_expression_for_map( + key_expression: typing.Union[str, IResolvable], + value_expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `key_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as key in the for mapping. + +--- + +###### `value_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as value in the for mapping. + +--- + +##### `get_any` + +```python +def get_any( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_any_map` + +```python +def get_any_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean` + +```python +def get_boolean( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean_map` + +```python +def get_boolean_map( + attribute: str +) - > typing.Mapping[bool] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_list` + +```python +def get_list( + attribute: str +) - > typing.List[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_map` + +```python +def get_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number` + +```python +def get_number( + attribute: str +) - > typing.Union[int, float] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_list` + +```python +def get_number_list( + attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_map` + +```python +def get_number_map( + attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string` + +```python +def get_string( + attribute: str +) - > str +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string_map` + +```python +def get_string_map( + attribute: str +) - > typing.Mapping[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `keys` + +```python +def keys() - > IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluck_property` + +```python +def pluck_property( + property: str +) - > IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ str + +The property of the iterators values to map to. + +--- + +##### `values` + +```python +def values() - > IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------- | +| from_complex_list | Creates a new iterator from a complex list. | +| from_data_sources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| from_list | Creates a new iterator from a list. | +| from_map | Creates a new iterator from a map. | +| from_resources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `from_complex_list` + +```python +import cdktf + +cdktf.DynamicListTerraformIterator.from_complex_list( + list: typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList], + map_key_attribute_name: str +) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```python +# Example automatically generated from non-compiling source. May contain errors. +cert = AcmCertificate(self, "cert", + domain_name="example.com", + validation_method="DNS" +) + +dvo_iterator = TerraformIterator.from_complex_list(cert.domain_validation_options, "domain_name") + +Route53Record(self, "record", + allow_overwrite=True, + name=dvo_iterator.get_string("name"), + records=[dvo_iterator.get_string("record")], + ttl=60, + type=dvo_iterator.get_string("type"), + zone_id=Token.as_string(data_aws_route53_zone_example.zone_id), + for_each=dvo_iterator +) +``` + +###### `list`Required + +- _Type:_ typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList] + +the list to iterate over. + +--- + +###### `map_key_attribute_name`Required + +- _Type:_ str + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `from_data_sources` + +```python +import cdktf + +cdktf.DynamicListTerraformIterator.from_data_sources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `from_list` + +```python +import cdktf + +cdktf.DynamicListTerraformIterator.from_list( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] +) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +##### `from_map` + +```python +import cdktf + +cdktf.DynamicListTerraformIterator.from_map( + map: typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] +) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] + +--- + +##### `from_resources` + +```python +import cdktf + +cdktf.DynamicListTerraformIterator.from_resources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------- | +| key | str | Returns the key of the current entry in the map that is being iterated over. | +| value | typing.Any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```python +key: str +``` + +- _Type:_ str + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +Returns the value of the current item iterated over. + +--- + +### Fn + +#### Initializers + +```python +import cdktf + +cdktf.Fn() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| file | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| length_of | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| one | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | +| bcrypt | {@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. | +| conditional | {@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. | +| join | {@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. | +| lookup | {@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. | +| lookup_nested | returns a property access expression that accesses the property at the given path in the given inputMap. | +| range | {@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. | +| raw_string | Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). | + +--- + +##### `abs` + +```python +import cdktf + +cdktf.Fn.abs( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `abspath` + +```python +import cdktf + +cdktf.Fn.abspath( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ str + +--- + +##### `alltrue` + +```python +import cdktf + +cdktf.Fn.alltrue( + list: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `anytrue` + +```python +import cdktf + +cdktf.Fn.anytrue( + list: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `base64decode` + +```python +import cdktf + +cdktf.Fn.base64decode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64encode` + +```python +import cdktf + +cdktf.Fn.base64encode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64gzip` + +```python +import cdktf + +cdktf.Fn.base64gzip( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64sha256` + +```python +import cdktf + +cdktf.Fn.base64sha256( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64sha512` + +```python +import cdktf + +cdktf.Fn.base64sha512( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ str + +--- + +##### `basename` + +```python +import cdktf + +cdktf.Fn.basename( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ str + +--- + +##### `can` + +```python +import cdktf + +cdktf.Fn.can( + expression: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ typing.Any + +--- + +##### `ceil` + +```python +import cdktf + +cdktf.Fn.ceil( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `chomp` + +```python +import cdktf + +cdktf.Fn.chomp( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `chunklist` + +```python +import cdktf + +cdktf.Fn.chunklist( + list: typing.List[typing.Any], + size: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `size`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `cidrhost` + +```python +import cdktf + +cdktf.Fn.cidrhost( + prefix: str, + hostnum: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ str + +--- + +###### `hostnum`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `cidrnetmask` + +```python +import cdktf + +cdktf.Fn.cidrnetmask( + prefix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ str + +--- + +##### `cidrsubnet` + +```python +import cdktf + +cdktf.Fn.cidrsubnet( + prefix: str, + newbits: typing.Union[int, float], + netnum: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ str + +--- + +###### `newbits`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `netnum`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `cidrsubnets` + +```python +import cdktf + +cdktf.Fn.cidrsubnets( + prefix: str, + newbits: typing.List[typing.Union[int, float]] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ str + +--- + +###### `newbits`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `coalesce` + +```python +import cdktf + +cdktf.Fn.coalesce( + vals: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `coalescelist` + +```python +import cdktf + +cdktf.Fn.coalescelist( + vals: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `compact` + +```python +import cdktf + +cdktf.Fn.compact( + list: typing.List[str] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ typing.List[str] + +--- + +##### `concat` + +```python +import cdktf + +cdktf.Fn.concat( + seqs: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `contains` + +```python +import cdktf + +cdktf.Fn.contains( + list: typing.Any, + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `csvdecode` + +```python +import cdktf + +cdktf.Fn.csvdecode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ str + +--- + +##### `dirname` + +```python +import cdktf + +cdktf.Fn.dirname( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ str + +--- + +##### `distinct` + +```python +import cdktf + +cdktf.Fn.distinct( + list: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `element` + +```python +import cdktf + +cdktf.Fn.element( + list: typing.Any, + index: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `endswith` + +```python +import cdktf + +cdktf.Fn.endswith( + str: str, + suffix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ str + +--- + +###### `suffix`Required + +- _Type:_ str + +--- + +##### `file` + +```python +import cdktf + +cdktf.Fn.file( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filebase64` + +```python +import cdktf + +cdktf.Fn.filebase64( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filebase64sha256` + +```python +import cdktf + +cdktf.Fn.filebase64sha256( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filebase64sha512` + +```python +import cdktf + +cdktf.Fn.filebase64sha512( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `fileexists` + +```python +import cdktf + +cdktf.Fn.fileexists( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filemd5` + +```python +import cdktf + +cdktf.Fn.filemd5( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `fileset` + +```python +import cdktf + +cdktf.Fn.fileset( + path: str, + pattern: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ str + +--- + +###### `pattern`Required + +- _Type:_ str + +--- + +##### `filesha1` + +```python +import cdktf + +cdktf.Fn.filesha1( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filesha256` + +```python +import cdktf + +cdktf.Fn.filesha256( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filesha512` + +```python +import cdktf + +cdktf.Fn.filesha512( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `flatten` + +```python +import cdktf + +cdktf.Fn.flatten( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `floor` + +```python +import cdktf + +cdktf.Fn.floor( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `format` + +```python +import cdktf + +cdktf.Fn.format( + format: str, + args: typing.List[typing.Any] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ str + +--- + +###### `args`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `formatdate` + +```python +import cdktf + +cdktf.Fn.formatdate( + format: str, + time: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ str + +--- + +###### `time`Required + +- _Type:_ str + +--- + +##### `formatlist` + +```python +import cdktf + +cdktf.Fn.formatlist( + format: str, + args: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ str + +--- + +###### `args`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `indent` + +```python +import cdktf + +cdktf.Fn.indent( + spaces: typing.Union[int, float], + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `index` + +```python +import cdktf + +cdktf.Fn.index( + list: typing.Any, + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `jsondecode` + +```python +import cdktf + +cdktf.Fn.jsondecode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `jsonencode` + +```python +import cdktf + +cdktf.Fn.jsonencode( + val: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ typing.Any + +--- + +##### `keys` + +```python +import cdktf + +cdktf.Fn.keys( + input_map: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `input_map`Required + +- _Type:_ typing.Any + +--- + +##### `length_of` + +```python +import cdktf + +cdktf.Fn.length_of( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `log` + +```python +import cdktf + +cdktf.Fn.log( + num: typing.Union[int, float], + base: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `base`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `lower` + +```python +import cdktf + +cdktf.Fn.lower( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ str + +--- + +##### `matchkeys` + +```python +import cdktf + +cdktf.Fn.matchkeys( + values: typing.List[typing.Any], + keys: typing.List[typing.Any], + searchset: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `keys`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `searchset`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `max` + +```python +import cdktf + +cdktf.Fn.max( + numbers: typing.List[typing.Union[int, float]] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `md5` + +```python +import cdktf + +cdktf.Fn.md5( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `merge` + +```python +import cdktf + +cdktf.Fn.merge( + maps: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `min` + +```python +import cdktf + +cdktf.Fn.min( + numbers: typing.List[typing.Union[int, float]] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `nonsensitive` + +```python +import cdktf + +cdktf.Fn.nonsensitive( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `one` + +```python +import cdktf + +cdktf.Fn.one( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `parseint` + +```python +import cdktf + +cdktf.Fn.parseint( + number: typing.Any, + base: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ typing.Any + +--- + +###### `base`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `pathexpand` + +```python +import cdktf + +cdktf.Fn.pathexpand( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ str + +--- + +##### `plantimestamp` + +```python +import cdktf + +cdktf.Fn.plantimestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `pow` + +```python +import cdktf + +cdktf.Fn.pow( + num: typing.Union[int, float], + power: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `power`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `regex` + +```python +import cdktf + +cdktf.Fn.regex( + pattern: str, + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ str + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `regexall` + +```python +import cdktf + +cdktf.Fn.regexall( + pattern: str, + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ str + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `replace` + +```python +import cdktf + +cdktf.Fn.replace( + str: str, + substr: str, + replace: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ str + +--- + +###### `substr`Required + +- _Type:_ str + +--- + +###### `replace`Required + +- _Type:_ str + +--- + +##### `reverse` + +```python +import cdktf + +cdktf.Fn.reverse( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `rsadecrypt` + +```python +import cdktf + +cdktf.Fn.rsadecrypt( + ciphertext: str, + privatekey: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ str + +--- + +###### `privatekey`Required + +- _Type:_ str + +--- + +##### `sensitive` + +```python +import cdktf + +cdktf.Fn.sensitive( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `setintersection` + +```python +import cdktf + +cdktf.Fn.setintersection( + first_set: typing.List[typing.Any], + other_sets: typing.List[typing.List[typing.Any]] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `other_sets`Required + +- _Type:_ typing.List[typing.List[typing.Any]] + +--- + +##### `setproduct` + +```python +import cdktf + +cdktf.Fn.setproduct( + sets: typing.List[typing.Any] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `setsubtract` + +```python +import cdktf + +cdktf.Fn.setsubtract( + a: typing.List[typing.Any], + b: typing.List[typing.Any] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `b`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `setunion` + +```python +import cdktf + +cdktf.Fn.setunion( + first_set: typing.List[typing.Any], + other_sets: typing.List[typing.List[typing.Any]] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `other_sets`Required + +- _Type:_ typing.List[typing.List[typing.Any]] + +--- + +##### `sha1` + +```python +import cdktf + +cdktf.Fn.sha1( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `sha256` + +```python +import cdktf + +cdktf.Fn.sha256( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `sha512` + +```python +import cdktf + +cdktf.Fn.sha512( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `signum` + +```python +import cdktf + +cdktf.Fn.signum( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `slice` + +```python +import cdktf + +cdktf.Fn.slice( + list: typing.Any, + start_index: typing.Union[int, float], + end_index: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `start_index`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `end_index`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `sort` + +```python +import cdktf + +cdktf.Fn.sort( + list: typing.List[str] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ typing.List[str] + +--- + +##### `split` + +```python +import cdktf + +cdktf.Fn.split( + separator: str, + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ str + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `startswith` + +```python +import cdktf + +cdktf.Fn.startswith( + str: str, + prefix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ str + +--- + +###### `prefix`Required + +- _Type:_ str + +--- + +##### `strcontains` + +```python +import cdktf + +cdktf.Fn.strcontains( + str: str, + substr: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ str + +--- + +###### `substr`Required + +- _Type:_ str + +--- + +##### `strrev` + +```python +import cdktf + +cdktf.Fn.strrev( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ str + +--- + +##### `substr` + +```python +import cdktf + +cdktf.Fn.substr( + str: str, + offset: typing.Union[int, float], + length: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ str + +--- + +###### `offset`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `length`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `sum` + +```python +import cdktf + +cdktf.Fn.sum( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `templatefile` + +```python +import cdktf + +cdktf.Fn.templatefile( + path: str, + vars: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ str + +--- + +###### `vars`Required + +- _Type:_ typing.Any + +--- + +##### `textdecodebase64` + +```python +import cdktf + +cdktf.Fn.textdecodebase64( + source: str, + encoding: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ str + +--- + +###### `encoding`Required + +- _Type:_ str + +--- + +##### `textencodebase64` + +```python +import cdktf + +cdktf.Fn.textencodebase64( + str: str, + encoding: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ str + +--- + +###### `encoding`Required + +- _Type:_ str + +--- + +##### `timeadd` + +```python +import cdktf + +cdktf.Fn.timeadd( + timestamp: str, + duration: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ str + +--- + +###### `duration`Required + +- _Type:_ str + +--- + +##### `timecmp` + +```python +import cdktf + +cdktf.Fn.timecmp( + timestamp_a: str, + timestamp_b: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ str + +--- + +###### `timestamp_b`Required + +- _Type:_ str + +--- + +##### `timestamp` + +```python +import cdktf + +cdktf.Fn.timestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `title` + +```python +import cdktf + +cdktf.Fn.title( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ str + +--- + +##### `tobool` + +```python +import cdktf + +cdktf.Fn.tobool( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tolist` + +```python +import cdktf + +cdktf.Fn.tolist( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tomap` + +```python +import cdktf + +cdktf.Fn.tomap( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tonumber` + +```python +import cdktf + +cdktf.Fn.tonumber( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `toset` + +```python +import cdktf + +cdktf.Fn.toset( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tostring` + +```python +import cdktf + +cdktf.Fn.tostring( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `transpose` + +```python +import cdktf + +cdktf.Fn.transpose( + values: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ typing.Any + +--- + +##### `trim` + +```python +import cdktf + +cdktf.Fn.trim( + str: str, + cutset: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ str + +--- + +###### `cutset`Required + +- _Type:_ str + +--- + +##### `trimprefix` + +```python +import cdktf + +cdktf.Fn.trimprefix( + str: str, + prefix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ str + +--- + +###### `prefix`Required + +- _Type:_ str + +--- + +##### `trimspace` + +```python +import cdktf + +cdktf.Fn.trimspace( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `trimsuffix` + +```python +import cdktf + +cdktf.Fn.trimsuffix( + str: str, + suffix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ str + +--- + +###### `suffix`Required + +- _Type:_ str + +--- + +##### `try` + +```python +import cdktf + +cdktf.Fn.try( + expressions: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `upper` + +```python +import cdktf + +cdktf.Fn.upper( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ str + +--- + +##### `urlencode` + +```python +import cdktf + +cdktf.Fn.urlencode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `uuid` + +```python +import cdktf + +cdktf.Fn.uuid() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `uuidv5` + +```python +import cdktf + +cdktf.Fn.uuidv5( + namespace: str, + name: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ str + +--- + +###### `name`Required + +- _Type:_ str + +--- + +##### `values` + +```python +import cdktf + +cdktf.Fn.values( + mapping: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ typing.Any + +--- + +##### `yamldecode` + +```python +import cdktf + +cdktf.Fn.yamldecode( + src: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ str + +--- + +##### `yamlencode` + +```python +import cdktf + +cdktf.Fn.yamlencode( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `zipmap` + +```python +import cdktf + +cdktf.Fn.zipmap( + keys: typing.List[str], + values: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ typing.List[str] + +--- + +###### `values`Required + +- _Type:_ typing.Any + +--- + +##### `bcrypt` + +```python +import cdktf + +cdktf.Fn.bcrypt( + str: str, + cost: typing.Union[int, float] = None +) +``` + +{@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. + +###### `str`Required + +- _Type:_ str + +--- + +###### `cost`Optional + +- _Type:_ typing.Union[int, float] + +--- + +##### `conditional` + +```python +import cdktf + +cdktf.Fn.conditional( + condition: typing.Any, + true_value: typing.Any, + false_value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. + +###### `condition`Required + +- _Type:_ typing.Any + +--- + +###### `true_value`Required + +- _Type:_ typing.Any + +--- + +###### `false_value`Required + +- _Type:_ typing.Any + +--- + +##### `join` + +```python +import cdktf + +cdktf.Fn.join( + separator: str, + list: typing.List[str] +) +``` + +{@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. + +###### `separator`Required + +- _Type:_ str + +--- + +###### `list`Required + +- _Type:_ typing.List[str] + +--- + +##### `lookup` + +```python +import cdktf + +cdktf.Fn.lookup( + input_map: typing.Any, + key: str, + default_value: typing.Any = None +) +``` + +{@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. + +###### `input_map`Required + +- _Type:_ typing.Any + +--- + +###### `key`Required + +- _Type:_ str + +--- + +###### `default_value`Optional + +- _Type:_ typing.Any + +--- + +##### `lookup_nested` + +```python +import cdktf + +cdktf.Fn.lookup_nested( + input_map: typing.Any, + path: typing.List[typing.Any] +) +``` + +returns a property access expression that accesses the property at the given path in the given inputMap. + +For example lookupNested(x, ["a", "b", "c"]) will return a Terraform expression like x["a"]["b"]["c"] + +###### `input_map`Required + +- _Type:_ typing.Any + +--- + +###### `path`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `range` + +```python +import cdktf + +cdktf.Fn.range( + start: typing.Union[int, float], + limit: typing.Union[int, float], + step: typing.Union[int, float] = None +) +``` + +{@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. + +###### `start`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `limit`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `step`Optional + +- _Type:_ typing.Union[int, float] + +--- + +##### `raw_string` + +```python +import cdktf + +cdktf.Fn.raw_string( + str: str +) +``` + +Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). + +###### `str`Required + +- _Type:_ str + +--- + +### FnGenerated + +#### Initializers + +```python +import cdktf + +cdktf.FnGenerated() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| file | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| length_of | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| one | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | + +--- + +##### `abs` + +```python +import cdktf + +cdktf.FnGenerated.abs( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `abspath` + +```python +import cdktf + +cdktf.FnGenerated.abspath( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ str + +--- + +##### `alltrue` + +```python +import cdktf + +cdktf.FnGenerated.alltrue( + list: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `anytrue` + +```python +import cdktf + +cdktf.FnGenerated.anytrue( + list: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `base64decode` + +```python +import cdktf + +cdktf.FnGenerated.base64decode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64encode` + +```python +import cdktf + +cdktf.FnGenerated.base64encode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64gzip` + +```python +import cdktf + +cdktf.FnGenerated.base64gzip( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64sha256` + +```python +import cdktf + +cdktf.FnGenerated.base64sha256( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ str + +--- + +##### `base64sha512` + +```python +import cdktf + +cdktf.FnGenerated.base64sha512( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ str + +--- + +##### `basename` + +```python +import cdktf + +cdktf.FnGenerated.basename( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ str + +--- + +##### `can` + +```python +import cdktf + +cdktf.FnGenerated.can( + expression: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ typing.Any + +--- + +##### `ceil` + +```python +import cdktf + +cdktf.FnGenerated.ceil( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `chomp` + +```python +import cdktf + +cdktf.FnGenerated.chomp( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `chunklist` + +```python +import cdktf + +cdktf.FnGenerated.chunklist( + list: typing.List[typing.Any], + size: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `size`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `cidrhost` + +```python +import cdktf + +cdktf.FnGenerated.cidrhost( + prefix: str, + hostnum: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ str + +--- + +###### `hostnum`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `cidrnetmask` + +```python +import cdktf + +cdktf.FnGenerated.cidrnetmask( + prefix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ str + +--- + +##### `cidrsubnet` + +```python +import cdktf + +cdktf.FnGenerated.cidrsubnet( + prefix: str, + newbits: typing.Union[int, float], + netnum: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ str + +--- + +###### `newbits`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `netnum`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `cidrsubnets` + +```python +import cdktf + +cdktf.FnGenerated.cidrsubnets( + prefix: str, + newbits: typing.List[typing.Union[int, float]] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ str + +--- + +###### `newbits`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `coalesce` + +```python +import cdktf + +cdktf.FnGenerated.coalesce( + vals: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `coalescelist` + +```python +import cdktf + +cdktf.FnGenerated.coalescelist( + vals: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `compact` + +```python +import cdktf + +cdktf.FnGenerated.compact( + list: typing.List[str] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ typing.List[str] + +--- + +##### `concat` + +```python +import cdktf + +cdktf.FnGenerated.concat( + seqs: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `contains` + +```python +import cdktf + +cdktf.FnGenerated.contains( + list: typing.Any, + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `csvdecode` + +```python +import cdktf + +cdktf.FnGenerated.csvdecode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ str + +--- + +##### `dirname` + +```python +import cdktf + +cdktf.FnGenerated.dirname( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ str + +--- + +##### `distinct` + +```python +import cdktf + +cdktf.FnGenerated.distinct( + list: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `element` + +```python +import cdktf + +cdktf.FnGenerated.element( + list: typing.Any, + index: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `endswith` + +```python +import cdktf + +cdktf.FnGenerated.endswith( + str: str, + suffix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ str + +--- + +###### `suffix`Required + +- _Type:_ str + +--- + +##### `file` + +```python +import cdktf + +cdktf.FnGenerated.file( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filebase64` + +```python +import cdktf + +cdktf.FnGenerated.filebase64( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filebase64sha256` + +```python +import cdktf + +cdktf.FnGenerated.filebase64sha256( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filebase64sha512` + +```python +import cdktf + +cdktf.FnGenerated.filebase64sha512( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `fileexists` + +```python +import cdktf + +cdktf.FnGenerated.fileexists( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filemd5` + +```python +import cdktf + +cdktf.FnGenerated.filemd5( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `fileset` + +```python +import cdktf + +cdktf.FnGenerated.fileset( + path: str, + pattern: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ str + +--- + +###### `pattern`Required + +- _Type:_ str + +--- + +##### `filesha1` + +```python +import cdktf + +cdktf.FnGenerated.filesha1( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filesha256` + +```python +import cdktf + +cdktf.FnGenerated.filesha256( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `filesha512` + +```python +import cdktf + +cdktf.FnGenerated.filesha512( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ str + +--- + +##### `flatten` + +```python +import cdktf + +cdktf.FnGenerated.flatten( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `floor` + +```python +import cdktf + +cdktf.FnGenerated.floor( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `format` + +```python +import cdktf + +cdktf.FnGenerated.format( + format: str, + args: typing.List[typing.Any] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ str + +--- + +###### `args`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `formatdate` + +```python +import cdktf + +cdktf.FnGenerated.formatdate( + format: str, + time: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ str + +--- + +###### `time`Required + +- _Type:_ str + +--- + +##### `formatlist` + +```python +import cdktf + +cdktf.FnGenerated.formatlist( + format: str, + args: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ str + +--- + +###### `args`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `indent` + +```python +import cdktf + +cdktf.FnGenerated.indent( + spaces: typing.Union[int, float], + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `index` + +```python +import cdktf + +cdktf.FnGenerated.index( + list: typing.Any, + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `jsondecode` + +```python +import cdktf + +cdktf.FnGenerated.jsondecode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `jsonencode` + +```python +import cdktf + +cdktf.FnGenerated.jsonencode( + val: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ typing.Any + +--- + +##### `keys` + +```python +import cdktf + +cdktf.FnGenerated.keys( + input_map: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `input_map`Required + +- _Type:_ typing.Any + +--- + +##### `length_of` + +```python +import cdktf + +cdktf.FnGenerated.length_of( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `log` + +```python +import cdktf + +cdktf.FnGenerated.log( + num: typing.Union[int, float], + base: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `base`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `lower` + +```python +import cdktf + +cdktf.FnGenerated.lower( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ str + +--- + +##### `matchkeys` + +```python +import cdktf + +cdktf.FnGenerated.matchkeys( + values: typing.List[typing.Any], + keys: typing.List[typing.Any], + searchset: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `keys`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `searchset`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `max` + +```python +import cdktf + +cdktf.FnGenerated.max( + numbers: typing.List[typing.Union[int, float]] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `md5` + +```python +import cdktf + +cdktf.FnGenerated.md5( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `merge` + +```python +import cdktf + +cdktf.FnGenerated.merge( + maps: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `min` + +```python +import cdktf + +cdktf.FnGenerated.min( + numbers: typing.List[typing.Union[int, float]] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `nonsensitive` + +```python +import cdktf + +cdktf.FnGenerated.nonsensitive( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `one` + +```python +import cdktf + +cdktf.FnGenerated.one( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `parseint` + +```python +import cdktf + +cdktf.FnGenerated.parseint( + number: typing.Any, + base: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ typing.Any + +--- + +###### `base`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `pathexpand` + +```python +import cdktf + +cdktf.FnGenerated.pathexpand( + path: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ str + +--- + +##### `plantimestamp` + +```python +import cdktf + +cdktf.FnGenerated.plantimestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `pow` + +```python +import cdktf + +cdktf.FnGenerated.pow( + num: typing.Union[int, float], + power: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `power`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `regex` + +```python +import cdktf + +cdktf.FnGenerated.regex( + pattern: str, + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ str + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `regexall` + +```python +import cdktf + +cdktf.FnGenerated.regexall( + pattern: str, + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ str + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `replace` + +```python +import cdktf + +cdktf.FnGenerated.replace( + str: str, + substr: str, + replace: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ str + +--- + +###### `substr`Required + +- _Type:_ str + +--- + +###### `replace`Required + +- _Type:_ str + +--- + +##### `reverse` + +```python +import cdktf + +cdktf.FnGenerated.reverse( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `rsadecrypt` + +```python +import cdktf + +cdktf.FnGenerated.rsadecrypt( + ciphertext: str, + privatekey: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ str + +--- + +###### `privatekey`Required + +- _Type:_ str + +--- + +##### `sensitive` + +```python +import cdktf + +cdktf.FnGenerated.sensitive( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `setintersection` + +```python +import cdktf + +cdktf.FnGenerated.setintersection( + first_set: typing.List[typing.Any], + other_sets: typing.List[typing.List[typing.Any]] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `other_sets`Required + +- _Type:_ typing.List[typing.List[typing.Any]] + +--- + +##### `setproduct` + +```python +import cdktf + +cdktf.FnGenerated.setproduct( + sets: typing.List[typing.Any] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `setsubtract` + +```python +import cdktf + +cdktf.FnGenerated.setsubtract( + a: typing.List[typing.Any], + b: typing.List[typing.Any] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `b`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `setunion` + +```python +import cdktf + +cdktf.FnGenerated.setunion( + first_set: typing.List[typing.Any], + other_sets: typing.List[typing.List[typing.Any]] +) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ typing.List[typing.Any] + +--- + +###### `other_sets`Required + +- _Type:_ typing.List[typing.List[typing.Any]] + +--- + +##### `sha1` + +```python +import cdktf + +cdktf.FnGenerated.sha1( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `sha256` + +```python +import cdktf + +cdktf.FnGenerated.sha256( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `sha512` + +```python +import cdktf + +cdktf.FnGenerated.sha512( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ str + +--- + +##### `signum` + +```python +import cdktf + +cdktf.FnGenerated.signum( + num: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `slice` + +```python +import cdktf + +cdktf.FnGenerated.slice( + list: typing.Any, + start_index: typing.Union[int, float], + end_index: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +###### `start_index`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `end_index`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `sort` + +```python +import cdktf + +cdktf.FnGenerated.sort( + list: typing.List[str] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ typing.List[str] + +--- + +##### `split` + +```python +import cdktf + +cdktf.FnGenerated.split( + separator: str, + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ str + +--- + +###### `str`Required + +- _Type:_ str + +--- + +##### `startswith` + +```python +import cdktf + +cdktf.FnGenerated.startswith( + str: str, + prefix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ str + +--- + +###### `prefix`Required + +- _Type:_ str + +--- + +##### `strcontains` + +```python +import cdktf + +cdktf.FnGenerated.strcontains( + str: str, + substr: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ str + +--- + +###### `substr`Required + +- _Type:_ str + +--- + +##### `strrev` + +```python +import cdktf + +cdktf.FnGenerated.strrev( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ str + +--- + +##### `substr` + +```python +import cdktf + +cdktf.FnGenerated.substr( + str: str, + offset: typing.Union[int, float], + length: typing.Union[int, float] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ str + +--- + +###### `offset`Required + +- _Type:_ typing.Union[int, float] + +--- + +###### `length`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `sum` + +```python +import cdktf + +cdktf.FnGenerated.sum( + list: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ typing.Any + +--- + +##### `templatefile` + +```python +import cdktf + +cdktf.FnGenerated.templatefile( + path: str, + vars: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ str + +--- + +###### `vars`Required + +- _Type:_ typing.Any + +--- + +##### `textdecodebase64` + +```python +import cdktf + +cdktf.FnGenerated.textdecodebase64( + source: str, + encoding: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ str + +--- + +###### `encoding`Required + +- _Type:_ str + +--- + +##### `textencodebase64` + +```python +import cdktf + +cdktf.FnGenerated.textencodebase64( + str: str, + encoding: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ str + +--- + +###### `encoding`Required + +- _Type:_ str + +--- + +##### `timeadd` + +```python +import cdktf + +cdktf.FnGenerated.timeadd( + timestamp: str, + duration: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ str + +--- + +###### `duration`Required + +- _Type:_ str + +--- + +##### `timecmp` + +```python +import cdktf + +cdktf.FnGenerated.timecmp( + timestamp_a: str, + timestamp_b: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ str + +--- + +###### `timestamp_b`Required + +- _Type:_ str + +--- + +##### `timestamp` + +```python +import cdktf + +cdktf.FnGenerated.timestamp() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `title` + +```python +import cdktf + +cdktf.FnGenerated.title( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ str + +--- + +##### `tobool` + +```python +import cdktf + +cdktf.FnGenerated.tobool( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tolist` + +```python +import cdktf + +cdktf.FnGenerated.tolist( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tomap` + +```python +import cdktf + +cdktf.FnGenerated.tomap( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tonumber` + +```python +import cdktf + +cdktf.FnGenerated.tonumber( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `toset` + +```python +import cdktf + +cdktf.FnGenerated.toset( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `tostring` + +```python +import cdktf + +cdktf.FnGenerated.tostring( + v: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ typing.Any + +--- + +##### `transpose` + +```python +import cdktf + +cdktf.FnGenerated.transpose( + values: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ typing.Any + +--- + +##### `trim` + +```python +import cdktf + +cdktf.FnGenerated.trim( + str: str, + cutset: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ str + +--- + +###### `cutset`Required + +- _Type:_ str + +--- + +##### `trimprefix` + +```python +import cdktf + +cdktf.FnGenerated.trimprefix( + str: str, + prefix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ str + +--- + +###### `prefix`Required + +- _Type:_ str + +--- + +##### `trimspace` + +```python +import cdktf + +cdktf.FnGenerated.trimspace( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `trimsuffix` + +```python +import cdktf + +cdktf.FnGenerated.trimsuffix( + str: str, + suffix: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ str + +--- + +###### `suffix`Required + +- _Type:_ str + +--- + +##### `try` + +```python +import cdktf + +cdktf.FnGenerated.try( + expressions: typing.List[typing.Any] +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ typing.List[typing.Any] + +--- + +##### `upper` + +```python +import cdktf + +cdktf.FnGenerated.upper( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ str + +--- + +##### `urlencode` + +```python +import cdktf + +cdktf.FnGenerated.urlencode( + str: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ str + +--- + +##### `uuid` + +```python +import cdktf + +cdktf.FnGenerated.uuid() +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `uuidv5` + +```python +import cdktf + +cdktf.FnGenerated.uuidv5( + namespace: str, + name: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ str + +--- + +###### `name`Required + +- _Type:_ str + +--- + +##### `values` + +```python +import cdktf + +cdktf.FnGenerated.values( + mapping: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ typing.Any + +--- + +##### `yamldecode` + +```python +import cdktf + +cdktf.FnGenerated.yamldecode( + src: str +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ str + +--- + +##### `yamlencode` + +```python +import cdktf + +cdktf.FnGenerated.yamlencode( + value: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `zipmap` + +```python +import cdktf + +cdktf.FnGenerated.zipmap( + keys: typing.List[str], + values: typing.Any +) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ typing.List[str] + +--- + +###### `values`Required + +- _Type:_ typing.Any + +--- + +### Lazy + +Lazily produce a value. + +Can be used to return a string, list or numeric value whose actual value +will only be calculated later, during synthesis. + +#### Initializers + +```python +import cdktf + +cdktf.Lazy() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------- | +| any_value | Produces a lazy token from an untyped value. | +| list_value | Returns a list-ified token for a lazy value. | +| number_value | Returns a numberified token for a lazy value. | +| string_value | Returns a stringified token for a lazy value. | + +--- + +##### `any_value` + +```python +import cdktf + +cdktf.Lazy.any_value( + producer: IAnyProducer, + display_hint: str = None, + omit_empty_array: bool = None +) +``` + +Produces a lazy token from an untyped value. + +###### `producer`Required + +- _Type:_ IAnyProducer + +The lazy producer. + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +###### `omit_empty_array`Optional + +- _Type:_ bool +- _Default:_ false + +If the produced value is an array and it is empty, return 'undefined' instead. + +--- + +##### `list_value` + +```python +import cdktf + +cdktf.Lazy.list_value( + producer: IListProducer, + display_hint: str = None, + omit_empty: bool = None +) +``` + +Returns a list-ified token for a lazy value. + +###### `producer`Required + +- _Type:_ IListProducer + +The producer. + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +###### `omit_empty`Optional + +- _Type:_ bool +- _Default:_ false + +If the produced list is empty, return 'undefined' instead. + +--- + +##### `number_value` + +```python +import cdktf + +cdktf.Lazy.number_value( + producer: INumberProducer +) +``` + +Returns a numberified token for a lazy value. + +###### `producer`Required + +- _Type:_ INumberProducer + +The producer. + +--- + +##### `string_value` + +```python +import cdktf + +cdktf.Lazy.string_value( + producer: IStringProducer, + display_hint: str = None +) +``` + +Returns a stringified token for a lazy value. + +###### `producer`Required + +- _Type:_ IStringProducer + +The producer. + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +### LazyBase + +- _Implements:_ IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.LazyBase() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------ | --------------------------------------------------------- | +| add_post_processor | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_jso_n | Turn this Token into JSON. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `add_post_processor` + +```python +def add_post_processor( + post_processor: IPostProcessor +) - > None +``` + +###### `post_processor`Required + +- _Type:_ IPostProcessor + +--- + +##### `resolve` + +```python +def resolve( + context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_jso_n` + +```python +def to_jso_n() - > typing.Any +``` + +Turn this Token into JSON. + +Called automatically when JSON.stringify() is called on a Token. + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### ListTerraformIterator + +#### Initializers + +```python +import cdktf + +cdktf.ListTerraformIterator( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| list | typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] | _No description._ | + +--- + +##### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| for_expression_for_list | Creates a for expression that results in a list. | +| for_expression_for_map | Creates a for expression that results in a map. | +| get_any | _No description._ | +| get_any_map | _No description._ | +| get_boolean | _No description._ | +| get_boolean_map | _No description._ | +| get_list | _No description._ | +| get_map | _No description._ | +| get_number | _No description._ | +| get_number_list | _No description._ | +| get_number_map | _No description._ | +| get_string | _No description._ | +| get_string_map | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluck_property | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```python +def dynamic( + attributes: typing.Mapping[typing.Any] +) - > IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `for_expression_for_list` + +```python +def for_expression_for_list( + expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use in the for mapping. + +--- + +##### `for_expression_for_map` + +```python +def for_expression_for_map( + key_expression: typing.Union[str, IResolvable], + value_expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `key_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as key in the for mapping. + +--- + +###### `value_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as value in the for mapping. + +--- + +##### `get_any` + +```python +def get_any( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_any_map` + +```python +def get_any_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean` + +```python +def get_boolean( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean_map` + +```python +def get_boolean_map( + attribute: str +) - > typing.Mapping[bool] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_list` + +```python +def get_list( + attribute: str +) - > typing.List[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_map` + +```python +def get_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number` + +```python +def get_number( + attribute: str +) - > typing.Union[int, float] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_list` + +```python +def get_number_list( + attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_map` + +```python +def get_number_map( + attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string` + +```python +def get_string( + attribute: str +) - > str +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string_map` + +```python +def get_string_map( + attribute: str +) - > typing.Mapping[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `keys` + +```python +def keys() - > IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluck_property` + +```python +def pluck_property( + property: str +) - > IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ str + +The property of the iterators values to map to. + +--- + +##### `values` + +```python +def values() - > IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| from_complex_list | Creates a new iterator from a complex list. | +| from_data_sources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| from_list | Creates a new iterator from a list. | +| from_map | Creates a new iterator from a map. | +| from_resources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `from_complex_list` + +```python +import cdktf + +cdktf.ListTerraformIterator.from_complex_list( + list: typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList], + map_key_attribute_name: str +) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```python +# Example automatically generated from non-compiling source. May contain errors. +cert = AcmCertificate(self, "cert", + domain_name="example.com", + validation_method="DNS" +) + +dvo_iterator = TerraformIterator.from_complex_list(cert.domain_validation_options, "domain_name") + +Route53Record(self, "record", + allow_overwrite=True, + name=dvo_iterator.get_string("name"), + records=[dvo_iterator.get_string("record")], + ttl=60, + type=dvo_iterator.get_string("type"), + zone_id=Token.as_string(data_aws_route53_zone_example.zone_id), + for_each=dvo_iterator +) +``` + +###### `list`Required + +- _Type:_ typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList] + +the list to iterate over. + +--- + +###### `map_key_attribute_name`Required + +- _Type:_ str + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `from_data_sources` + +```python +import cdktf + +cdktf.ListTerraformIterator.from_data_sources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `from_list` + +```python +import cdktf + +cdktf.ListTerraformIterator.from_list( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] +) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +##### `from_map` + +```python +import cdktf + +cdktf.ListTerraformIterator.from_map( + map: typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] +) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] + +--- + +##### `from_resources` + +```python +import cdktf + +cdktf.ListTerraformIterator.from_resources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ----------------------- | --------------------------------------------------------------------------- | +| key | typing.Any | Returns the currently entry in the list or set that is being iterated over. | +| value | typing.Any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```python +key: typing.Any +``` + +- _Type:_ typing.Any + +Returns the currently entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +Returns the value of the current item iterated over. + +--- + +### Manifest + +- _Implements:_ IManifest + +#### Initializers + +```python +import cdktf + +cdktf.Manifest( + version: str, + outdir: str, + hcl_output: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------- | ----------------- | +| version | str | _No description._ | +| outdir | str | _No description._ | +| hcl_output | bool | _No description._ | + +--- + +##### `version`Required + +- _Type:_ str + +--- + +##### `outdir`Required + +- _Type:_ str + +--- + +##### `hcl_output`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------- | ----------------- | +| build_manifest | _No description._ | +| for_stack | _No description._ | +| write_to_file | _No description._ | + +--- + +##### `build_manifest` + +```python +def build_manifest() - > IManifest +``` + +##### `for_stack` + +```python +def for_stack( + stack: TerraformStack +) - > StackManifest +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `write_to_file` + +```python +def write_to_file() - > None +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| hcl_output | bool | _No description._ | +| outdir | str | _No description._ | +| stack_file_name | str | _No description._ | +| stacks | typing.Mapping[StackManifest] | _No description._ | +| version | str | _No description._ | + +--- + +##### `hcl_output`Required + +```python +hcl_output: bool +``` + +- _Type:_ bool + +--- + +##### `outdir`Required + +```python +outdir: str +``` + +- _Type:_ str + +--- + +##### `stack_file_name`Required + +```python +stack_file_name: str +``` + +- _Type:_ str + +--- + +##### `stacks`Required + +```python +stacks: typing.Mapping[StackManifest] +``` + +- _Type:_ typing.Mapping[StackManifest] + +--- + +##### `version`Required + +```python +version: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| fileName | str | _No description._ | +| stackMetadataPath | str | _No description._ | +| stacksFolder | str | _No description._ | + +--- + +##### `fileName`Required + +```python +fileName: str +``` + +- _Type:_ str + +--- + +##### `stackMetadataPath`Required + +```python +stackMetadataPath: str +``` + +- _Type:_ str + +--- + +##### `stacksFolder`Required + +```python +stacksFolder: str +``` + +- _Type:_ str + +--- + +### MapList + +- _Implements:_ ITerraformAddressable, IInterpolatingParent, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.MapList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### MapTerraformIterator + +#### Initializers + +```python +import cdktf + +cdktf.MapTerraformIterator( + map: typing.Union[AnyMap, StringMap, NumberMap, BooleanMap, ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]]] +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| map | typing.Union[AnyMap, StringMap, NumberMap, BooleanMap, ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]]] | _No description._ | + +--- + +##### `map`Required + +- _Type:_ typing.Union[AnyMap, StringMap, NumberMap, BooleanMap, ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]]] + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| for_expression_for_list | Creates a for expression that results in a list. | +| for_expression_for_map | Creates a for expression that results in a map. | +| get_any | _No description._ | +| get_any_map | _No description._ | +| get_boolean | _No description._ | +| get_boolean_map | _No description._ | +| get_list | _No description._ | +| get_map | _No description._ | +| get_number | _No description._ | +| get_number_list | _No description._ | +| get_number_map | _No description._ | +| get_string | _No description._ | +| get_string_map | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluck_property | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```python +def dynamic( + attributes: typing.Mapping[typing.Any] +) - > IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `for_expression_for_list` + +```python +def for_expression_for_list( + expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use in the for mapping. + +--- + +##### `for_expression_for_map` + +```python +def for_expression_for_map( + key_expression: typing.Union[str, IResolvable], + value_expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `key_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as key in the for mapping. + +--- + +###### `value_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as value in the for mapping. + +--- + +##### `get_any` + +```python +def get_any( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_any_map` + +```python +def get_any_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean` + +```python +def get_boolean( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean_map` + +```python +def get_boolean_map( + attribute: str +) - > typing.Mapping[bool] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_list` + +```python +def get_list( + attribute: str +) - > typing.List[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_map` + +```python +def get_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number` + +```python +def get_number( + attribute: str +) - > typing.Union[int, float] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_list` + +```python +def get_number_list( + attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_map` + +```python +def get_number_map( + attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string` + +```python +def get_string( + attribute: str +) - > str +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string_map` + +```python +def get_string_map( + attribute: str +) - > typing.Mapping[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `keys` + +```python +def keys() - > IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluck_property` + +```python +def pluck_property( + property: str +) - > IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ str + +The property of the iterators values to map to. + +--- + +##### `values` + +```python +def values() - > IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| from_complex_list | Creates a new iterator from a complex list. | +| from_data_sources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| from_list | Creates a new iterator from a list. | +| from_map | Creates a new iterator from a map. | +| from_resources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `from_complex_list` + +```python +import cdktf + +cdktf.MapTerraformIterator.from_complex_list( + list: typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList], + map_key_attribute_name: str +) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```python +# Example automatically generated from non-compiling source. May contain errors. +cert = AcmCertificate(self, "cert", + domain_name="example.com", + validation_method="DNS" +) + +dvo_iterator = TerraformIterator.from_complex_list(cert.domain_validation_options, "domain_name") + +Route53Record(self, "record", + allow_overwrite=True, + name=dvo_iterator.get_string("name"), + records=[dvo_iterator.get_string("record")], + ttl=60, + type=dvo_iterator.get_string("type"), + zone_id=Token.as_string(data_aws_route53_zone_example.zone_id), + for_each=dvo_iterator +) +``` + +###### `list`Required + +- _Type:_ typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList] + +the list to iterate over. + +--- + +###### `map_key_attribute_name`Required + +- _Type:_ str + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `from_data_sources` + +```python +import cdktf + +cdktf.MapTerraformIterator.from_data_sources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `from_list` + +```python +import cdktf + +cdktf.MapTerraformIterator.from_list( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] +) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +##### `from_map` + +```python +import cdktf + +cdktf.MapTerraformIterator.from_map( + map: typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] +) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] + +--- + +##### `from_resources` + +```python +import cdktf + +cdktf.MapTerraformIterator.from_resources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------- | +| key | str | Returns the key of the current entry in the map that is being iterated over. | +| value | typing.Any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```python +key: str +``` + +- _Type:_ str + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +Returns the value of the current item iterated over. + +--- + +### MigrateIds + +- _Implements:_ IAspect + +For migrating past 0.17 where the feature flag for the old id generation logic was removed after being deprecated since 0.15. + +#### Initializers + +```python +import cdktf + +cdktf.MigrateIds() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------------ | +| visit | All aspects can visit an IConstruct. | + +--- + +##### `visit` + +```python +def visit( + node: IConstruct +) - > None +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ constructs.IConstruct + +--- + +### NamedCloudWorkspace + +The name of a single Terraform Cloud workspace. + +You will only be able to use the workspace specified in the configuration with this working directory, and cannot manage workspaces from the CLI (e.g. terraform workspace select or terraform workspace new). + +#### Initializers + +```python +import cdktf + +cdktf.NamedCloudWorkspace( + name: str, + project: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| name | str | _No description._ | +| project | str | _No description._ | + +--- + +##### `name`Required + +- _Type:_ str + +--- + +##### `project`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------- | +| to_terraform | _No description._ | +| to_hcl_terraform | _No description._ | + +--- + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ---------------- | ----------------- | +| name | str | _No description._ | +| project | str | _No description._ | + +--- + +##### `name`Required + +```python +name: str +``` + +- _Type:_ str + +--- + +##### `project`Optional + +```python +project: str +``` + +- _Type:_ str + +--- + +### NamedRemoteWorkspace + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```python +import cdktf + +cdktf.NamedRemoteWorkspace( + name: str +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| name | str | _No description._ | + +--- + +##### `name`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ---------------- | ----------------- | +| name | str | _No description._ | + +--- + +##### `name`Required + +```python +name: str +``` + +- _Type:_ str + +--- + +### NumberListList + +#### Initializers + +```python +import cdktf + +cdktf.NumberListList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------- | +| all_with_map_key | Creating an iterator for this complex list. | +| compute_fqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `all_with_map_key` + +```python +def all_with_map_key( + map_key_attribute_name: str +) - > DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > typing.List[typing.Union[int, float]] +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### NumberListMap + +#### Initializers + +```python +import cdktf + +cdktf.NumberListMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + key: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `key`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### NumberMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.NumberMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `lookup` + +```python +def lookup( + key: str +) - > typing.Union[int, float] +``` + +###### `key`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### NumberMapList + +#### Initializers + +```python +import cdktf + +cdktf.NumberMapList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > NumberMap +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### Op + +This class contains static functions for all arithmetical and logical operators in the Terraform configuration language. + +#### Initializers + +```python +import cdktf + +cdktf.Op() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------- | ------------------------ | +| add | Renders left + right. | +| and | Renders left && right. | +| div | Renders left / right. | +| eq | Renders left == right. | +| gt | Renders left > right. | +| gte | Renders left >= right. | +| lt | Renders left < right. | +| lte | Renders left < = right. | +| mod | Renders left % right. | +| mul | Renders left \* right. | +| negate | Renders -expression. | +| neq | Renders left != right. | +| not | Renders !expression. | +| or | Renders left \|\| right. | +| sub | Renders left - right. | + +--- + +##### `add` + +```python +import cdktf + +cdktf.Op.add( + left: typing.Any, + right: typing.Any +) +``` + +Renders left + right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `and` + +```python +import cdktf + +cdktf.Op.and( + left: typing.Any, + right: typing.Any +) +``` + +Renders left && right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `div` + +```python +import cdktf + +cdktf.Op.div( + left: typing.Any, + right: typing.Any +) +``` + +Renders left / right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `eq` + +```python +import cdktf + +cdktf.Op.eq( + left: typing.Any, + right: typing.Any +) +``` + +Renders left == right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `gt` + +```python +import cdktf + +cdktf.Op.gt( + left: typing.Any, + right: typing.Any +) +``` + +Renders left > right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `gte` + +```python +import cdktf + +cdktf.Op.gte( + left: typing.Any, + right: typing.Any +) +``` + +Renders left >= right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `lt` + +```python +import cdktf + +cdktf.Op.lt( + left: typing.Any, + right: typing.Any +) +``` + +Renders left < right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `lte` + +```python +import cdktf + +cdktf.Op.lte( + left: typing.Any, + right: typing.Any +) +``` + +Renders left < = right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `mod` + +```python +import cdktf + +cdktf.Op.mod( + left: typing.Any, + right: typing.Any +) +``` + +Renders left % right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `mul` + +```python +import cdktf + +cdktf.Op.mul( + left: typing.Any, + right: typing.Any +) +``` + +Renders left \* right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `negate` + +```python +import cdktf + +cdktf.Op.negate( + expression: typing.Any +) +``` + +Renders -expression. + +###### `expression`Required + +- _Type:_ typing.Any + +--- + +##### `neq` + +```python +import cdktf + +cdktf.Op.neq( + left: typing.Any, + right: typing.Any +) +``` + +Renders left != right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `not` + +```python +import cdktf + +cdktf.Op.not( + expression: typing.Any +) +``` + +Renders !expression. + +###### `expression`Required + +- _Type:_ typing.Any + +--- + +##### `or` + +```python +import cdktf + +cdktf.Op.or( + left: typing.Any, + right: typing.Any +) +``` + +Renders left || right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +##### `sub` + +```python +import cdktf + +cdktf.Op.sub( + left: typing.Any, + right: typing.Any +) +``` + +Renders left - right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +### PrefixedRemoteWorkspaces + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```python +import cdktf + +cdktf.PrefixedRemoteWorkspaces( + prefix: str +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| prefix | str | _No description._ | + +--- + +##### `prefix`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ---------------- | ----------------- | +| prefix | str | _No description._ | + +--- + +##### `prefix`Required + +```python +prefix: str +``` + +- _Type:_ str + +--- + +### ResourceTerraformIterator + +#### Initializers + +```python +import cdktf + +cdktf.ResourceTerraformIterator( + element: ITerraformResource +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| element | ITerraformResource | _No description._ | + +--- + +##### `element`Required + +- _Type:_ ITerraformResource + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| for_expression_for_list | Creates a for expression that results in a list. | +| for_expression_for_map | Creates a for expression that results in a map. | +| get_any | _No description._ | +| get_any_map | _No description._ | +| get_boolean | _No description._ | +| get_boolean_map | _No description._ | +| get_list | _No description._ | +| get_map | _No description._ | +| get_number | _No description._ | +| get_number_list | _No description._ | +| get_number_map | _No description._ | +| get_string | _No description._ | +| get_string_map | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluck_property | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```python +def dynamic( + attributes: typing.Mapping[typing.Any] +) - > IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `for_expression_for_list` + +```python +def for_expression_for_list( + expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use in the for mapping. + +--- + +##### `for_expression_for_map` + +```python +def for_expression_for_map( + key_expression: typing.Union[str, IResolvable], + value_expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `key_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as key in the for mapping. + +--- + +###### `value_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as value in the for mapping. + +--- + +##### `get_any` + +```python +def get_any( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_any_map` + +```python +def get_any_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean` + +```python +def get_boolean( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean_map` + +```python +def get_boolean_map( + attribute: str +) - > typing.Mapping[bool] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_list` + +```python +def get_list( + attribute: str +) - > typing.List[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_map` + +```python +def get_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number` + +```python +def get_number( + attribute: str +) - > typing.Union[int, float] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_list` + +```python +def get_number_list( + attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_map` + +```python +def get_number_map( + attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string` + +```python +def get_string( + attribute: str +) - > str +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string_map` + +```python +def get_string_map( + attribute: str +) - > typing.Mapping[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `keys` + +```python +def keys() - > IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluck_property` + +```python +def pluck_property( + property: str +) - > IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ str + +The property of the iterators values to map to. + +--- + +##### `values` + +```python +def values() - > IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| from_complex_list | Creates a new iterator from a complex list. | +| from_data_sources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| from_list | Creates a new iterator from a list. | +| from_map | Creates a new iterator from a map. | +| from_resources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `from_complex_list` + +```python +import cdktf + +cdktf.ResourceTerraformIterator.from_complex_list( + list: typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList], + map_key_attribute_name: str +) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```python +# Example automatically generated from non-compiling source. May contain errors. +cert = AcmCertificate(self, "cert", + domain_name="example.com", + validation_method="DNS" +) + +dvo_iterator = TerraformIterator.from_complex_list(cert.domain_validation_options, "domain_name") + +Route53Record(self, "record", + allow_overwrite=True, + name=dvo_iterator.get_string("name"), + records=[dvo_iterator.get_string("record")], + ttl=60, + type=dvo_iterator.get_string("type"), + zone_id=Token.as_string(data_aws_route53_zone_example.zone_id), + for_each=dvo_iterator +) +``` + +###### `list`Required + +- _Type:_ typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList] + +the list to iterate over. + +--- + +###### `map_key_attribute_name`Required + +- _Type:_ str + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `from_data_sources` + +```python +import cdktf + +cdktf.ResourceTerraformIterator.from_data_sources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `from_list` + +```python +import cdktf + +cdktf.ResourceTerraformIterator.from_list( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] +) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +##### `from_map` + +```python +import cdktf + +cdktf.ResourceTerraformIterator.from_map( + map: typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] +) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] + +--- + +##### `from_resources` + +```python +import cdktf + +cdktf.ResourceTerraformIterator.from_resources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------- | ------------------------------------------------------------------------- | +| key | typing.Any | Returns the current entry in the list or set that is being iterated over. | +| value | typing.Any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```python +key: typing.Any +``` + +- _Type:_ typing.Any + +Returns the current entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +Returns the value of the current item iterated over. + +--- + +### StringConcat + +- _Implements:_ IFragmentConcatenator + +Converts all fragments to strings and concats those. + +Drops 'undefined's. + +#### Initializers + +```python +import cdktf + +cdktf.StringConcat() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------ | +| join | Concatenates string fragments. | + +--- + +##### `join` + +```python +def join( + left: typing.Any, + right: typing.Any +) - > typing.Any +``` + +Concatenates string fragments. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +### StringListList + +#### Initializers + +```python +import cdktf + +cdktf.StringListList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------- | +| all_with_map_key | Creating an iterator for this complex list. | +| compute_fqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `all_with_map_key` + +```python +def all_with_map_key( + map_key_attribute_name: str +) - > DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `map_key_attribute_name`Required + +- _Type:_ str + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > typing.List[str] +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### StringListMap + +#### Initializers + +```python +import cdktf + +cdktf.StringListMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + key: str +) - > typing.List[str] +``` + +###### `key`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### StringMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```python +import cdktf + +cdktf.StringMap( + terraform_resource: IInterpolatingParent, + terraform_attribute: str +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `lookup` + +```python +def lookup( + key: str +) - > str +``` + +###### `key`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### StringMapList + +#### Initializers + +```python +import cdktf + +cdktf.StringMapList( + terraform_resource: IInterpolatingParent, + terraform_attribute: str, + wraps_set: bool +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraform_resource | IInterpolatingParent | _No description._ | +| terraform_attribute | str | _No description._ | +| wraps_set | bool | _No description._ | + +--- + +##### `terraform_resource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `wraps_set`Required + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| compute_fqn | _No description._ | +| interpolation_for_attribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `compute_fqn` + +```python +def compute_fqn() - > str +``` + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + property: str +) - > IResolvable +``` + +###### `property`Required + +- _Type:_ str + +--- + +##### `resolve` + +```python +def resolve( + _context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```python +def get( + index: typing.Union[int, float] +) - > StringMap +``` + +###### `index`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | str | _No description._ | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### TaggedCloudWorkspaces + +A set of Terraform Cloud workspace tags. + +You will be able to use this working directory with any workspaces that have all of the specified tags, and can use the terraform workspace commands to switch between them or create new workspaces. New workspaces will automatically have the specified tags. This option conflicts with name. + +#### Initializers + +```python +import cdktf + +cdktf.TaggedCloudWorkspaces( + tags: typing.List[str], + project: str = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tags | typing.List[str] | _No description._ | +| project | str | _No description._ | + +--- + +##### `tags`Required + +- _Type:_ typing.List[str] + +--- + +##### `project`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------- | +| to_terraform | _No description._ | +| to_hcl_terraform | _No description._ | + +--- + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| tags | typing.List[str] | _No description._ | +| project | str | _No description._ | + +--- + +##### `tags`Required + +```python +tags: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `project`Optional + +```python +project: str +``` + +- _Type:_ str + +--- + +### TerraformCount + +Iterator for the Terraform count property. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| to_string | _No description._ | +| to_terraform | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Union[int, float] +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------- | +| is_terraform_count | _No description._ | +| of | _No description._ | + +--- + +##### `is_terraform_count` + +```python +import cdktf + +cdktf.TerraformCount.is_terraform_count( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `of` + +```python +import cdktf + +cdktf.TerraformCount.of( + count: typing.Union[int, float] +) +``` + +###### `count`Required + +- _Type:_ typing.Union[int, float] + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------- | ------------------------------------- | ----------------- | +| index | typing.Union[int, float] | _No description._ | + +--- + +##### `index`Required + +```python +index: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +--- + +### TerraformIterator + +- _Implements:_ ITerraformIterator + +#### Initializers + +```python +import cdktf + +cdktf.TerraformIterator() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| for_expression_for_list | Creates a for expression that results in a list. | +| for_expression_for_map | Creates a for expression that results in a map. | +| get_any | _No description._ | +| get_any_map | _No description._ | +| get_boolean | _No description._ | +| get_boolean_map | _No description._ | +| get_list | _No description._ | +| get_map | _No description._ | +| get_number | _No description._ | +| get_number_list | _No description._ | +| get_number_map | _No description._ | +| get_string | _No description._ | +| get_string_map | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluck_property | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```python +def dynamic( + attributes: typing.Mapping[typing.Any] +) - > IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `for_expression_for_list` + +```python +def for_expression_for_list( + expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use in the for mapping. + +--- + +##### `for_expression_for_map` + +```python +def for_expression_for_map( + key_expression: typing.Union[str, IResolvable], + value_expression: typing.Union[str, IResolvable] +) - > IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `key_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as key in the for mapping. + +--- + +###### `value_expression`Required + +- _Type:_ typing.Union[str, IResolvable] + +The expression to use as value in the for mapping. + +--- + +##### `get_any` + +```python +def get_any( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_any_map` + +```python +def get_any_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean` + +```python +def get_boolean( + attribute: str +) - > IResolvable +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_boolean_map` + +```python +def get_boolean_map( + attribute: str +) - > typing.Mapping[bool] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_list` + +```python +def get_list( + attribute: str +) - > typing.List[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_map` + +```python +def get_map( + attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number` + +```python +def get_number( + attribute: str +) - > typing.Union[int, float] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_list` + +```python +def get_number_list( + attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_number_map` + +```python +def get_number_map( + attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string` + +```python +def get_string( + attribute: str +) - > str +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `get_string_map` + +```python +def get_string_map( + attribute: str +) - > typing.Mapping[str] +``` + +###### `attribute`Required + +- _Type:_ str + +name of the property to retrieve. + +--- + +##### `keys` + +```python +def keys() - > IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluck_property` + +```python +def pluck_property( + property: str +) - > IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ str + +The property of the iterators values to map to. + +--- + +##### `values` + +```python +def values() - > IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| from_complex_list | Creates a new iterator from a complex list. | +| from_data_sources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| from_list | Creates a new iterator from a list. | +| from_map | Creates a new iterator from a map. | +| from_resources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `from_complex_list` + +```python +import cdktf + +cdktf.TerraformIterator.from_complex_list( + list: typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList], + map_key_attribute_name: str +) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```python +# Example automatically generated from non-compiling source. May contain errors. +cert = AcmCertificate(self, "cert", + domain_name="example.com", + validation_method="DNS" +) + +dvo_iterator = TerraformIterator.from_complex_list(cert.domain_validation_options, "domain_name") + +Route53Record(self, "record", + allow_overwrite=True, + name=dvo_iterator.get_string("name"), + records=[dvo_iterator.get_string("record")], + ttl=60, + type=dvo_iterator.get_string("type"), + zone_id=Token.as_string(data_aws_route53_zone_example.zone_id), + for_each=dvo_iterator +) +``` + +###### `list`Required + +- _Type:_ typing.Union[IResolvable, ComplexList, StringMapList, NumberMapList, BooleanMapList, AnyMapList] + +the list to iterate over. + +--- + +###### `map_key_attribute_name`Required + +- _Type:_ str + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `from_data_sources` + +```python +import cdktf + +cdktf.TerraformIterator.from_data_sources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `from_list` + +```python +import cdktf + +cdktf.TerraformIterator.from_list( + list: typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] +) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ typing.Union[typing.List[str], IResolvable, typing.List[typing.Union[int, float]], typing.List[typing.Union[bool, IResolvable]]] + +--- + +##### `from_map` + +```python +import cdktf + +cdktf.TerraformIterator.from_map( + map: typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] +) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ typing.Union[ComplexMap, typing.Mapping[typing.Any], typing.Mapping[str], typing.Mapping[typing.Union[int, float]], typing.Mapping[bool]] + +--- + +##### `from_resources` + +```python +import cdktf + +cdktf.TerraformIterator.from_resources( + resource: ITerraformResource +) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +### TerraformResourceTargets + +#### Initializers + +```python +import cdktf + +cdktf.TerraformResourceTargets() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------- | +| add_resource_target | _No description._ | +| get_resource_by_target | _No description._ | + +--- + +##### `add_resource_target` + +```python +def add_resource_target( + resource: TerraformResource, + target: str +) - > None +``` + +###### `resource`Required + +- _Type:_ TerraformResource + +--- + +###### `target`Required + +- _Type:_ str + +--- + +##### `get_resource_by_target` + +```python +def get_resource_by_target( + target: str +) - > TerraformResource +``` + +###### `target`Required + +- _Type:_ str + +--- + +### TerraformSelf + +Expressions in connection blocks cannot refer to their parent resource by name. + +References create dependencies, and referring to a resource by name within its own block would create a dependency cycle. +Instead, expressions can use the self object, which represents the connection's parent resource and has all of that resource's attributes. +For example, use self.public_ip to reference an aws_instance's public_ip attribute. + +#### Initializers + +```python +import cdktf + +cdktf.TerraformSelf() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| get_any | Only usable within a connection block to reference the connections parent resource. | +| get_number | Only usable within a connection block to reference the connections parent resource. | +| get_string | Only usable within a connection block to reference the connections parent resource. | + +--- + +##### `get_any` + +```python +import cdktf + +cdktf.TerraformSelf.get_any( + key: str +) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getAny("hostPort")` + +###### `key`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +import cdktf + +cdktf.TerraformSelf.get_number( + key: str +) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getNumber("hostPort")` + +###### `key`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +import cdktf + +cdktf.TerraformSelf.get_string( + key: str +) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getString("publicIp")` + +###### `key`Required + +- _Type:_ str + +--- + +### Testing + +Testing utilities for cdktf applications. + +#### Initializers + +```python +import cdktf + +cdktf.Testing() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------- | +| app | Returns an app for testing with the following properties: - Output directory is a temp dir. | +| enable_future_flags | _No description._ | +| fake_cdktf_json_path | _No description._ | +| full_synth | _No description._ | +| render_construct_tree | _No description._ | +| setup_jest | _No description._ | +| stub_version | _No description._ | +| synth | Returns the Terraform synthesized JSON. | +| synth_hcl | Returns the Terraform synthesized JSON. | +| synth_scope | _No description._ | +| to_be_valid_terraform | _No description._ | +| to_have_data_source | _No description._ | +| to_have_data_source_with_properties | _No description._ | +| to_have_provider | _No description._ | +| to_have_provider_with_properties | _No description._ | +| to_have_resource | _No description._ | +| to_have_resource_with_properties | _No description._ | + +--- + +##### `app` + +```python +import cdktf + +cdktf.Testing.app( + context: typing.Mapping[typing.Any] = None, + enable_future_flags: bool = None, + fake_cdktf_json_path: bool = None, + outdir: str = None, + stack_traces: bool = None, + stub_version: bool = None +) +``` + +Returns an app for testing with the following properties: - Output directory is a temp dir. + +###### `context`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +###### `enable_future_flags`Optional + +- _Type:_ bool + +--- + +###### `fake_cdktf_json_path`Optional + +- _Type:_ bool + +--- + +###### `outdir`Optional + +- _Type:_ str + +--- + +###### `stack_traces`Optional + +- _Type:_ bool + +--- + +###### `stub_version`Optional + +- _Type:_ bool + +--- + +##### `enable_future_flags` + +```python +import cdktf + +cdktf.Testing.enable_future_flags( + app: App +) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `fake_cdktf_json_path` + +```python +import cdktf + +cdktf.Testing.fake_cdktf_json_path( + app: App +) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `full_synth` + +```python +import cdktf + +cdktf.Testing.full_synth( + stack: TerraformStack +) +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `render_construct_tree` + +```python +import cdktf + +cdktf.Testing.render_construct_tree( + construct: IConstruct +) +``` + +###### `construct`Required + +- _Type:_ constructs.IConstruct + +--- + +##### `setup_jest` + +```python +import cdktf + +cdktf.Testing.setup_jest() +``` + +##### `stub_version` + +```python +import cdktf + +cdktf.Testing.stub_version( + app: App +) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `synth` + +```python +import cdktf + +cdktf.Testing.synth( + stack: TerraformStack, + run_validations: bool = None +) +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `run_validations`Optional + +- _Type:_ bool + +--- + +##### `synth_hcl` + +```python +import cdktf + +cdktf.Testing.synth_hcl( + stack: TerraformStack, + run_validations: bool = None, + return_metadata: bool = None +) +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `run_validations`Optional + +- _Type:_ bool + +--- + +###### `return_metadata`Optional + +- _Type:_ bool + +--- + +##### `synth_scope` + +```python +import cdktf + +cdktf.Testing.synth_scope( + fn: IScopeCallback +) +``` + +###### `fn`Required + +- _Type:_ IScopeCallback + +--- + +##### `to_be_valid_terraform` + +```python +import cdktf + +cdktf.Testing.to_be_valid_terraform( + received: str +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +##### `to_have_data_source` + +```python +import cdktf + +cdktf.Testing.to_have_data_source( + received: str, + resource_type: str +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +###### `resource_type`Required + +- _Type:_ str + +--- + +##### `to_have_data_source_with_properties` + +```python +import cdktf + +cdktf.Testing.to_have_data_source_with_properties( + received: str, + resource_type: str, + properties: typing.Mapping[typing.Any] = None +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +###### `resource_type`Required + +- _Type:_ str + +--- + +###### `properties`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `to_have_provider` + +```python +import cdktf + +cdktf.Testing.to_have_provider( + received: str, + resource_type: str +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +###### `resource_type`Required + +- _Type:_ str + +--- + +##### `to_have_provider_with_properties` + +```python +import cdktf + +cdktf.Testing.to_have_provider_with_properties( + received: str, + resource_type: str, + properties: typing.Mapping[typing.Any] = None +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +###### `resource_type`Required + +- _Type:_ str + +--- + +###### `properties`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `to_have_resource` + +```python +import cdktf + +cdktf.Testing.to_have_resource( + received: str, + resource_type: str +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +###### `resource_type`Required + +- _Type:_ str + +--- + +##### `to_have_resource_with_properties` + +```python +import cdktf + +cdktf.Testing.to_have_resource_with_properties( + received: str, + resource_type: str, + properties: typing.Mapping[typing.Any] = None +) +``` + +###### `received`Required + +- _Type:_ str + +--- + +###### `resource_type`Required + +- _Type:_ str + +--- + +###### `properties`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +### Token + +Represents a special or lazily-evaluated value. + +Can be used to delay evaluation of a certain value in case, for example, +that it requires some context or late-bound data. Can also be used to +mark values that need special processing at document rendering time. + +Tokens can be embedded into strings while retaining their original +semantics. + +#### Initializers + +```python +import cdktf + +cdktf.Token() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------- | -------------------------------------------------------- | +| as_any | Return a resolvable representation of the given value. | +| as_any_map | Return a reversible map representation of this token. | +| as_boolean_map | Return a reversible map representation of this token. | +| as_list | Return a reversible list representation of this token. | +| as_map | Return a reversible map representation of this token. | +| as_number | Return a reversible number representation of this token. | +| as_number_list | Return a reversible list representation of this token. | +| as_number_map | Return a reversible map representation of this token. | +| as_string | Return a reversible string representation of this token. | +| as_string_map | Return a reversible map representation of this token. | +| is_unresolved | Returns true if obj represents an unresolved value. | +| null_value | Return a Token containing a `null` value. | + +--- + +##### `as_any` + +```python +import cdktf + +cdktf.Token.as_any( + value: typing.Any +) +``` + +Return a resolvable representation of the given value. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `as_any_map` + +```python +import cdktf + +cdktf.Token.as_any_map( + value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `as_boolean_map` + +```python +import cdktf + +cdktf.Token.as_boolean_map( + value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `as_list` + +```python +import cdktf + +cdktf.Token.as_list( + value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `as_map` + +```python +import cdktf + +cdktf.Token.as_map( + value: typing.Any, + map_value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `map_value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `as_number` + +```python +import cdktf + +cdktf.Token.as_number( + value: typing.Any +) +``` + +Return a reversible number representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `as_number_list` + +```python +import cdktf + +cdktf.Token.as_number_list( + value: typing.Any +) +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `as_number_map` + +```python +import cdktf + +cdktf.Token.as_number_map( + value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `as_string` + +```python +import cdktf + +cdktf.Token.as_string( + value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible string representation of this token. + +If the Token is initialized with a literal, the stringified value of the +literal is returned. Otherwise, a special quoted string representation +of the Token is returned that can be embedded into other strings. + +Strings with quoted Tokens in them can be restored back into +complex values with the Tokens restored by calling `resolve()` +on the string. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `as_string_map` + +```python +import cdktf + +cdktf.Token.as_string_map( + value: typing.Any, + display_hint: str = None +) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ typing.Any + +--- + +###### `display_hint`Optional + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +##### `is_unresolved` + +```python +import cdktf + +cdktf.Token.is_unresolved( + obj: typing.Any +) +``` + +Returns true if obj represents an unresolved value. + +One of these must be true: + +- `obj` is an IResolvable +- `obj` is a string containing at least one encoded `IResolvable` +- `obj` is either an encoded number or list + +This does NOT recurse into lists or objects to see if they +containing resolvables. + +###### `obj`Required + +- _Type:_ typing.Any + +The object to test. + +--- + +##### `null_value` + +```python +import cdktf + +cdktf.Token.null_value() +``` + +Return a Token containing a `null` value. + +Note: This is different than `undefined`, `nil`, `None` or similar +as it will end up in the Terraform config and can be used to explicitly +not set an attribute (which is sometimes required by Terraform providers) + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------------------------- | -------------------------------------- | +| ANY_MAP_TOKEN_VALUE | str | Any map token representation. | +| NUMBER_MAP_TOKEN_VALUE | typing.Union[int, float] | Number Map token value representation. | +| STRING_MAP_TOKEN_VALUE | str | String Map token value representation. | + +--- + +##### `ANY_MAP_TOKEN_VALUE`Required + +```python +ANY_MAP_TOKEN_VALUE: str +``` + +- _Type:_ str + +Any map token representation. + +--- + +##### `NUMBER_MAP_TOKEN_VALUE`Required + +```python +NUMBER_MAP_TOKEN_VALUE: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +Number Map token value representation. + +--- + +##### `STRING_MAP_TOKEN_VALUE`Required + +```python +STRING_MAP_TOKEN_VALUE: str +``` + +- _Type:_ str + +String Map token value representation. + +--- + +### Tokenization + +Less oft-needed functions to manipulate Tokens. + +#### Initializers + +```python +import cdktf + +cdktf.Tokenization() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- | +| is_resolvable | Return whether the given object is an IResolvable object. | +| resolve | Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. | +| reverse | Reverse any value into Resolvables, if possible. | +| reverse_list | Un-encode a Tokenized value from a list. | +| reverse_map | Un-encode a Tokenized value from a map. | +| reverse_number | Un-encode a Tokenized value from a number. | +| reverse_number_list | Un-encode a Tokenized value from a list. | +| reverse_string | Un-encode a string potentially containing encoded tokens. | +| stringify_number | Stringify a number directly or lazily if it's a Token. | + +--- + +##### `is_resolvable` + +```python +import cdktf + +cdktf.Tokenization.is_resolvable( + obj: typing.Any +) +``` + +Return whether the given object is an IResolvable object. + +This is different from Token.isUnresolved() which will also check for +encoded Tokens, whereas this method will only do a type check on the given +object. + +###### `obj`Required + +- _Type:_ typing.Any + +--- + +##### `resolve` + +```python +import cdktf + +cdktf.Tokenization.resolve( + obj: typing.Any, + resolver: ITokenResolver, + scope: IConstruct, + preparing: bool = None +) +``` + +Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. + +Values can only be primitives, arrays or tokens. Other objects (i.e. with methods) will be rejected. + +###### `obj`Required + +- _Type:_ typing.Any + +The object to resolve. + +--- + +###### `resolver`Required + +- _Type:_ ITokenResolver + +The resolver to apply to any resolvable tokens found. + +--- + +###### `scope`Required + +- _Type:_ constructs.IConstruct + +The scope from which resolution is performed. + +--- + +###### `preparing`Optional + +- _Type:_ bool +- _Default:_ false + +Whether the resolution is being executed during the prepare phase or not. + +--- + +##### `reverse` + +```python +import cdktf + +cdktf.Tokenization.reverse( + x: typing.Any +) +``` + +Reverse any value into Resolvables, if possible. + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `reverse_list` + +```python +import cdktf + +cdktf.Tokenization.reverse_list( + l: typing.List[str] +) +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ typing.List[str] + +--- + +##### `reverse_map` + +```python +import cdktf + +cdktf.Tokenization.reverse_map( + m: typing.Mapping[typing.Any] +) +``` + +Un-encode a Tokenized value from a map. + +###### `m`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `reverse_number` + +```python +import cdktf + +cdktf.Tokenization.reverse_number( + n: typing.Union[int, float] +) +``` + +Un-encode a Tokenized value from a number. + +###### `n`Required + +- _Type:_ typing.Union[int, float] + +--- + +##### `reverse_number_list` + +```python +import cdktf + +cdktf.Tokenization.reverse_number_list( + l: typing.List[typing.Union[int, float]] +) +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +##### `reverse_string` + +```python +import cdktf + +cdktf.Tokenization.reverse_string( + s: str +) +``` + +Un-encode a string potentially containing encoded tokens. + +###### `s`Required + +- _Type:_ str + +--- + +##### `stringify_number` + +```python +import cdktf + +cdktf.Tokenization.stringify_number( + x: typing.Union[int, float] +) +``` + +Stringify a number directly or lazily if it's a Token. + +If it is an object (i.e., { Ref: 'SomeLogicalId' }), return it as-is. + +###### `x`Required + +- _Type:_ typing.Union[int, float] + +--- + +### TokenizedStringFragments + +Fragments of a concatenated string containing stringified Tokens. + +#### Initializers + +```python +import cdktf + +cdktf.TokenizedStringFragments() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------ | +| add_escape | _No description._ | +| add_intrinsic | Adds an intrinsic fragment. | +| add_literal | Adds a literal fragment. | +| add_token | Adds a token fragment. | +| concat | _No description._ | +| join | Combine the string fragments using the given joiner. | +| map_tokens | Apply a transformation function to all tokens in the string. | + +--- + +##### `add_escape` + +```python +def add_escape( + kind: str +) - > None +``` + +###### `kind`Required + +- _Type:_ str + +--- + +##### `add_intrinsic` + +```python +def add_intrinsic( + value: typing.Any +) - > None +``` + +Adds an intrinsic fragment. + +###### `value`Required + +- _Type:_ typing.Any + +the intrinsic value to add. + +--- + +##### `add_literal` + +```python +def add_literal( + lit: typing.Any +) - > None +``` + +Adds a literal fragment. + +###### `lit`Required + +- _Type:_ typing.Any + +the literal to add. + +--- + +##### `add_token` + +```python +def add_token( + token: IResolvable +) - > None +``` + +Adds a token fragment. + +###### `token`Required + +- _Type:_ IResolvable + +the token to add. + +--- + +##### `concat` + +```python +def concat( + other: TokenizedStringFragments +) - > None +``` + +###### `other`Required + +- _Type:_ TokenizedStringFragments + +--- + +##### `join` + +```python +def join( + concat: IFragmentConcatenator +) - > typing.Any +``` + +Combine the string fragments using the given joiner. + +If there are any + +###### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +##### `map_tokens` + +```python +def map_tokens( + context: IResolveContext +) - > TokenizedStringFragments +``` + +Apply a transformation function to all tokens in the string. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------- | ------------------------------------------------ | +| escapes | typing.List[IResolvable] | Return all escape fragments from this string. | +| first_value | typing.Any | Returns the first value. | +| intrinsic | typing.List[IResolvable] | Return all intrinsic fragments from this string. | +| length | typing.Union[int, float] | Returns the number of fragments. | +| literals | typing.List[IResolvable] | Return all literals from this string. | +| tokens | typing.List[IResolvable] | Return all Tokens from this string. | +| first_token | IResolvable | Returns the first token. | + +--- + +##### `escapes`Required + +```python +escapes: typing.List[IResolvable] +``` + +- _Type:_ typing.List[IResolvable] + +Return all escape fragments from this string. + +--- + +##### `first_value`Required + +```python +first_value: typing.Any +``` + +- _Type:_ typing.Any + +Returns the first value. + +--- + +##### `intrinsic`Required + +```python +intrinsic: typing.List[IResolvable] +``` + +- _Type:_ typing.List[IResolvable] + +Return all intrinsic fragments from this string. + +--- + +##### `length`Required + +```python +length: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +Returns the number of fragments. + +--- + +##### `literals`Required + +```python +literals: typing.List[IResolvable] +``` + +- _Type:_ typing.List[IResolvable] + +Return all literals from this string. + +--- + +##### `tokens`Required + +```python +tokens: typing.List[IResolvable] +``` + +- _Type:_ typing.List[IResolvable] + +Return all Tokens from this string. + +--- + +##### `first_token`Optional + +```python +first_token: IResolvable +``` + +- _Type:_ IResolvable + +Returns the first token. + +--- + +### VariableType + +#### Initializers + +```python +import cdktf + +cdktf.VariableType() +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------ | ----------------- | +| list | _No description._ | +| map | _No description._ | +| object | _No description._ | +| set | _No description._ | +| tuple | _No description._ | + +--- + +##### `list` + +```python +import cdktf + +cdktf.VariableType.list( + type: str +) +``` + +###### `type`Required + +- _Type:_ str + +--- + +##### `map` + +```python +import cdktf + +cdktf.VariableType.map( + type: str +) +``` + +###### `type`Required + +- _Type:_ str + +--- + +##### `object` + +```python +import cdktf + +cdktf.VariableType.object( + attributes: typing.Mapping[str] +) +``` + +###### `attributes`Required + +- _Type:_ typing.Mapping[str] + +--- + +##### `set` + +```python +import cdktf + +cdktf.VariableType.set( + type: str +) +``` + +###### `type`Required + +- _Type:_ str + +--- + +##### `tuple` + +```python +import cdktf + +cdktf.VariableType.tuple( + elements: *str +) +``` + +###### `elements`Required + +- _Type:_ \*str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ---------------- | ----------------- | +| ANY | str | _No description._ | +| BOOL | str | _No description._ | +| LIST | str | _No description._ | +| LIST_BOOL | str | _No description._ | +| LIST_NUMBER | str | _No description._ | +| LIST_STRING | str | _No description._ | +| MAP | str | _No description._ | +| MAP_BOOL | str | _No description._ | +| MAP_NUMBER | str | _No description._ | +| MAP_STRING | str | _No description._ | +| NUMBER | str | _No description._ | +| SET | str | _No description._ | +| SET_BOOL | str | _No description._ | +| SET_NUMBER | str | _No description._ | +| SET_STRING | str | _No description._ | +| STRING | str | _No description._ | + +--- + +##### `ANY`Required + +```python +ANY: str +``` + +- _Type:_ str + +--- + +##### `BOOL`Required + +```python +BOOL: str +``` + +- _Type:_ str + +--- + +##### `LIST`Required + +```python +LIST: str +``` + +- _Type:_ str + +--- + +##### `LIST_BOOL`Required + +```python +LIST_BOOL: str +``` + +- _Type:_ str + +--- + +##### `LIST_NUMBER`Required + +```python +LIST_NUMBER: str +``` + +- _Type:_ str + +--- + +##### `LIST_STRING`Required + +```python +LIST_STRING: str +``` + +- _Type:_ str + +--- + +##### `MAP`Required + +```python +MAP: str +``` + +- _Type:_ str + +--- + +##### `MAP_BOOL`Required + +```python +MAP_BOOL: str +``` + +- _Type:_ str + +--- + +##### `MAP_NUMBER`Required + +```python +MAP_NUMBER: str +``` + +- _Type:_ str + +--- + +##### `MAP_STRING`Required + +```python +MAP_STRING: str +``` + +- _Type:_ str + +--- + +##### `NUMBER`Required + +```python +NUMBER: str +``` + +- _Type:_ str + +--- + +##### `SET`Required + +```python +SET: str +``` + +- _Type:_ str + +--- + +##### `SET_BOOL`Required + +```python +SET_BOOL: str +``` + +- _Type:_ str + +--- + +##### `SET_NUMBER`Required + +```python +SET_NUMBER: str +``` + +- _Type:_ str + +--- + +##### `SET_STRING`Required + +```python +SET_STRING: str +``` + +- _Type:_ str + +--- + +##### `STRING`Required + +```python +STRING: str +``` + +- _Type:_ str + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/constructs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/constructs.mdx new file mode 100644 index 0000000000..789fe7e800 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/constructs.mdx @@ -0,0 +1,17938 @@ +--- +page_title: Python Reference for Constructs +description: CDKTF Core API Reference for Constructs in Python. +--- + + + +# Python: Constructs + +### App + +Represents a cdktf application. + +#### Initializers + +```python +import cdktf + +cdktf.App( + context: typing.Mapping[typing.Any] = None, + hcl_output: bool = None, + outdir: str = None, + skip_backend_validation: bool = None, + skip_validation: bool = None, + stack_traces: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------- | --------------------------------------------------------------- | +| context | typing.Mapping[typing.Any] | Additional context values for the application. | +| hcl_output | bool | _No description._ | +| outdir | str | The directory to output Terraform resources. | +| skip_backend_validation | bool | Whether to skip backend validation during synthesis of the app. | +| skip_validation | bool | Whether to skip all validations during synthesis of the app. | +| stack_traces | bool | _No description._ | + +--- + +##### `context`Optional + +- _Type:_ typing.Mapping[typing.Any] +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `hcl_output`Optional + +- _Type:_ bool + +--- + +##### `outdir`Optional + +- _Type:_ str +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `skip_backend_validation`Optional + +- _Type:_ bool +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skip_validation`Optional + +- _Type:_ bool +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `stack_traces`Optional + +- _Type:_ bool + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| cross_stack_reference | Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. | +| synth | Synthesizes all resources to the output directory. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `cross_stack_reference` + +```python +def cross_stack_reference( + from_stack: TerraformStack, + to_stack: TerraformStack, + identifier: str +) - > str +``` + +Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. + +###### `from_stack`Required + +- _Type:_ TerraformStack + +--- + +###### `to_stack`Required + +- _Type:_ TerraformStack + +--- + +###### `identifier`Required + +- _Type:_ str + +--- + +##### `synth` + +```python +def synth() - > None +``` + +Synthesizes all resources to the output directory. + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_app | _No description._ | +| of | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.App.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_app` + +```python +import cdktf + +cdktf.App.is_app( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `of` + +```python +import cdktf + +cdktf.App.of( + construct: IConstruct +) +``` + +###### `construct`Required + +- _Type:_ constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------------------- | +| node | constructs.Node | The tree node. | +| hcl_output | bool | _No description._ | +| manifest | Manifest | _No description._ | +| outdir | str | The output directory into which resources will be synthesized. | +| skip_backend_validation | bool | Whether to skip backend validation during synthesis of the app. | +| skip_validation | bool | Whether to skip all validations during synthesis of the app. | +| target_stack_id | str | The stack which will be synthesized. | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `hcl_output`Required + +```python +hcl_output: bool +``` + +- _Type:_ bool + +--- + +##### `manifest`Required + +```python +manifest: Manifest +``` + +- _Type:_ Manifest + +--- + +##### `outdir`Required + +```python +outdir: str +``` + +- _Type:_ str + +The output directory into which resources will be synthesized. + +--- + +##### `skip_backend_validation`Required + +```python +skip_backend_validation: bool +``` + +- _Type:_ bool + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skip_validation`Required + +```python +skip_validation: bool +``` + +- _Type:_ bool + +Whether to skip all validations during synthesis of the app. + +--- + +##### `target_stack_id`Optional + +```python +target_stack_id: str +``` + +- _Type:_ str + +The stack which will be synthesized. + +If not set, all stacks will be synthesized. + +--- + +### AzurermBackend + +#### Initializers + +```python +import cdktf + +cdktf.AzurermBackend( + scope: Construct, + container_name: str, + key: str, + storage_account_name: str, + access_key: str = None, + client_certificate_password: str = None, + client_certificate_path: str = None, + client_id: str = None, + client_secret: str = None, + endpoint: str = None, + environment: str = None, + metadata_host: str = None, + msi_endpoint: str = None, + oidc_request_token: str = None, + oidc_request_url: str = None, + oidc_token: str = None, + oidc_token_file_path: str = None, + resource_group_name: str = None, + sas_token: str = None, + snapshot: bool = None, + subscription_id: str = None, + tenant_id: str = None, + use_azuread_auth: bool = None, + use_microsoft_graph: bool = None, + use_msi: bool = None, + use_oidc: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| container_name | str | (Required) The Name of the Storage Container within the Storage Account. | +| key | str | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storage_account_name | str | (Required) The Name of the Storage Account. | +| access_key | str | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| client_certificate_password | str | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| client_certificate_path | str | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| client_id | str | (Optional) The Client ID of the Service Principal. | +| client_secret | str | (Optional) The Client Secret of the Service Principal. | +| endpoint | str | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | str | (Optional) The Azure Environment which should be used. | +| metadata_host | str | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msi_endpoint | str | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidc_request_token | str | (Optional) The bearer token for the request to the OIDC provider. | +| oidc_request_url | str | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidc_token | str | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidc_token_file_path | str | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resource_group_name | str | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sas_token | str | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscription_id | str | (Optional) The Subscription ID in which the Storage Account exists. | +| tenant_id | str | (Optional) The Tenant ID in which the Subscription exists. | +| use_azuread_auth | bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| use_microsoft_graph | bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| use_msi | bool | (Optional) Should Managed Service Identity authentication be used? | +| use_oidc | bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `container_name`Required + +- _Type:_ str + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +- _Type:_ str + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storage_account_name`Required + +- _Type:_ str + +(Required) The Name of the Storage Account. + +--- + +##### `access_key`Optional + +- _Type:_ str + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `client_certificate_password`Optional + +- _Type:_ str + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `client_certificate_path`Optional + +- _Type:_ str + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `client_id`Optional + +- _Type:_ str + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `client_secret`Optional + +- _Type:_ str + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +- _Type:_ str + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +- _Type:_ str + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadata_host`Optional + +- _Type:_ str + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msi_endpoint`Optional + +- _Type:_ str + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidc_request_token`Optional + +- _Type:_ str + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidc_request_url`Optional + +- _Type:_ str + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidc_token`Optional + +- _Type:_ str + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidc_token_file_path`Optional + +- _Type:_ str + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resource_group_name`Optional + +- _Type:_ str + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sas_token`Optional + +- _Type:_ str + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +- _Type:_ bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscription_id`Optional + +- _Type:_ str + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenant_id`Optional + +- _Type:_ str + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `use_azuread_auth`Optional + +- _Type:_ bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `use_microsoft_graph`Optional + +- _Type:_ bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `use_msi`Optional + +- _Type:_ bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `use_oidc`Optional + +- _Type:_ bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.AzurermBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.AzurermBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.AzurermBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### CloudBackend + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +#### Initializers + +```python +import cdktf + +cdktf.CloudBackend( + scope: Construct, + organization: str, + workspaces: typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces], + hostname: str = None, + token: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| organization | str | The name of the organization containing the workspace(s) the current configuration should use. | +| workspaces | typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces] | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| hostname | str | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| token | str | The token used to authenticate with Terraform Cloud. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `organization`Required + +- _Type:_ str + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `workspaces`Required + +- _Type:_ typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces] + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `hostname`Optional + +- _Type:_ str +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `token`Optional + +- _Type:_ str + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.CloudBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.CloudBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.CloudBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### ConsulBackend + +#### Initializers + +```python +import cdktf + +cdktf.ConsulBackend( + scope: Construct, + access_token: str, + path: str, + address: str = None, + ca_file: str = None, + cert_file: str = None, + datacenter: str = None, + gzip: bool = None, + http_auth: str = None, + key_file: str = None, + lock: bool = None, + scheme: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| access_token | str | (Required) Access token. | +| path | str | (Required) Path in the Consul KV store. | +| address | str | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| ca_file | str | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| cert_file | str | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | str | (Optional) The datacenter to use. | +| gzip | bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| http_auth | str | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| key_file | str | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | bool | (Optional) false to disable locking. | +| scheme | str | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `access_token`Required + +- _Type:_ str + +(Required) Access token. + +--- + +##### `path`Required + +- _Type:_ str + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +- _Type:_ str + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `ca_file`Optional + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `cert_file`Optional + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +- _Type:_ str + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +- _Type:_ bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `http_auth`Optional + +- _Type:_ str + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `key_file`Optional + +- _Type:_ str + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +- _Type:_ bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +- _Type:_ str + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.ConsulBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.ConsulBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.ConsulBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### CosBackend + +#### Initializers + +```python +import cdktf + +cdktf.CosBackend( + scope: Construct, + bucket: str, + accelerate: bool = None, + acl: str = None, + assume_role: CosBackendAssumeRole = None, + domain: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + region: str = None, + secret_id: str = None, + secret_key: str = None, + security_token: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| bucket | str | (Required) The name of the COS bucket. | +| accelerate | bool | (Optional) Whether to enable global Acceleration. | +| acl | str | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assume_role | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | str | (Optional) The root domain of the API request. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) The Custom Endpoint for the COS backend. | +| key | str | (Optional) The path for saving the state file in bucket. | +| prefix | str | (Optional) The directory for saving the state file in bucket. | +| region | str | (Optional) The region of the COS bucket. | +| secret_id | str | (Optional) Secret id of Tencent Cloud. | +| secret_key | str | (Optional) Secret key of Tencent Cloud. | +| security_token | str | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ str + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +- _Type:_ bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assume_role`Optional + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +- _Type:_ str + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ str + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ str + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ str + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +- _Type:_ str + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secret_id`Optional + +- _Type:_ str + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secret_key`Optional + +- _Type:_ str + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `security_token`Optional + +- _Type:_ str + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.CosBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.CosBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.CosBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### DataResource + +The DataResource implements the standard resource lifecycle, but does not directly take any other actions. + +You can use the DataResource resource without requiring or configuring a provider. + +The DataResource resource is useful for storing values which need to follow a manage resource lifecycle, and for triggering provisioners when there is no other logical managed resource in which to place them. + +It requires Terraform 1.4 or later. + +It is also possible to generate these bindings by adding "terraform.io/builtin/terraform" to the "terraformProviders" key in your cdktf.json file and running "cdktf get". + +https://developer.hashicorp.com/terraform/language/resources/terraform-data + +#### Initializers + +```python +import cdktf + +cdktf.DataResource( + scope: Construct, + id: str, + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + count: typing.Union[typing.Union[int, float], TerraformCount] = None, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + lifecycle: TerraformResourceLifecycle = None, + provider: TerraformProvider = None, + provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] = None, + input: typing.Mapping[typing.Any] = None, + triggers_replace: typing.Mapping[typing.Any] = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | The scope in which to define this construct. | +| id | str | The scoped construct ID. | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | +| input | typing.Mapping[typing.Any] | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggers_replace | typing.Mapping[typing.Any] | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +The scope in which to define this construct. + +--- + +##### `id`Required + +- _Type:_ str + +The scoped construct ID. + +Must be unique amongst siblings in the same scope + +--- + +##### `connection`Optional + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +##### `input`Optional + +- _Type:_ typing.Mapping[typing.Any] + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggers_replace`Optional + +- _Type:_ typing.Mapping[typing.Any] + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| add_move_target | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| get_any_map_attribute | _No description._ | +| get_boolean_attribute | _No description._ | +| get_boolean_map_attribute | _No description._ | +| get_list_attribute | _No description._ | +| get_number_attribute | _No description._ | +| get_number_list_attribute | _No description._ | +| get_number_map_attribute | _No description._ | +| get_string_attribute | _No description._ | +| get_string_map_attribute | _No description._ | +| has_resource_move | _No description._ | +| import_from | _No description._ | +| interpolation_for_attribute | _No description._ | +| move_from_id | Move the resource corresponding to "id" to this resource. | +| move_to | Moves this resource to the target resource given by moveTarget. | +| move_to_id | Moves this resource to the resource corresponding to "id". | +| reset_input | _No description._ | +| reset_triggers_replace | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `add_move_target` + +```python +def add_move_target( + move_target: str +) - > None +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `move_target`Required + +- _Type:_ str + +The string move target that will correspond to this resource. + +--- + +##### `get_any_map_attribute` + +```python +def get_any_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_attribute` + +```python +def get_boolean_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_map_attribute` + +```python +def get_boolean_map_attribute( + terraform_attribute: str +) - > typing.Mapping[bool] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_list_attribute` + +```python +def get_list_attribute( + terraform_attribute: str +) - > typing.List[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_attribute` + +```python +def get_number_attribute( + terraform_attribute: str +) - > typing.Union[int, float] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_list_attribute` + +```python +def get_number_list_attribute( + terraform_attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_map_attribute` + +```python +def get_number_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_attribute` + +```python +def get_string_attribute( + terraform_attribute: str +) - > str +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_map_attribute` + +```python +def get_string_map_attribute( + terraform_attribute: str +) - > typing.Mapping[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `has_resource_move` + +```python +def has_resource_move() - > typing.Union[TerraformResourceMoveByTarget, TerraformResourceMoveById] +``` + +##### `import_from` + +```python +def import_from( + id: str, + provider: TerraformProvider = None +) - > None +``` + +###### `id`Required + +- _Type:_ str + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `move_from_id` + +```python +def move_from_id( + id: str +) - > None +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ str + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `move_to` + +```python +def move_to( + move_target: str, + index: typing.Union[str, typing.Union[int, float]] = None +) - > None +``` + +Moves this resource to the target resource given by moveTarget. + +###### `move_target`Required + +- _Type:_ str + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ typing.Union[str, typing.Union[int, float]] + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `move_to_id` + +```python +def move_to_id( + id: str +) - > None +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ str + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +##### `reset_input` + +```python +def reset_input() - > None +``` + +##### `reset_triggers_replace` + +```python +def reset_triggers_replace() - > None +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_terraform_resource | _No description._ | +| generate_config_for_import | Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataResource.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataResource.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_terraform_resource` + +```python +import cdktf + +cdktf.DataResource.is_terraform_resource( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `generate_config_for_import` + +```python +import cdktf + +cdktf.DataResource.generate_config_for_import( + scope: Construct, + import_to_id: str, + import_from_id: str, + provider: TerraformProvider = None +) +``` + +Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". + +###### `scope`Required + +- _Type:_ constructs.Construct + +The scope in which to define this construct. + +--- + +###### `import_to_id`Required + +- _Type:_ str + +The construct id used in the generated config for the Data to import. + +--- + +###### `import_from_id`Required + +- _Type:_ str + +The id of the existing Data that should be imported. + +Refer to the {@link https://terraform.io/providers/builtin/terraform/latest/docs/resources/data#import import section} in the documentation of this resource for the id to use + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +? Optional instance of the provider where the Data to import is found. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| terraform_meta_arguments | typing.Mapping[typing.Any] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[str] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | +| id | str | _No description._ | +| output | AnyMap | _No description._ | +| input_input | typing.Mapping[typing.Any] | _No description._ | +| triggers_replace_input | typing.Mapping[typing.Any] | _No description._ | +| input | typing.Mapping[typing.Any] | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggers_replace | typing.Mapping[typing.Any] | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `terraform_meta_arguments`Required + +```python +terraform_meta_arguments: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +```python +terraform_generator_metadata: TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```python +provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] +``` + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +##### `id`Required + +```python +id: str +``` + +- _Type:_ str + +--- + +##### `output`Required + +```python +output: AnyMap +``` + +- _Type:_ AnyMap + +--- + +##### `input_input`Optional + +```python +input_input: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `triggers_replace_input`Optional + +```python +triggers_replace_input: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `input`Required + +```python +input: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggers_replace`Required + +```python +triggers_replace: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteState + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteState( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + organization: str, + workspaces: IRemoteWorkspace, + hostname: str = None, + token: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| organization | str | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | str | _No description._ | +| token | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `organization`Required + +- _Type:_ str + +--- + +##### `workspaces`Required + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +- _Type:_ str + +--- + +##### `token`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteState.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteState.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateAzurerm + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateAzurerm( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + container_name: str, + key: str, + storage_account_name: str, + access_key: str = None, + client_certificate_password: str = None, + client_certificate_path: str = None, + client_id: str = None, + client_secret: str = None, + endpoint: str = None, + environment: str = None, + metadata_host: str = None, + msi_endpoint: str = None, + oidc_request_token: str = None, + oidc_request_url: str = None, + oidc_token: str = None, + oidc_token_file_path: str = None, + resource_group_name: str = None, + sas_token: str = None, + snapshot: bool = None, + subscription_id: str = None, + tenant_id: str = None, + use_azuread_auth: bool = None, + use_microsoft_graph: bool = None, + use_msi: bool = None, + use_oidc: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| container_name | str | (Required) The Name of the Storage Container within the Storage Account. | +| key | str | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storage_account_name | str | (Required) The Name of the Storage Account. | +| access_key | str | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| client_certificate_password | str | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| client_certificate_path | str | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| client_id | str | (Optional) The Client ID of the Service Principal. | +| client_secret | str | (Optional) The Client Secret of the Service Principal. | +| endpoint | str | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | str | (Optional) The Azure Environment which should be used. | +| metadata_host | str | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msi_endpoint | str | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidc_request_token | str | (Optional) The bearer token for the request to the OIDC provider. | +| oidc_request_url | str | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidc_token | str | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidc_token_file_path | str | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resource_group_name | str | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sas_token | str | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscription_id | str | (Optional) The Subscription ID in which the Storage Account exists. | +| tenant_id | str | (Optional) The Tenant ID in which the Subscription exists. | +| use_azuread_auth | bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| use_microsoft_graph | bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| use_msi | bool | (Optional) Should Managed Service Identity authentication be used? | +| use_oidc | bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `container_name`Required + +- _Type:_ str + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +- _Type:_ str + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storage_account_name`Required + +- _Type:_ str + +(Required) The Name of the Storage Account. + +--- + +##### `access_key`Optional + +- _Type:_ str + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `client_certificate_password`Optional + +- _Type:_ str + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `client_certificate_path`Optional + +- _Type:_ str + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `client_id`Optional + +- _Type:_ str + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `client_secret`Optional + +- _Type:_ str + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +- _Type:_ str + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +- _Type:_ str + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadata_host`Optional + +- _Type:_ str + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msi_endpoint`Optional + +- _Type:_ str + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidc_request_token`Optional + +- _Type:_ str + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidc_request_url`Optional + +- _Type:_ str + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidc_token`Optional + +- _Type:_ str + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidc_token_file_path`Optional + +- _Type:_ str + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resource_group_name`Optional + +- _Type:_ str + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sas_token`Optional + +- _Type:_ str + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +- _Type:_ bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscription_id`Optional + +- _Type:_ str + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenant_id`Optional + +- _Type:_ str + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `use_azuread_auth`Optional + +- _Type:_ bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `use_microsoft_graph`Optional + +- _Type:_ bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `use_msi`Optional + +- _Type:_ bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `use_oidc`Optional + +- _Type:_ bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateAzurerm.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateAzurerm.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateConsul + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateConsul( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + access_token: str, + path: str, + address: str = None, + ca_file: str = None, + cert_file: str = None, + datacenter: str = None, + gzip: bool = None, + http_auth: str = None, + key_file: str = None, + lock: bool = None, + scheme: str = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| access_token | str | (Required) Access token. | +| path | str | (Required) Path in the Consul KV store. | +| address | str | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| ca_file | str | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| cert_file | str | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | str | (Optional) The datacenter to use. | +| gzip | bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| http_auth | str | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| key_file | str | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | bool | (Optional) false to disable locking. | +| scheme | str | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `access_token`Required + +- _Type:_ str + +(Required) Access token. + +--- + +##### `path`Required + +- _Type:_ str + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +- _Type:_ str + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `ca_file`Optional + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `cert_file`Optional + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +- _Type:_ str + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +- _Type:_ bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `http_auth`Optional + +- _Type:_ str + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `key_file`Optional + +- _Type:_ str + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +- _Type:_ bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +- _Type:_ str + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateConsul.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateConsul.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateCos + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateCos( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + accelerate: bool = None, + acl: str = None, + assume_role: CosBackendAssumeRole = None, + domain: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + region: str = None, + secret_id: str = None, + secret_key: str = None, + security_token: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | (Required) The name of the COS bucket. | +| accelerate | bool | (Optional) Whether to enable global Acceleration. | +| acl | str | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assume_role | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | str | (Optional) The root domain of the API request. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) The Custom Endpoint for the COS backend. | +| key | str | (Optional) The path for saving the state file in bucket. | +| prefix | str | (Optional) The directory for saving the state file in bucket. | +| region | str | (Optional) The region of the COS bucket. | +| secret_id | str | (Optional) Secret id of Tencent Cloud. | +| secret_key | str | (Optional) Secret key of Tencent Cloud. | +| security_token | str | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `bucket`Required + +- _Type:_ str + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +- _Type:_ bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assume_role`Optional + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +- _Type:_ str + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ str + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ str + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ str + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +- _Type:_ str + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secret_id`Optional + +- _Type:_ str + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secret_key`Optional + +- _Type:_ str + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `security_token`Optional + +- _Type:_ str + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateCos.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateCos.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateGcs + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateGcs( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + access_token: str = None, + credentials: str = None, + encryption_key: str = None, + impersonate_service_account: str = None, + impersonate_service_account_delegates: typing.List[str] = None, + kms_encryption_key: str = None, + prefix: str = None, + storeage_custom_endpoint: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | (Required) The name of the GCS bucket. | +| access_token | str | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | str | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryption_key | str | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonate_service_account | str | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonate_service_account_delegates | typing.List[str] | (Optional) The delegation chain for an impersonating a service account. | +| kms_encryption_key | str | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | str | (Optional) GCS prefix inside the bucket. | +| storeage_custom_endpoint | str | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `bucket`Required + +- _Type:_ str + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `access_token`Optional + +- _Type:_ str + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +- _Type:_ str + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryption_key`Optional + +- _Type:_ str + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonate_service_account`Optional + +- _Type:_ str + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonate_service_account_delegates`Optional + +- _Type:_ typing.List[str] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kms_encryption_key`Optional + +- _Type:_ str + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +- _Type:_ str + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeage_custom_endpoint`Optional + +- _Type:_ str + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateGcs.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateGcs.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateHttp + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateHttp( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + address: str, + client_ca_certificate_pem: str = None, + client_certificate_pem: str = None, + client_private_key_pem: str = None, + lock_address: str = None, + lock_method: str = None, + password: str = None, + retry_max: typing.Union[int, float] = None, + retry_wait_max: typing.Union[int, float] = None, + retry_wait_min: typing.Union[int, float] = None, + skip_cert_verification: bool = None, + unlock_address: str = None, + unlock_method: str = None, + update_method: str = None, + username: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| address | str | (Required) The address of the REST endpoint. | +| client_ca_certificate_pem | str | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| client_certificate_pem | str | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| client_private_key_pem | str | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lock_address | str | (Optional) The address of the lock REST endpoint. | +| lock_method | str | (Optional) The HTTP method to use when locking. | +| password | str | (Optional) The password for HTTP basic authentication. | +| retry_max | typing.Union[int, float] | (Optional) The number of HTTP request retries. | +| retry_wait_max | typing.Union[int, float] | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retry_wait_min | typing.Union[int, float] | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skip_cert_verification | bool | (Optional) Whether to skip TLS verification. | +| unlock_address | str | (Optional) The address of the unlock REST endpoint. | +| unlock_method | str | (Optional) The HTTP method to use when unlocking. | +| update_method | str | (Optional) HTTP method to use when updating state. | +| username | str | (Optional) The username for HTTP basic authentication. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `address`Required + +- _Type:_ str + +(Required) The address of the REST endpoint. + +--- + +##### `client_ca_certificate_pem`Optional + +- _Type:_ str + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `client_certificate_pem`Optional + +- _Type:_ str + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `client_private_key_pem`Optional + +- _Type:_ str + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lock_address`Optional + +- _Type:_ str + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lock_method`Optional + +- _Type:_ str + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +- _Type:_ str + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retry_max`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retry_wait_max`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retry_wait_min`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skip_cert_verification`Optional + +- _Type:_ bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlock_address`Optional + +- _Type:_ str + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlock_method`Optional + +- _Type:_ str + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `update_method`Optional + +- _Type:_ str + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +- _Type:_ str + +(Optional) The username for HTTP basic authentication. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateHttp.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateHttp.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateLocal + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateLocal( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + path: str = None, + workspace_dir: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| path | str | Path where the state file is stored. | +| workspace_dir | str | (Optional) The path to non-default workspaces. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `path`Optional + +- _Type:_ str +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspace_dir`Optional + +- _Type:_ str + +(Optional) The path to non-default workspaces. + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateLocal.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateLocal.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateOss + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateOss( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + access_key: str = None, + acl: str = None, + assume_role: OssAssumeRole = None, + assume_role_policy: str = None, + assume_role_role_arn: str = None, + assume_role_session_expiration: typing.Union[int, float] = None, + assume_role_session_name: str = None, + ecs_role_name: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + profile: str = None, + region: str = None, + secret_key: str = None, + security_token: str = None, + shared_credentials_file: str = None, + sts_endpoint: str = None, + tablestore_endpoint: str = None, + tablestore_table: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | (Required) The name of the OSS bucket. | +| access_key | str | (Optional) Alibaba Cloud access key. | +| acl | str | (Optional) Object ACL to be applied to the state file. | +| assume_role | OssAssumeRole | _No description._ | +| assume_role_policy | str | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assume_role_role_arn | str | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assume_role_session_expiration | typing.Union[int, float] | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assume_role_session_name | str | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecs_role_name | str | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) A custom endpoint for the OSS API. | +| key | str | (Optional) The name of the state file. | +| prefix | str | (Optional) The path directory of the state file will be stored. | +| profile | str | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | str | (Optional) The region of the OSS bucket. | +| secret_key | str | (Optional) Alibaba Cloud secret access key. | +| security_token | str | (Optional) STS access token. | +| shared_credentials_file | str | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| sts_endpoint | str | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestore_endpoint | str | (Optional) A custom endpoint for the TableStore API. | +| tablestore_table | str | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `bucket`Required + +- _Type:_ str + +(Required) The name of the OSS bucket. + +--- + +##### `access_key`Optional + +- _Type:_ str + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assume_role`~~Optional + +- _Deprecated:_ Use flattened assume role options + +- _Type:_ OssAssumeRole + +--- + +##### `assume_role_policy`Optional + +- _Type:_ str + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assume_role_role_arn`Optional + +- _Type:_ str + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assume_role_session_expiration`Optional + +- _Type:_ typing.Union[int, float] + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assume_role_session_name`Optional + +- _Type:_ str + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecs_role_name`Optional + +- _Type:_ str + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ str + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ str + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ str + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ str + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secret_key`Optional + +- _Type:_ str + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `security_token`Optional + +- _Type:_ str + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `shared_credentials_file`Optional + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `sts_endpoint`Optional + +- _Type:_ str + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestore_endpoint`Optional + +- _Type:_ str + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestore_table`Optional + +- _Type:_ str + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateOss.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateOss.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStatePg + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStatePg( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + conn_str: str, + schema_name: str = None, + skip_index_creation: bool = None, + skip_schema_creation: bool = None, + skip_table_creation: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| conn_str | str | Postgres connection string; | +| schema_name | str | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skip_index_creation | bool | If set to true, the Postgres index must already exist. | +| skip_schema_creation | bool | If set to true, the Postgres schema must already exist. | +| skip_table_creation | bool | If set to true, the Postgres table must already exist. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `conn_str`Required + +- _Type:_ str + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schema_name`Optional + +- _Type:_ str + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skip_index_creation`Optional + +- _Type:_ bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_schema_creation`Optional + +- _Type:_ bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_table_creation`Optional + +- _Type:_ bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStatePg.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStatePg.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateS3 + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateS3( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + key: str, + access_key: str = None, + acl: str = None, + allowed_account_ids: typing.List[str] = None, + assume_role: S3BackendAssumeRoleConfig = None, + assume_role_policy: str = None, + assume_role_policy_arns: typing.List[str] = None, + assume_role_tags: typing.Mapping[str] = None, + assume_role_transitive_tag_keys: typing.List[str] = None, + assume_role_with_web_identity: S3BackendAssumeRoleWithWebIdentityConfig = None, + custom_ca_bundle: str = None, + dynamodb_endpoint: str = None, + dynamodb_table: str = None, + ec2_metadata_service_endpoint: str = None, + ec2_metadata_service_endpoint_mode: str = None, + encrypt: bool = None, + endpoint: str = None, + endpoints: S3BackendEndpointConfig = None, + external_id: str = None, + forbidden_account_ids: typing.List[str] = None, + force_path_style: bool = None, + http_proxy: str = None, + https_proxy: str = None, + iam_endpoint: str = None, + insecure: bool = None, + kms_key_id: str = None, + max_retries: typing.Union[int, float] = None, + no_proxy: str = None, + profile: str = None, + region: str = None, + retry_mode: str = None, + role_arn: str = None, + secret_key: str = None, + session_name: str = None, + shared_config_files: typing.List[str] = None, + shared_credentials_file: str = None, + shared_credentials_files: typing.List[str] = None, + skip_credentials_validation: bool = None, + skip_metadata_api_check: bool = None, + skip_region_validation: bool = None, + skip_requesting_account_id: bool = None, + skip_s3_checksum: bool = None, + sse_customer_key: str = None, + sts_endpoint: str = None, + sts_region: str = None, + token: str = None, + use_legacy_workflow: bool = None, + use_path_style: bool = None, + workspace_key_prefix: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | Name of the S3 Bucket. | +| key | str | Path to the state file inside the S3 Bucket. | +| access_key | str | (Optional) AWS access key. | +| acl | str | (Optional) Canned ACL to be applied to the state file. | +| allowed_account_ids | typing.List[str] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assume_role | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assume_role_policy | str | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assume_role_policy_arns | typing.List[str] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assume_role_tags | typing.Mapping[str] | (Optional) Map of assume role session tags. | +| assume_role_transitive_tag_keys | typing.List[str] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assume_role_with_web_identity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| custom_ca_bundle | str | (Optional) File containing custom root and intermediate certificates. | +| dynamodb_endpoint | str | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodb_table | str | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2_metadata_service_endpoint | str | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2_metadata_service_endpoint_mode | str | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | bool | (Optional) Enable server side encryption of the state file. | +| endpoint | str | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| external_id | str | (Optional) External identifier to use when assuming the role. | +| forbidden_account_ids | typing.List[str] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| force_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| http_proxy | str | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| https_proxy | str | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iam_endpoint | str | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kms_key_id | str | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| max_retries | typing.Union[int, float] | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| no_proxy | str | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | str | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | str | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retry_mode | str | (Optional) Specifies how retries are attempted. | +| role_arn | str | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secret_key | str | (Optional) AWS secret access key. | +| session_name | str | (Optional) Session name to use when assuming the role. | +| shared_config_files | typing.List[str] | (Optional) List of paths to AWS shared configuration files. | +| shared_credentials_file | str | (Optional) Path to the AWS shared credentials file. | +| shared_credentials_files | typing.List[str] | (Optional) List of paths to AWS shared credentials files. | +| skip_credentials_validation | bool | (Optional) Skip credentials validation via the STS API. | +| skip_metadata_api_check | bool | (Optional) Skip usage of EC2 Metadata API. | +| skip_region_validation | bool | (Optional) Skip validation of provided region name. | +| skip_requesting_account_id | bool | (Optional) Whether to skip requesting the account ID. | +| skip_s3_checksum | bool | (Optional) Do not include checksum when uploading S3 Objects. | +| sse_customer_key | str | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| sts_endpoint | str | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| sts_region | str | (Optional) AWS region for STS. | +| token | str | (Optional) Multi-Factor Authentication (MFA) token. | +| use_legacy_workflow | bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| use_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspace_key_prefix | str | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +##### `bucket`Required + +- _Type:_ str + +Name of the S3 Bucket. + +--- + +##### `key`Required + +- _Type:_ str + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `access_key`Optional + +- _Type:_ str + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +- _Type:_ str + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowed_account_ids`Optional + +- _Type:_ typing.List[str] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assume_role`Optional + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assume_role_policy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +- _Type:_ str + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_policy_arns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +- _Type:_ typing.List[str] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_tags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +- _Type:_ typing.Mapping[str] + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assume_role_transitive_tag_keys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +- _Type:_ typing.List[str] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assume_role_with_web_identity`Optional + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `custom_ca_bundle`Optional + +- _Type:_ str + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodb_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodb_table`Optional + +- _Type:_ str + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2_metadata_service_endpoint`Optional + +- _Type:_ str + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2_metadata_service_endpoint_mode`Optional + +- _Type:_ str + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +- _Type:_ bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`external_id`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +- _Type:_ str + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbidden_account_ids`Optional + +- _Type:_ typing.List[str] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`force_path_style`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `http_proxy`Optional + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `https_proxy`Optional + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iam_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +- _Type:_ bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kms_key_id`Optional + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `max_retries`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `no_proxy`Optional + +- _Type:_ str + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +- _Type:_ str + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ str + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retry_mode`Optional + +- _Type:_ str + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`role_arn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secret_key`Optional + +- _Type:_ str + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`session_name`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +- _Type:_ str + +(Optional) Session name to use when assuming the role. + +--- + +##### `shared_config_files`Optional + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `shared_credentials_file`Optional + +- _Type:_ str + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `shared_credentials_files`Optional + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skip_credentials_validation`Optional + +- _Type:_ bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skip_metadata_api_check`Optional + +- _Type:_ bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skip_region_validation`Optional + +- _Type:_ bool + +(Optional) Skip validation of provided region name. + +--- + +##### `skip_requesting_account_id`Optional + +- _Type:_ bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skip_s3_checksum`Optional + +- _Type:_ bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sse_customer_key`Optional + +- _Type:_ str + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`sts_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `sts_region`Optional + +- _Type:_ str + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +- _Type:_ str + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `use_legacy_workflow`Optional + +- _Type:_ bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `use_path_style`Optional + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspace_key_prefix`Optional + +- _Type:_ str + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateS3.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.DataTerraformRemoteStateS3.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateSwift + +#### Initializers + +```python +import cdktf + +cdktf.DataTerraformRemoteStateSwift( + scope: Construct, + id: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + container: str, + application_credential_id: str = None, + application_credential_name: str = None, + application_credential_secret: str = None, + archive_container: str = None, + auth_url: str = None, + cacert_file: str = None, + cert: str = None, + cloud: str = None, + default_domain: str = None, + domain_id: str = None, + domain_name: str = None, + expire_after: str = None, + insecure: bool = None, + key: str = None, + password: str = None, + project_domain_id: str = None, + project_domain_name: str = None, + region_name: str = None, + state_name: str = None, + tenant_id: str = None, + tenant_name: str = None, + token: str = None, + user_domain_id: str = None, + user_domain_name: str = None, + user_id: str = None, + user_name: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| container | str | _No description._ | +| application_credential_id | str | _No description._ | +| application_credential_name | str | _No description._ | +| application_credential_secret | str | _No description._ | +| archive_container | str | _No description._ | +| auth_url | str | _No description._ | +| cacert_file | str | _No description._ | +| cert | str | _No description._ | +| cloud | str | _No description._ | +| default_domain | str | _No description._ | +| domain_id | str | _No description._ | +| domain_name | str | _No description._ | +| expire_after | str | _No description._ | +| insecure | bool | _No description._ | +| key | str | _No description._ | +| password | str | _No description._ | +| project_domain_id | str | _No description._ | +| project_domain_name | str | _No description._ | +| region_name | str | _No description._ | +| state_name | str | _No description._ | +| tenant_id | str | _No description._ | +| tenant_name | str | _No description._ | +| token | str | _No description._ | +| user_domain_id | str | _No description._ | +| user_domain_name | str | _No description._ | +| user_id | str | _No description._ | +| user_name | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### ~~`defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### ~~`workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`application_credential_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`application_credential_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`application_credential_secret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`archive_container`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`auth_url`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`cacert_file`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`default_domain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`expire_after`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ bool + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`project_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`project_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`region_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`state_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`tenant_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`tenant_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### ~~`to_string`~~ + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### ~~`add_override`~~ + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### ~~`override_logical_id`~~ + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### ~~`reset_override_logical_id`~~ + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`to_hcl_terraform`~~ + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### ~~`to_metadata`~~ + +```python +def to_metadata() - > typing.Any +``` + +##### ~~`to_terraform`~~ + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### ~~`get`~~ + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### ~~`get_boolean`~~ + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### ~~`get_list`~~ + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### ~~`get_number`~~ + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### ~~`get_string`~~ + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### ~~`is_construct`~~ + +```python +import cdktf + +cdktf.DataTerraformRemoteStateSwift.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### ~~`is_terraform_element`~~ + +```python +import cdktf + +cdktf.DataTerraformRemoteStateSwift.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### ~~`cdktf_stack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### ~~`friendly_unique_id`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### ~~`tfResourceType`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### GcsBackend + +#### Initializers + +```python +import cdktf + +cdktf.GcsBackend( + scope: Construct, + bucket: str, + access_token: str = None, + credentials: str = None, + encryption_key: str = None, + impersonate_service_account: str = None, + impersonate_service_account_delegates: typing.List[str] = None, + kms_encryption_key: str = None, + prefix: str = None, + storeage_custom_endpoint: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| bucket | str | (Required) The name of the GCS bucket. | +| access_token | str | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | str | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryption_key | str | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonate_service_account | str | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonate_service_account_delegates | typing.List[str] | (Optional) The delegation chain for an impersonating a service account. | +| kms_encryption_key | str | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | str | (Optional) GCS prefix inside the bucket. | +| storeage_custom_endpoint | str | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ str + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `access_token`Optional + +- _Type:_ str + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +- _Type:_ str + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryption_key`Optional + +- _Type:_ str + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonate_service_account`Optional + +- _Type:_ str + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonate_service_account_delegates`Optional + +- _Type:_ typing.List[str] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kms_encryption_key`Optional + +- _Type:_ str + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +- _Type:_ str + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeage_custom_endpoint`Optional + +- _Type:_ str + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.GcsBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.GcsBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.GcsBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### HttpBackend + +#### Initializers + +```python +import cdktf + +cdktf.HttpBackend( + scope: Construct, + address: str, + client_ca_certificate_pem: str = None, + client_certificate_pem: str = None, + client_private_key_pem: str = None, + lock_address: str = None, + lock_method: str = None, + password: str = None, + retry_max: typing.Union[int, float] = None, + retry_wait_max: typing.Union[int, float] = None, + retry_wait_min: typing.Union[int, float] = None, + skip_cert_verification: bool = None, + unlock_address: str = None, + unlock_method: str = None, + update_method: str = None, + username: str = None +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| address | str | (Required) The address of the REST endpoint. | +| client_ca_certificate_pem | str | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| client_certificate_pem | str | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| client_private_key_pem | str | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lock_address | str | (Optional) The address of the lock REST endpoint. | +| lock_method | str | (Optional) The HTTP method to use when locking. | +| password | str | (Optional) The password for HTTP basic authentication. | +| retry_max | typing.Union[int, float] | (Optional) The number of HTTP request retries. | +| retry_wait_max | typing.Union[int, float] | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retry_wait_min | typing.Union[int, float] | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skip_cert_verification | bool | (Optional) Whether to skip TLS verification. | +| unlock_address | str | (Optional) The address of the unlock REST endpoint. | +| unlock_method | str | (Optional) The HTTP method to use when unlocking. | +| update_method | str | (Optional) HTTP method to use when updating state. | +| username | str | (Optional) The username for HTTP basic authentication. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `address`Required + +- _Type:_ str + +(Required) The address of the REST endpoint. + +--- + +##### `client_ca_certificate_pem`Optional + +- _Type:_ str + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `client_certificate_pem`Optional + +- _Type:_ str + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `client_private_key_pem`Optional + +- _Type:_ str + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lock_address`Optional + +- _Type:_ str + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lock_method`Optional + +- _Type:_ str + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +- _Type:_ str + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retry_max`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retry_wait_max`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retry_wait_min`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skip_cert_verification`Optional + +- _Type:_ bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlock_address`Optional + +- _Type:_ str + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlock_method`Optional + +- _Type:_ str + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `update_method`Optional + +- _Type:_ str + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +- _Type:_ str + +(Optional) The username for HTTP basic authentication. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.HttpBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.HttpBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.HttpBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### ImportableResource + +Class used to represent an importable resource. + +#### Initializers + +```python +import cdktf + +cdktf.ImportableResource( + scope: Construct, + name: str, + config: IImportableConfig +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| name | str | _No description._ | +| config | IImportableConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `name`Required + +- _Type:_ str + +--- + +##### `config`Required + +- _Type:_ IImportableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.ImportableResource.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.ImportableResource.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### LocalBackend + +#### Initializers + +```python +import cdktf + +cdktf.LocalBackend( + scope: Construct, + path: str = None, + workspace_dir: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------- | ---------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| path | str | Path where the state file is stored. | +| workspace_dir | str | (Optional) The path to non-default workspaces. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `path`Optional + +- _Type:_ str +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspace_dir`Optional + +- _Type:_ str + +(Optional) The path to non-default workspaces. + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + from_stack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `from_stack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.LocalBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.LocalBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.LocalBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### OssBackend + +#### Initializers + +```python +import cdktf + +cdktf.OssBackend( + scope: Construct, + bucket: str, + access_key: str = None, + acl: str = None, + assume_role: OssAssumeRole = None, + assume_role_policy: str = None, + assume_role_role_arn: str = None, + assume_role_session_expiration: typing.Union[int, float] = None, + assume_role_session_name: str = None, + ecs_role_name: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + profile: str = None, + region: str = None, + secret_key: str = None, + security_token: str = None, + shared_credentials_file: str = None, + sts_endpoint: str = None, + tablestore_endpoint: str = None, + tablestore_table: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| bucket | str | (Required) The name of the OSS bucket. | +| access_key | str | (Optional) Alibaba Cloud access key. | +| acl | str | (Optional) Object ACL to be applied to the state file. | +| assume_role | OssAssumeRole | _No description._ | +| assume_role_policy | str | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assume_role_role_arn | str | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assume_role_session_expiration | typing.Union[int, float] | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assume_role_session_name | str | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecs_role_name | str | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) A custom endpoint for the OSS API. | +| key | str | (Optional) The name of the state file. | +| prefix | str | (Optional) The path directory of the state file will be stored. | +| profile | str | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | str | (Optional) The region of the OSS bucket. | +| secret_key | str | (Optional) Alibaba Cloud secret access key. | +| security_token | str | (Optional) STS access token. | +| shared_credentials_file | str | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| sts_endpoint | str | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestore_endpoint | str | (Optional) A custom endpoint for the TableStore API. | +| tablestore_table | str | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ str + +(Required) The name of the OSS bucket. + +--- + +##### `access_key`Optional + +- _Type:_ str + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assume_role`~~Optional + +- _Deprecated:_ Use flattened assume role options + +- _Type:_ OssAssumeRole + +--- + +##### `assume_role_policy`Optional + +- _Type:_ str + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assume_role_role_arn`Optional + +- _Type:_ str + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assume_role_session_expiration`Optional + +- _Type:_ typing.Union[int, float] + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assume_role_session_name`Optional + +- _Type:_ str + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecs_role_name`Optional + +- _Type:_ str + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +- _Type:_ str + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +- _Type:_ str + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +- _Type:_ str + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ str + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secret_key`Optional + +- _Type:_ str + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `security_token`Optional + +- _Type:_ str + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `shared_credentials_file`Optional + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `sts_endpoint`Optional + +- _Type:_ str + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestore_endpoint`Optional + +- _Type:_ str + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestore_table`Optional + +- _Type:_ str + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.OssBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.OssBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.OssBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### PgBackend + +#### Initializers + +```python +import cdktf + +cdktf.PgBackend( + scope: Construct, + conn_str: str, + schema_name: str = None, + skip_index_creation: bool = None, + skip_schema_creation: bool = None, + skip_table_creation: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| conn_str | str | Postgres connection string; | +| schema_name | str | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skip_index_creation | bool | If set to true, the Postgres index must already exist. | +| skip_schema_creation | bool | If set to true, the Postgres schema must already exist. | +| skip_table_creation | bool | If set to true, the Postgres table must already exist. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `conn_str`Required + +- _Type:_ str + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schema_name`Optional + +- _Type:_ str + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skip_index_creation`Optional + +- _Type:_ bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_schema_creation`Optional + +- _Type:_ bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_table_creation`Optional + +- _Type:_ bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.PgBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.PgBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.PgBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### RemoteBackend + +#### Initializers + +```python +import cdktf + +cdktf.RemoteBackend( + scope: Construct, + organization: str, + workspaces: IRemoteWorkspace, + hostname: str = None, + token: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| organization | str | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | str | _No description._ | +| token | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `organization`Required + +- _Type:_ str + +--- + +##### `workspaces`Required + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +- _Type:_ str + +--- + +##### `token`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.RemoteBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.RemoteBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.RemoteBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### Resource + +- _Implements:_ IResource + +A construct which represents a resource. + +#### Initializers + +```python +import cdktf + +cdktf.Resource( + scope: Construct, + id: str +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------- | -------------------------------------------------- | +| to_string | Returns a string representation of this construct. | + +--- + +##### ~~`to_string`~~ + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | + +--- + +##### ~~`is_construct`~~ + +```python +import cdktf + +cdktf.Resource.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| node | constructs.Node | The tree node. | +| stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### ~~`stack`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```python +stack: TerraformStack +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### S3Backend + +#### Initializers + +```python +import cdktf + +cdktf.S3Backend( + scope: Construct, + bucket: str, + key: str, + access_key: str = None, + acl: str = None, + allowed_account_ids: typing.List[str] = None, + assume_role: S3BackendAssumeRoleConfig = None, + assume_role_policy: str = None, + assume_role_policy_arns: typing.List[str] = None, + assume_role_tags: typing.Mapping[str] = None, + assume_role_transitive_tag_keys: typing.List[str] = None, + assume_role_with_web_identity: S3BackendAssumeRoleWithWebIdentityConfig = None, + custom_ca_bundle: str = None, + dynamodb_endpoint: str = None, + dynamodb_table: str = None, + ec2_metadata_service_endpoint: str = None, + ec2_metadata_service_endpoint_mode: str = None, + encrypt: bool = None, + endpoint: str = None, + endpoints: S3BackendEndpointConfig = None, + external_id: str = None, + forbidden_account_ids: typing.List[str] = None, + force_path_style: bool = None, + http_proxy: str = None, + https_proxy: str = None, + iam_endpoint: str = None, + insecure: bool = None, + kms_key_id: str = None, + max_retries: typing.Union[int, float] = None, + no_proxy: str = None, + profile: str = None, + region: str = None, + retry_mode: str = None, + role_arn: str = None, + secret_key: str = None, + session_name: str = None, + shared_config_files: typing.List[str] = None, + shared_credentials_file: str = None, + shared_credentials_files: typing.List[str] = None, + skip_credentials_validation: bool = None, + skip_metadata_api_check: bool = None, + skip_region_validation: bool = None, + skip_requesting_account_id: bool = None, + skip_s3_checksum: bool = None, + sse_customer_key: str = None, + sts_endpoint: str = None, + sts_region: str = None, + token: str = None, + use_legacy_workflow: bool = None, + use_path_style: bool = None, + workspace_key_prefix: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| bucket | str | Name of the S3 Bucket. | +| key | str | Path to the state file inside the S3 Bucket. | +| access_key | str | (Optional) AWS access key. | +| acl | str | (Optional) Canned ACL to be applied to the state file. | +| allowed_account_ids | typing.List[str] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assume_role | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assume_role_policy | str | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assume_role_policy_arns | typing.List[str] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assume_role_tags | typing.Mapping[str] | (Optional) Map of assume role session tags. | +| assume_role_transitive_tag_keys | typing.List[str] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assume_role_with_web_identity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| custom_ca_bundle | str | (Optional) File containing custom root and intermediate certificates. | +| dynamodb_endpoint | str | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodb_table | str | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2_metadata_service_endpoint | str | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2_metadata_service_endpoint_mode | str | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | bool | (Optional) Enable server side encryption of the state file. | +| endpoint | str | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| external_id | str | (Optional) External identifier to use when assuming the role. | +| forbidden_account_ids | typing.List[str] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| force_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| http_proxy | str | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| https_proxy | str | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iam_endpoint | str | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kms_key_id | str | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| max_retries | typing.Union[int, float] | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| no_proxy | str | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | str | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | str | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retry_mode | str | (Optional) Specifies how retries are attempted. | +| role_arn | str | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secret_key | str | (Optional) AWS secret access key. | +| session_name | str | (Optional) Session name to use when assuming the role. | +| shared_config_files | typing.List[str] | (Optional) List of paths to AWS shared configuration files. | +| shared_credentials_file | str | (Optional) Path to the AWS shared credentials file. | +| shared_credentials_files | typing.List[str] | (Optional) List of paths to AWS shared credentials files. | +| skip_credentials_validation | bool | (Optional) Skip credentials validation via the STS API. | +| skip_metadata_api_check | bool | (Optional) Skip usage of EC2 Metadata API. | +| skip_region_validation | bool | (Optional) Skip validation of provided region name. | +| skip_requesting_account_id | bool | (Optional) Whether to skip requesting the account ID. | +| skip_s3_checksum | bool | (Optional) Do not include checksum when uploading S3 Objects. | +| sse_customer_key | str | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| sts_endpoint | str | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| sts_region | str | (Optional) AWS region for STS. | +| token | str | (Optional) Multi-Factor Authentication (MFA) token. | +| use_legacy_workflow | bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| use_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspace_key_prefix | str | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `bucket`Required + +- _Type:_ str + +Name of the S3 Bucket. + +--- + +##### `key`Required + +- _Type:_ str + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `access_key`Optional + +- _Type:_ str + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +- _Type:_ str + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowed_account_ids`Optional + +- _Type:_ typing.List[str] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assume_role`Optional + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assume_role_policy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +- _Type:_ str + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_policy_arns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +- _Type:_ typing.List[str] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_tags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +- _Type:_ typing.Mapping[str] + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assume_role_transitive_tag_keys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +- _Type:_ typing.List[str] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assume_role_with_web_identity`Optional + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `custom_ca_bundle`Optional + +- _Type:_ str + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodb_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodb_table`Optional + +- _Type:_ str + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2_metadata_service_endpoint`Optional + +- _Type:_ str + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2_metadata_service_endpoint_mode`Optional + +- _Type:_ str + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +- _Type:_ bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`external_id`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +- _Type:_ str + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbidden_account_ids`Optional + +- _Type:_ typing.List[str] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`force_path_style`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `http_proxy`Optional + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `https_proxy`Optional + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iam_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +- _Type:_ bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kms_key_id`Optional + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `max_retries`Optional + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `no_proxy`Optional + +- _Type:_ str + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +- _Type:_ str + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +- _Type:_ str + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retry_mode`Optional + +- _Type:_ str + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`role_arn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secret_key`Optional + +- _Type:_ str + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`session_name`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +- _Type:_ str + +(Optional) Session name to use when assuming the role. + +--- + +##### `shared_config_files`Optional + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `shared_credentials_file`Optional + +- _Type:_ str + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `shared_credentials_files`Optional + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skip_credentials_validation`Optional + +- _Type:_ bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skip_metadata_api_check`Optional + +- _Type:_ bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skip_region_validation`Optional + +- _Type:_ bool + +(Optional) Skip validation of provided region name. + +--- + +##### `skip_requesting_account_id`Optional + +- _Type:_ bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skip_s3_checksum`Optional + +- _Type:_ bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sse_customer_key`Optional + +- _Type:_ str + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`sts_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `sts_region`Optional + +- _Type:_ str + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +- _Type:_ str + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `use_legacy_workflow`Optional + +- _Type:_ bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `use_path_style`Optional + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspace_key_prefix`Optional + +- _Type:_ str + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.S3Backend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.S3Backend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.S3Backend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### SwiftBackend + +#### Initializers + +```python +import cdktf + +cdktf.SwiftBackend( + scope: Construct, + container: str, + application_credential_id: str = None, + application_credential_name: str = None, + application_credential_secret: str = None, + archive_container: str = None, + auth_url: str = None, + cacert_file: str = None, + cert: str = None, + cloud: str = None, + default_domain: str = None, + domain_id: str = None, + domain_name: str = None, + expire_after: str = None, + insecure: bool = None, + key: str = None, + password: str = None, + project_domain_id: str = None, + project_domain_name: str = None, + region_name: str = None, + state_name: str = None, + tenant_id: str = None, + tenant_name: str = None, + token: str = None, + user_domain_id: str = None, + user_domain_name: str = None, + user_id: str = None, + user_name: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| container | str | _No description._ | +| application_credential_id | str | _No description._ | +| application_credential_name | str | _No description._ | +| application_credential_secret | str | _No description._ | +| archive_container | str | _No description._ | +| auth_url | str | _No description._ | +| cacert_file | str | _No description._ | +| cert | str | _No description._ | +| cloud | str | _No description._ | +| default_domain | str | _No description._ | +| domain_id | str | _No description._ | +| domain_name | str | _No description._ | +| expire_after | str | _No description._ | +| insecure | bool | _No description._ | +| key | str | _No description._ | +| password | str | _No description._ | +| project_domain_id | str | _No description._ | +| project_domain_name | str | _No description._ | +| region_name | str | _No description._ | +| state_name | str | _No description._ | +| tenant_id | str | _No description._ | +| tenant_name | str | _No description._ | +| token | str | _No description._ | +| user_domain_id | str | _No description._ | +| user_domain_name | str | _No description._ | +| user_id | str | _No description._ | +| user_name | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`application_credential_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`application_credential_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`application_credential_secret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`archive_container`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`auth_url`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`cacert_file`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`default_domain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`expire_after`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ bool + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`project_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`project_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`region_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`state_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`tenant_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`tenant_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +##### ~~`user_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### ~~`to_string`~~ + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### ~~`add_override`~~ + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### ~~`override_logical_id`~~ + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### ~~`reset_override_logical_id`~~ + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`to_hcl_terraform`~~ + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### ~~`to_metadata`~~ + +```python +def to_metadata() - > typing.Any +``` + +##### ~~`to_terraform`~~ + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### ~~`get_remote_state_data_source`~~ + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + _fromstack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `_fromstack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### ~~`is_construct`~~ + +```python +import cdktf + +cdktf.SwiftBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### ~~`is_terraform_element`~~ + +```python +import cdktf + +cdktf.SwiftBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### ~~`is_backend`~~ + +```python +import cdktf + +cdktf.SwiftBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### ~~`cdktf_stack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### ~~`friendly_unique_id`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### TerraformAsset + +#### Initializers + +```python +import cdktf + +cdktf.TerraformAsset( + scope: Construct, + id: str, + path: str, + asset_hash: str = None, + type: AssetType = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| path | str | _No description._ | +| asset_hash | str | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `path`Required + +- _Type:_ str + +--- + +##### `asset_hash`Optional + +- _Type:_ str + +--- + +##### `type`Optional + +- _Type:_ AssetType + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------- | -------------------------------------------------- | +| to_string | Returns a string representation of this construct. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformAsset.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| node | constructs.Node | The tree node. | +| file_name | str | Name of the asset. | +| path | str | The path relative to the root of the terraform directory in posix format Use this property to reference the asset. | +| asset_hash | str | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `file_name`Required + +```python +file_name: str +``` + +- _Type:_ str + +Name of the asset. + +--- + +##### `path`Required + +```python +path: str +``` + +- _Type:_ str + +The path relative to the root of the terraform directory in posix format Use this property to reference the asset. + +--- + +##### `asset_hash`Required + +```python +asset_hash: str +``` + +- _Type:_ str + +--- + +##### `type`Required + +```python +type: AssetType +``` + +- _Type:_ AssetType + +--- + +### TerraformBackend + +#### Initializers + +```python +import cdktf + +cdktf.TerraformBackend( + scope: Construct, + id: str, + name: str +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| name | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `name`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_remote_state_data_source | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_remote_state_data_source` + +```python +def get_remote_state_data_source( + scope: Construct, + name: str, + from_stack: str +) - > TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ str + +--- + +###### `from_stack`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_backend | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformBackend.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformBackend.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_backend` + +```python +import cdktf + +cdktf.TerraformBackend.is_backend( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### TerraformDataSource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```python +import cdktf + +cdktf.TerraformDataSource( + scope: Construct, + id: str, + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + count: typing.Union[typing.Union[int, float], TerraformCount] = None, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + lifecycle: TerraformResourceLifecycle = None, + provider: TerraformProvider = None, + provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] = None, + terraform_resource_type: str, + terraform_generator_metadata: TerraformProviderGeneratorMetadata = None +) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `connection`Optional + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +##### `terraform_resource_type`Required + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get_any_map_attribute | _No description._ | +| get_boolean_attribute | _No description._ | +| get_boolean_map_attribute | _No description._ | +| get_list_attribute | _No description._ | +| get_number_attribute | _No description._ | +| get_number_list_attribute | _No description._ | +| get_number_map_attribute | _No description._ | +| get_string_attribute | _No description._ | +| get_string_map_attribute | _No description._ | +| interpolation_for_attribute | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get_any_map_attribute` + +```python +def get_any_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_attribute` + +```python +def get_boolean_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_map_attribute` + +```python +def get_boolean_map_attribute( + terraform_attribute: str +) - > typing.Mapping[bool] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_list_attribute` + +```python +def get_list_attribute( + terraform_attribute: str +) - > typing.List[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_attribute` + +```python +def get_number_attribute( + terraform_attribute: str +) - > typing.Union[int, float] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_list_attribute` + +```python +def get_number_list_attribute( + terraform_attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_map_attribute` + +```python +def get_number_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_attribute` + +```python +def get_string_attribute( + terraform_attribute: str +) - > str +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_map_attribute` + +```python +def get_string_map_attribute( + terraform_attribute: str +) - > typing.Mapping[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_terraform_data_source | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformDataSource.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformDataSource.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_terraform_data_source` + +```python +import cdktf + +cdktf.TerraformDataSource.is_terraform_data_source( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| terraform_meta_arguments | typing.Mapping[typing.Any] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[str] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `terraform_meta_arguments`Required + +```python +terraform_meta_arguments: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +```python +terraform_generator_metadata: TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformElement + +#### Initializers + +```python +import cdktf + +cdktf.TerraformElement( + scope: Construct, + id: str, + element_type: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| element_type | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `element_type`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformElement.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformElement.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +### TerraformHclModule + +#### Initializers + +```python +import cdktf + +cdktf.TerraformHclModule( + scope: Construct, + id: str, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] = None, + skip_asset_creation_from_local_modules: bool = None, + source: str, + version: str = None, + variables: typing.Mapping[typing.Any] = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | +| source | str | _No description._ | +| version | str | _No description._ | +| variables | typing.Mapping[typing.Any] | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `depends_on`Optional + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +- _Type:_ bool + +--- + +##### `source`Required + +- _Type:_ str + +--- + +##### `version`Optional + +- _Type:_ str + +--- + +##### `variables`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | +| add_provider | _No description._ | +| get_string | _No description._ | +| interpolation_for_output | _No description._ | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| set | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +##### `add_provider` + +```python +def add_provider( + provider: typing.Union[TerraformProvider, TerraformModuleProvider] +) - > None +``` + +###### `provider`Required + +- _Type:_ typing.Union[TerraformProvider, TerraformModuleProvider] + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `interpolation_for_output` + +```python +def interpolation_for_output( + module_output: str +) - > IResolvable +``` + +###### `module_output`Required + +- _Type:_ str + +--- + +##### `get` + +```python +def get( + output: str +) - > typing.Any +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `set` + +```python +def set( + variable: str, + value: typing.Any +) - > None +``` + +###### `variable`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformHclModule.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformHclModule.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| source | str | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | +| version | str | _No description._ | +| depends_on | typing.List[str] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| variables | typing.Mapping[typing.Any] | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `source`Required + +```python +source: str +``` + +- _Type:_ str + +--- + +##### `providers`Optional + +```python +providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] +``` + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +```python +skip_asset_creation_from_local_modules: bool +``` + +- _Type:_ bool + +--- + +##### `version`Optional + +```python +version: str +``` + +- _Type:_ str + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `variables`Optional + +```python +variables: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +### TerraformLocal + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```python +import cdktf + +cdktf.TerraformLocal( + scope: Construct, + id: str, + expression: typing.Any +) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| expression | typing.Any | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `expression`Required + +- _Type:_ typing.Any + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformLocal.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformLocal.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| as_any_map | typing.Mapping[typing.Any] | _No description._ | +| as_boolean | IResolvable | _No description._ | +| as_boolean_map | typing.Mapping[bool] | _No description._ | +| as_list | typing.List[str] | _No description._ | +| as_number | typing.Union[int, float] | _No description._ | +| as_number_map | typing.Mapping[typing.Union[int, float]] | _No description._ | +| as_string | str | _No description._ | +| as_string_map | typing.Mapping[str] | _No description._ | +| expression | typing.Any | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `as_any_map`Required + +```python +as_any_map: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `as_boolean`Required + +```python +as_boolean: IResolvable +``` + +- _Type:_ IResolvable + +--- + +##### `as_boolean_map`Required + +```python +as_boolean_map: typing.Mapping[bool] +``` + +- _Type:_ typing.Mapping[bool] + +--- + +##### `as_list`Required + +```python +as_list: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `as_number`Required + +```python +as_number: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +--- + +##### `as_number_map`Required + +```python +as_number_map: typing.Mapping[typing.Union[int, float]] +``` + +- _Type:_ typing.Mapping[typing.Union[int, float]] + +--- + +##### `as_string`Required + +```python +as_string: str +``` + +- _Type:_ str + +--- + +##### `as_string_map`Required + +```python +as_string_map: typing.Mapping[str] +``` + +- _Type:_ typing.Mapping[str] + +--- + +##### `expression`Required + +```python +expression: typing.Any +``` + +- _Type:_ typing.Any + +--- + +### TerraformModule + +- _Implements:_ ITerraformDependable + +TerraformModule can be used to reference a local terraform module or a module from the Terraform Registry. + +It should be used if you can not use generated bindings for the module as you would get by adding the module +to your cdktf.json files "terraformModules" array and running cdktf get. + +This class is not creating a Terraform module to be used outside of CDKTF. +If you want to bundle certain resources together like you would do with a Terraform module, +you should use Constructs instead, see http://cdk.tf/constructs for more details. + +#### Initializers + +```python +import cdktf + +cdktf.TerraformModule( + scope: Construct, + id: str, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] = None, + skip_asset_creation_from_local_modules: bool = None, + source: str, + version: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | +| source | str | _No description._ | +| version | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `depends_on`Optional + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +- _Type:_ bool + +--- + +##### `source`Required + +- _Type:_ str + +--- + +##### `version`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | +| add_provider | _No description._ | +| get_string | _No description._ | +| interpolation_for_output | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +##### `add_provider` + +```python +def add_provider( + provider: typing.Union[TerraformProvider, TerraformModuleProvider] +) - > None +``` + +###### `provider`Required + +- _Type:_ typing.Union[TerraformProvider, TerraformModuleProvider] + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `interpolation_for_output` + +```python +def interpolation_for_output( + module_output: str +) - > IResolvable +``` + +###### `module_output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformModule.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformModule.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| source | str | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | +| version | str | _No description._ | +| depends_on | typing.List[str] | _No description._ | +| for_each | ITerraformIterator | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `source`Required + +```python +source: str +``` + +- _Type:_ str + +--- + +##### `providers`Optional + +```python +providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] +``` + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +```python +skip_asset_creation_from_local_modules: bool +``` + +- _Type:_ bool + +--- + +##### `version`Optional + +```python +version: str +``` + +- _Type:_ str + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +### TerraformOutput + +#### Initializers + +```python +import cdktf + +cdktf.TerraformOutput( + scope: Construct, + id: str, + value: typing.Any, + depends_on: typing.List[ITerraformDependable] = None, + description: str = None, + precondition: Precondition = None, + sensitive: bool = None, + static_id: bool = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| value | typing.Any | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| description | str | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | bool | _No description._ | +| static_id | bool | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `value`Required + +- _Type:_ typing.Any + +--- + +##### `depends_on`Optional + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `description`Optional + +- _Type:_ str + +--- + +##### `precondition`Optional + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +- _Type:_ bool + +--- + +##### `static_id`Optional + +- _Type:_ bool +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_terraform_output | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformOutput.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformOutput.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_terraform_output` + +```python +import cdktf + +cdktf.TerraformOutput.is_terraform_output( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| static_id | bool | _No description._ | +| value | typing.Any | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| description | str | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | bool | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `static_id`Required + +```python +static_id: bool +``` + +- _Type:_ bool + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `description`Optional + +```python +description: str +``` + +- _Type:_ str + +--- + +##### `precondition`Optional + +```python +precondition: Precondition +``` + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +```python +sensitive: bool +``` + +- _Type:_ bool + +--- + +### TerraformProvider + +#### Initializers + +```python +import cdktf + +cdktf.TerraformProvider( + scope: Construct, + id: str, + terraform_resource_type: str, + terraform_generator_metadata: TerraformProviderGeneratorMetadata = None, + terraform_provider_source: str = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraform_provider_source | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `terraform_resource_type`Required + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraform_provider_source`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_terraform_provider | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformProvider.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformProvider.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_terraform_provider` + +```python +import cdktf + +cdktf.TerraformProvider.is_terraform_provider( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| meta_attributes | typing.Mapping[typing.Any] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraform_provider_source | str | _No description._ | +| alias | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `meta_attributes`Required + +```python +meta_attributes: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +```python +terraform_generator_metadata: TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraform_provider_source`Optional + +```python +terraform_provider_source: str +``` + +- _Type:_ str + +--- + +##### `alias`Optional + +```python +alias: str +``` + +- _Type:_ str + +--- + +### TerraformRemoteState + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```python +import cdktf + +cdktf.TerraformRemoteState( + scope: Construct, + id: str, + backend: str, + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| backend | str | _No description._ | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `backend`Required + +- _Type:_ str + +--- + +##### `defaults`Optional + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | Adds this resource to the terraform JSON output. | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| get_boolean | _No description._ | +| get_list | _No description._ | +| get_number | _No description._ | +| get_string | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```python +def get( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_boolean` + +```python +def get_boolean( + output: str +) - > IResolvable +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_list` + +```python +def get_list( + output: str +) - > typing.List[str] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_number` + +```python +def get_number( + output: str +) - > typing.Union[int, float] +``` + +###### `output`Required + +- _Type:_ str + +--- + +##### `get_string` + +```python +def get_string( + output: str +) - > str +``` + +###### `output`Required + +- _Type:_ str + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformRemoteState.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformRemoteState.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tfResourceType | str | _No description._ | + +--- + +##### `tfResourceType`Required + +```python +tfResourceType: str +``` + +- _Type:_ str + +--- + +### TerraformResource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```python +import cdktf + +cdktf.TerraformResource( + scope: Construct, + id: str, + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + count: typing.Union[typing.Union[int, float], TerraformCount] = None, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + lifecycle: TerraformResourceLifecycle = None, + provider: TerraformProvider = None, + provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] = None, + terraform_resource_type: str, + terraform_generator_metadata: TerraformProviderGeneratorMetadata = None +) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `connection`Optional + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +##### `terraform_resource_type`Required + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | Adds this resource to the terraform JSON output. | +| add_move_target | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| get_any_map_attribute | _No description._ | +| get_boolean_attribute | _No description._ | +| get_boolean_map_attribute | _No description._ | +| get_list_attribute | _No description._ | +| get_number_attribute | _No description._ | +| get_number_list_attribute | _No description._ | +| get_number_map_attribute | _No description._ | +| get_string_attribute | _No description._ | +| get_string_map_attribute | _No description._ | +| has_resource_move | _No description._ | +| import_from | _No description._ | +| interpolation_for_attribute | _No description._ | +| move_from_id | Move the resource corresponding to "id" to this resource. | +| move_to | Moves this resource to the target resource given by moveTarget. | +| move_to_id | Moves this resource to the resource corresponding to "id". | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +Adds this resource to the terraform JSON output. + +##### `add_move_target` + +```python +def add_move_target( + move_target: str +) - > None +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `move_target`Required + +- _Type:_ str + +The string move target that will correspond to this resource. + +--- + +##### `get_any_map_attribute` + +```python +def get_any_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Any] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_attribute` + +```python +def get_boolean_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_boolean_map_attribute` + +```python +def get_boolean_map_attribute( + terraform_attribute: str +) - > typing.Mapping[bool] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_list_attribute` + +```python +def get_list_attribute( + terraform_attribute: str +) - > typing.List[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_attribute` + +```python +def get_number_attribute( + terraform_attribute: str +) - > typing.Union[int, float] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_list_attribute` + +```python +def get_number_list_attribute( + terraform_attribute: str +) - > typing.List[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_number_map_attribute` + +```python +def get_number_map_attribute( + terraform_attribute: str +) - > typing.Mapping[typing.Union[int, float]] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_attribute` + +```python +def get_string_attribute( + terraform_attribute: str +) - > str +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `get_string_map_attribute` + +```python +def get_string_map_attribute( + terraform_attribute: str +) - > typing.Mapping[str] +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `has_resource_move` + +```python +def has_resource_move() - > typing.Union[TerraformResourceMoveByTarget, TerraformResourceMoveById] +``` + +##### `import_from` + +```python +def import_from( + id: str, + provider: TerraformProvider = None +) - > None +``` + +###### `id`Required + +- _Type:_ str + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +##### `move_from_id` + +```python +def move_from_id( + id: str +) - > None +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ str + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `move_to` + +```python +def move_to( + move_target: str, + index: typing.Union[str, typing.Union[int, float]] = None +) - > None +``` + +Moves this resource to the target resource given by moveTarget. + +###### `move_target`Required + +- _Type:_ str + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ typing.Union[str, typing.Union[int, float]] + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `move_to_id` + +```python +def move_to_id( + id: str +) - > None +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ str + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | +| is_terraform_resource | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformResource.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformResource.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `is_terraform_resource` + +```python +import cdktf + +cdktf.TerraformResource.is_terraform_resource( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| terraform_meta_arguments | typing.Mapping[typing.Any] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[str] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `terraform_meta_arguments`Required + +```python +terraform_meta_arguments: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +```python +terraform_generator_metadata: TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```python +provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] +``` + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +### TerraformStack + +#### Initializers + +```python +import cdktf + +cdktf.TerraformStack( + scope: Construct, + id: str +) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_dependency | _No description._ | +| add_override | _No description._ | +| all_providers | _No description._ | +| depends_on | _No description._ | +| ensure_backend_exists | _No description._ | +| get_logical_id | _No description._ | +| has_resource_move | _No description._ | +| prepare_stack | _No description._ | +| register_incoming_cross_stack_reference | _No description._ | +| register_outgoing_cross_stack_reference | _No description._ | +| run_all_validations | Run all validations on the stack. | +| to_hcl_terraform | _No description._ | +| to_terraform | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_dependency` + +```python +def add_dependency( + dependency: TerraformStack +) - > None +``` + +###### `dependency`Required + +- _Type:_ TerraformStack + +--- + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `all_providers` + +```python +def all_providers() - > typing.List[TerraformProvider] +``` + +##### `depends_on` + +```python +def depends_on( + stack: TerraformStack +) - > bool +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `ensure_backend_exists` + +```python +def ensure_backend_exists() - > TerraformBackend +``` + +##### `get_logical_id` + +```python +def get_logical_id( + tf_element: typing.Union[Node, TerraformElement] +) - > str +``` + +###### `tf_element`Required + +- _Type:_ typing.Union[constructs.Node, TerraformElement] + +--- + +##### `has_resource_move` + +```python +def has_resource_move() - > bool +``` + +##### `prepare_stack` + +```python +def prepare_stack() - > None +``` + +##### `register_incoming_cross_stack_reference` + +```python +def register_incoming_cross_stack_reference( + from_stack: TerraformStack +) - > TerraformRemoteState +``` + +###### `from_stack`Required + +- _Type:_ TerraformStack + +--- + +##### `register_outgoing_cross_stack_reference` + +```python +def register_outgoing_cross_stack_reference( + identifier: str +) - > TerraformOutput +``` + +###### `identifier`Required + +- _Type:_ str + +--- + +##### `run_all_validations` + +```python +def run_all_validations() - > None +``` + +Run all validations on the stack. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Mapping[typing.Any] +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_stack | _No description._ | +| of | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformStack.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_stack` + +```python +import cdktf + +cdktf.TerraformStack.is_stack( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +##### `of` + +```python +import cdktf + +cdktf.TerraformStack.of( + construct: IConstruct +) +``` + +###### `construct`Required + +- _Type:_ constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| dependencies | typing.List[TerraformStack] | _No description._ | +| move_targets | TerraformResourceTargets | _No description._ | +| synthesizer | IStackSynthesizer | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `dependencies`Required + +```python +dependencies: typing.List[TerraformStack] +``` + +- _Type:_ typing.List[TerraformStack] + +--- + +##### `move_targets`Required + +```python +move_targets: TerraformResourceTargets +``` + +- _Type:_ TerraformResourceTargets + +--- + +##### `synthesizer`Required + +```python +synthesizer: IStackSynthesizer +``` + +- _Type:_ IStackSynthesizer + +--- + +### TerraformVariable + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```python +import cdktf + +cdktf.TerraformVariable( + scope: Construct, + id: str, + default: typing.Any = None, + description: str = None, + nullable: bool = None, + sensitive: bool = None, + type: str = None, + validation: typing.List[TerraformVariableValidationConfig] = None +) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | +| scope | constructs.Construct | _No description._ | +| id | str | _No description._ | +| default | typing.Any | _No description._ | +| description | str | _No description._ | +| nullable | bool | _No description._ | +| sensitive | bool | _No description._ | +| type | str | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| validation | typing.List[TerraformVariableValidationConfig] | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ str + +--- + +##### `default`Optional + +- _Type:_ typing.Any + +--- + +##### `description`Optional + +- _Type:_ str + +--- + +##### `nullable`Optional + +- _Type:_ bool + +--- + +##### `sensitive`Optional + +- _Type:_ bool + +--- + +##### `type`Optional + +- _Type:_ str + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(< TYPE >) +- set(< TYPE >) +- map(< TYPE >) +- object({< ATTR NAME > = < TYPE >, ... }) +- tuple([< TYPE >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `validation`Optional + +- _Type:_ typing.List[TerraformVariableValidationConfig] + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| to_string | Returns a string representation of this construct. | +| add_override | _No description._ | +| override_logical_id | Overrides the auto-generated logical ID with a specific ID. | +| reset_override_logical_id | Resets a previously passed logical Id to use the auto-generated logical id again. | +| to_hcl_terraform | _No description._ | +| to_metadata | _No description._ | +| to_terraform | _No description._ | +| add_validation | _No description._ | +| synthesize_attributes | _No description._ | +| synthesize_hcl_attributes | _No description._ | + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Returns a string representation of this construct. + +##### `add_override` + +```python +def add_override( + path: str, + value: typing.Any +) - > None +``` + +###### `path`Required + +- _Type:_ str + +--- + +###### `value`Required + +- _Type:_ typing.Any + +--- + +##### `override_logical_id` + +```python +def override_logical_id( + new_logical_id: str +) - > None +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `new_logical_id`Required + +- _Type:_ str + +The new logical ID to use for this stack element. + +--- + +##### `reset_override_logical_id` + +```python +def reset_override_logical_id() - > None +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `to_hcl_terraform` + +```python +def to_hcl_terraform() - > typing.Any +``` + +##### `to_metadata` + +```python +def to_metadata() - > typing.Any +``` + +##### `to_terraform` + +```python +def to_terraform() - > typing.Any +``` + +##### `add_validation` + +```python +def add_validation( + condition: typing.Any, + error_message: str +) - > None +``` + +###### `condition`Required + +- _Type:_ typing.Any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +###### `error_message`Required + +- _Type:_ str + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +##### `synthesize_attributes` + +```python +def synthesize_attributes() - > typing.Mapping[typing.Any] +``` + +##### `synthesize_hcl_attributes` + +```python +def synthesize_hcl_attributes() - > typing.Mapping[typing.Any] +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| is_construct | Checks if `x` is a construct. | +| is_terraform_element | _No description._ | + +--- + +##### `is_construct` + +```python +import cdktf + +cdktf.TerraformVariable.is_construct( + x: typing.Any +) +``` + +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. + +###### `x`Required + +- _Type:_ typing.Any + +Any object. + +--- + +##### `is_terraform_element` + +```python +import cdktf + +cdktf.TerraformVariable.is_terraform_element( + x: typing.Any +) +``` + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ----------------- | +| node | constructs.Node | The tree node. | +| cdktf_stack | TerraformStack | _No description._ | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| boolean_value | IResolvable | _No description._ | +| list_value | typing.List[str] | _No description._ | +| number_value | typing.Union[int, float] | _No description._ | +| string_value | str | _No description._ | +| value | typing.Any | _No description._ | +| default | typing.Any | _No description._ | +| description | str | _No description._ | +| nullable | bool | _No description._ | +| sensitive | bool | _No description._ | +| type | str | _No description._ | +| validation | typing.List[TerraformVariableValidationConfig] | _No description._ | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktf_stack`Required + +```python +cdktf_stack: TerraformStack +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `boolean_value`Required + +```python +boolean_value: IResolvable +``` + +- _Type:_ IResolvable + +--- + +##### `list_value`Required + +```python +list_value: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `number_value`Required + +```python +number_value: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +--- + +##### `string_value`Required + +```python +string_value: str +``` + +- _Type:_ str + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +--- + +##### `default`Optional + +```python +default: typing.Any +``` + +- _Type:_ typing.Any + +--- + +##### `description`Optional + +```python +description: str +``` + +- _Type:_ str + +--- + +##### `nullable`Optional + +```python +nullable: bool +``` + +- _Type:_ bool + +--- + +##### `sensitive`Optional + +```python +sensitive: bool +``` + +- _Type:_ bool + +--- + +##### `type`Optional + +```python +type: str +``` + +- _Type:_ str + +--- + +##### `validation`Optional + +```python +validation: typing.List[TerraformVariableValidationConfig] +``` + +- _Type:_ typing.List[TerraformVariableValidationConfig] + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/enums.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/enums.mdx new file mode 100644 index 0000000000..6d950c42a6 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/enums.mdx @@ -0,0 +1,56 @@ +--- +page_title: Python Reference for Enums +description: CDKTF Core API Reference for Enums in Python. +--- + + + +# Python: Enums + +### AnnotationMetadataEntryType + +#### Members + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| INFO | _No description._ | +| WARN | _No description._ | +| ERROR | _No description._ | + +--- + +##### `INFO` + +--- + +##### `WARN` + +--- + +##### `ERROR` + +--- + +### AssetType + +#### Members + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------- | +| FILE | _No description._ | +| DIRECTORY | _No description._ | +| ARCHIVE | _No description._ | + +--- + +##### `FILE` + +--- + +##### `DIRECTORY` + +--- + +##### `ARCHIVE` + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/index.mdx new file mode 100644 index 0000000000..9012118732 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/index.mdx @@ -0,0 +1,14 @@ +--- +page_title: Python API resource reference overview +description: Learn about the API resources available in the Terraform CDK library for Python. +--- + +# Python API resource reference overview + +The Python API reference includes the following resources: + +- [Classes](/terraform/cdktf/api-reference/python/classes) +- [Constructs](/terraform/cdktf/api-reference/python/constructs) +- [Enums](/terraform/cdktf/api-reference/python/enums) +- [Protocols](/terraform/cdktf/api-reference/python/protocols) +- [Structs](/terraform/cdktf/api-reference/python/structs) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/protocols.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/protocols.mdx new file mode 100644 index 0000000000..91a88174ca --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/protocols.mdx @@ -0,0 +1,1013 @@ +--- +page_title: Python Reference for Protocols +description: CDKTF Core API Reference for Protocols in Python. +--- + + + +# Python: Protocols + +### IAnyProducer + +- _Implemented By:_ IAnyProducer + +Interface for lazy untyped value producers. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | ------------------ | +| produce | Produce the value. | + +--- + +##### `produce` + +```python +def produce( + context: IResolveContext +) - > typing.Any +``` + +Produce the value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IAspect + +- _Implemented By:_ MigrateIds, IAspect + +Represents an Aspect. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------- | ------------------------------------ | +| visit | All aspects can visit an IConstruct. | + +--- + +##### `visit` + +```python +def visit( + node: IConstruct +) - > None +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ constructs.IConstruct + +--- + +### IFragmentConcatenator + +- _Implemented By:_ StringConcat, IFragmentConcatenator + +Function used to concatenate symbols in the target document language. + +Interface so it could potentially be exposed over jsii. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ----------------------------------------------- | +| join | Join the fragment on the left and on the right. | + +--- + +##### `join` + +```python +def join( + left: typing.Any, + right: typing.Any +) - > typing.Any +``` + +Join the fragment on the left and on the right. + +###### `left`Required + +- _Type:_ typing.Any + +--- + +###### `right`Required + +- _Type:_ typing.Any + +--- + +### IImportableConfig + +- _Implemented By:_ IImportableConfig + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| import_id | str | _No description._ | +| terraform_resource_type | str | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `import_id`Required + +```python +import_id: str +``` + +- _Type:_ str + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### IInterpolatingParent + +- _Implemented By:_ AnyMapList, BooleanMapList, ComplexComputedList, ComplexObject, DataResource, MapList, NumberMapList, StringMapList, TerraformDataSource, TerraformResource, IInterpolatingParent + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | ----------------- | +| interpolation_for_attribute | _No description._ | + +--- + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +### IListProducer + +- _Implemented By:_ IListProducer + +Interface for lazy list producers. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------------- | +| produce | Produce the list value. | + +--- + +##### `produce` + +```python +def produce( + context: IResolveContext +) - > typing.List[str] +``` + +Produce the list value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IManifest + +- _Implemented By:_ Manifest, IManifest + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| stacks | typing.Mapping[StackManifest] | _No description._ | +| version | str | _No description._ | + +--- + +##### `stacks`Required + +```python +stacks: typing.Mapping[StackManifest] +``` + +- _Type:_ typing.Mapping[StackManifest] + +--- + +##### `version`Required + +```python +version: str +``` + +- _Type:_ str + +--- + +### INumberProducer + +- _Implemented By:_ INumberProducer + +Interface for lazy number producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| produce | Produce the number value. | + +--- + +##### `produce` + +```python +def produce( + context: IResolveContext +) - > typing.Union[int, float] +``` + +Produce the number value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IPostProcessor + +- _Implemented By:_ IPostProcessor + +A Token that can post-process the complete resolved value, after resolve() has recursed over it. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | +| post_process | Process the completely resolved value, after full recursion/resolution has happened. | + +--- + +##### `post_process` + +```python +def post_process( + input: typing.Any, + context: IResolveContext +) - > typing.Any +``` + +Process the completely resolved value, after full recursion/resolution has happened. + +###### `input`Required + +- _Type:_ typing.Any + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IRemoteWorkspace + +- _Implemented By:_ NamedRemoteWorkspace, PrefixedRemoteWorkspaces, IRemoteWorkspace + +### IResolvable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, LazyBase, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, IResolvable + +Interface for values that can be resolvable later. + +Tokens are special objects that participate in synthesis. + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------- | --------------------------------------------------------- | +| resolve | Produce the Token's value at resolution time. | +| to_string | Return a string representation of this resolvable object. | + +--- + +##### `resolve` + +```python +def resolve( + context: IResolveContext +) - > typing.Any +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `to_string` + +```python +def to_string() - > str +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------ | +| creation_stack | typing.List[str] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `creation_stack`Required + +```python +creation_stack: typing.List[str] +``` + +- _Type:_ typing.List[str] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### IResolveContext + +- _Implemented By:_ IResolveContext + +Current resolution context for tokens. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| register_post_processor | Use this postprocessor after the entire token structure has been resolved. | +| resolve | Resolve an inner object. | + +--- + +##### `register_post_processor` + +```python +def register_post_processor( + post_processor: IPostProcessor +) - > None +``` + +Use this postprocessor after the entire token structure has been resolved. + +###### `post_processor`Required + +- _Type:_ IPostProcessor + +--- + +##### `resolve` + +```python +def resolve( + x: typing.Any +) - > typing.Any +``` + +Resolve an inner object. + +###### `x`Required + +- _Type:_ typing.Any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| preparing | bool | True when we are still preparing, false if we're rendering the final output. | +| scope | constructs.IConstruct | The scope from which resolution has been initiated. | +| ignore_escapes | bool | True when ${} should not be parsed, and treated as literals. | +| iterator_context | str | TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. | +| suppress_braces | bool | True when ${} should be ommitted (because already inside them), false otherwise. | +| warn_escapes | bool | True when ${} should not be included in the string to be resolved, outputs a warning. | + +--- + +##### `preparing`Required + +```python +preparing: bool +``` + +- _Type:_ bool + +True when we are still preparing, false if we're rendering the final output. + +--- + +##### `scope`Required + +```python +scope: IConstruct +``` + +- _Type:_ constructs.IConstruct + +The scope from which resolution has been initiated. + +--- + +##### `ignore_escapes`Optional + +```python +ignore_escapes: bool +``` + +- _Type:_ bool + +True when ${} should not be parsed, and treated as literals. + +--- + +##### `iterator_context`Optional + +```python +iterator_context: str +``` + +- _Type:_ str + +TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. + +--- + +##### `suppress_braces`Optional + +```python +suppress_braces: bool +``` + +- _Type:_ bool + +True when ${} should be ommitted (because already inside them), false otherwise. + +--- + +##### `warn_escapes`Optional + +```python +warn_escapes: bool +``` + +- _Type:_ bool + +True when ${} should not be included in the string to be resolved, outputs a warning. + +Default: false + +--- + +### IResource + +- _Extends:_ constructs.IConstruct + +- _Implemented By:_ Resource, IResource + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| node | constructs.Node | The tree node. | +| stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### `node`Required + +```python +node: Node +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `stack`Required + +```python +stack: TerraformStack +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### IResourceConstructor + +- _Implemented By:_ IResourceConstructor + +### IScopeCallback + +- _Implemented By:_ IScopeCallback + +### IStackSynthesizer + +- _Implemented By:_ IStackSynthesizer + +Encodes information how a certain Stack should be deployed inspired by AWS CDK v2 implementation (synth functionality was removed in constructs v10). + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------- | +| synthesize | Synthesize the associated stack to the session. | + +--- + +##### `synthesize` + +```python +def synthesize( + session: ISynthesisSession +) - > None +``` + +Synthesize the associated stack to the session. + +###### `session`Required + +- _Type:_ ISynthesisSession + +--- + +### IStringProducer + +- _Implemented By:_ IStringProducer + +Interface for lazy string producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| produce | Produce the string value. | + +--- + +##### `produce` + +```python +def produce( + context: IResolveContext +) - > str +``` + +Produce the string value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### ISynthesisSession + +- _Implemented By:_ ISynthesisSession + +Represents a single session of synthesis. + +Passed into `TerraformStack.onSynthesize()` methods. +originally from aws/constructs lib v3.3.126 (synth functionality was removed in constructs v10) + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------ | +| manifest | Manifest | _No description._ | +| outdir | str | The output directory for this synthesis session. | +| skip_validation | bool | _No description._ | + +--- + +##### `manifest`Required + +```python +manifest: Manifest +``` + +- _Type:_ Manifest + +--- + +##### `outdir`Required + +```python +outdir: str +``` + +- _Type:_ str + +The output directory for this synthesis session. + +--- + +##### `skip_validation`Optional + +```python +skip_validation: bool +``` + +- _Type:_ bool + +--- + +### ITerraformAddressable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, DataResource, DataTerraformRemoteState, DataTerraformRemoteStateAzurerm, DataTerraformRemoteStateConsul, DataTerraformRemoteStateCos, DataTerraformRemoteStateGcs, DataTerraformRemoteStateHttp, DataTerraformRemoteStateLocal, DataTerraformRemoteStateOss, DataTerraformRemoteStatePg, DataTerraformRemoteStateS3, DataTerraformRemoteStateSwift, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, TerraformDataSource, TerraformHclModule, TerraformLocal, TerraformModule, TerraformRemoteState, TerraformResource, TerraformVariable, ITerraformAddressable, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------ | ---------------- | ----------------- | +| fqn | str | _No description._ | + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### ITerraformDependable + +- _Extends:_ ITerraformAddressable + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformHclModule, TerraformModule, TerraformResource, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------- | ---------------- | ----------------- | +| fqn | str | _No description._ | + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +### ITerraformIterator + +- _Implemented By:_ DynamicListTerraformIterator, ListTerraformIterator, MapTerraformIterator, ResourceTerraformIterator, TerraformIterator, ITerraformIterator + +### ITerraformResource + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformResource, ITerraformResource + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ----------------- | +| interpolation_for_attribute | _No description._ | + +--- + +##### `interpolation_for_attribute` + +```python +def interpolation_for_attribute( + terraform_attribute: str +) - > IResolvable +``` + +###### `terraform_attribute`Required + +- _Type:_ str + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| fqn | str | _No description._ | +| friendly_unique_id | str | _No description._ | +| terraform_resource_type | str | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[str] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `fqn`Required + +```python +fqn: str +``` + +- _Type:_ str + +--- + +##### `friendly_unique_id`Required + +```python +friendly_unique_id: str +``` + +- _Type:_ str + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### ITokenMapper + +- _Implemented By:_ ITokenMapper + +Interface to apply operation to tokens in a string. + +Interface so it can be exported via jsii. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ----------------------- | +| map_token | Replace a single token. | + +--- + +##### `map_token` + +```python +def map_token( + t: IResolvable +) - > typing.Any +``` + +Replace a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +### ITokenResolver + +- _Implemented By:_ DefaultTokenResolver, ITokenResolver + +How to resolve tokens. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------- | +| resolve_list | Resolve a tokenized list. | +| resolve_map | Resolve a tokenized map. | +| resolve_number_list | Resolve a tokenized number list. | +| resolve_string | Resolve a string with at least one stringified token in it. | +| resolve_token | Resolve a single token. | + +--- + +##### `resolve_list` + +```python +def resolve_list( + l: typing.List[str], + context: IResolveContext +) - > typing.Any +``` + +Resolve a tokenized list. + +###### `l`Required + +- _Type:_ typing.List[str] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_map` + +```python +def resolve_map( + m: typing.Mapping[typing.Any], + context: IResolveContext +) - > typing.Any +``` + +Resolve a tokenized map. + +###### `m`Required + +- _Type:_ typing.Mapping[typing.Any] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_number_list` + +```python +def resolve_number_list( + l: typing.List[typing.Union[int, float]], + context: IResolveContext +) - > typing.Any +``` + +Resolve a tokenized number list. + +###### `l`Required + +- _Type:_ typing.List[typing.Union[int, float]] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_string` + +```python +def resolve_string( + s: TokenizedStringFragments, + context: IResolveContext +) - > typing.Any +``` + +Resolve a string with at least one stringified token in it. + +(May use concatenation) + +###### `s`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolve_token` + +```python +def resolve_token( + t: IResolvable, + context: IResolveContext, + post_processor: IPostProcessor +) - > typing.Any +``` + +Resolve a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `post_processor`Required + +- _Type:_ IPostProcessor + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/structs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/structs.mdx new file mode 100644 index 0000000000..71c33c3a65 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/python/structs.mdx @@ -0,0 +1,10162 @@ +--- +page_title: Python Reference for Structs +description: CDKTF Core API Reference for Structs in Python. +--- + + + +# Python: Structs + +### AppConfig + +#### Initializer + +```python +import cdktf + +cdktf.AppConfig( + context: typing.Mapping[typing.Any] = None, + hcl_output: bool = None, + outdir: str = None, + skip_backend_validation: bool = None, + skip_validation: bool = None, + stack_traces: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------- | --------------------------------------------------------------- | +| context | typing.Mapping[typing.Any] | Additional context values for the application. | +| hcl_output | bool | _No description._ | +| outdir | str | The directory to output Terraform resources. | +| skip_backend_validation | bool | Whether to skip backend validation during synthesis of the app. | +| skip_validation | bool | Whether to skip all validations during synthesis of the app. | +| stack_traces | bool | _No description._ | + +--- + +##### `context`Optional + +```python +context: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `hcl_output`Optional + +```python +hcl_output: bool +``` + +- _Type:_ bool + +--- + +##### `outdir`Optional + +```python +outdir: str +``` + +- _Type:_ str +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `skip_backend_validation`Optional + +```python +skip_backend_validation: bool +``` + +- _Type:_ bool +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skip_validation`Optional + +```python +skip_validation: bool +``` + +- _Type:_ bool +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `stack_traces`Optional + +```python +stack_traces: bool +``` + +- _Type:_ bool + +--- + +### AzurermBackendConfig + +Stores the state as a Blob with the given Key within the Blob Container within the Blob Storage Account. + +This backend supports state locking and consistency checking +with Azure Blob Storage native capabilities. + +Note: By default the Azure Backend uses ADAL for authentication which is deprecated +in favour of MSAL - MSAL can be used by setting use_microsoft_graph to true. +The default for this will change in Terraform 1.2, +so that MSAL authentication is used by default. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/azurerm + +#### Initializer + +```python +import cdktf + +cdktf.AzurermBackendConfig( + container_name: str, + key: str, + storage_account_name: str, + access_key: str = None, + client_certificate_password: str = None, + client_certificate_path: str = None, + client_id: str = None, + client_secret: str = None, + endpoint: str = None, + environment: str = None, + metadata_host: str = None, + msi_endpoint: str = None, + oidc_request_token: str = None, + oidc_request_url: str = None, + oidc_token: str = None, + oidc_token_file_path: str = None, + resource_group_name: str = None, + sas_token: str = None, + snapshot: bool = None, + subscription_id: str = None, + tenant_id: str = None, + use_azuread_auth: bool = None, + use_microsoft_graph: bool = None, + use_msi: bool = None, + use_oidc: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| container_name | str | (Required) The Name of the Storage Container within the Storage Account. | +| key | str | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storage_account_name | str | (Required) The Name of the Storage Account. | +| access_key | str | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| client_certificate_password | str | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| client_certificate_path | str | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| client_id | str | (Optional) The Client ID of the Service Principal. | +| client_secret | str | (Optional) The Client Secret of the Service Principal. | +| endpoint | str | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | str | (Optional) The Azure Environment which should be used. | +| metadata_host | str | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msi_endpoint | str | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidc_request_token | str | (Optional) The bearer token for the request to the OIDC provider. | +| oidc_request_url | str | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidc_token | str | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidc_token_file_path | str | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resource_group_name | str | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sas_token | str | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscription_id | str | (Optional) The Subscription ID in which the Storage Account exists. | +| tenant_id | str | (Optional) The Tenant ID in which the Subscription exists. | +| use_azuread_auth | bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| use_microsoft_graph | bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| use_msi | bool | (Optional) Should Managed Service Identity authentication be used? | +| use_oidc | bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `container_name`Required + +```python +container_name: str +``` + +- _Type:_ str + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +```python +key: str +``` + +- _Type:_ str + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storage_account_name`Required + +```python +storage_account_name: str +``` + +- _Type:_ str + +(Required) The Name of the Storage Account. + +--- + +##### `access_key`Optional + +```python +access_key: str +``` + +- _Type:_ str + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `client_certificate_password`Optional + +```python +client_certificate_password: str +``` + +- _Type:_ str + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `client_certificate_path`Optional + +```python +client_certificate_path: str +``` + +- _Type:_ str + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `client_id`Optional + +```python +client_id: str +``` + +- _Type:_ str + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `client_secret`Optional + +```python +client_secret: str +``` + +- _Type:_ str + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +```python +environment: str +``` + +- _Type:_ str + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadata_host`Optional + +```python +metadata_host: str +``` + +- _Type:_ str + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msi_endpoint`Optional + +```python +msi_endpoint: str +``` + +- _Type:_ str + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidc_request_token`Optional + +```python +oidc_request_token: str +``` + +- _Type:_ str + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidc_request_url`Optional + +```python +oidc_request_url: str +``` + +- _Type:_ str + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidc_token`Optional + +```python +oidc_token: str +``` + +- _Type:_ str + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidc_token_file_path`Optional + +```python +oidc_token_file_path: str +``` + +- _Type:_ str + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resource_group_name`Optional + +```python +resource_group_name: str +``` + +- _Type:_ str + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sas_token`Optional + +```python +sas_token: str +``` + +- _Type:_ str + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +```python +snapshot: bool +``` + +- _Type:_ bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscription_id`Optional + +```python +subscription_id: str +``` + +- _Type:_ str + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenant_id`Optional + +```python +tenant_id: str +``` + +- _Type:_ str + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `use_azuread_auth`Optional + +```python +use_azuread_auth: bool +``` + +- _Type:_ bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `use_microsoft_graph`Optional + +```python +use_microsoft_graph: bool +``` + +- _Type:_ bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `use_msi`Optional + +```python +use_msi: bool +``` + +- _Type:_ bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `use_oidc`Optional + +```python +use_oidc: bool +``` + +- _Type:_ bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### CloudBackendConfig + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +https://developer.hashicorp.com/terraform/cli/cloud/settings#arguments + +#### Initializer + +```python +import cdktf + +cdktf.CloudBackendConfig( + organization: str, + workspaces: typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces], + hostname: str = None, + token: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| organization | str | The name of the organization containing the workspace(s) the current configuration should use. | +| workspaces | typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces] | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| hostname | str | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| token | str | The token used to authenticate with Terraform Cloud. | + +--- + +##### `organization`Required + +```python +organization: str +``` + +- _Type:_ str + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `workspaces`Required + +```python +workspaces: typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces] +``` + +- _Type:_ typing.Union[NamedCloudWorkspace, TaggedCloudWorkspaces] + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `hostname`Optional + +```python +hostname: str +``` + +- _Type:_ str +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `token`Optional + +```python +token: str +``` + +- _Type:_ str + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +### ConsulBackendConfig + +Stores the state in the Consul KV store at a given path. This backend supports state locking. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/consul + +#### Initializer + +```python +import cdktf + +cdktf.ConsulBackendConfig( + access_token: str, + path: str, + address: str = None, + ca_file: str = None, + cert_file: str = None, + datacenter: str = None, + gzip: bool = None, + http_auth: str = None, + key_file: str = None, + lock: bool = None, + scheme: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| access_token | str | (Required) Access token. | +| path | str | (Required) Path in the Consul KV store. | +| address | str | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| ca_file | str | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| cert_file | str | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | str | (Optional) The datacenter to use. | +| gzip | bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| http_auth | str | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| key_file | str | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | bool | (Optional) false to disable locking. | +| scheme | str | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `access_token`Required + +```python +access_token: str +``` + +- _Type:_ str + +(Required) Access token. + +--- + +##### `path`Required + +```python +path: str +``` + +- _Type:_ str + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +```python +address: str +``` + +- _Type:_ str + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `ca_file`Optional + +```python +ca_file: str +``` + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `cert_file`Optional + +```python +cert_file: str +``` + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +```python +datacenter: str +``` + +- _Type:_ str + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +```python +gzip: bool +``` + +- _Type:_ bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `http_auth`Optional + +```python +http_auth: str +``` + +- _Type:_ str + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `key_file`Optional + +```python +key_file: str +``` + +- _Type:_ str + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +```python +lock: bool +``` + +- _Type:_ bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +```python +scheme: str +``` + +- _Type:_ str + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### CosBackendAssumeRole + +#### Initializer + +```python +import cdktf + +cdktf.CosBackendAssumeRole( + role_arn: str, + session_duration: typing.Union[int, float], + session_name: str, + policy: typing.Any = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ------------------------------------- | ----------------------------------------------------------------------- | +| role_arn | str | (Required) The ARN of the role to assume. | +| session_duration | typing.Union[int, float] | (Required) The duration of the session when making the AssumeRole call. | +| session_name | str | (Required) The session name to use when making the AssumeRole call. | +| policy | typing.Any | (Optional) A more restrictive policy when making the AssumeRole call. | + +--- + +##### `role_arn`Required + +```python +role_arn: str +``` + +- _Type:_ str + +(Required) The ARN of the role to assume. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_ARN. + +--- + +##### `session_duration`Required + +```python +session_duration: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Required) The duration of the session when making the AssumeRole call. + +Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION. + +--- + +##### `session_name`Required + +```python +session_name: str +``` + +- _Type:_ str + +(Required) The session name to use when making the AssumeRole call. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `policy`Optional + +```python +policy: typing.Any +``` + +- _Type:_ typing.Any + +(Optional) A more restrictive policy when making the AssumeRole call. + +Its content must not contains principal elements. +Please refer to {@link https://www.tencentcloud.com/document/product/598/10603 policies syntax logic}. + +--- + +### CosBackendConfig + +Stores the state as an object in a configurable prefix in a given bucket on Tencent Cloud Object Storage (COS). + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the COS bucket to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/cos + +#### Initializer + +```python +import cdktf + +cdktf.CosBackendConfig( + bucket: str, + accelerate: bool = None, + acl: str = None, + assume_role: CosBackendAssumeRole = None, + domain: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + region: str = None, + secret_id: str = None, + secret_key: str = None, + security_token: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| bucket | str | (Required) The name of the COS bucket. | +| accelerate | bool | (Optional) Whether to enable global Acceleration. | +| acl | str | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assume_role | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | str | (Optional) The root domain of the API request. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) The Custom Endpoint for the COS backend. | +| key | str | (Optional) The path for saving the state file in bucket. | +| prefix | str | (Optional) The directory for saving the state file in bucket. | +| region | str | (Optional) The region of the COS bucket. | +| secret_id | str | (Optional) Secret id of Tencent Cloud. | +| secret_key | str | (Optional) Secret key of Tencent Cloud. | +| security_token | str | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +```python +accelerate: bool +``` + +- _Type:_ bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +```python +acl: str +``` + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assume_role`Optional + +```python +assume_role: CosBackendAssumeRole +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +```python +domain: str +``` + +- _Type:_ str + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +```python +encrypt: bool +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +```python +key: str +``` + +- _Type:_ str + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```python +prefix: str +``` + +- _Type:_ str + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +```python +region: str +``` + +- _Type:_ str + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secret_id`Optional + +```python +secret_id: str +``` + +- _Type:_ str + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secret_key`Optional + +```python +secret_key: str +``` + +- _Type:_ str + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `security_token`Optional + +```python +security_token: str +``` + +- _Type:_ str + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataConfig( + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + count: typing.Union[typing.Union[int, float], TerraformCount] = None, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + lifecycle: TerraformResourceLifecycle = None, + provider: TerraformProvider = None, + provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] = None, + input: typing.Mapping[typing.Any] = None, + triggers_replace: typing.Mapping[typing.Any] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | +| input | typing.Mapping[typing.Any] | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggers_replace | typing.Mapping[typing.Any] | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```python +provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] +``` + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +##### `input`Optional + +```python +input: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggers_replace`Optional + +```python +triggers_replace: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +### DataTerraformRemoteStateAzurermConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateAzurermConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + container_name: str, + key: str, + storage_account_name: str, + access_key: str = None, + client_certificate_password: str = None, + client_certificate_path: str = None, + client_id: str = None, + client_secret: str = None, + endpoint: str = None, + environment: str = None, + metadata_host: str = None, + msi_endpoint: str = None, + oidc_request_token: str = None, + oidc_request_url: str = None, + oidc_token: str = None, + oidc_token_file_path: str = None, + resource_group_name: str = None, + sas_token: str = None, + snapshot: bool = None, + subscription_id: str = None, + tenant_id: str = None, + use_azuread_auth: bool = None, + use_microsoft_graph: bool = None, + use_msi: bool = None, + use_oidc: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| container_name | str | (Required) The Name of the Storage Container within the Storage Account. | +| key | str | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storage_account_name | str | (Required) The Name of the Storage Account. | +| access_key | str | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| client_certificate_password | str | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| client_certificate_path | str | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| client_id | str | (Optional) The Client ID of the Service Principal. | +| client_secret | str | (Optional) The Client Secret of the Service Principal. | +| endpoint | str | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | str | (Optional) The Azure Environment which should be used. | +| metadata_host | str | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msi_endpoint | str | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidc_request_token | str | (Optional) The bearer token for the request to the OIDC provider. | +| oidc_request_url | str | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidc_token | str | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidc_token_file_path | str | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resource_group_name | str | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sas_token | str | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | bool | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscription_id | str | (Optional) The Subscription ID in which the Storage Account exists. | +| tenant_id | str | (Optional) The Tenant ID in which the Subscription exists. | +| use_azuread_auth | bool | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| use_microsoft_graph | bool | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| use_msi | bool | (Optional) Should Managed Service Identity authentication be used? | +| use_oidc | bool | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `container_name`Required + +```python +container_name: str +``` + +- _Type:_ str + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +```python +key: str +``` + +- _Type:_ str + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storage_account_name`Required + +```python +storage_account_name: str +``` + +- _Type:_ str + +(Required) The Name of the Storage Account. + +--- + +##### `access_key`Optional + +```python +access_key: str +``` + +- _Type:_ str + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `client_certificate_password`Optional + +```python +client_certificate_password: str +``` + +- _Type:_ str + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `client_certificate_path`Optional + +```python +client_certificate_path: str +``` + +- _Type:_ str + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `client_id`Optional + +```python +client_id: str +``` + +- _Type:_ str + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `client_secret`Optional + +```python +client_secret: str +``` + +- _Type:_ str + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +```python +environment: str +``` + +- _Type:_ str + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadata_host`Optional + +```python +metadata_host: str +``` + +- _Type:_ str + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msi_endpoint`Optional + +```python +msi_endpoint: str +``` + +- _Type:_ str + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidc_request_token`Optional + +```python +oidc_request_token: str +``` + +- _Type:_ str + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidc_request_url`Optional + +```python +oidc_request_url: str +``` + +- _Type:_ str + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidc_token`Optional + +```python +oidc_token: str +``` + +- _Type:_ str + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidc_token_file_path`Optional + +```python +oidc_token_file_path: str +``` + +- _Type:_ str + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resource_group_name`Optional + +```python +resource_group_name: str +``` + +- _Type:_ str + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sas_token`Optional + +```python +sas_token: str +``` + +- _Type:_ str + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +```python +snapshot: bool +``` + +- _Type:_ bool + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscription_id`Optional + +```python +subscription_id: str +``` + +- _Type:_ str + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenant_id`Optional + +```python +tenant_id: str +``` + +- _Type:_ str + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `use_azuread_auth`Optional + +```python +use_azuread_auth: bool +``` + +- _Type:_ bool + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `use_microsoft_graph`Optional + +```python +use_microsoft_graph: bool +``` + +- _Type:_ bool + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `use_msi`Optional + +```python +use_msi: bool +``` + +- _Type:_ bool + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `use_oidc`Optional + +```python +use_oidc: bool +``` + +- _Type:_ bool + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### DataTerraformRemoteStateConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateConsulConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateConsulConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + access_token: str, + path: str, + address: str = None, + ca_file: str = None, + cert_file: str = None, + datacenter: str = None, + gzip: bool = None, + http_auth: str = None, + key_file: str = None, + lock: bool = None, + scheme: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| access_token | str | (Required) Access token. | +| path | str | (Required) Path in the Consul KV store. | +| address | str | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| ca_file | str | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| cert_file | str | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | str | (Optional) The datacenter to use. | +| gzip | bool | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| http_auth | str | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| key_file | str | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | bool | (Optional) false to disable locking. | +| scheme | str | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `access_token`Required + +```python +access_token: str +``` + +- _Type:_ str + +(Required) Access token. + +--- + +##### `path`Required + +```python +path: str +``` + +- _Type:_ str + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +```python +address: str +``` + +- _Type:_ str + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `ca_file`Optional + +```python +ca_file: str +``` + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `cert_file`Optional + +```python +cert_file: str +``` + +- _Type:_ str + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +```python +datacenter: str +``` + +- _Type:_ str + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +```python +gzip: bool +``` + +- _Type:_ bool + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `http_auth`Optional + +```python +http_auth: str +``` + +- _Type:_ str + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `key_file`Optional + +```python +key_file: str +``` + +- _Type:_ str + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +```python +lock: bool +``` + +- _Type:_ bool + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +```python +scheme: str +``` + +- _Type:_ str + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### DataTerraformRemoteStateCosConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateCosConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + accelerate: bool = None, + acl: str = None, + assume_role: CosBackendAssumeRole = None, + domain: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + region: str = None, + secret_id: str = None, + secret_key: str = None, + security_token: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | (Required) The name of the COS bucket. | +| accelerate | bool | (Optional) Whether to enable global Acceleration. | +| acl | str | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assume_role | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | str | (Optional) The root domain of the API request. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) The Custom Endpoint for the COS backend. | +| key | str | (Optional) The path for saving the state file in bucket. | +| prefix | str | (Optional) The directory for saving the state file in bucket. | +| region | str | (Optional) The region of the COS bucket. | +| secret_id | str | (Optional) Secret id of Tencent Cloud. | +| secret_key | str | (Optional) Secret key of Tencent Cloud. | +| security_token | str | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +```python +accelerate: bool +``` + +- _Type:_ bool + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +```python +acl: str +``` + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assume_role`Optional + +```python +assume_role: CosBackendAssumeRole +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +```python +domain: str +``` + +- _Type:_ str + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +```python +encrypt: bool +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +```python +key: str +``` + +- _Type:_ str + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```python +prefix: str +``` + +- _Type:_ str + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +```python +region: str +``` + +- _Type:_ str + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secret_id`Optional + +```python +secret_id: str +``` + +- _Type:_ str + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secret_key`Optional + +```python +secret_key: str +``` + +- _Type:_ str + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `security_token`Optional + +```python +security_token: str +``` + +- _Type:_ str + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataTerraformRemoteStateGcsConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateGcsConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + access_token: str = None, + credentials: str = None, + encryption_key: str = None, + impersonate_service_account: str = None, + impersonate_service_account_delegates: typing.List[str] = None, + kms_encryption_key: str = None, + prefix: str = None, + storeage_custom_endpoint: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | (Required) The name of the GCS bucket. | +| access_token | str | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | str | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryption_key | str | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonate_service_account | str | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonate_service_account_delegates | typing.List[str] | (Optional) The delegation chain for an impersonating a service account. | +| kms_encryption_key | str | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | str | (Optional) GCS prefix inside the bucket. | +| storeage_custom_endpoint | str | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `access_token`Optional + +```python +access_token: str +``` + +- _Type:_ str + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +```python +credentials: str +``` + +- _Type:_ str + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryption_key`Optional + +```python +encryption_key: str +``` + +- _Type:_ str + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonate_service_account`Optional + +```python +impersonate_service_account: str +``` + +- _Type:_ str + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonate_service_account_delegates`Optional + +```python +impersonate_service_account_delegates: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kms_encryption_key`Optional + +```python +kms_encryption_key: str +``` + +- _Type:_ str + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +```python +prefix: str +``` + +- _Type:_ str + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeage_custom_endpoint`Optional + +```python +storeage_custom_endpoint: str +``` + +- _Type:_ str + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### DataTerraformRemoteStateHttpConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateHttpConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + address: str, + client_ca_certificate_pem: str = None, + client_certificate_pem: str = None, + client_private_key_pem: str = None, + lock_address: str = None, + lock_method: str = None, + password: str = None, + retry_max: typing.Union[int, float] = None, + retry_wait_max: typing.Union[int, float] = None, + retry_wait_min: typing.Union[int, float] = None, + skip_cert_verification: bool = None, + unlock_address: str = None, + unlock_method: str = None, + update_method: str = None, + username: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| address | str | (Required) The address of the REST endpoint. | +| client_ca_certificate_pem | str | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| client_certificate_pem | str | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| client_private_key_pem | str | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lock_address | str | (Optional) The address of the lock REST endpoint. | +| lock_method | str | (Optional) The HTTP method to use when locking. | +| password | str | (Optional) The password for HTTP basic authentication. | +| retry_max | typing.Union[int, float] | (Optional) The number of HTTP request retries. | +| retry_wait_max | typing.Union[int, float] | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retry_wait_min | typing.Union[int, float] | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skip_cert_verification | bool | (Optional) Whether to skip TLS verification. | +| unlock_address | str | (Optional) The address of the unlock REST endpoint. | +| unlock_method | str | (Optional) The HTTP method to use when unlocking. | +| update_method | str | (Optional) HTTP method to use when updating state. | +| username | str | (Optional) The username for HTTP basic authentication. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `address`Required + +```python +address: str +``` + +- _Type:_ str + +(Required) The address of the REST endpoint. + +--- + +##### `client_ca_certificate_pem`Optional + +```python +client_ca_certificate_pem: str +``` + +- _Type:_ str + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `client_certificate_pem`Optional + +```python +client_certificate_pem: str +``` + +- _Type:_ str + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `client_private_key_pem`Optional + +```python +client_private_key_pem: str +``` + +- _Type:_ str + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lock_address`Optional + +```python +lock_address: str +``` + +- _Type:_ str + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lock_method`Optional + +```python +lock_method: str +``` + +- _Type:_ str + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +```python +password: str +``` + +- _Type:_ str + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retry_max`Optional + +```python +retry_max: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retry_wait_max`Optional + +```python +retry_wait_max: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retry_wait_min`Optional + +```python +retry_wait_min: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skip_cert_verification`Optional + +```python +skip_cert_verification: bool +``` + +- _Type:_ bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlock_address`Optional + +```python +unlock_address: str +``` + +- _Type:_ str + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlock_method`Optional + +```python +unlock_method: str +``` + +- _Type:_ str + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `update_method`Optional + +```python +update_method: str +``` + +- _Type:_ str + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +```python +username: str +``` + +- _Type:_ str + +(Optional) The username for HTTP basic authentication. + +--- + +### DataTerraformRemoteStateLocalConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateLocalConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + path: str = None, + workspace_dir: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| path | str | Path where the state file is stored. | +| workspace_dir | str | (Optional) The path to non-default workspaces. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `path`Optional + +```python +path: str +``` + +- _Type:_ str +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspace_dir`Optional + +```python +workspace_dir: str +``` + +- _Type:_ str + +(Optional) The path to non-default workspaces. + +--- + +### DataTerraformRemoteStateOssConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateOssConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + access_key: str = None, + acl: str = None, + assume_role: OssAssumeRole = None, + assume_role_policy: str = None, + assume_role_role_arn: str = None, + assume_role_session_expiration: typing.Union[int, float] = None, + assume_role_session_name: str = None, + ecs_role_name: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + profile: str = None, + region: str = None, + secret_key: str = None, + security_token: str = None, + shared_credentials_file: str = None, + sts_endpoint: str = None, + tablestore_endpoint: str = None, + tablestore_table: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | (Required) The name of the OSS bucket. | +| access_key | str | (Optional) Alibaba Cloud access key. | +| acl | str | (Optional) Object ACL to be applied to the state file. | +| assume_role | OssAssumeRole | _No description._ | +| assume_role_policy | str | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assume_role_role_arn | str | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assume_role_session_expiration | typing.Union[int, float] | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assume_role_session_name | str | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecs_role_name | str | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) A custom endpoint for the OSS API. | +| key | str | (Optional) The name of the state file. | +| prefix | str | (Optional) The path directory of the state file will be stored. | +| profile | str | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | str | (Optional) The region of the OSS bucket. | +| secret_key | str | (Optional) Alibaba Cloud secret access key. | +| security_token | str | (Optional) STS access token. | +| shared_credentials_file | str | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| sts_endpoint | str | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestore_endpoint | str | (Optional) A custom endpoint for the TableStore API. | +| tablestore_table | str | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +(Required) The name of the OSS bucket. + +--- + +##### `access_key`Optional + +```python +access_key: str +``` + +- _Type:_ str + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +```python +acl: str +``` + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assume_role`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```python +assume_role: OssAssumeRole +``` + +- _Type:_ OssAssumeRole + +--- + +##### `assume_role_policy`Optional + +```python +assume_role_policy: str +``` + +- _Type:_ str + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assume_role_role_arn`Optional + +```python +assume_role_role_arn: str +``` + +- _Type:_ str + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assume_role_session_expiration`Optional + +```python +assume_role_session_expiration: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assume_role_session_name`Optional + +```python +assume_role_session_name: str +``` + +- _Type:_ str + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecs_role_name`Optional + +```python +ecs_role_name: str +``` + +- _Type:_ str + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +```python +encrypt: bool +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +```python +key: str +``` + +- _Type:_ str + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```python +prefix: str +``` + +- _Type:_ str + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +```python +profile: str +``` + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +```python +region: str +``` + +- _Type:_ str + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secret_key`Optional + +```python +secret_key: str +``` + +- _Type:_ str + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `security_token`Optional + +```python +security_token: str +``` + +- _Type:_ str + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `shared_credentials_file`Optional + +```python +shared_credentials_file: str +``` + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `sts_endpoint`Optional + +```python +sts_endpoint: str +``` + +- _Type:_ str + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestore_endpoint`Optional + +```python +tablestore_endpoint: str +``` + +- _Type:_ str + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestore_table`Optional + +```python +tablestore_table: str +``` + +- _Type:_ str + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### DataTerraformRemoteStatePgConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStatePgConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + conn_str: str, + schema_name: str = None, + skip_index_creation: bool = None, + skip_schema_creation: bool = None, + skip_table_creation: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| conn_str | str | Postgres connection string; | +| schema_name | str | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skip_index_creation | bool | If set to true, the Postgres index must already exist. | +| skip_schema_creation | bool | If set to true, the Postgres schema must already exist. | +| skip_table_creation | bool | If set to true, the Postgres table must already exist. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `conn_str`Required + +```python +conn_str: str +``` + +- _Type:_ str + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schema_name`Optional + +```python +schema_name: str +``` + +- _Type:_ str + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skip_index_creation`Optional + +```python +skip_index_creation: bool +``` + +- _Type:_ bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_schema_creation`Optional + +```python +skip_schema_creation: bool +``` + +- _Type:_ bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_table_creation`Optional + +```python +skip_table_creation: bool +``` + +- _Type:_ bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### DataTerraformRemoteStateRemoteConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateRemoteConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + organization: str, + workspaces: IRemoteWorkspace, + hostname: str = None, + token: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| organization | str | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | str | _No description._ | +| token | str | _No description._ | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `organization`Required + +```python +organization: str +``` + +- _Type:_ str + +--- + +##### `workspaces`Required + +```python +workspaces: IRemoteWorkspace +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +```python +hostname: str +``` + +- _Type:_ str + +--- + +##### `token`Optional + +```python +token: str +``` + +- _Type:_ str + +--- + +### DataTerraformRemoteStateS3Config + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateS3Config( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + bucket: str, + key: str, + access_key: str = None, + acl: str = None, + allowed_account_ids: typing.List[str] = None, + assume_role: S3BackendAssumeRoleConfig = None, + assume_role_policy: str = None, + assume_role_policy_arns: typing.List[str] = None, + assume_role_tags: typing.Mapping[str] = None, + assume_role_transitive_tag_keys: typing.List[str] = None, + assume_role_with_web_identity: S3BackendAssumeRoleWithWebIdentityConfig = None, + custom_ca_bundle: str = None, + dynamodb_endpoint: str = None, + dynamodb_table: str = None, + ec2_metadata_service_endpoint: str = None, + ec2_metadata_service_endpoint_mode: str = None, + encrypt: bool = None, + endpoint: str = None, + endpoints: S3BackendEndpointConfig = None, + external_id: str = None, + forbidden_account_ids: typing.List[str] = None, + force_path_style: bool = None, + http_proxy: str = None, + https_proxy: str = None, + iam_endpoint: str = None, + insecure: bool = None, + kms_key_id: str = None, + max_retries: typing.Union[int, float] = None, + no_proxy: str = None, + profile: str = None, + region: str = None, + retry_mode: str = None, + role_arn: str = None, + secret_key: str = None, + session_name: str = None, + shared_config_files: typing.List[str] = None, + shared_credentials_file: str = None, + shared_credentials_files: typing.List[str] = None, + skip_credentials_validation: bool = None, + skip_metadata_api_check: bool = None, + skip_region_validation: bool = None, + skip_requesting_account_id: bool = None, + skip_s3_checksum: bool = None, + sse_customer_key: str = None, + sts_endpoint: str = None, + sts_region: str = None, + token: str = None, + use_legacy_workflow: bool = None, + use_path_style: bool = None, + workspace_key_prefix: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| bucket | str | Name of the S3 Bucket. | +| key | str | Path to the state file inside the S3 Bucket. | +| access_key | str | (Optional) AWS access key. | +| acl | str | (Optional) Canned ACL to be applied to the state file. | +| allowed_account_ids | typing.List[str] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assume_role | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assume_role_policy | str | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assume_role_policy_arns | typing.List[str] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assume_role_tags | typing.Mapping[str] | (Optional) Map of assume role session tags. | +| assume_role_transitive_tag_keys | typing.List[str] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assume_role_with_web_identity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| custom_ca_bundle | str | (Optional) File containing custom root and intermediate certificates. | +| dynamodb_endpoint | str | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodb_table | str | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2_metadata_service_endpoint | str | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2_metadata_service_endpoint_mode | str | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | bool | (Optional) Enable server side encryption of the state file. | +| endpoint | str | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| external_id | str | (Optional) External identifier to use when assuming the role. | +| forbidden_account_ids | typing.List[str] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| force_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| http_proxy | str | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| https_proxy | str | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iam_endpoint | str | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kms_key_id | str | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| max_retries | typing.Union[int, float] | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| no_proxy | str | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | str | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | str | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retry_mode | str | (Optional) Specifies how retries are attempted. | +| role_arn | str | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secret_key | str | (Optional) AWS secret access key. | +| session_name | str | (Optional) Session name to use when assuming the role. | +| shared_config_files | typing.List[str] | (Optional) List of paths to AWS shared configuration files. | +| shared_credentials_file | str | (Optional) Path to the AWS shared credentials file. | +| shared_credentials_files | typing.List[str] | (Optional) List of paths to AWS shared credentials files. | +| skip_credentials_validation | bool | (Optional) Skip credentials validation via the STS API. | +| skip_metadata_api_check | bool | (Optional) Skip usage of EC2 Metadata API. | +| skip_region_validation | bool | (Optional) Skip validation of provided region name. | +| skip_requesting_account_id | bool | (Optional) Whether to skip requesting the account ID. | +| skip_s3_checksum | bool | (Optional) Do not include checksum when uploading S3 Objects. | +| sse_customer_key | str | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| sts_endpoint | str | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| sts_region | str | (Optional) AWS region for STS. | +| token | str | (Optional) Multi-Factor Authentication (MFA) token. | +| use_legacy_workflow | bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| use_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspace_key_prefix | str | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `defaults`Optional + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `workspace`Optional + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +Name of the S3 Bucket. + +--- + +##### `key`Required + +```python +key: str +``` + +- _Type:_ str + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `access_key`Optional + +```python +access_key: str +``` + +- _Type:_ str + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +```python +acl: str +``` + +- _Type:_ str + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowed_account_ids`Optional + +```python +allowed_account_ids: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assume_role`Optional + +```python +assume_role: S3BackendAssumeRoleConfig +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assume_role_policy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```python +assume_role_policy: str +``` + +- _Type:_ str + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_policy_arns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```python +assume_role_policy_arns: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_tags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```python +assume_role_tags: typing.Mapping[str] +``` + +- _Type:_ typing.Mapping[str] + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assume_role_transitive_tag_keys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```python +assume_role_transitive_tag_keys: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assume_role_with_web_identity`Optional + +```python +assume_role_with_web_identity: S3BackendAssumeRoleWithWebIdentityConfig +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `custom_ca_bundle`Optional + +```python +custom_ca_bundle: str +``` + +- _Type:_ str + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodb_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```python +dynamodb_endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodb_table`Optional + +```python +dynamodb_table: str +``` + +- _Type:_ str + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2_metadata_service_endpoint`Optional + +```python +ec2_metadata_service_endpoint: str +``` + +- _Type:_ str + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2_metadata_service_endpoint_mode`Optional + +```python +ec2_metadata_service_endpoint_mode: str +``` + +- _Type:_ str + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +```python +encrypt: bool +``` + +- _Type:_ bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +```python +endpoints: S3BackendEndpointConfig +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`external_id`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```python +external_id: str +``` + +- _Type:_ str + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbidden_account_ids`Optional + +```python +forbidden_account_ids: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`force_path_style`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```python +force_path_style: bool +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `http_proxy`Optional + +```python +http_proxy: str +``` + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `https_proxy`Optional + +```python +https_proxy: str +``` + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iam_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```python +iam_endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +```python +insecure: bool +``` + +- _Type:_ bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kms_key_id`Optional + +```python +kms_key_id: str +``` + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `max_retries`Optional + +```python +max_retries: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `no_proxy`Optional + +```python +no_proxy: str +``` + +- _Type:_ str + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +```python +profile: str +``` + +- _Type:_ str + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +```python +region: str +``` + +- _Type:_ str + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retry_mode`Optional + +```python +retry_mode: str +``` + +- _Type:_ str + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`role_arn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```python +role_arn: str +``` + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secret_key`Optional + +```python +secret_key: str +``` + +- _Type:_ str + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`session_name`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```python +session_name: str +``` + +- _Type:_ str + +(Optional) Session name to use when assuming the role. + +--- + +##### `shared_config_files`Optional + +```python +shared_config_files: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `shared_credentials_file`Optional + +```python +shared_credentials_file: str +``` + +- _Type:_ str + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `shared_credentials_files`Optional + +```python +shared_credentials_files: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skip_credentials_validation`Optional + +```python +skip_credentials_validation: bool +``` + +- _Type:_ bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skip_metadata_api_check`Optional + +```python +skip_metadata_api_check: bool +``` + +- _Type:_ bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skip_region_validation`Optional + +```python +skip_region_validation: bool +``` + +- _Type:_ bool + +(Optional) Skip validation of provided region name. + +--- + +##### `skip_requesting_account_id`Optional + +```python +skip_requesting_account_id: bool +``` + +- _Type:_ bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skip_s3_checksum`Optional + +```python +skip_s3_checksum: bool +``` + +- _Type:_ bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sse_customer_key`Optional + +```python +sse_customer_key: str +``` + +- _Type:_ str + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`sts_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```python +sts_endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `sts_region`Optional + +```python +sts_region: str +``` + +- _Type:_ str + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +```python +token: str +``` + +- _Type:_ str + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `use_legacy_workflow`Optional + +```python +use_legacy_workflow: bool +``` + +- _Type:_ bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `use_path_style`Optional + +```python +use_path_style: bool +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspace_key_prefix`Optional + +```python +workspace_key_prefix: str +``` + +- _Type:_ str + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### DataTerraformRemoteStateSwiftConfig + +#### Initializer + +```python +import cdktf + +cdktf.DataTerraformRemoteStateSwiftConfig( + defaults: typing.Mapping[typing.Any] = None, + workspace: str = None, + container: str, + application_credential_id: str = None, + application_credential_name: str = None, + application_credential_secret: str = None, + archive_container: str = None, + auth_url: str = None, + cacert_file: str = None, + cert: str = None, + cloud: str = None, + default_domain: str = None, + domain_id: str = None, + domain_name: str = None, + expire_after: str = None, + insecure: bool = None, + key: str = None, + password: str = None, + project_domain_id: str = None, + project_domain_name: str = None, + region_name: str = None, + state_name: str = None, + tenant_id: str = None, + tenant_name: str = None, + token: str = None, + user_domain_id: str = None, + user_domain_name: str = None, + user_id: str = None, + user_name: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------- | +| defaults | typing.Mapping[typing.Any] | _No description._ | +| workspace | str | _No description._ | +| container | str | _No description._ | +| application_credential_id | str | _No description._ | +| application_credential_name | str | _No description._ | +| application_credential_secret | str | _No description._ | +| archive_container | str | _No description._ | +| auth_url | str | _No description._ | +| cacert_file | str | _No description._ | +| cert | str | _No description._ | +| cloud | str | _No description._ | +| default_domain | str | _No description._ | +| domain_id | str | _No description._ | +| domain_name | str | _No description._ | +| expire_after | str | _No description._ | +| insecure | bool | _No description._ | +| key | str | _No description._ | +| password | str | _No description._ | +| project_domain_id | str | _No description._ | +| project_domain_name | str | _No description._ | +| region_name | str | _No description._ | +| state_name | str | _No description._ | +| tenant_id | str | _No description._ | +| tenant_name | str | _No description._ | +| token | str | _No description._ | +| user_domain_id | str | _No description._ | +| user_domain_name | str | _No description._ | +| user_id | str | _No description._ | +| user_name | str | _No description._ | + +--- + +##### ~~`defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +defaults: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### ~~`workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +workspace: str +``` + +- _Type:_ str + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +container: str +``` + +- _Type:_ str + +--- + +##### ~~`application_credential_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +application_credential_id: str +``` + +- _Type:_ str + +--- + +##### ~~`application_credential_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +application_credential_name: str +``` + +- _Type:_ str + +--- + +##### ~~`application_credential_secret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +application_credential_secret: str +``` + +- _Type:_ str + +--- + +##### ~~`archive_container`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +archive_container: str +``` + +- _Type:_ str + +--- + +##### ~~`auth_url`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +auth_url: str +``` + +- _Type:_ str + +--- + +##### ~~`cacert_file`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cacert_file: str +``` + +- _Type:_ str + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cert: str +``` + +- _Type:_ str + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cloud: str +``` + +- _Type:_ str + +--- + +##### ~~`default_domain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +default_domain: str +``` + +- _Type:_ str + +--- + +##### ~~`domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +domain_id: str +``` + +- _Type:_ str + +--- + +##### ~~`domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +domain_name: str +``` + +- _Type:_ str + +--- + +##### ~~`expire_after`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +expire_after: str +``` + +- _Type:_ str + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +insecure: bool +``` + +- _Type:_ bool + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +key: str +``` + +- _Type:_ str + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +password: str +``` + +- _Type:_ str + +--- + +##### ~~`project_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +project_domain_id: str +``` + +- _Type:_ str + +--- + +##### ~~`project_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +project_domain_name: str +``` + +- _Type:_ str + +--- + +##### ~~`region_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +region_name: str +``` + +- _Type:_ str + +--- + +##### ~~`state_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +state_name: str +``` + +- _Type:_ str + +--- + +##### ~~`tenant_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +tenant_id: str +``` + +- _Type:_ str + +--- + +##### ~~`tenant_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +tenant_name: str +``` + +- _Type:_ str + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +token: str +``` + +- _Type:_ str + +--- + +##### ~~`user_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_domain_id: str +``` + +- _Type:_ str + +--- + +##### ~~`user_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_domain_name: str +``` + +- _Type:_ str + +--- + +##### ~~`user_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_id: str +``` + +- _Type:_ str + +--- + +##### ~~`user_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_name: str +``` + +- _Type:_ str + +--- + +### EncodingOptions + +Properties to string encodings. + +#### Initializer + +```python +import cdktf + +cdktf.EncodingOptions( + display_hint: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ---------------- | ---------------------------------------------------- | +| display_hint | str | A hint for the Token's purpose when stringifying it. | + +--- + +##### `display_hint`Optional + +```python +display_hint: str +``` + +- _Type:_ str +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +### FileProvisioner + +The file provisioner copies files or directories from the machine running Terraform to the newly created resource. + +The file provisioner supports both ssh and winrm type connections. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/file file} + +#### Initializer + +```python +import cdktf + +cdktf.FileProvisioner( + destination: str, + type: str, + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + content: str = None, + source: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| destination | str | The source file or directory. | +| type | str | _No description._ | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| content | str | The destination path to write to on the remote system. | +| source | str | The direct content to copy on the destination. | + +--- + +##### `destination`Required + +```python +destination: str +``` + +- _Type:_ str + +The source file or directory. + +Specify it either relative to the current working directory or as an absolute path. +This argument cannot be combined with content. + +--- + +##### `type`Required + +```python +type: str +``` + +- _Type:_ str + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +--- + +##### `content`Optional + +```python +content: str +``` + +- _Type:_ str + +The destination path to write to on the remote system. + +See Destination Paths below for more information. + +--- + +##### `source`Optional + +```python +source: str +``` + +- _Type:_ str + +The direct content to copy on the destination. + +If destination is a file, the content will be written on that file. +In case of a directory, a file named tf-file-content is created inside that directory. +We recommend using a file as the destination when using content. +This argument cannot be combined with source. + +--- + +### GcsBackendConfig + +Stores the state as an object in a configurable prefix in a pre-existing bucket on Google Cloud Storage (GCS). + +The bucket must exist prior to configuring the backend. + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the GCS bucket +to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/gcs + +#### Initializer + +```python +import cdktf + +cdktf.GcsBackendConfig( + bucket: str, + access_token: str = None, + credentials: str = None, + encryption_key: str = None, + impersonate_service_account: str = None, + impersonate_service_account_delegates: typing.List[str] = None, + kms_encryption_key: str = None, + prefix: str = None, + storeage_custom_endpoint: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | str | (Required) The name of the GCS bucket. | +| access_token | str | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | str | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryption_key | str | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonate_service_account | str | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonate_service_account_delegates | typing.List[str] | (Optional) The delegation chain for an impersonating a service account. | +| kms_encryption_key | str | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | str | (Optional) GCS prefix inside the bucket. | +| storeage_custom_endpoint | str | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `access_token`Optional + +```python +access_token: str +``` + +- _Type:_ str + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +```python +credentials: str +``` + +- _Type:_ str + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryption_key`Optional + +```python +encryption_key: str +``` + +- _Type:_ str + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonate_service_account`Optional + +```python +impersonate_service_account: str +``` + +- _Type:_ str + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonate_service_account_delegates`Optional + +```python +impersonate_service_account_delegates: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kms_encryption_key`Optional + +```python +kms_encryption_key: str +``` + +- _Type:_ str + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +```python +prefix: str +``` + +- _Type:_ str + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeage_custom_endpoint`Optional + +```python +storeage_custom_endpoint: str +``` + +- _Type:_ str + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### HttpBackendConfig + +Stores the state using a simple REST client. + +State will be fetched via GET, updated via POST, and purged with DELETE. +The method used for updating is configurable. + +This backend optionally supports state locking. +When locking support is enabled it will use LOCK and UNLOCK requests providing the lock info in the body. +The endpoint should return a 423: Locked or 409: Conflict with the holding lock info when +it's already taken, 200: OK for success. Any other status will be considered an error. +The ID of the holding lock info will be added as a query parameter to state updates requests. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/http + +#### Initializer + +```python +import cdktf + +cdktf.HttpBackendConfig( + address: str, + client_ca_certificate_pem: str = None, + client_certificate_pem: str = None, + client_private_key_pem: str = None, + lock_address: str = None, + lock_method: str = None, + password: str = None, + retry_max: typing.Union[int, float] = None, + retry_wait_max: typing.Union[int, float] = None, + retry_wait_min: typing.Union[int, float] = None, + skip_cert_verification: bool = None, + unlock_address: str = None, + unlock_method: str = None, + update_method: str = None, + username: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| address | str | (Required) The address of the REST endpoint. | +| client_ca_certificate_pem | str | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| client_certificate_pem | str | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| client_private_key_pem | str | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lock_address | str | (Optional) The address of the lock REST endpoint. | +| lock_method | str | (Optional) The HTTP method to use when locking. | +| password | str | (Optional) The password for HTTP basic authentication. | +| retry_max | typing.Union[int, float] | (Optional) The number of HTTP request retries. | +| retry_wait_max | typing.Union[int, float] | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retry_wait_min | typing.Union[int, float] | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skip_cert_verification | bool | (Optional) Whether to skip TLS verification. | +| unlock_address | str | (Optional) The address of the unlock REST endpoint. | +| unlock_method | str | (Optional) The HTTP method to use when unlocking. | +| update_method | str | (Optional) HTTP method to use when updating state. | +| username | str | (Optional) The username for HTTP basic authentication. | + +--- + +##### `address`Required + +```python +address: str +``` + +- _Type:_ str + +(Required) The address of the REST endpoint. + +--- + +##### `client_ca_certificate_pem`Optional + +```python +client_ca_certificate_pem: str +``` + +- _Type:_ str + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `client_certificate_pem`Optional + +```python +client_certificate_pem: str +``` + +- _Type:_ str + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `client_private_key_pem`Optional + +```python +client_private_key_pem: str +``` + +- _Type:_ str + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lock_address`Optional + +```python +lock_address: str +``` + +- _Type:_ str + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lock_method`Optional + +```python +lock_method: str +``` + +- _Type:_ str + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +```python +password: str +``` + +- _Type:_ str + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retry_max`Optional + +```python +retry_max: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retry_wait_max`Optional + +```python +retry_wait_max: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retry_wait_min`Optional + +```python +retry_wait_min: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skip_cert_verification`Optional + +```python +skip_cert_verification: bool +``` + +- _Type:_ bool + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlock_address`Optional + +```python +unlock_address: str +``` + +- _Type:_ str + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlock_method`Optional + +```python +unlock_method: str +``` + +- _Type:_ str + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `update_method`Optional + +```python +update_method: str +``` + +- _Type:_ str + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +```python +username: str +``` + +- _Type:_ str + +(Optional) The username for HTTP basic authentication. + +--- + +### LazyAnyValueOptions + +Options for creating lazy untyped tokens. + +#### Initializer + +```python +import cdktf + +cdktf.LazyAnyValueOptions( + display_hint: str = None, + omit_empty_array: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------ | +| display_hint | str | Use the given name as a display hint. | +| omit_empty_array | bool | If the produced value is an array and it is empty, return 'undefined' instead. | + +--- + +##### `display_hint`Optional + +```python +display_hint: str +``` + +- _Type:_ str +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `omit_empty_array`Optional + +```python +omit_empty_array: bool +``` + +- _Type:_ bool +- _Default:_ false + +If the produced value is an array and it is empty, return 'undefined' instead. + +--- + +### LazyListValueOptions + +Options for creating a lazy list token. + +#### Initializer + +```python +import cdktf + +cdktf.LazyListValueOptions( + display_hint: str = None, + omit_empty: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------- | ---------------------------------------------------------- | +| display_hint | str | Use the given name as a display hint. | +| omit_empty | bool | If the produced list is empty, return 'undefined' instead. | + +--- + +##### `display_hint`Optional + +```python +display_hint: str +``` + +- _Type:_ str +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `omit_empty`Optional + +```python +omit_empty: bool +``` + +- _Type:_ bool +- _Default:_ false + +If the produced list is empty, return 'undefined' instead. + +--- + +### LazyStringValueOptions + +Options for creating a lazy string token. + +#### Initializer + +```python +import cdktf + +cdktf.LazyStringValueOptions( + display_hint: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ---------------- | ------------------------------------- | +| display_hint | str | Use the given name as a display hint. | + +--- + +##### `display_hint`Optional + +```python +display_hint: str +``` + +- _Type:_ str +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +### LocalBackendConfig + +The local backend stores state on the local filesystem, locks that state using system APIs, and performs operations locally. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/local + +#### Initializer + +```python +import cdktf + +cdktf.LocalBackendConfig( + path: str = None, + workspace_dir: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ---------------- | ---------------------------------------------- | +| path | str | Path where the state file is stored. | +| workspace_dir | str | (Optional) The path to non-default workspaces. | + +--- + +##### `path`Optional + +```python +path: str +``` + +- _Type:_ str +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspace_dir`Optional + +```python +workspace_dir: str +``` + +- _Type:_ str + +(Optional) The path to non-default workspaces. + +--- + +### LocalExecProvisioner + +The local-exec provisioner invokes a local executable after a resource is created. + +This invokes a process on the machine running Terraform, not on the resource. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec local-exec} + +#### Initializer + +```python +import cdktf + +cdktf.LocalExecProvisioner( + command: str, + type: str, + environment: typing.Mapping[str] = None, + interpreter: typing.List[str] = None, + when: str = None, + working_dir: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | -------------------------------- | --------------------------------------------------------------------------------- | +| command | str | This is the command to execute. | +| type | str | _No description._ | +| environment | typing.Mapping[str] | A record of key value pairs representing the environment of the executed command. | +| interpreter | typing.List[str] | If provided, this is a list of interpreter arguments used to execute the command. | +| when | str | If provided, specifies when Terraform will execute the command. | +| working_dir | str | If provided, specifies the working directory where command will be executed. | + +--- + +##### `command`Required + +```python +command: str +``` + +- _Type:_ str + +This is the command to execute. + +It can be provided as a relative path to the current working directory or as an absolute path. +It is evaluated in a shell, and can use environment variables or Terraform variables. + +--- + +##### `type`Required + +```python +type: str +``` + +- _Type:_ str + +--- + +##### `environment`Optional + +```python +environment: typing.Mapping[str] +``` + +- _Type:_ typing.Mapping[str] + +A record of key value pairs representing the environment of the executed command. + +It inherits the current process environment. + +--- + +##### `interpreter`Optional + +```python +interpreter: typing.List[str] +``` + +- _Type:_ typing.List[str] + +If provided, this is a list of interpreter arguments used to execute the command. + +The first argument is the interpreter itself. +It can be provided as a relative path to the current working directory or as an absolute path +The remaining arguments are appended prior to the command. +This allows building command lines of the form "/bin/bash", "-c", "echo foo". +If interpreter is unspecified, sensible defaults will be chosen based on the system OS. + +--- + +##### `when`Optional + +```python +when: str +``` + +- _Type:_ str + +If provided, specifies when Terraform will execute the command. + +For example, when = destroy specifies that the provisioner will run when the associated resource is destroyed + +--- + +##### `working_dir`Optional + +```python +working_dir: str +``` + +- _Type:_ str + +If provided, specifies the working directory where command will be executed. + +It can be provided as a relative path to the current working directory or as an absolute path. +The directory must exist. + +--- + +### OssAssumeRole + +#### Initializer + +```python +import cdktf + +cdktf.OssAssumeRole( + role_arn: str, + policy: str = None, + session_expiration: typing.Union[int, float] = None, + session_name: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ------------------------------------- | ----------------- | +| role_arn | str | _No description._ | +| policy | str | _No description._ | +| session_expiration | typing.Union[int, float] | _No description._ | +| session_name | str | _No description._ | + +--- + +##### `role_arn`Required + +```python +role_arn: str +``` + +- _Type:_ str + +--- + +##### `policy`Optional + +```python +policy: str +``` + +- _Type:_ str + +--- + +##### `session_expiration`Optional + +```python +session_expiration: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +--- + +##### `session_name`Optional + +```python +session_name: str +``` + +- _Type:_ str + +--- + +### OssBackendConfig + +#### Initializer + +```python +import cdktf + +cdktf.OssBackendConfig( + bucket: str, + access_key: str = None, + acl: str = None, + assume_role: OssAssumeRole = None, + assume_role_policy: str = None, + assume_role_role_arn: str = None, + assume_role_session_expiration: typing.Union[int, float] = None, + assume_role_session_name: str = None, + ecs_role_name: str = None, + encrypt: bool = None, + endpoint: str = None, + key: str = None, + prefix: str = None, + profile: str = None, + region: str = None, + secret_key: str = None, + security_token: str = None, + shared_credentials_file: str = None, + sts_endpoint: str = None, + tablestore_endpoint: str = None, + tablestore_table: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | str | (Required) The name of the OSS bucket. | +| access_key | str | (Optional) Alibaba Cloud access key. | +| acl | str | (Optional) Object ACL to be applied to the state file. | +| assume_role | OssAssumeRole | _No description._ | +| assume_role_policy | str | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assume_role_role_arn | str | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assume_role_session_expiration | typing.Union[int, float] | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assume_role_session_name | str | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecs_role_name | str | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | bool | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | str | (Optional) A custom endpoint for the OSS API. | +| key | str | (Optional) The name of the state file. | +| prefix | str | (Optional) The path directory of the state file will be stored. | +| profile | str | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | str | (Optional) The region of the OSS bucket. | +| secret_key | str | (Optional) Alibaba Cloud secret access key. | +| security_token | str | (Optional) STS access token. | +| shared_credentials_file | str | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| sts_endpoint | str | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestore_endpoint | str | (Optional) A custom endpoint for the TableStore API. | +| tablestore_table | str | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +(Required) The name of the OSS bucket. + +--- + +##### `access_key`Optional + +```python +access_key: str +``` + +- _Type:_ str + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +```python +acl: str +``` + +- _Type:_ str + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assume_role`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```python +assume_role: OssAssumeRole +``` + +- _Type:_ OssAssumeRole + +--- + +##### `assume_role_policy`Optional + +```python +assume_role_policy: str +``` + +- _Type:_ str + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assume_role_role_arn`Optional + +```python +assume_role_role_arn: str +``` + +- _Type:_ str + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assume_role_session_expiration`Optional + +```python +assume_role_session_expiration: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assume_role_session_name`Optional + +```python +assume_role_session_name: str +``` + +- _Type:_ str + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecs_role_name`Optional + +```python +ecs_role_name: str +``` + +- _Type:_ str + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +```python +encrypt: bool +``` + +- _Type:_ bool + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +```python +key: str +``` + +- _Type:_ str + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```python +prefix: str +``` + +- _Type:_ str + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +```python +profile: str +``` + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +```python +region: str +``` + +- _Type:_ str + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secret_key`Optional + +```python +secret_key: str +``` + +- _Type:_ str + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `security_token`Optional + +```python +security_token: str +``` + +- _Type:_ str + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `shared_credentials_file`Optional + +```python +shared_credentials_file: str +``` + +- _Type:_ str + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `sts_endpoint`Optional + +```python +sts_endpoint: str +``` + +- _Type:_ str + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestore_endpoint`Optional + +```python +tablestore_endpoint: str +``` + +- _Type:_ str + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestore_table`Optional + +```python +tablestore_table: str +``` + +- _Type:_ str + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### PgBackendConfig + +#### Initializer + +```python +import cdktf + +cdktf.PgBackendConfig( + conn_str: str, + schema_name: str = None, + skip_index_creation: bool = None, + skip_schema_creation: bool = None, + skip_table_creation: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------- | ------------------------------------------------------------------------------------- | +| conn_str | str | Postgres connection string; | +| schema_name | str | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skip_index_creation | bool | If set to true, the Postgres index must already exist. | +| skip_schema_creation | bool | If set to true, the Postgres schema must already exist. | +| skip_table_creation | bool | If set to true, the Postgres table must already exist. | + +--- + +##### `conn_str`Required + +```python +conn_str: str +``` + +- _Type:_ str + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schema_name`Optional + +```python +schema_name: str +``` + +- _Type:_ str + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skip_index_creation`Optional + +```python +skip_index_creation: bool +``` + +- _Type:_ bool + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_schema_creation`Optional + +```python +skip_schema_creation: bool +``` + +- _Type:_ bool + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skip_table_creation`Optional + +```python +skip_table_creation: bool +``` + +- _Type:_ bool + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### Postcondition + +Terraform checks a postcondition after evaluating the object it is associated with. + +#### Initializer + +```python +import cdktf + +cdktf.Postcondition( + condition: typing.Any, + error_message: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | typing.Any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| error_message | str | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```python +condition: typing.Any +``` + +- _Type:_ typing.Any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `error_message`Required + +```python +error_message: str +``` + +- _Type:_ str + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### Precondition + +Terraform checks a precondition before evaluating the object it is associated with. + +#### Initializer + +```python +import cdktf + +cdktf.Precondition( + condition: typing.Any, + error_message: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | typing.Any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| error_message | str | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```python +condition: typing.Any +``` + +- _Type:_ typing.Any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `error_message`Required + +```python +error_message: str +``` + +- _Type:_ str + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### RemoteBackendConfig + +#### Initializer + +```python +import cdktf + +cdktf.RemoteBackendConfig( + organization: str, + workspaces: IRemoteWorkspace, + hostname: str = None, + token: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| organization | str | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | str | _No description._ | +| token | str | _No description._ | + +--- + +##### `organization`Required + +```python +organization: str +``` + +- _Type:_ str + +--- + +##### `workspaces`Required + +```python +workspaces: IRemoteWorkspace +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +```python +hostname: str +``` + +- _Type:_ str + +--- + +##### `token`Optional + +```python +token: str +``` + +- _Type:_ str + +--- + +### RemoteExecProvisioner + +The remote-exec provisioner invokes a script on a remote resource after it is created. + +This can be used to run a configuration management tool, bootstrap into a cluster, etc +The remote-exec provisioner requires a connection and supports both ssh and winrm. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/remote-exec remote-exec} + +#### Initializer + +```python +import cdktf + +cdktf.RemoteExecProvisioner( + type: str, + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + inline: typing.List[str] = None, + script: str = None, + scripts: typing.List[str] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| type | str | _No description._ | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| inline | typing.List[str] | This is a list of command strings. | +| script | str | This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. | +| scripts | typing.List[str] | This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. | + +--- + +##### `type`Required + +```python +type: str +``` + +- _Type:_ str + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +A connection must be provided here or in the parent resource. + +--- + +##### `inline`Optional + +```python +inline: typing.List[str] +``` + +- _Type:_ typing.List[str] + +This is a list of command strings. + +They are executed in the order they are provided. +This cannot be provided with script or scripts. + +--- + +##### `script`Optional + +```python +script: str +``` + +- _Type:_ str + +This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. + +This cannot be provided with inline or scripts. + +--- + +##### `scripts`Optional + +```python +scripts: typing.List[str] +``` + +- _Type:_ typing.List[str] + +This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. + +They are executed in the order they are provided. +This cannot be provided with inline or script. + +--- + +### ResolveOptions + +Options to the resolve() operation. + +NOT the same as the ResolveContext; ResolveContext is exposed to Token +implementors and resolution hooks, whereas this struct is just to bundle +a number of things that would otherwise be arguments to resolve() in a +readable way. + +#### Initializer + +```python +import cdktf + +cdktf.ResolveOptions( + resolver: ITokenResolver, + scope: IConstruct, + preparing: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------- | +| resolver | ITokenResolver | The resolver to apply to any resolvable tokens found. | +| scope | constructs.IConstruct | The scope from which resolution is performed. | +| preparing | bool | Whether the resolution is being executed during the prepare phase or not. | + +--- + +##### `resolver`Required + +```python +resolver: ITokenResolver +``` + +- _Type:_ ITokenResolver + +The resolver to apply to any resolvable tokens found. + +--- + +##### `scope`Required + +```python +scope: IConstruct +``` + +- _Type:_ constructs.IConstruct + +The scope from which resolution is performed. + +--- + +##### `preparing`Optional + +```python +preparing: bool +``` + +- _Type:_ bool +- _Default:_ false + +Whether the resolution is being executed during the prepare phase or not. + +--- + +### S3BackendAssumeRoleConfig + +#### Initializer + +```python +import cdktf + +cdktf.S3BackendAssumeRoleConfig( + role_arn: str, + duration: str = None, + external_id: str = None, + policy: str = None, + policy_arns: typing.List[str] = None, + session_name: str = None, + source_identity: str = None, + tags: typing.Mapping[str] = None, + transitive_tag_keys: typing.List[str] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| role_arn | str | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| duration | str | (Optional) The duration individual credentials will be valid. | +| external_id | str | (Optional) External identifier to use when assuming the role. | +| policy | str | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| policy_arns | typing.List[str] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| session_name | str | (Optional) Session name to use when assuming the role. | +| source_identity | str | (Optional) Source identity specified by the principal assuming the. | +| tags | typing.Mapping[str] | (Optional) Map of assume role session tags. | +| transitive_tag_keys | typing.List[str] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | + +--- + +##### `role_arn`Required + +```python +role_arn: str +``` + +- _Type:_ str + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `duration`Optional + +```python +duration: str +``` + +- _Type:_ str + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `external_id`Optional + +```python +external_id: str +``` + +- _Type:_ str + +(Optional) External identifier to use when assuming the role. + +--- + +##### `policy`Optional + +```python +policy: str +``` + +- _Type:_ str + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `policy_arns`Optional + +```python +policy_arns: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `session_name`Optional + +```python +session_name: str +``` + +- _Type:_ str + +(Optional) Session name to use when assuming the role. + +--- + +##### `source_identity`Optional + +```python +source_identity: str +``` + +- _Type:_ str + +(Optional) Source identity specified by the principal assuming the. + +--- + +##### `tags`Optional + +```python +tags: typing.Mapping[str] +``` + +- _Type:_ typing.Mapping[str] + +(Optional) Map of assume role session tags. + +--- + +##### `transitive_tag_keys`Optional + +```python +transitive_tag_keys: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +### S3BackendAssumeRoleWithWebIdentityConfig + +#### Initializer + +```python +import cdktf + +cdktf.S3BackendAssumeRoleWithWebIdentityConfig( + duration: str = None, + policy: str = None, + policy_arns: typing.List[str] = None, + role_arn: str = None, + session_name: str = None, + web_identity_token: str = None, + web_identity_token_file: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| duration | str | (Optional) The duration individual credentials will be valid. | +| policy | str | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| policy_arns | typing.List[str] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| role_arn | str | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| session_name | str | (Optional) Session name to use when assuming the role. | +| web_identity_token | str | (Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. | +| web_identity_token_file | str | (Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. | + +--- + +##### `duration`Optional + +```python +duration: str +``` + +- _Type:_ str + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `policy`Optional + +```python +policy: str +``` + +- _Type:_ str + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `policy_arns`Optional + +```python +policy_arns: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `role_arn`Optional + +```python +role_arn: str +``` + +- _Type:_ str + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +Can also be set with the AWS_ROLE_ARN environment variable. + +--- + +##### `session_name`Optional + +```python +session_name: str +``` + +- _Type:_ str + +(Optional) Session name to use when assuming the role. + +Can also be set with the AWS_ROLE_SESSION_NAME environment variable. + +--- + +##### `web_identity_token`Optional + +```python +web_identity_token: str +``` + +- _Type:_ str + +(Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token or web_identity_token_file is required. + +--- + +##### `web_identity_token_file`Optional + +```python +web_identity_token_file: str +``` + +- _Type:_ str + +(Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token_file or web_identity_token is required. +Can also be set with the AWS_WEB_IDENTITY_TOKEN_FILE environment variable. + +--- + +### S3BackendConfig + +Stores the state as a given key in a given bucket on Amazon S3. + +This backend +also supports state locking and consistency checking via Dynamo DB, which +can be enabled by setting the dynamodb_table field to an existing DynamoDB +table name. A single DynamoDB table can be used to lock multiple remote +state files. Terraform generates key names that include the values of the +bucket and key variables. + +Warning! It is highly recommended that you enable Bucket Versioning on the +S3 bucket to allow for state recovery in the case of accidental deletions +and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/s3 + +#### Initializer + +```python +import cdktf + +cdktf.S3BackendConfig( + bucket: str, + key: str, + access_key: str = None, + acl: str = None, + allowed_account_ids: typing.List[str] = None, + assume_role: S3BackendAssumeRoleConfig = None, + assume_role_policy: str = None, + assume_role_policy_arns: typing.List[str] = None, + assume_role_tags: typing.Mapping[str] = None, + assume_role_transitive_tag_keys: typing.List[str] = None, + assume_role_with_web_identity: S3BackendAssumeRoleWithWebIdentityConfig = None, + custom_ca_bundle: str = None, + dynamodb_endpoint: str = None, + dynamodb_table: str = None, + ec2_metadata_service_endpoint: str = None, + ec2_metadata_service_endpoint_mode: str = None, + encrypt: bool = None, + endpoint: str = None, + endpoints: S3BackendEndpointConfig = None, + external_id: str = None, + forbidden_account_ids: typing.List[str] = None, + force_path_style: bool = None, + http_proxy: str = None, + https_proxy: str = None, + iam_endpoint: str = None, + insecure: bool = None, + kms_key_id: str = None, + max_retries: typing.Union[int, float] = None, + no_proxy: str = None, + profile: str = None, + region: str = None, + retry_mode: str = None, + role_arn: str = None, + secret_key: str = None, + session_name: str = None, + shared_config_files: typing.List[str] = None, + shared_credentials_file: str = None, + shared_credentials_files: typing.List[str] = None, + skip_credentials_validation: bool = None, + skip_metadata_api_check: bool = None, + skip_region_validation: bool = None, + skip_requesting_account_id: bool = None, + skip_s3_checksum: bool = None, + sse_customer_key: str = None, + sts_endpoint: str = None, + sts_region: str = None, + token: str = None, + use_legacy_workflow: bool = None, + use_path_style: bool = None, + workspace_key_prefix: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | str | Name of the S3 Bucket. | +| key | str | Path to the state file inside the S3 Bucket. | +| access_key | str | (Optional) AWS access key. | +| acl | str | (Optional) Canned ACL to be applied to the state file. | +| allowed_account_ids | typing.List[str] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assume_role | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assume_role_policy | str | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assume_role_policy_arns | typing.List[str] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assume_role_tags | typing.Mapping[str] | (Optional) Map of assume role session tags. | +| assume_role_transitive_tag_keys | typing.List[str] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assume_role_with_web_identity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| custom_ca_bundle | str | (Optional) File containing custom root and intermediate certificates. | +| dynamodb_endpoint | str | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodb_table | str | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2_metadata_service_endpoint | str | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2_metadata_service_endpoint_mode | str | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | bool | (Optional) Enable server side encryption of the state file. | +| endpoint | str | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| external_id | str | (Optional) External identifier to use when assuming the role. | +| forbidden_account_ids | typing.List[str] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| force_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| http_proxy | str | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| https_proxy | str | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iam_endpoint | str | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | bool | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kms_key_id | str | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| max_retries | typing.Union[int, float] | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| no_proxy | str | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | str | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | str | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retry_mode | str | (Optional) Specifies how retries are attempted. | +| role_arn | str | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secret_key | str | (Optional) AWS secret access key. | +| session_name | str | (Optional) Session name to use when assuming the role. | +| shared_config_files | typing.List[str] | (Optional) List of paths to AWS shared configuration files. | +| shared_credentials_file | str | (Optional) Path to the AWS shared credentials file. | +| shared_credentials_files | typing.List[str] | (Optional) List of paths to AWS shared credentials files. | +| skip_credentials_validation | bool | (Optional) Skip credentials validation via the STS API. | +| skip_metadata_api_check | bool | (Optional) Skip usage of EC2 Metadata API. | +| skip_region_validation | bool | (Optional) Skip validation of provided region name. | +| skip_requesting_account_id | bool | (Optional) Whether to skip requesting the account ID. | +| skip_s3_checksum | bool | (Optional) Do not include checksum when uploading S3 Objects. | +| sse_customer_key | str | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| sts_endpoint | str | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| sts_region | str | (Optional) AWS region for STS. | +| token | str | (Optional) Multi-Factor Authentication (MFA) token. | +| use_legacy_workflow | bool | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| use_path_style | bool | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspace_key_prefix | str | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `bucket`Required + +```python +bucket: str +``` + +- _Type:_ str + +Name of the S3 Bucket. + +--- + +##### `key`Required + +```python +key: str +``` + +- _Type:_ str + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `access_key`Optional + +```python +access_key: str +``` + +- _Type:_ str + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +```python +acl: str +``` + +- _Type:_ str + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowed_account_ids`Optional + +```python +allowed_account_ids: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assume_role`Optional + +```python +assume_role: S3BackendAssumeRoleConfig +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assume_role_policy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```python +assume_role_policy: str +``` + +- _Type:_ str + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_policy_arns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```python +assume_role_policy_arns: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assume_role_tags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```python +assume_role_tags: typing.Mapping[str] +``` + +- _Type:_ typing.Mapping[str] + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assume_role_transitive_tag_keys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```python +assume_role_transitive_tag_keys: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assume_role_with_web_identity`Optional + +```python +assume_role_with_web_identity: S3BackendAssumeRoleWithWebIdentityConfig +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `custom_ca_bundle`Optional + +```python +custom_ca_bundle: str +``` + +- _Type:_ str + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodb_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```python +dynamodb_endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodb_table`Optional + +```python +dynamodb_table: str +``` + +- _Type:_ str + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2_metadata_service_endpoint`Optional + +```python +ec2_metadata_service_endpoint: str +``` + +- _Type:_ str + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2_metadata_service_endpoint_mode`Optional + +```python +ec2_metadata_service_endpoint_mode: str +``` + +- _Type:_ str + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +```python +encrypt: bool +``` + +- _Type:_ bool + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```python +endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +```python +endpoints: S3BackendEndpointConfig +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`external_id`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```python +external_id: str +``` + +- _Type:_ str + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbidden_account_ids`Optional + +```python +forbidden_account_ids: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`force_path_style`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```python +force_path_style: bool +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `http_proxy`Optional + +```python +http_proxy: str +``` + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `https_proxy`Optional + +```python +https_proxy: str +``` + +- _Type:_ str + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iam_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```python +iam_endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +```python +insecure: bool +``` + +- _Type:_ bool + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kms_key_id`Optional + +```python +kms_key_id: str +``` + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `max_retries`Optional + +```python +max_retries: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `no_proxy`Optional + +```python +no_proxy: str +``` + +- _Type:_ str + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +```python +profile: str +``` + +- _Type:_ str + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +```python +region: str +``` + +- _Type:_ str + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retry_mode`Optional + +```python +retry_mode: str +``` + +- _Type:_ str + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`role_arn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```python +role_arn: str +``` + +- _Type:_ str + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secret_key`Optional + +```python +secret_key: str +``` + +- _Type:_ str + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`session_name`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```python +session_name: str +``` + +- _Type:_ str + +(Optional) Session name to use when assuming the role. + +--- + +##### `shared_config_files`Optional + +```python +shared_config_files: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `shared_credentials_file`Optional + +```python +shared_credentials_file: str +``` + +- _Type:_ str + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `shared_credentials_files`Optional + +```python +shared_credentials_files: typing.List[str] +``` + +- _Type:_ typing.List[str] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skip_credentials_validation`Optional + +```python +skip_credentials_validation: bool +``` + +- _Type:_ bool + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skip_metadata_api_check`Optional + +```python +skip_metadata_api_check: bool +``` + +- _Type:_ bool + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skip_region_validation`Optional + +```python +skip_region_validation: bool +``` + +- _Type:_ bool + +(Optional) Skip validation of provided region name. + +--- + +##### `skip_requesting_account_id`Optional + +```python +skip_requesting_account_id: bool +``` + +- _Type:_ bool + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skip_s3_checksum`Optional + +```python +skip_s3_checksum: bool +``` + +- _Type:_ bool + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sse_customer_key`Optional + +```python +sse_customer_key: str +``` + +- _Type:_ str + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`sts_endpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```python +sts_endpoint: str +``` + +- _Type:_ str + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `sts_region`Optional + +```python +sts_region: str +``` + +- _Type:_ str + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +```python +token: str +``` + +- _Type:_ str + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `use_legacy_workflow`Optional + +```python +use_legacy_workflow: bool +``` + +- _Type:_ bool + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `use_path_style`Optional + +```python +use_path_style: bool +``` + +- _Type:_ bool + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspace_key_prefix`Optional + +```python +workspace_key_prefix: str +``` + +- _Type:_ str + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### S3BackendEndpointConfig + +#### Initializer + +```python +import cdktf + +cdktf.S3BackendEndpointConfig( + dynamodb: str = None, + iam: str = None, + s3: str = None, + sso: str = None, + sts: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ---------------- | ----------------------------------------------------------------------------------------------- | +| dynamodb | str | (Optional) Custom endpoint URL for the AWS DynamoDB API. | +| iam | str | (Optional) Custom endpoint URL for the AWS IAM API. | +| s3 | str | (Optional) Custom endpoint URL for the AWS S3 API. | +| sso | str | (Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. | +| sts | str | (Optional) Custom endpoint URL for the AWS STS API. | + +--- + +##### `dynamodb`Optional + +```python +dynamodb: str +``` + +- _Type:_ str + +(Optional) Custom endpoint URL for the AWS DynamoDB API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_DYNAMODB or the deprecated environment variable AWS_DYNAMODB_ENDPOINT. + +--- + +##### `iam`Optional + +```python +iam: str +``` + +- _Type:_ str + +(Optional) Custom endpoint URL for the AWS IAM API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_IAM or the deprecated environment variable AWS_IAM_ENDPOINT. + +--- + +##### `s3`Optional + +```python +s3: str +``` + +- _Type:_ str + +(Optional) Custom endpoint URL for the AWS S3 API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_S3 or the deprecated environment variable AWS_S3_ENDPOINT. + +--- + +##### `sso`Optional + +```python +sso: str +``` + +- _Type:_ str + +(Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_SSO. + +--- + +##### `sts`Optional + +```python +sts: str +``` + +- _Type:_ str + +(Optional) Custom endpoint URL for the AWS STS API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_STS or the deprecated environment variable AWS_STS_ENDPOINT. + +--- + +### SSHProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```python +import cdktf + +cdktf.SSHProvisionerConnection( + host: str, + type: str, + agent: str = None, + agent_identity: str = None, + bastion_certificate: str = None, + bastion_host: str = None, + bastion_host_key: str = None, + bastion_password: str = None, + bastion_port: typing.Union[int, float] = None, + bastion_private_key: str = None, + bastion_user: str = None, + certificate: str = None, + host_key: str = None, + password: str = None, + port: typing.Union[int, float] = None, + private_key: str = None, + proxy_host: str = None, + proxy_port: typing.Union[int, float] = None, + proxy_scheme: str = None, + proxy_user_name: str = None, + proxy_user_password: str = None, + script_path: str = None, + target_platform: str = None, + timeout: str = None, + user: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| host | str | The address of the resource to connect to. | +| type | str | The connection type. | +| agent | str | Set to false to disable using ssh-agent to authenticate. | +| agent_identity | str | The preferred identity from the ssh agent for authentication. | +| bastion_certificate | str | The contents of a signed CA Certificate. | +| bastion_host | str | Setting this enables the bastion Host connection. | +| bastion_host_key | str | The public key from the remote host or the signing CA, used to verify the host connection. | +| bastion_password | str | The password to use for the bastion host. | +| bastion_port | typing.Union[int, float] | The port to use connect to the bastion host. | +| bastion_private_key | str | The contents of an SSH key file to use for the bastion host. | +| bastion_user | str | The user for the connection to the bastion host. | +| certificate | str | The contents of a signed CA Certificate. | +| host_key | str | The public key from the remote host or the signing CA, used to verify the connection. | +| password | str | The password to use for the connection. | +| port | typing.Union[int, float] | The port to connect to. | +| private_key | str | The contents of an SSH key to use for the connection. | +| proxy_host | str | Setting this enables the SSH over HTTP connection. | +| proxy_port | typing.Union[int, float] | The port to use connect to the proxy host. | +| proxy_scheme | str | The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. | +| proxy_user_name | str | The username to use connect to the private proxy host. | +| proxy_user_password | str | The password to use connect to the private proxy host. | +| script_path | str | The path used to copy scripts meant for remote execution. | +| target_platform | str | The target platform to connect to. | +| timeout | str | The timeout to wait for the connection to become available. | +| user | str | The user to use for the connection. | + +--- + +##### `host`Required + +```python +host: str +``` + +- _Type:_ str + +The address of the resource to connect to. + +--- + +##### `type`Required + +```python +type: str +``` + +- _Type:_ str + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `agent`Optional + +```python +agent: str +``` + +- _Type:_ str + +Set to false to disable using ssh-agent to authenticate. + +On Windows the only supported SSH authentication agent is Pageant. + +--- + +##### `agent_identity`Optional + +```python +agent_identity: str +``` + +- _Type:_ str + +The preferred identity from the ssh agent for authentication. + +--- + +##### `bastion_certificate`Optional + +```python +bastion_certificate: str +``` + +- _Type:_ str + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a bastion_private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `bastion_host`Optional + +```python +bastion_host: str +``` + +- _Type:_ str + +Setting this enables the bastion Host connection. + +The provisioner will connect to bastion_host first, and then connect from there to host. + +--- + +##### `bastion_host_key`Optional + +```python +bastion_host_key: str +``` + +- _Type:_ str + +The public key from the remote host or the signing CA, used to verify the host connection. + +--- + +##### `bastion_password`Optional + +```python +bastion_password: str +``` + +- _Type:_ str + +The password to use for the bastion host. + +--- + +##### `bastion_port`Optional + +```python +bastion_port: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +The port to use connect to the bastion host. + +--- + +##### `bastion_private_key`Optional + +```python +bastion_private_key: str +``` + +- _Type:_ str + +The contents of an SSH key file to use for the bastion host. + +These can be loaded from a file on disk using the file function. + +--- + +##### `bastion_user`Optional + +```python +bastion_user: str +``` + +- _Type:_ str + +The user for the connection to the bastion host. + +--- + +##### `certificate`Optional + +```python +certificate: str +``` + +- _Type:_ str + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `host_key`Optional + +```python +host_key: str +``` + +- _Type:_ str + +The public key from the remote host or the signing CA, used to verify the connection. + +--- + +##### `password`Optional + +```python +password: str +``` + +- _Type:_ str + +The password to use for the connection. + +--- + +##### `port`Optional + +```python +port: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] +- _Default:_ 22 + +The port to connect to. + +--- + +##### `private_key`Optional + +```python +private_key: str +``` + +- _Type:_ str + +The contents of an SSH key to use for the connection. + +These can be loaded from a file on disk using the file function. +This takes preference over password if provided. + +--- + +##### `proxy_host`Optional + +```python +proxy_host: str +``` + +- _Type:_ str + +Setting this enables the SSH over HTTP connection. + +This host will be connected to first, and then the host or bastion_host connection will be made from there. + +--- + +##### `proxy_port`Optional + +```python +proxy_port: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] + +The port to use connect to the proxy host. + +--- + +##### `proxy_scheme`Optional + +```python +proxy_scheme: str +``` + +- _Type:_ str + +The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. + +--- + +##### `proxy_user_name`Optional + +```python +proxy_user_name: str +``` + +- _Type:_ str + +The username to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `proxy_user_password`Optional + +```python +proxy_user_password: str +``` + +- _Type:_ str + +The password to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `script_path`Optional + +```python +script_path: str +``` + +- _Type:_ str + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `target_platform`Optional + +```python +target_platform: str +``` + +- _Type:_ str +- _Default:_ unix + +The target platform to connect to. + +Valid values are "windows" and "unix". +If the platform is set to windows, the default script*path is c:\windows\temp\terraform*%RAND%.cmd, assuming the SSH default shell is cmd.exe. +If the SSH default shell is PowerShell, set script*path to "c:/windows/temp/terraform*%RAND%.ps1" + +--- + +##### `timeout`Optional + +```python +timeout: str +``` + +- _Type:_ str +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `user`Optional + +```python +user: str +``` + +- _Type:_ str +- _Default:_ root + +The user to use for the connection. + +--- + +### StackAnnotation + +#### Initializer + +```python +import cdktf + +cdktf.StackAnnotation( + construct_path: str, + level: AnnotationMetadataEntryType, + message: str, + stacktrace: typing.List[str] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | +| construct_path | str | _No description._ | +| level | AnnotationMetadataEntryType | _No description._ | +| message | str | _No description._ | +| stacktrace | typing.List[str] | _No description._ | + +--- + +##### `construct_path`Required + +```python +construct_path: str +``` + +- _Type:_ str + +--- + +##### `level`Required + +```python +level: AnnotationMetadataEntryType +``` + +- _Type:_ AnnotationMetadataEntryType + +--- + +##### `message`Required + +```python +message: str +``` + +- _Type:_ str + +--- + +##### `stacktrace`Optional + +```python +stacktrace: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +### StackManifest + +#### Initializer + +```python +import cdktf + +cdktf.StackManifest( + annotations: typing.List[StackAnnotation], + construct_path: str, + dependencies: typing.List[str], + name: str, + stack_metadata_path: str, + synthesized_stack_path: str, + working_directory: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ----------------- | +| annotations | typing.List[StackAnnotation] | _No description._ | +| construct_path | str | _No description._ | +| dependencies | typing.List[str] | _No description._ | +| name | str | _No description._ | +| stack_metadata_path | str | _No description._ | +| synthesized_stack_path | str | _No description._ | +| working_directory | str | _No description._ | + +--- + +##### `annotations`Required + +```python +annotations: typing.List[StackAnnotation] +``` + +- _Type:_ typing.List[StackAnnotation] + +--- + +##### `construct_path`Required + +```python +construct_path: str +``` + +- _Type:_ str + +--- + +##### `dependencies`Required + +```python +dependencies: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `name`Required + +```python +name: str +``` + +- _Type:_ str + +--- + +##### `stack_metadata_path`Required + +```python +stack_metadata_path: str +``` + +- _Type:_ str + +--- + +##### `synthesized_stack_path`Required + +```python +synthesized_stack_path: str +``` + +- _Type:_ str + +--- + +##### `working_directory`Required + +```python +working_directory: str +``` + +- _Type:_ str + +--- + +### SwiftBackendConfig + +#### Initializer + +```python +import cdktf + +cdktf.SwiftBackendConfig( + container: str, + application_credential_id: str = None, + application_credential_name: str = None, + application_credential_secret: str = None, + archive_container: str = None, + auth_url: str = None, + cacert_file: str = None, + cert: str = None, + cloud: str = None, + default_domain: str = None, + domain_id: str = None, + domain_name: str = None, + expire_after: str = None, + insecure: bool = None, + key: str = None, + password: str = None, + project_domain_id: str = None, + project_domain_name: str = None, + region_name: str = None, + state_name: str = None, + tenant_id: str = None, + tenant_name: str = None, + token: str = None, + user_domain_id: str = None, + user_domain_name: str = None, + user_id: str = None, + user_name: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------- | ----------------- | ----------------- | +| container | str | _No description._ | +| application_credential_id | str | _No description._ | +| application_credential_name | str | _No description._ | +| application_credential_secret | str | _No description._ | +| archive_container | str | _No description._ | +| auth_url | str | _No description._ | +| cacert_file | str | _No description._ | +| cert | str | _No description._ | +| cloud | str | _No description._ | +| default_domain | str | _No description._ | +| domain_id | str | _No description._ | +| domain_name | str | _No description._ | +| expire_after | str | _No description._ | +| insecure | bool | _No description._ | +| key | str | _No description._ | +| password | str | _No description._ | +| project_domain_id | str | _No description._ | +| project_domain_name | str | _No description._ | +| region_name | str | _No description._ | +| state_name | str | _No description._ | +| tenant_id | str | _No description._ | +| tenant_name | str | _No description._ | +| token | str | _No description._ | +| user_domain_id | str | _No description._ | +| user_domain_name | str | _No description._ | +| user_id | str | _No description._ | +| user_name | str | _No description._ | + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +container: str +``` + +- _Type:_ str + +--- + +##### ~~`application_credential_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +application_credential_id: str +``` + +- _Type:_ str + +--- + +##### ~~`application_credential_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +application_credential_name: str +``` + +- _Type:_ str + +--- + +##### ~~`application_credential_secret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +application_credential_secret: str +``` + +- _Type:_ str + +--- + +##### ~~`archive_container`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +archive_container: str +``` + +- _Type:_ str + +--- + +##### ~~`auth_url`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +auth_url: str +``` + +- _Type:_ str + +--- + +##### ~~`cacert_file`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cacert_file: str +``` + +- _Type:_ str + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cert: str +``` + +- _Type:_ str + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +cloud: str +``` + +- _Type:_ str + +--- + +##### ~~`default_domain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +default_domain: str +``` + +- _Type:_ str + +--- + +##### ~~`domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +domain_id: str +``` + +- _Type:_ str + +--- + +##### ~~`domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +domain_name: str +``` + +- _Type:_ str + +--- + +##### ~~`expire_after`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +expire_after: str +``` + +- _Type:_ str + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +insecure: bool +``` + +- _Type:_ bool + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +key: str +``` + +- _Type:_ str + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +password: str +``` + +- _Type:_ str + +--- + +##### ~~`project_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +project_domain_id: str +``` + +- _Type:_ str + +--- + +##### ~~`project_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +project_domain_name: str +``` + +- _Type:_ str + +--- + +##### ~~`region_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +region_name: str +``` + +- _Type:_ str + +--- + +##### ~~`state_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +state_name: str +``` + +- _Type:_ str + +--- + +##### ~~`tenant_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +tenant_id: str +``` + +- _Type:_ str + +--- + +##### ~~`tenant_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +tenant_name: str +``` + +- _Type:_ str + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +token: str +``` + +- _Type:_ str + +--- + +##### ~~`user_domain_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_domain_id: str +``` + +- _Type:_ str + +--- + +##### ~~`user_domain_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_domain_name: str +``` + +- _Type:_ str + +--- + +##### ~~`user_id`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_id: str +``` + +- _Type:_ str + +--- + +##### ~~`user_name`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```python +user_name: str +``` + +- _Type:_ str + +--- + +### TerraformAssetConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformAssetConfig( + path: str, + asset_hash: str = None, + type: AssetType = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------- | ----------------- | +| path | str | _No description._ | +| asset_hash | str | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `path`Required + +```python +path: str +``` + +- _Type:_ str + +--- + +##### `asset_hash`Optional + +```python +asset_hash: str +``` + +- _Type:_ str + +--- + +##### `type`Optional + +```python +type: AssetType +``` + +- _Type:_ AssetType + +--- + +### TerraformCondition + +#### Initializer + +```python +import cdktf + +cdktf.TerraformCondition( + condition: typing.Any, + error_message: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | typing.Any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| error_message | str | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```python +condition: typing.Any +``` + +- _Type:_ typing.Any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `error_message`Required + +```python +error_message: str +``` + +- _Type:_ str + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TerraformConstructor + +#### Initializer + +```python +from cdktf import testing_matchers + +testingMatchers.TerraformConstructor( + tf_resource_type: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| tf_resource_type | str | _No description._ | + +--- + +##### `tf_resource_type`Required + +```python +tf_resource_type: str +``` + +- _Type:_ str + +--- + +### TerraformElementMetadata + +#### Initializer + +```python +import cdktf + +cdktf.TerraformElementMetadata( + path: str, + stack_trace: typing.List[str], + unique_id: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | ----------------- | +| path | str | _No description._ | +| stack_trace | typing.List[str] | _No description._ | +| unique_id | str | _No description._ | + +--- + +##### `path`Required + +```python +path: str +``` + +- _Type:_ str + +--- + +##### `stack_trace`Required + +```python +stack_trace: typing.List[str] +``` + +- _Type:_ typing.List[str] + +--- + +##### `unique_id`Required + +```python +unique_id: str +``` + +- _Type:_ str + +--- + +### TerraformHclModuleConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformHclModuleConfig( + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] = None, + skip_asset_creation_from_local_modules: bool = None, + source: str, + version: str = None, + variables: typing.Mapping[typing.Any] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | +| source | str | _No description._ | +| version | str | _No description._ | +| variables | typing.Mapping[typing.Any] | _No description._ | + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```python +providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] +``` + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +```python +skip_asset_creation_from_local_modules: bool +``` + +- _Type:_ bool + +--- + +##### `source`Required + +```python +source: str +``` + +- _Type:_ str + +--- + +##### `version`Optional + +```python +version: str +``` + +- _Type:_ str + +--- + +##### `variables`Optional + +```python +variables: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +### TerraformMetaArguments + +#### Initializer + +```python +import cdktf + +cdktf.TerraformMetaArguments( + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + count: typing.Union[typing.Union[int, float], TerraformCount] = None, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + lifecycle: TerraformResourceLifecycle = None, + provider: TerraformProvider = None, + provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```python +provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] +``` + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +### TerraformModuleConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformModuleConfig( + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] = None, + skip_asset_creation_from_local_modules: bool = None, + source: str, + version: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | +| source | str | _No description._ | +| version | str | _No description._ | + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```python +providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] +``` + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +```python +skip_asset_creation_from_local_modules: bool +``` + +- _Type:_ bool + +--- + +##### `source`Required + +```python +source: str +``` + +- _Type:_ str + +--- + +##### `version`Optional + +```python +version: str +``` + +- _Type:_ str + +--- + +### TerraformModuleProvider + +#### Initializer + +```python +import cdktf + +cdktf.TerraformModuleProvider( + module_alias: str, + provider: TerraformProvider +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| module_alias | str | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `module_alias`Required + +```python +module_alias: str +``` + +- _Type:_ str + +--- + +##### `provider`Required + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformModuleUserConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformModuleUserConfig( + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] = None, + skip_asset_creation_from_local_modules: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| providers | typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] | _No description._ | +| skip_asset_creation_from_local_modules | bool | _No description._ | + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```python +providers: typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] +``` + +- _Type:_ typing.List[typing.Union[TerraformProvider, TerraformModuleProvider]] + +--- + +##### `skip_asset_creation_from_local_modules`Optional + +```python +skip_asset_creation_from_local_modules: bool +``` + +- _Type:_ bool + +--- + +### TerraformOutputConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformOutputConfig( + value: typing.Any, + depends_on: typing.List[ITerraformDependable] = None, + description: str = None, + precondition: Precondition = None, + sensitive: bool = None, + static_id: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | typing.Any | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| description | str | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | bool | _No description._ | +| static_id | bool | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `value`Required + +```python +value: typing.Any +``` + +- _Type:_ typing.Any + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `description`Optional + +```python +description: str +``` + +- _Type:_ str + +--- + +##### `precondition`Optional + +```python +precondition: Precondition +``` + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +```python +sensitive: bool +``` + +- _Type:_ bool + +--- + +##### `static_id`Optional + +```python +static_id: bool +``` + +- _Type:_ bool +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +### TerraformProviderConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformProviderConfig( + terraform_resource_type: str, + terraform_generator_metadata: TerraformProviderGeneratorMetadata = None, + terraform_provider_source: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraform_provider_source | str | _No description._ | + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +```python +terraform_generator_metadata: TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraform_provider_source`Optional + +```python +terraform_provider_source: str +``` + +- _Type:_ str + +--- + +### TerraformProviderGeneratorMetadata + +#### Initializer + +```python +import cdktf + +cdktf.TerraformProviderGeneratorMetadata( + provider_name: str, + provider_version: str = None, + provider_version_constraint: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| provider_name | str | _No description._ | +| provider_version | str | _No description._ | +| provider_version_constraint | str | _No description._ | + +--- + +##### `provider_name`Required + +```python +provider_name: str +``` + +- _Type:_ str + +--- + +##### `provider_version`Optional + +```python +provider_version: str +``` + +- _Type:_ str + +--- + +##### `provider_version_constraint`Optional + +```python +provider_version_constraint: str +``` + +- _Type:_ str + +--- + +### TerraformResourceConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformResourceConfig( + connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] = None, + count: typing.Union[typing.Union[int, float], TerraformCount] = None, + depends_on: typing.List[ITerraformDependable] = None, + for_each: ITerraformIterator = None, + lifecycle: TerraformResourceLifecycle = None, + provider: TerraformProvider = None, + provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] = None, + terraform_resource_type: str, + terraform_generator_metadata: TerraformProviderGeneratorMetadata = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------- | +| connection | typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] | _No description._ | +| count | typing.Union[typing.Union[int, float], TerraformCount] | _No description._ | +| depends_on | typing.List[ITerraformDependable] | _No description._ | +| for_each | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] | _No description._ | +| terraform_resource_type | str | _No description._ | +| terraform_generator_metadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `connection`Optional + +```python +connection: typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] +``` + +- _Type:_ typing.Union[SSHProvisionerConnection, WinrmProvisionerConnection] + +--- + +##### `count`Optional + +```python +count: typing.Union[typing.Union[int, float], TerraformCount] +``` + +- _Type:_ typing.Union[typing.Union[int, float], TerraformCount] + +--- + +##### `depends_on`Optional + +```python +depends_on: typing.List[ITerraformDependable] +``` + +- _Type:_ typing.List[ITerraformDependable] + +--- + +##### `for_each`Optional + +```python +for_each: ITerraformIterator +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```python +lifecycle: TerraformResourceLifecycle +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```python +provisioners: typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] +``` + +- _Type:_ typing.List[typing.Union[FileProvisioner, LocalExecProvisioner, RemoteExecProvisioner]] + +--- + +##### `terraform_resource_type`Required + +```python +terraform_resource_type: str +``` + +- _Type:_ str + +--- + +##### `terraform_generator_metadata`Optional + +```python +terraform_generator_metadata: TerraformProviderGeneratorMetadata +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +### TerraformResourceImport + +#### Initializer + +```python +import cdktf + +cdktf.TerraformResourceImport( + id: str, + provider: TerraformProvider = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| id | str | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `id`Required + +```python +id: str +``` + +- _Type:_ str + +--- + +##### `provider`Optional + +```python +provider: TerraformProvider +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformResourceLifecycle + +#### Initializer + +```python +import cdktf + +cdktf.TerraformResourceLifecycle( + create_before_destroy: bool = None, + ignore_changes: typing.Union[typing.List[str], str] = None, + postcondition: typing.List[Postcondition] = None, + precondition: typing.List[Precondition] = None, + prevent_destroy: bool = None, + replace_triggered_by: typing.List[typing.Union[str, ITerraformDependable]] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| create_before_destroy | bool | _No description._ | +| ignore_changes | typing.Union[typing.List[str], str] | _No description._ | +| postcondition | typing.List[Postcondition] | _No description._ | +| precondition | typing.List[Precondition] | _No description._ | +| prevent_destroy | bool | _No description._ | +| replace_triggered_by | typing.List[typing.Union[str, ITerraformDependable]] | _No description._ | + +--- + +##### `create_before_destroy`Optional + +```python +create_before_destroy: bool +``` + +- _Type:_ bool + +--- + +##### `ignore_changes`Optional + +```python +ignore_changes: typing.Union[typing.List[str], str] +``` + +- _Type:_ typing.Union[typing.List[str], str] + +--- + +##### `postcondition`Optional + +```python +postcondition: typing.List[Postcondition] +``` + +- _Type:_ typing.List[Postcondition] + +--- + +##### `precondition`Optional + +```python +precondition: typing.List[Precondition] +``` + +- _Type:_ typing.List[Precondition] + +--- + +##### `prevent_destroy`Optional + +```python +prevent_destroy: bool +``` + +- _Type:_ bool + +--- + +##### `replace_triggered_by`Optional + +```python +replace_triggered_by: typing.List[typing.Union[str, ITerraformDependable]] +``` + +- _Type:_ typing.List[typing.Union[str, ITerraformDependable]] + +--- + +### TerraformResourceMoveById + +#### Initializer + +```python +import cdktf + +cdktf.TerraformResourceMoveById( + from: str, + to: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ---------------- | ----------------- | +| from | str | _No description._ | +| to | str | _No description._ | + +--- + +##### `from`Required + +```python +from: str +``` + +- _Type:_ str + +--- + +##### `to`Required + +```python +to: str +``` + +- _Type:_ str + +--- + +### TerraformResourceMoveByTarget + +#### Initializer + +```python +import cdktf + +cdktf.TerraformResourceMoveByTarget( + move_target: str, + index: typing.Union[str, typing.Union[int, float]] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------- | +| move_target | str | _No description._ | +| index | typing.Union[str, typing.Union[int, float]] | _No description._ | + +--- + +##### `move_target`Required + +```python +move_target: str +``` + +- _Type:_ str + +--- + +##### `index`Optional + +```python +index: typing.Union[str, typing.Union[int, float]] +``` + +- _Type:_ typing.Union[str, typing.Union[int, float]] + +--- + +### TerraformStackMetadata + +#### Initializer + +```python +import cdktf + +cdktf.TerraformStackMetadata( + backend: str, + stack_name: str, + version: str, + cloud: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ---------------- | ----------------- | +| backend | str | _No description._ | +| stack_name | str | _No description._ | +| version | str | _No description._ | +| cloud | str | _No description._ | + +--- + +##### `backend`Required + +```python +backend: str +``` + +- _Type:_ str + +--- + +##### `stack_name`Required + +```python +stack_name: str +``` + +- _Type:_ str + +--- + +##### `version`Required + +```python +version: str +``` + +- _Type:_ str + +--- + +##### `cloud`Optional + +```python +cloud: str +``` + +- _Type:_ str + +--- + +### TerraformVariableConfig + +#### Initializer + +```python +import cdktf + +cdktf.TerraformVariableConfig( + default: typing.Any = None, + description: str = None, + nullable: bool = None, + sensitive: bool = None, + type: str = None, + validation: typing.List[TerraformVariableValidationConfig] = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | +| default | typing.Any | _No description._ | +| description | str | _No description._ | +| nullable | bool | _No description._ | +| sensitive | bool | _No description._ | +| type | str | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| validation | typing.List[TerraformVariableValidationConfig] | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `default`Optional + +```python +default: typing.Any +``` + +- _Type:_ typing.Any + +--- + +##### `description`Optional + +```python +description: str +``` + +- _Type:_ str + +--- + +##### `nullable`Optional + +```python +nullable: bool +``` + +- _Type:_ bool + +--- + +##### `sensitive`Optional + +```python +sensitive: bool +``` + +- _Type:_ bool + +--- + +##### `type`Optional + +```python +type: str +``` + +- _Type:_ str + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(< TYPE >) +- set(< TYPE >) +- map(< TYPE >) +- object({< ATTR NAME > = < TYPE >, ... }) +- tuple([< TYPE >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `validation`Optional + +```python +validation: typing.List[TerraformVariableValidationConfig] +``` + +- _Type:_ typing.List[TerraformVariableValidationConfig] + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +### TerraformVariableValidationConfig + +Add one or more validation blocks within the variable block to specify custom conditions. + +#### Initializer + +```python +import cdktf + +cdktf.TerraformVariableValidationConfig( + condition: typing.Any, + error_message: str +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | typing.Any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| error_message | str | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```python +condition: typing.Any +``` + +- _Type:_ typing.Any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `error_message`Required + +```python +error_message: str +``` + +- _Type:_ str + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TestingAppConfig + +#### Initializer + +```python +import cdktf + +cdktf.TestingAppConfig( + context: typing.Mapping[typing.Any] = None, + enable_future_flags: bool = None, + fake_cdktf_json_path: bool = None, + outdir: str = None, + stack_traces: bool = None, + stub_version: bool = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------- | ----------------- | +| context | typing.Mapping[typing.Any] | _No description._ | +| enable_future_flags | bool | _No description._ | +| fake_cdktf_json_path | bool | _No description._ | +| outdir | str | _No description._ | +| stack_traces | bool | _No description._ | +| stub_version | bool | _No description._ | + +--- + +##### `context`Optional + +```python +context: typing.Mapping[typing.Any] +``` + +- _Type:_ typing.Mapping[typing.Any] + +--- + +##### `enable_future_flags`Optional + +```python +enable_future_flags: bool +``` + +- _Type:_ bool + +--- + +##### `fake_cdktf_json_path`Optional + +```python +fake_cdktf_json_path: bool +``` + +- _Type:_ bool + +--- + +##### `outdir`Optional + +```python +outdir: str +``` + +- _Type:_ str + +--- + +##### `stack_traces`Optional + +```python +stack_traces: bool +``` + +- _Type:_ bool + +--- + +##### `stub_version`Optional + +```python +stub_version: bool +``` + +- _Type:_ bool + +--- + +### WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```python +import cdktf + +cdktf.WinrmProvisionerConnection( + host: str, + type: str, + cacert: str = None, + https: bool = None, + insecure: bool = None, + password: str = None, + port: typing.Union[int, float] = None, + script_path: str = None, + timeout: str = None, + use_ntlm: bool = None, + user: str = None +) +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| host | str | The address of the resource to connect to. | +| type | str | The connection type. | +| cacert | str | The CA certificate to validate against. | +| https | bool | Set to true to connect using HTTPS instead of HTTP. | +| insecure | bool | Set to true to skip validating the HTTPS certificate chain. | +| password | str | The password to use for the connection. | +| port | typing.Union[int, float] | The port to connect to. | +| script_path | str | The path used to copy scripts meant for remote execution. | +| timeout | str | The timeout to wait for the connection to become available. | +| use_ntlm | bool | Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. | +| user | str | The user to use for the connection. | + +--- + +##### `host`Required + +```python +host: str +``` + +- _Type:_ str + +The address of the resource to connect to. + +--- + +##### `type`Required + +```python +type: str +``` + +- _Type:_ str + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `cacert`Optional + +```python +cacert: str +``` + +- _Type:_ str + +The CA certificate to validate against. + +--- + +##### `https`Optional + +```python +https: bool +``` + +- _Type:_ bool + +Set to true to connect using HTTPS instead of HTTP. + +--- + +##### `insecure`Optional + +```python +insecure: bool +``` + +- _Type:_ bool + +Set to true to skip validating the HTTPS certificate chain. + +--- + +##### `password`Optional + +```python +password: str +``` + +- _Type:_ str + +The password to use for the connection. + +--- + +##### `port`Optional + +```python +port: typing.Union[int, float] +``` + +- _Type:_ typing.Union[int, float] +- _Default:_ 22 + +The port to connect to. + +--- + +##### `script_path`Optional + +```python +script_path: str +``` + +- _Type:_ str + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `timeout`Optional + +```python +timeout: str +``` + +- _Type:_ str +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `use_ntlm`Optional + +```python +use_ntlm: bool +``` + +- _Type:_ bool + +Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. + +Refer to Authentication for Remote Connections in the Windows App Development documentation for more details. + +--- + +##### `user`Optional + +```python +user: str +``` + +- _Type:_ str +- _Default:_ root + +The user to use for the connection. + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/classes.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/classes.mdx new file mode 100644 index 0000000000..ed21651f18 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/classes.mdx @@ -0,0 +1,13127 @@ +--- +page_title: Typescript Reference for Classes +description: CDKTF Core API Reference for Classes in Typescript. +--- + + + +# Typescript: Classes + +### Annotations + +Includes API for attaching annotations such as warning messages to constructs. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ------------------------------------------------------------------ | +| addError | Adds an { "error": < message > } metadata entry to this construct. | +| addInfo | Adds an info metadata entry to this construct. | +| addWarning | Adds a warning metadata entry to this construct. | + +--- + +##### `addError` + +```typescript +public addError(message: string): void +``` + +Adds an { "error": < message > } metadata entry to this construct. + +The toolkit will fail synthesis when errors are reported. + +###### `message`Required + +- _Type:_ string + +The error message. + +--- + +##### `addInfo` + +```typescript +public addInfo(message: string): void +``` + +Adds an info metadata entry to this construct. + +The CLI will display the info message when apps are synthesized. + +###### `message`Required + +- _Type:_ string + +The info message. + +--- + +##### `addWarning` + +```typescript +public addWarning(message: string): void +``` + +Adds a warning metadata entry to this construct. + +The CLI will display the warning when an app is synthesized. +In a future release the CLI might introduce a --strict flag which +will then fail the synthesis if it encounters a warning. + +###### `message`Required + +- _Type:_ string + +The warning message. + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------- | -------------------------------------------------- | +| of | Returns the annotations API for a construct scope. | + +--- + +##### `of` + +```typescript +import { Annotations } from 'cdktf' + +Annotations.of(scope: IConstruct) +``` + +Returns the annotations API for a construct scope. + +###### `scope`Required + +- _Type:_ constructs.IConstruct + +The scope. + +--- + +### AnyListList + +#### Initializers + +```typescript +import { AnyListList } from 'cdktf' + +new AnyListList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```typescript +public allWithMapKey(mapKeyAttributeName: string): DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): IResolvable +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### AnyListMap + +#### Initializers + +```typescript +import { AnyListMap } from 'cdktf' + +new AnyListMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(key: string): IResolvable +``` + +###### `key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### AnyMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```typescript +import { AnyMap } from 'cdktf' + +new AnyMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `lookup` + +```typescript +public lookup(key: string): any +``` + +###### `key`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### AnyMapList + +#### Initializers + +```typescript +import { AnyMapList } from 'cdktf' + +new AnyMapList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): AnyMap +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### Aspects + +Aspects can be applied to CDK tree scopes and can operate on the tree before synthesis. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------- | ---------------------------------------------------- | +| add | Adds an aspect to apply this scope before synthesis. | + +--- + +##### `add` + +```typescript +public add(aspect: IAspect): void +``` + +Adds an aspect to apply this scope before synthesis. + +###### `aspect`Required + +- _Type:_ IAspect + +The aspect to add. + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------- | --------------------------------------------------------------- | +| of | Returns the `Aspects` object associated with a construct scope. | + +--- + +##### `of` + +```typescript +import { Aspects } from 'cdktf' + +Aspects.of(scope: IConstruct) +``` + +Returns the `Aspects` object associated with a construct scope. + +###### `scope`Required + +- _Type:_ constructs.IConstruct + +The scope for which these aspects will apply. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------- | +| all | IAspect[] | The list of aspects which were directly applied on this scope. | + +--- + +##### `all`Required + +```typescript +public readonly all: IAspect[]; +``` + +- _Type:_ IAspect[] + +The list of aspects which were directly applied on this scope. + +--- + +### AssertionReturn + +Class representing the contents of a return by an assertion. + +#### Initializers + +```typescript +import { testingMatchers } from 'cdktf' + +new testingMatchers.AssertionReturn(message: string, pass: boolean) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------- | +| message | string | - String message containing information about the result of the assertion. | +| pass | boolean | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +- _Type:_ string + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +- _Type:_ boolean + +Boolean pass denoting the success of the assertion. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | -------------------- | -------------------------------------------------------------------------- | +| message | string | - String message containing information about the result of the assertion. | +| pass | boolean | - Boolean pass denoting the success of the assertion. | + +--- + +##### `message`Required + +```typescript +public readonly message: string; +``` + +- _Type:_ string + +String message containing information about the result of the assertion. + +--- + +##### `pass`Required + +```typescript +public readonly pass: boolean; +``` + +- _Type:_ boolean + +Boolean pass denoting the success of the assertion. + +--- + +### BooleanList + +#### Initializers + +```typescript +import { BooleanList } from 'cdktf' + +new BooleanList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```typescript +public allWithMapKey(mapKeyAttributeName: string): DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): IResolvable +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### BooleanListList + +#### Initializers + +```typescript +import { BooleanListList } from 'cdktf' + +new BooleanListList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```typescript +public allWithMapKey(mapKeyAttributeName: string): DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): IResolvable +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### BooleanListMap + +#### Initializers + +```typescript +import { BooleanListMap } from 'cdktf' + +new BooleanListMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(key: string): IResolvable +``` + +###### `key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### BooleanMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```typescript +import { BooleanMap } from 'cdktf' + +new BooleanMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `lookup` + +```typescript +public lookup(key: string): IResolvable +``` + +###### `key`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### BooleanMapList + +#### Initializers + +```typescript +import { BooleanMapList } from 'cdktf' + +new BooleanMapList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): BooleanMap +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### CloudWorkspace + +A cloud workspace can either be a single named workspace, or a list of tagged workspaces. + +#### Initializers + +```typescript +import { CloudWorkspace } from "cdktf"; + +new CloudWorkspace(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| toTerraform | _No description._ | + +--- + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +### ComplexComputedList + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```typescript +import { ComplexComputedList } from 'cdktf' + +new ComplexComputedList(terraformResource: IInterpolatingParent, terraformAttribute: string, complexComputedListIndex: string, wrapsSet?: boolean) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| complexComputedListIndex | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `complexComputedListIndex`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Optional + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### ~~`computeFqn`~~ + +```typescript +public computeFqn(): string +``` + +##### ~~`getAnyMapAttribute`~~ + +```typescript +public getAnyMapAttribute(terraformAttribute: string): {[ key: string ]: any} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getBooleanAttribute`~~ + +```typescript +public getBooleanAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getBooleanMapAttribute`~~ + +```typescript +public getBooleanMapAttribute(terraformAttribute: string): {[ key: string ]: boolean} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getListAttribute`~~ + +```typescript +public getListAttribute(terraformAttribute: string): string[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getNumberAttribute`~~ + +```typescript +public getNumberAttribute(terraformAttribute: string): number +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getNumberListAttribute`~~ + +```typescript +public getNumberListAttribute(terraformAttribute: string): number[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getNumberMapAttribute`~~ + +```typescript +public getNumberMapAttribute(terraformAttribute: string): {[ key: string ]: number} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getStringAttribute`~~ + +```typescript +public getStringAttribute(terraformAttribute: string): string +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`getStringMapAttribute`~~ + +```typescript +public getStringMapAttribute(terraformAttribute: string): {[ key: string ]: string} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### ~~`interpolationForAttribute`~~ + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### ~~`resolve`~~ + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### ~~`toString`~~ + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### ~~`creationStack`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ Going to be replaced by Array of ComplexListItem + and will be removed in the future + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### ComplexList + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```typescript +import { ComplexList } from 'cdktf' + +new ComplexList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `allWithMapKey` + +```typescript +public allWithMapKey(mapKeyAttributeName: string): DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### ComplexMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```typescript +import { ComplexMap } from 'cdktf' + +new ComplexMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### ComplexObject + +- _Implements:_ IInterpolatingParent, IResolvable, ITerraformAddressable + +#### Initializers + +```typescript +import { ComplexObject } from 'cdktf' + +new ComplexObject(terraformResource: IInterpolatingParent, terraformAttribute: string, complexObjectIsFromSet: boolean, complexObjectIndex?: string | number) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| complexObjectIsFromSet | boolean | set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. | +| complexObjectIndex | string \| number | the index of the complex object in a list. | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `complexObjectIsFromSet`Required + +- _Type:_ boolean + +set to true if this item is from inside a set and needs tolist() for accessing it set to "0" for single list items. + +--- + +##### `complexObjectIndex`Optional + +- _Type:_ string | number + +the index of the complex object in a list. + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `getAnyMapAttribute` + +```typescript +public getAnyMapAttribute(terraformAttribute: string): {[ key: string ]: any} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanAttribute` + +```typescript +public getBooleanAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanMapAttribute` + +```typescript +public getBooleanMapAttribute(terraformAttribute: string): {[ key: string ]: boolean} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getListAttribute` + +```typescript +public getListAttribute(terraformAttribute: string): string[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberAttribute` + +```typescript +public getNumberAttribute(terraformAttribute: string): number +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberListAttribute` + +```typescript +public getNumberListAttribute(terraformAttribute: string): number[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberMapAttribute` + +```typescript +public getNumberMapAttribute(terraformAttribute: string): {[ key: string ]: number} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringAttribute` + +```typescript +public getStringAttribute(terraformAttribute: string): string +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringMapAttribute` + +```typescript +public getStringMapAttribute(terraformAttribute: string): {[ key: string ]: string} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### DefaultTokenResolver + +- _Implements:_ ITokenResolver + +Default resolver implementation. + +#### Initializers + +```typescript +import { DefaultTokenResolver } from 'cdktf' + +new DefaultTokenResolver(concat: IFragmentConcatenator) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------- | +| concat | IFragmentConcatenator | _No description._ | + +--- + +##### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------- | +| resolveList | Resolves a list of string. | +| resolveMap | Resolves a map token. | +| resolveNumberList | Resolves a list of numbers. | +| resolveString | Resolve string fragments to Tokens. | +| resolveToken | Default Token resolution. | + +--- + +##### `resolveList` + +```typescript +public resolveList(xs: string[], context: IResolveContext): any +``` + +Resolves a list of string. + +###### `xs`Required + +- _Type:_ string[] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveMap` + +```typescript +public resolveMap(xs: {[ key: string ]: any}, context: IResolveContext): any +``` + +Resolves a map token. + +###### `xs`Required + +- _Type:_ {[ key: string ]: any} + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveNumberList` + +```typescript +public resolveNumberList(xs: number[], context: IResolveContext): any +``` + +Resolves a list of numbers. + +###### `xs`Required + +- _Type:_ number[] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveString` + +```typescript +public resolveString(fragments: TokenizedStringFragments, context: IResolveContext): any +``` + +Resolve string fragments to Tokens. + +###### `fragments`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveToken` + +```typescript +public resolveToken(t: IResolvable, context: IResolveContext, postProcessor: IPostProcessor): any +``` + +Default Token resolution. + +Resolve the Token, recurse into whatever it returns, +then finally post-process it. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +### DynamicListTerraformIterator + +#### Initializers + +```typescript +import { DynamicListTerraformIterator } from 'cdktf' + +new DynamicListTerraformIterator(list: string[] | IResolvable | number[] | boolean | IResolvable[], mapKeyAttributeName: string) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| list | string[] \| IResolvable \| number[] \| boolean \| IResolvable[] | _No description._ | +| mapKeyAttributeName | string | _No description._ | + +--- + +##### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +##### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```typescript +public dynamic(attributes: {[ key: string ]: any}): IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ {[ key: string ]: any} + +--- + +##### `forExpressionForList` + +```typescript +public forExpressionForList(expression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ string | IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```typescript +public forExpressionForMap(keyExpression: string | IResolvable, valueExpression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```typescript +public getAny(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```typescript +public getAnyMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```typescript +public getBoolean(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```typescript +public getBooleanMap(attribute: string): {[ key: string ]: boolean} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getList` + +```typescript +public getList(attribute: string): string[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getMap` + +```typescript +public getMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumber` + +```typescript +public getNumber(attribute: string): number +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```typescript +public getNumberList(attribute: string): number[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```typescript +public getNumberMap(attribute: string): {[ key: string ]: number} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getString` + +```typescript +public getString(attribute: string): string +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```typescript +public getStringMap(attribute: string): {[ key: string ]: string} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `keys` + +```typescript +public keys(): IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```typescript +public pluckProperty(property: string): IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `values` + +```typescript +public values(): IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```typescript +import { DynamicListTerraformIterator } from 'cdktf' + +DynamicListTerraformIterator.fromComplexList(list: IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList, mapKeyAttributeName: string) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```typescript +const cert = new AcmCertificate(this, "cert", { + domainName: "example.com", + validationMethod: "DNS", +}); + +const dvoIterator = TerraformIterator.fromComplexList( + cert.domainValidationOptions, + "domain_name", +); + +new Route53Record(this, "record", { + allowOverwrite: true, + name: dvoIterator.getString("name"), + records: [dvoIterator.getString("record")], + ttl: 60, + type: dvoIterator.getString("type"), + zoneId: Token.asString(dataAwsRoute53ZoneExample.zoneId), + forEach: dvoIterator, +}); +``` + +###### `list`Required + +- _Type:_ IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```typescript +import { DynamicListTerraformIterator } from 'cdktf' + +DynamicListTerraformIterator.fromDataSources(resource: ITerraformResource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```typescript +import { DynamicListTerraformIterator } from 'cdktf' + +DynamicListTerraformIterator.fromList(list: string[] | IResolvable | number[] | boolean | IResolvable[]) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +##### `fromMap` + +```typescript +import { DynamicListTerraformIterator } from 'cdktf' + +DynamicListTerraformIterator.fromMap(map: ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean}) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean} + +--- + +##### `fromResources` + +```typescript +import { DynamicListTerraformIterator } from 'cdktf' + +DynamicListTerraformIterator.fromResources(resource: ITerraformResource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------- | +| key | string | Returns the key of the current entry in the map that is being iterated over. | +| value | any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +Returns the value of the current item iterated over. + +--- + +### Fn + +#### Initializers + +```typescript +import { Fn } from "cdktf"; + +new Fn(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| file | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| lengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| one | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | +| bcrypt | {@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. | +| conditional | {@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. | +| join | {@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. | +| lookup | {@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. | +| lookupNested | returns a property access expression that accesses the property at the given path in the given inputMap. | +| range | {@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. | +| rawString | Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). | + +--- + +##### `abs` + +```typescript +import { Fn } from 'cdktf' + +Fn.abs(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ number + +--- + +##### `abspath` + +```typescript +import { Fn } from 'cdktf' + +Fn.abspath(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ string + +--- + +##### `alltrue` + +```typescript +import { Fn } from 'cdktf' + +Fn.alltrue(list: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ any[] + +--- + +##### `anytrue` + +```typescript +import { Fn } from 'cdktf' + +Fn.anytrue(list: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ any[] + +--- + +##### `base64decode` + +```typescript +import { Fn } from 'cdktf' + +Fn.base64decode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64encode` + +```typescript +import { Fn } from 'cdktf' + +Fn.base64encode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64gzip` + +```typescript +import { Fn } from 'cdktf' + +Fn.base64gzip(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64sha256` + +```typescript +import { Fn } from 'cdktf' + +Fn.base64sha256(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64sha512` + +```typescript +import { Fn } from 'cdktf' + +Fn.base64sha512(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ string + +--- + +##### `basename` + +```typescript +import { Fn } from 'cdktf' + +Fn.basename(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ string + +--- + +##### `can` + +```typescript +import { Fn } from 'cdktf' + +Fn.can(expression: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ any + +--- + +##### `ceil` + +```typescript +import { Fn } from 'cdktf' + +Fn.ceil(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ number + +--- + +##### `chomp` + +```typescript +import { Fn } from 'cdktf' + +Fn.chomp(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `chunklist` + +```typescript +import { Fn } from 'cdktf' + +Fn.chunklist(list: any[], size: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ any[] + +--- + +###### `size`Required + +- _Type:_ number + +--- + +##### `cidrhost` + +```typescript +import { Fn } from 'cdktf' + +Fn.cidrhost(prefix: string, hostnum: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ string + +--- + +###### `hostnum`Required + +- _Type:_ number + +--- + +##### `cidrnetmask` + +```typescript +import { Fn } from 'cdktf' + +Fn.cidrnetmask(prefix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ string + +--- + +##### `cidrsubnet` + +```typescript +import { Fn } from 'cdktf' + +Fn.cidrsubnet(prefix: string, newbits: number, netnum: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ string + +--- + +###### `newbits`Required + +- _Type:_ number + +--- + +###### `netnum`Required + +- _Type:_ number + +--- + +##### `cidrsubnets` + +```typescript +import { Fn } from 'cdktf' + +Fn.cidrsubnets(prefix: string, newbits: number[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ string + +--- + +###### `newbits`Required + +- _Type:_ number[] + +--- + +##### `coalesce` + +```typescript +import { Fn } from 'cdktf' + +Fn.coalesce(vals: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ any[] + +--- + +##### `coalescelist` + +```typescript +import { Fn } from 'cdktf' + +Fn.coalescelist(vals: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ any[] + +--- + +##### `compact` + +```typescript +import { Fn } from 'cdktf' + +Fn.compact(list: string[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ string[] + +--- + +##### `concat` + +```typescript +import { Fn } from 'cdktf' + +Fn.concat(seqs: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ any[] + +--- + +##### `contains` + +```typescript +import { Fn } from 'cdktf' + +Fn.contains(list: any, value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ any + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `csvdecode` + +```typescript +import { Fn } from 'cdktf' + +Fn.csvdecode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ string + +--- + +##### `dirname` + +```typescript +import { Fn } from 'cdktf' + +Fn.dirname(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ string + +--- + +##### `distinct` + +```typescript +import { Fn } from 'cdktf' + +Fn.distinct(list: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ any[] + +--- + +##### `element` + +```typescript +import { Fn } from 'cdktf' + +Fn.element(list: any, index: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ any + +--- + +###### `index`Required + +- _Type:_ number + +--- + +##### `endswith` + +```typescript +import { Fn } from 'cdktf' + +Fn.endswith(str: string, suffix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ string + +--- + +###### `suffix`Required + +- _Type:_ string + +--- + +##### `file` + +```typescript +import { Fn } from 'cdktf' + +Fn.file(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filebase64` + +```typescript +import { Fn } from 'cdktf' + +Fn.filebase64(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filebase64sha256` + +```typescript +import { Fn } from 'cdktf' + +Fn.filebase64sha256(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filebase64sha512` + +```typescript +import { Fn } from 'cdktf' + +Fn.filebase64sha512(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `fileexists` + +```typescript +import { Fn } from 'cdktf' + +Fn.fileexists(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filemd5` + +```typescript +import { Fn } from 'cdktf' + +Fn.filemd5(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `fileset` + +```typescript +import { Fn } from 'cdktf' + +Fn.fileset(path: string, pattern: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ string + +--- + +###### `pattern`Required + +- _Type:_ string + +--- + +##### `filesha1` + +```typescript +import { Fn } from 'cdktf' + +Fn.filesha1(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filesha256` + +```typescript +import { Fn } from 'cdktf' + +Fn.filesha256(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filesha512` + +```typescript +import { Fn } from 'cdktf' + +Fn.filesha512(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `flatten` + +```typescript +import { Fn } from 'cdktf' + +Fn.flatten(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ any + +--- + +##### `floor` + +```typescript +import { Fn } from 'cdktf' + +Fn.floor(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ number + +--- + +##### `format` + +```typescript +import { Fn } from 'cdktf' + +Fn.format(format: string, args: any[]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ string + +--- + +###### `args`Required + +- _Type:_ any[] + +--- + +##### `formatdate` + +```typescript +import { Fn } from 'cdktf' + +Fn.formatdate(format: string, time: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ string + +--- + +###### `time`Required + +- _Type:_ string + +--- + +##### `formatlist` + +```typescript +import { Fn } from 'cdktf' + +Fn.formatlist(format: string, args: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ string + +--- + +###### `args`Required + +- _Type:_ any[] + +--- + +##### `indent` + +```typescript +import { Fn } from 'cdktf' + +Fn.indent(spaces: number, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ number + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `index` + +```typescript +import { Fn } from 'cdktf' + +Fn.index(list: any, value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ any + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `jsondecode` + +```typescript +import { Fn } from 'cdktf' + +Fn.jsondecode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `jsonencode` + +```typescript +import { Fn } from 'cdktf' + +Fn.jsonencode(val: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ any + +--- + +##### `keys` + +```typescript +import { Fn } from 'cdktf' + +Fn.keys(inputMap: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `inputMap`Required + +- _Type:_ any + +--- + +##### `lengthOf` + +```typescript +import { Fn } from 'cdktf' + +Fn.lengthOf(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ any + +--- + +##### `log` + +```typescript +import { Fn } from 'cdktf' + +Fn.log(num: number, base: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ number + +--- + +###### `base`Required + +- _Type:_ number + +--- + +##### `lower` + +```typescript +import { Fn } from 'cdktf' + +Fn.lower(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ string + +--- + +##### `matchkeys` + +```typescript +import { Fn } from 'cdktf' + +Fn.matchkeys(values: any[], keys: any[], searchset: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ any[] + +--- + +###### `keys`Required + +- _Type:_ any[] + +--- + +###### `searchset`Required + +- _Type:_ any[] + +--- + +##### `max` + +```typescript +import { Fn } from 'cdktf' + +Fn.max(numbers: number[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ number[] + +--- + +##### `md5` + +```typescript +import { Fn } from 'cdktf' + +Fn.md5(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `merge` + +```typescript +import { Fn } from 'cdktf' + +Fn.merge(maps: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ any[] + +--- + +##### `min` + +```typescript +import { Fn } from 'cdktf' + +Fn.min(numbers: number[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ number[] + +--- + +##### `nonsensitive` + +```typescript +import { Fn } from 'cdktf' + +Fn.nonsensitive(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ any + +--- + +##### `one` + +```typescript +import { Fn } from 'cdktf' + +Fn.one(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ any + +--- + +##### `parseint` + +```typescript +import { Fn } from 'cdktf' + +Fn.parseint(number: any, base: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ any + +--- + +###### `base`Required + +- _Type:_ number + +--- + +##### `pathexpand` + +```typescript +import { Fn } from 'cdktf' + +Fn.pathexpand(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ string + +--- + +##### `plantimestamp` + +```typescript +import { Fn } from "cdktf"; + +Fn.plantimestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `pow` + +```typescript +import { Fn } from 'cdktf' + +Fn.pow(num: number, power: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ number + +--- + +###### `power`Required + +- _Type:_ number + +--- + +##### `regex` + +```typescript +import { Fn } from 'cdktf' + +Fn.regex(pattern: string, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ string + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `regexall` + +```typescript +import { Fn } from 'cdktf' + +Fn.regexall(pattern: string, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ string + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `replace` + +```typescript +import { Fn } from 'cdktf' + +Fn.replace(str: string, substr: string, replace: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ string + +--- + +###### `substr`Required + +- _Type:_ string + +--- + +###### `replace`Required + +- _Type:_ string + +--- + +##### `reverse` + +```typescript +import { Fn } from 'cdktf' + +Fn.reverse(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ any + +--- + +##### `rsadecrypt` + +```typescript +import { Fn } from 'cdktf' + +Fn.rsadecrypt(ciphertext: string, privatekey: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ string + +--- + +###### `privatekey`Required + +- _Type:_ string + +--- + +##### `sensitive` + +```typescript +import { Fn } from 'cdktf' + +Fn.sensitive(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ any + +--- + +##### `setintersection` + +```typescript +import { Fn } from 'cdktf' + +Fn.setintersection(first_set: any[], other_sets: any[][]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ any[] + +--- + +###### `other_sets`Required + +- _Type:_ any[][] + +--- + +##### `setproduct` + +```typescript +import { Fn } from 'cdktf' + +Fn.setproduct(sets: any[]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ any[] + +--- + +##### `setsubtract` + +```typescript +import { Fn } from 'cdktf' + +Fn.setsubtract(a: any[], b: any[]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ any[] + +--- + +###### `b`Required + +- _Type:_ any[] + +--- + +##### `setunion` + +```typescript +import { Fn } from 'cdktf' + +Fn.setunion(first_set: any[], other_sets: any[][]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ any[] + +--- + +###### `other_sets`Required + +- _Type:_ any[][] + +--- + +##### `sha1` + +```typescript +import { Fn } from 'cdktf' + +Fn.sha1(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `sha256` + +```typescript +import { Fn } from 'cdktf' + +Fn.sha256(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `sha512` + +```typescript +import { Fn } from 'cdktf' + +Fn.sha512(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `signum` + +```typescript +import { Fn } from 'cdktf' + +Fn.signum(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ number + +--- + +##### `slice` + +```typescript +import { Fn } from 'cdktf' + +Fn.slice(list: any, start_index: number, end_index: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ any + +--- + +###### `start_index`Required + +- _Type:_ number + +--- + +###### `end_index`Required + +- _Type:_ number + +--- + +##### `sort` + +```typescript +import { Fn } from 'cdktf' + +Fn.sort(list: string[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ string[] + +--- + +##### `split` + +```typescript +import { Fn } from 'cdktf' + +Fn.split(separator: string, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ string + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `startswith` + +```typescript +import { Fn } from 'cdktf' + +Fn.startswith(str: string, prefix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ string + +--- + +###### `prefix`Required + +- _Type:_ string + +--- + +##### `strcontains` + +```typescript +import { Fn } from 'cdktf' + +Fn.strcontains(str: string, substr: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ string + +--- + +###### `substr`Required + +- _Type:_ string + +--- + +##### `strrev` + +```typescript +import { Fn } from 'cdktf' + +Fn.strrev(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ string + +--- + +##### `substr` + +```typescript +import { Fn } from 'cdktf' + +Fn.substr(str: string, offset: number, length: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ string + +--- + +###### `offset`Required + +- _Type:_ number + +--- + +###### `length`Required + +- _Type:_ number + +--- + +##### `sum` + +```typescript +import { Fn } from 'cdktf' + +Fn.sum(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ any + +--- + +##### `templatefile` + +```typescript +import { Fn } from 'cdktf' + +Fn.templatefile(path: string, vars: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ string + +--- + +###### `vars`Required + +- _Type:_ any + +--- + +##### `textdecodebase64` + +```typescript +import { Fn } from 'cdktf' + +Fn.textdecodebase64(source: string, encoding: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ string + +--- + +###### `encoding`Required + +- _Type:_ string + +--- + +##### `textencodebase64` + +```typescript +import { Fn } from 'cdktf' + +Fn.textencodebase64(str: string, encoding: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ string + +--- + +###### `encoding`Required + +- _Type:_ string + +--- + +##### `timeadd` + +```typescript +import { Fn } from 'cdktf' + +Fn.timeadd(timestamp: string, duration: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ string + +--- + +###### `duration`Required + +- _Type:_ string + +--- + +##### `timecmp` + +```typescript +import { Fn } from 'cdktf' + +Fn.timecmp(timestamp_a: string, timestamp_b: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ string + +--- + +###### `timestamp_b`Required + +- _Type:_ string + +--- + +##### `timestamp` + +```typescript +import { Fn } from "cdktf"; + +Fn.timestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `title` + +```typescript +import { Fn } from 'cdktf' + +Fn.title(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ string + +--- + +##### `tobool` + +```typescript +import { Fn } from 'cdktf' + +Fn.tobool(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tolist` + +```typescript +import { Fn } from 'cdktf' + +Fn.tolist(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tomap` + +```typescript +import { Fn } from 'cdktf' + +Fn.tomap(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tonumber` + +```typescript +import { Fn } from 'cdktf' + +Fn.tonumber(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `toset` + +```typescript +import { Fn } from 'cdktf' + +Fn.toset(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tostring` + +```typescript +import { Fn } from 'cdktf' + +Fn.tostring(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `transpose` + +```typescript +import { Fn } from 'cdktf' + +Fn.transpose(values: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ any + +--- + +##### `trim` + +```typescript +import { Fn } from 'cdktf' + +Fn.trim(str: string, cutset: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ string + +--- + +###### `cutset`Required + +- _Type:_ string + +--- + +##### `trimprefix` + +```typescript +import { Fn } from 'cdktf' + +Fn.trimprefix(str: string, prefix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ string + +--- + +###### `prefix`Required + +- _Type:_ string + +--- + +##### `trimspace` + +```typescript +import { Fn } from 'cdktf' + +Fn.trimspace(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `trimsuffix` + +```typescript +import { Fn } from 'cdktf' + +Fn.trimsuffix(str: string, suffix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ string + +--- + +###### `suffix`Required + +- _Type:_ string + +--- + +##### `try` + +```typescript +import { Fn } from 'cdktf' + +Fn.try(expressions: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ any[] + +--- + +##### `upper` + +```typescript +import { Fn } from 'cdktf' + +Fn.upper(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ string + +--- + +##### `urlencode` + +```typescript +import { Fn } from 'cdktf' + +Fn.urlencode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `uuid` + +```typescript +import { Fn } from "cdktf"; + +Fn.uuid(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `uuidv5` + +```typescript +import { Fn } from 'cdktf' + +Fn.uuidv5(namespace: string, name: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ string + +--- + +###### `name`Required + +- _Type:_ string + +--- + +##### `values` + +```typescript +import { Fn } from 'cdktf' + +Fn.values(mapping: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ any + +--- + +##### `yamldecode` + +```typescript +import { Fn } from 'cdktf' + +Fn.yamldecode(src: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ string + +--- + +##### `yamlencode` + +```typescript +import { Fn } from 'cdktf' + +Fn.yamlencode(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ any + +--- + +##### `zipmap` + +```typescript +import { Fn } from 'cdktf' + +Fn.zipmap(keys: string[], values: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ string[] + +--- + +###### `values`Required + +- _Type:_ any + +--- + +##### `bcrypt` + +```typescript +import { Fn } from 'cdktf' + +Fn.bcrypt(str: string, cost?: number) +``` + +{@link /terraform/docs/language/functions/bcrypt.html bcrypt} computes a hash of the given string using the Blowfish cipher, returning a string in [the _Modular Crypt Format_](https://passlib.readthedocs.io/en/stable/modular_crypt_format.html) usually expected in the shadow password file on many Unix systems. + +###### `str`Required + +- _Type:_ string + +--- + +###### `cost`Optional + +- _Type:_ number + +--- + +##### `conditional` + +```typescript +import { Fn } from 'cdktf' + +Fn.conditional(condition: any, trueValue: any, falseValue: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/expressions/conditionals} A conditional expression uses the value of a boolean expression to select one of two values. + +###### `condition`Required + +- _Type:_ any + +--- + +###### `trueValue`Required + +- _Type:_ any + +--- + +###### `falseValue`Required + +- _Type:_ any + +--- + +##### `join` + +```typescript +import { Fn } from 'cdktf' + +Fn.join(separator: string, list: string[]) +``` + +{@link /terraform/docs/language/functions/join.html join} produces a string by concatenating together all elements of a given list of strings with the given delimiter. + +###### `separator`Required + +- _Type:_ string + +--- + +###### `list`Required + +- _Type:_ string[] + +--- + +##### `lookup` + +```typescript +import { Fn } from 'cdktf' + +Fn.lookup(inputMap: any, key: string, defaultValue?: any) +``` + +{@link /terraform/docs/language/functions/lookup.html lookup} retrieves the value of a single element from a map, given its key. If the given key does not exist, the given default value is returned instead. + +###### `inputMap`Required + +- _Type:_ any + +--- + +###### `key`Required + +- _Type:_ string + +--- + +###### `defaultValue`Optional + +- _Type:_ any + +--- + +##### `lookupNested` + +```typescript +import { Fn } from 'cdktf' + +Fn.lookupNested(inputMap: any, path: any[]) +``` + +returns a property access expression that accesses the property at the given path in the given inputMap. + +For example lookupNested(x, ["a", "b", "c"]) will return a Terraform expression like x["a"]["b"]["c"] + +###### `inputMap`Required + +- _Type:_ any + +--- + +###### `path`Required + +- _Type:_ any[] + +--- + +##### `range` + +```typescript +import { Fn } from 'cdktf' + +Fn.range(start: number, limit: number, step?: number) +``` + +{@link /terraform/docs/language/functions/range.html range} generates a list of numbers using a start value, a limit value, and a step value. + +###### `start`Required + +- _Type:_ number + +--- + +###### `limit`Required + +- _Type:_ number + +--- + +###### `step`Optional + +- _Type:_ number + +--- + +##### `rawString` + +```typescript +import { Fn } from 'cdktf' + +Fn.rawString(str: string) +``` + +Use this function to wrap a string and escape it properly for the use in Terraform This is only needed in certain scenarios (e.g., if you have unescaped double quotes in the string). + +###### `str`Required + +- _Type:_ string + +--- + +### FnGenerated + +#### Initializers + +```typescript +import { FnGenerated } from "cdktf"; + +new FnGenerated(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| abs | {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. | +| abspath | {@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. | +| alltrue | {@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. | +| anytrue | {@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. | +| base64decode | {@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. | +| base64encode | {@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. | +| base64gzip | {@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. | +| base64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. | +| base64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. | +| basename | {@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. | +| can | {@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. | +| ceil | {@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. | +| chomp | {@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. | +| chunklist | {@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. | +| cidrhost | {@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. | +| cidrnetmask | {@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. | +| cidrsubnet | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. | +| cidrsubnets | {@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. | +| coalesce | {@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. | +| coalescelist | {@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. | +| compact | {@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. | +| concat | {@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. | +| contains | {@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. | +| csvdecode | {@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. | +| dirname | {@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. | +| distinct | {@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. | +| element | {@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. | +| endswith | {@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. | +| file | {@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. | +| filebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. | +| filebase64sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. | +| filebase64sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. | +| fileexists | {@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. | +| filemd5 | {@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. | +| fileset | {@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. | +| filesha1 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. | +| filesha256 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. | +| filesha512 | {@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. | +| flatten | {@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. | +| floor | {@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. | +| format | The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. | +| formatdate | {@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. | +| formatlist | {@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. | +| indent | {@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. | +| index | {@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. | +| jsondecode | {@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. | +| jsonencode | {@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. | +| keys | {@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. | +| lengthOf | {@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. | +| log | {@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. | +| lower | {@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. | +| matchkeys | {@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. | +| max | {@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. | +| md5 | {@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. | +| merge | {@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. | +| min | {@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. | +| nonsensitive | {@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. | +| one | {@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. | +| parseint | {@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. | +| pathexpand | {@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. | +| plantimestamp | {@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. | +| pow | {@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. | +| regex | {@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. | +| regexall | {@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. | +| replace | {@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. | +| reverse | {@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. | +| rsadecrypt | {@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. | +| sensitive | {@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). | +| setintersection | The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. | +| setproduct | The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). | +| setsubtract | The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. | +| setunion | The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. | +| sha1 | {@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. | +| sha256 | {@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. | +| sha512 | {@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. | +| signum | {@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. | +| slice | {@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. | +| sort | {@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. | +| split | {@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. | +| startswith | {@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. | +| strcontains | {@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. | +| strrev | {@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). | +| substr | {@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. | +| sum | {@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. | +| templatefile | {@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. | +| textdecodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. | +| textencodebase64 | {@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. | +| timeadd | {@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. | +| timecmp | {@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. | +| timestamp | {@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. | +| title | {@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. | +| tobool | {@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. | +| tolist | {@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. | +| tomap | {@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. | +| tonumber | {@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. | +| toset | {@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. | +| tostring | {@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. | +| transpose | {@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. | +| trim | {@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. | +| trimprefix | {@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. | +| trimspace | {@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. | +| trimsuffix | {@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. | +| try | {@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. | +| upper | {@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. | +| urlencode | {@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. | +| uuid | {@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. | +| uuidv5 | {@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. | +| values | {@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. | +| yamldecode | {@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. | +| yamlencode | {@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. | +| zipmap | {@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. | + +--- + +##### `abs` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.abs(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it. + +###### `num`Required + +- _Type:_ number + +--- + +##### `abspath` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.abspath(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/abspath abspath} takes a string containing a filesystem path and converts it to an absolute path. That is, if the path is not absolute, it will be joined with the current working directory. + +###### `path`Required + +- _Type:_ string + +--- + +##### `alltrue` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.alltrue(list: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/alltrue alltrue} returns `true` if all elements in a given collection are `true` or `"true"`. It also returns `true` if the collection is empty. + +###### `list`Required + +- _Type:_ any[] + +--- + +##### `anytrue` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.anytrue(list: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/anytrue anytrue} returns `true` if any element in a given collection is `true` or `"true"`. It also returns `false` if the collection is empty. + +###### `list`Required + +- _Type:_ any[] + +--- + +##### `base64decode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.base64decode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64decode base64decode} takes a string containing a Base64 character sequence and returns the original string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64encode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.base64encode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64encode base64encode} applies Base64 encoding to a string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64gzip` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.base64gzip(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64gzip base64gzip} compresses a string with gzip and then encodes the result in Base64 encoding. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64sha256` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.base64sha256(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha256 base64sha256} computes the SHA256 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha256("test"))` since `sha256()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ string + +--- + +##### `base64sha512` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.base64sha512(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/base64sha512 base64sha512} computes the SHA512 hash of a given string and encodes it with Base64. This is not equivalent to `base64encode(sha512("test"))` since `sha512()` returns hexadecimal representation. + +###### `str`Required + +- _Type:_ string + +--- + +##### `basename` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.basename(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/basename basename} takes a string containing a filesystem path and removes all except the last portion from it. + +###### `path`Required + +- _Type:_ string + +--- + +##### `can` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.can(expression: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/can can} evaluates the given expression and returns a boolean value indicating whether the expression produced a result without any errors. + +###### `expression`Required + +- _Type:_ any + +--- + +##### `ceil` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.ceil(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/ceil ceil} returns the closest whole number that is greater than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ number + +--- + +##### `chomp` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.chomp(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chomp chomp} removes newline characters at the end of a string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `chunklist` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.chunklist(list: any[], size: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/chunklist chunklist} splits a single list into fixed-size chunks, returning a list of lists. + +###### `list`Required + +- _Type:_ any[] + +--- + +###### `size`Required + +- _Type:_ number + +--- + +##### `cidrhost` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.cidrhost(prefix: string, hostnum: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrhost cidrhost} calculates a full host IP address for a given host number within a given IP network address prefix. + +###### `prefix`Required + +- _Type:_ string + +--- + +###### `hostnum`Required + +- _Type:_ number + +--- + +##### `cidrnetmask` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.cidrnetmask(prefix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrnetmask cidrnetmask} converts an IPv4 address prefix given in CIDR notation into a subnet mask address. + +###### `prefix`Required + +- _Type:_ string + +--- + +##### `cidrsubnet` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.cidrsubnet(prefix: string, newbits: number, netnum: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnet cidrsubnet} calculates a subnet address within given IP network address prefix. + +###### `prefix`Required + +- _Type:_ string + +--- + +###### `newbits`Required + +- _Type:_ number + +--- + +###### `netnum`Required + +- _Type:_ number + +--- + +##### `cidrsubnets` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.cidrsubnets(prefix: string, newbits: number[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/cidrsubnets cidrsubnets} calculates a sequence of consecutive IP address ranges within a particular CIDR prefix. + +###### `prefix`Required + +- _Type:_ string + +--- + +###### `newbits`Required + +- _Type:_ number[] + +--- + +##### `coalesce` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.coalesce(vals: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalesce coalesce} takes any number of arguments and returns the first one that isn't null or an empty string. + +###### `vals`Required + +- _Type:_ any[] + +--- + +##### `coalescelist` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.coalescelist(vals: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/coalescelist coalescelist} takes any number of list arguments and returns the first one that isn't empty. + +###### `vals`Required + +- _Type:_ any[] + +--- + +##### `compact` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.compact(list: string[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/compact compact} takes a list of strings and returns a new list with any empty string elements removed. + +###### `list`Required + +- _Type:_ string[] + +--- + +##### `concat` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.concat(seqs: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/concat concat} takes two or more lists and combines them into a single list. + +###### `seqs`Required + +- _Type:_ any[] + +--- + +##### `contains` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.contains(list: any, value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/contains contains} determines whether a given list or set contains a given single value as one of its elements. + +###### `list`Required + +- _Type:_ any + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `csvdecode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.csvdecode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/csvdecode csvdecode} decodes a string containing CSV-formatted data and produces a list of maps representing that data. + +###### `str`Required + +- _Type:_ string + +--- + +##### `dirname` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.dirname(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/dirname dirname} takes a string containing a filesystem path and removes the last portion from it. + +###### `path`Required + +- _Type:_ string + +--- + +##### `distinct` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.distinct(list: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/distinct distinct} takes a list and returns a new list with any duplicate elements removed. + +###### `list`Required + +- _Type:_ any[] + +--- + +##### `element` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.element(list: any, index: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/element element} retrieves a single element from a list. + +###### `list`Required + +- _Type:_ any + +--- + +###### `index`Required + +- _Type:_ number + +--- + +##### `endswith` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.endswith(str: string, suffix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/endswith endswith} takes two values: a string to check and a suffix string. The function returns true if the first string ends with that exact suffix. + +###### `str`Required + +- _Type:_ string + +--- + +###### `suffix`Required + +- _Type:_ string + +--- + +##### `file` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.file(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/file file} reads the contents of a file at the given path and returns them as a string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filebase64` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filebase64(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64 filebase64} reads the contents of a file at the given path and returns them as a base64-encoded string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filebase64sha256` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filebase64sha256(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha256 filebase64sha256} is a variant of `base64sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filebase64sha512` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filebase64sha512(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filebase64sha512 filebase64sha512} is a variant of `base64sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `fileexists` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.fileexists(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileexists fileexists} determines whether a file exists at a given path. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filemd5` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filemd5(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filemd5 filemd5} is a variant of `md5` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `fileset` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.fileset(path: string, pattern: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/fileset fileset} enumerates a set of regular file names given a path and pattern. The path is automatically removed from the resulting set of file names and any result still containing path separators always returns forward slash (`/`) as the path separator for cross-system compatibility. + +###### `path`Required + +- _Type:_ string + +--- + +###### `pattern`Required + +- _Type:_ string + +--- + +##### `filesha1` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filesha1(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha1 filesha1} is a variant of `sha1` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filesha256` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filesha256(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha256 filesha256} is a variant of `sha256` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `filesha512` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.filesha512(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/filesha512 filesha512} is a variant of `sha512` that hashes the contents of a given file rather than a literal string. + +###### `path`Required + +- _Type:_ string + +--- + +##### `flatten` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.flatten(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/flatten flatten} takes a list and replaces any elements that are lists with a flattened sequence of the list contents. + +###### `list`Required + +- _Type:_ any + +--- + +##### `floor` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.floor(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/floor floor} returns the closest whole number that is less than or equal to the given value, which may be a fraction. + +###### `num`Required + +- _Type:_ number + +--- + +##### `format` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.format(format: string, args: any[]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/format format} function produces a string by formatting a number of other values according to a specification string. It is similar to the `printf` function in C, and other similar functions in other programming languages. + +###### `format`Required + +- _Type:_ string + +--- + +###### `args`Required + +- _Type:_ any[] + +--- + +##### `formatdate` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.formatdate(format: string, time: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatdate formatdate} converts a timestamp into a different time format. + +###### `format`Required + +- _Type:_ string + +--- + +###### `time`Required + +- _Type:_ string + +--- + +##### `formatlist` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.formatlist(format: string, args: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/formatlist formatlist} produces a list of strings by formatting a number of other values according to a specification string. + +###### `format`Required + +- _Type:_ string + +--- + +###### `args`Required + +- _Type:_ any[] + +--- + +##### `indent` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.indent(spaces: number, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/indent indent} adds a given number of spaces to the beginnings of all but the first line in a given multi-line string. + +###### `spaces`Required + +- _Type:_ number + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `index` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.index(list: any, value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/index index} finds the element index for a given value in a list. + +###### `list`Required + +- _Type:_ any + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `jsondecode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.jsondecode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsondecode jsondecode} interprets a given string as JSON, returning a representation of the result of decoding that string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `jsonencode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.jsonencode(val: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/jsonencode jsonencode} encodes a given value to a string using JSON syntax. + +###### `val`Required + +- _Type:_ any + +--- + +##### `keys` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.keys(inputMap: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/keys keys} takes a map and returns a list containing the keys from that map. + +###### `inputMap`Required + +- _Type:_ any + +--- + +##### `lengthOf` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.lengthOf(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/length length} determines the length of a given list, map, or string. + +###### `value`Required + +- _Type:_ any + +--- + +##### `log` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.log(num: number, base: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/log log} returns the logarithm of a given number in a given base. + +###### `num`Required + +- _Type:_ number + +--- + +###### `base`Required + +- _Type:_ number + +--- + +##### `lower` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.lower(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/lower lower} converts all cased letters in the given string to lowercase. + +###### `str`Required + +- _Type:_ string + +--- + +##### `matchkeys` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.matchkeys(values: any[], keys: any[], searchset: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/matchkeys matchkeys} constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. + +###### `values`Required + +- _Type:_ any[] + +--- + +###### `keys`Required + +- _Type:_ any[] + +--- + +###### `searchset`Required + +- _Type:_ any[] + +--- + +##### `max` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.max(numbers: number[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/max max} takes one or more numbers and returns the greatest number from the set. + +###### `numbers`Required + +- _Type:_ number[] + +--- + +##### `md5` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.md5(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/md5 md5} computes the MD5 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `merge` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.merge(maps: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/merge merge} takes an arbitrary number of maps or objects, and returns a single map or object that contains a merged set of elements from all arguments. + +###### `maps`Required + +- _Type:_ any[] + +--- + +##### `min` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.min(numbers: number[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/min min} takes one or more numbers and returns the smallest number from the set. + +###### `numbers`Required + +- _Type:_ number[] + +--- + +##### `nonsensitive` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.nonsensitive(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/nonsensitive nonsensitive} takes a sensitive value and returns a copy of that value with the sensitive marking removed, thereby exposing the sensitive value. + +###### `value`Required + +- _Type:_ any + +--- + +##### `one` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.one(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/one one} takes a list, set, or tuple value with either zero or one elements. If the collection is empty, `one` returns `null`. Otherwise, `one` returns the first element. If there are two or more elements then `one` will return an error. + +###### `list`Required + +- _Type:_ any + +--- + +##### `parseint` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.parseint(number: any, base: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/parseint parseint} parses the given string as a representation of an integer in the specified base and returns the resulting number. The base must be between 2 and 62 inclusive. + +###### `number`Required + +- _Type:_ any + +--- + +###### `base`Required + +- _Type:_ number + +--- + +##### `pathexpand` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.pathexpand(path: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pathexpand pathexpand} takes a filesystem path that might begin with a `~` segment, and if so it replaces that segment with the current user's home directory path. + +###### `path`Required + +- _Type:_ string + +--- + +##### `plantimestamp` + +```typescript +import { FnGenerated } from "cdktf"; + +FnGenerated.plantimestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/plantimestamp plantimestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format, fixed to a constant time representing the time of the plan. + +##### `pow` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.pow(num: number, power: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/pow pow} calculates an exponent, by raising its first argument to the power of the second argument. + +###### `num`Required + +- _Type:_ number + +--- + +###### `power`Required + +- _Type:_ number + +--- + +##### `regex` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.regex(pattern: string, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regex regex} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns the matching substrings. + +###### `pattern`Required + +- _Type:_ string + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `regexall` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.regexall(pattern: string, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/regexall regexall} applies a [regular expression](https://en.wikipedia.org/wiki/Regular_expression) to a string and returns a list of all matches. + +###### `pattern`Required + +- _Type:_ string + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `replace` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.replace(str: string, substr: string, replace: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/replace replace} searches a given string for another given substring, and replaces each occurrence with a given replacement string. + +###### `str`Required + +- _Type:_ string + +--- + +###### `substr`Required + +- _Type:_ string + +--- + +###### `replace`Required + +- _Type:_ string + +--- + +##### `reverse` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.reverse(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/reverse reverse} takes a sequence and produces a new sequence of the same length with all of the same elements as the given sequence but in reverse order. + +###### `list`Required + +- _Type:_ any + +--- + +##### `rsadecrypt` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.rsadecrypt(ciphertext: string, privatekey: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/rsadecrypt rsadecrypt} decrypts an RSA-encrypted ciphertext, returning the corresponding cleartext. + +###### `ciphertext`Required + +- _Type:_ string + +--- + +###### `privatekey`Required + +- _Type:_ string + +--- + +##### `sensitive` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.sensitive(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sensitive sensitive} takes any value and returns a copy of it marked so that Terraform will treat it as sensitive, with the same meaning and behavior as for [sensitive input variables](/terraform/language/values/variables#suppressing-values-in-cli-output). + +###### `value`Required + +- _Type:_ any + +--- + +##### `setintersection` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.setintersection(first_set: any[], other_sets: any[][]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setintersection setintersection} function takes multiple sets and produces a single set containing only the elements that all of the given sets have in common. In other words, it computes the [intersection]() of the sets. + +###### `first_set`Required + +- _Type:_ any[] + +--- + +###### `other_sets`Required + +- _Type:_ any[][] + +--- + +##### `setproduct` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.setproduct(sets: any[]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setproduct setproduct} function finds all of the possible combinations of elements from all of the given sets by computing the [Cartesian product](https://en.wikipedia.org/wiki/Cartesian_product). + +###### `sets`Required + +- _Type:_ any[] + +--- + +##### `setsubtract` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.setsubtract(a: any[], b: any[]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setsubtract setsubtract} function returns a new set containing the elements from the first set that are not present in the second set. In other words, it computes the [relative complement]() of the second set. + +###### `a`Required + +- _Type:_ any[] + +--- + +###### `b`Required + +- _Type:_ any[] + +--- + +##### `setunion` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.setunion(first_set: any[], other_sets: any[][]) +``` + +The {@link https://developer.hashicorp.com/terraform/language/functions/setunion setunion} function takes multiple sets and produces a single set containing the elements from all of the given sets. In other words, it computes the [union]() of the sets. + +###### `first_set`Required + +- _Type:_ any[] + +--- + +###### `other_sets`Required + +- _Type:_ any[][] + +--- + +##### `sha1` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.sha1(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha1 sha1} computes the SHA1 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `sha256` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.sha256(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha256 sha256} computes the SHA256 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `sha512` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.sha512(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sha512 sha512} computes the SHA512 hash of a given string and encodes it with hexadecimal digits. + +###### `str`Required + +- _Type:_ string + +--- + +##### `signum` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.signum(num: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/signum signum} determines the sign of a number, returning a number between -1 and 1 to represent the sign. + +###### `num`Required + +- _Type:_ number + +--- + +##### `slice` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.slice(list: any, start_index: number, end_index: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/slice slice} extracts some consecutive elements from within a list. + +###### `list`Required + +- _Type:_ any + +--- + +###### `start_index`Required + +- _Type:_ number + +--- + +###### `end_index`Required + +- _Type:_ number + +--- + +##### `sort` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.sort(list: string[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sort sort} takes a list of strings and returns a new list with those strings sorted lexicographically. + +###### `list`Required + +- _Type:_ string[] + +--- + +##### `split` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.split(separator: string, str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/split split} produces a list by dividing a given string at all occurrences of a given separator. + +###### `separator`Required + +- _Type:_ string + +--- + +###### `str`Required + +- _Type:_ string + +--- + +##### `startswith` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.startswith(str: string, prefix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/startswith startswith} takes two values: a string to check and a prefix string. The function returns true if the string begins with that exact prefix. + +###### `str`Required + +- _Type:_ string + +--- + +###### `prefix`Required + +- _Type:_ string + +--- + +##### `strcontains` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.strcontains(str: string, substr: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strcontains strcontains} takes two values: a string to check and an expected substring. The function returns true if the string has the substring contained within it. + +###### `str`Required + +- _Type:_ string + +--- + +###### `substr`Required + +- _Type:_ string + +--- + +##### `strrev` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.strrev(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/strrev strrev} reverses the characters in a string. Note that the characters are treated as _Unicode characters_ (in technical terms, Unicode [grapheme cluster boundaries](https://unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries) are respected). + +###### `str`Required + +- _Type:_ string + +--- + +##### `substr` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.substr(str: string, offset: number, length: number) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/substr substr} extracts a substring from a given string by offset and (maximum) length. + +###### `str`Required + +- _Type:_ string + +--- + +###### `offset`Required + +- _Type:_ number + +--- + +###### `length`Required + +- _Type:_ number + +--- + +##### `sum` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.sum(list: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/sum sum} takes a list or set of numbers and returns the sum of those numbers. + +###### `list`Required + +- _Type:_ any + +--- + +##### `templatefile` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.templatefile(path: string, vars: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/templatefile templatefile} reads the file at the given path and renders its content as a template using a supplied set of template variables. + +###### `path`Required + +- _Type:_ string + +--- + +###### `vars`Required + +- _Type:_ any + +--- + +##### `textdecodebase64` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.textdecodebase64(source: string, encoding: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textdecodebase64 textdecodebase64} function decodes a string that was previously Base64-encoded, and then interprets the result as characters in a specified character encoding. + +###### `source`Required + +- _Type:_ string + +--- + +###### `encoding`Required + +- _Type:_ string + +--- + +##### `textencodebase64` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.textencodebase64(str: string, encoding: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/textencodebase64 textencodebase64} encodes the unicode characters in a given string using a specified character encoding, returning the result base64 encoded because Terraform language strings are always sequences of unicode characters. + +###### `str`Required + +- _Type:_ string + +--- + +###### `encoding`Required + +- _Type:_ string + +--- + +##### `timeadd` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.timeadd(timestamp: string, duration: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timeadd timeadd} adds a duration to a timestamp, returning a new timestamp. + +###### `timestamp`Required + +- _Type:_ string + +--- + +###### `duration`Required + +- _Type:_ string + +--- + +##### `timecmp` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.timecmp(timestamp_a: string, timestamp_b: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timecmp timecmp} compares two timestamps and returns a number that represents the ordering of the instants those timestamps represent. + +###### `timestamp_a`Required + +- _Type:_ string + +--- + +###### `timestamp_b`Required + +- _Type:_ string + +--- + +##### `timestamp` + +```typescript +import { FnGenerated } from "cdktf"; + +FnGenerated.timestamp(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/timestamp timestamp} returns a UTC timestamp string in [RFC 3339](https://tools.ietf.org/html/rfc3339) format. + +##### `title` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.title(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/title title} converts the first letter of each word in the given string to uppercase. + +###### `str`Required + +- _Type:_ string + +--- + +##### `tobool` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.tobool(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tobool tobool} converts its argument to a boolean value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tolist` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.tolist(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tolist tolist} converts its argument to a list value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tomap` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.tomap(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tomap tomap} converts its argument to a map value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tonumber` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.tonumber(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tonumber tonumber} converts its argument to a number value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `toset` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.toset(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/toset toset} converts its argument to a set value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `tostring` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.tostring(v: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/tostring tostring} converts its argument to a string value. + +###### `v`Required + +- _Type:_ any + +--- + +##### `transpose` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.transpose(values: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/transpose transpose} takes a map of lists of strings and swaps the keys and values to produce a new map of lists of strings. + +###### `values`Required + +- _Type:_ any + +--- + +##### `trim` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.trim(str: string, cutset: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trim trim} removes the specified set of characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ string + +--- + +###### `cutset`Required + +- _Type:_ string + +--- + +##### `trimprefix` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.trimprefix(str: string, prefix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimprefix trimprefix} removes the specified prefix from the start of the given string. If the string does not start with the prefix, the string is returned unchanged. + +###### `str`Required + +- _Type:_ string + +--- + +###### `prefix`Required + +- _Type:_ string + +--- + +##### `trimspace` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.trimspace(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimspace trimspace} removes any space characters from the start and end of the given string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `trimsuffix` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.trimsuffix(str: string, suffix: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/trimsuffix trimsuffix} removes the specified suffix from the end of the given string. + +###### `str`Required + +- _Type:_ string + +--- + +###### `suffix`Required + +- _Type:_ string + +--- + +##### `try` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.try(expressions: any[]) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/try try} evaluates all of its argument expressions in turn and returns the result of the first one that does not produce any errors. + +###### `expressions`Required + +- _Type:_ any[] + +--- + +##### `upper` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.upper(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/upper upper} converts all cased letters in the given string to uppercase. + +###### `str`Required + +- _Type:_ string + +--- + +##### `urlencode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.urlencode(str: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/urlencode urlencode} applies URL encoding to a given string. + +###### `str`Required + +- _Type:_ string + +--- + +##### `uuid` + +```typescript +import { FnGenerated } from "cdktf"; + +FnGenerated.uuid(); +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuid uuid} generates a unique identifier string. + +##### `uuidv5` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.uuidv5(namespace: string, name: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/uuidv5 uuidv5} generates a _name-based_ UUID, as described in [RFC 4122 section 4.3](https://tools.ietf.org/html/rfc4122#section-4.3), also known as a "version 5" UUID. + +###### `namespace`Required + +- _Type:_ string + +--- + +###### `name`Required + +- _Type:_ string + +--- + +##### `values` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.values(mapping: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/values values} takes a map and returns a list containing the values of the elements in that map. + +###### `mapping`Required + +- _Type:_ any + +--- + +##### `yamldecode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.yamldecode(src: string) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamldecode yamldecode} parses a string as a subset of YAML, and produces a representation of its value. + +###### `src`Required + +- _Type:_ string + +--- + +##### `yamlencode` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.yamlencode(value: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/yamlencode yamlencode} encodes a given value to a string using [YAML 1.2](https://yaml.org/spec/1.2/spec.html) block syntax. + +###### `value`Required + +- _Type:_ any + +--- + +##### `zipmap` + +```typescript +import { FnGenerated } from 'cdktf' + +FnGenerated.zipmap(keys: string[], values: any) +``` + +{@link https://developer.hashicorp.com/terraform/language/functions/zipmap zipmap} constructs a map from a list of keys and a corresponding list of values. + +###### `keys`Required + +- _Type:_ string[] + +--- + +###### `values`Required + +- _Type:_ any + +--- + +### Lazy + +Lazily produce a value. + +Can be used to return a string, list or numeric value whose actual value +will only be calculated later, during synthesis. + +#### Initializers + +```typescript +import { Lazy } from "cdktf"; + +new Lazy(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------- | --------------------------------------------- | +| anyValue | Produces a lazy token from an untyped value. | +| listValue | Returns a list-ified token for a lazy value. | +| numberValue | Returns a numberified token for a lazy value. | +| stringValue | Returns a stringified token for a lazy value. | + +--- + +##### `anyValue` + +```typescript +import { Lazy } from 'cdktf' + +Lazy.anyValue(producer: IAnyProducer, options?: LazyAnyValueOptions) +``` + +Produces a lazy token from an untyped value. + +###### `producer`Required + +- _Type:_ IAnyProducer + +The lazy producer. + +--- + +###### `options`Optional + +- _Type:_ LazyAnyValueOptions + +Options. + +--- + +##### `listValue` + +```typescript +import { Lazy } from 'cdktf' + +Lazy.listValue(producer: IListProducer, options?: LazyListValueOptions) +``` + +Returns a list-ified token for a lazy value. + +###### `producer`Required + +- _Type:_ IListProducer + +The producer. + +--- + +###### `options`Optional + +- _Type:_ LazyListValueOptions + +Options. + +--- + +##### `numberValue` + +```typescript +import { Lazy } from 'cdktf' + +Lazy.numberValue(producer: INumberProducer) +``` + +Returns a numberified token for a lazy value. + +###### `producer`Required + +- _Type:_ INumberProducer + +The producer. + +--- + +##### `stringValue` + +```typescript +import { Lazy } from 'cdktf' + +Lazy.stringValue(producer: IStringProducer, options?: LazyStringValueOptions) +``` + +Returns a stringified token for a lazy value. + +###### `producer`Required + +- _Type:_ IStringProducer + +The producer. + +--- + +###### `options`Optional + +- _Type:_ LazyStringValueOptions + +Options. + +--- + +### LazyBase + +- _Implements:_ IResolvable + +#### Initializers + +```typescript +import { LazyBase } from "cdktf"; + +new LazyBase(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| addPostProcessor | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toJSON | Turn this Token into JSON. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `addPostProcessor` + +```typescript +public addPostProcessor(postProcessor: IPostProcessor): void +``` + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `resolve` + +```typescript +public resolve(context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `toJSON` + +```typescript +public toJSON(): any +``` + +Turn this Token into JSON. + +Called automatically when JSON.stringify() is called on a Token. + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### ListTerraformIterator + +#### Initializers + +```typescript +import { ListTerraformIterator } from 'cdktf' + +new ListTerraformIterator(list: string[] | IResolvable | number[] | boolean | IResolvable[]) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| list | string[] \| IResolvable \| number[] \| boolean \| IResolvable[] | _No description._ | + +--- + +##### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```typescript +public dynamic(attributes: {[ key: string ]: any}): IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ {[ key: string ]: any} + +--- + +##### `forExpressionForList` + +```typescript +public forExpressionForList(expression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ string | IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```typescript +public forExpressionForMap(keyExpression: string | IResolvable, valueExpression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```typescript +public getAny(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```typescript +public getAnyMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```typescript +public getBoolean(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```typescript +public getBooleanMap(attribute: string): {[ key: string ]: boolean} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getList` + +```typescript +public getList(attribute: string): string[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getMap` + +```typescript +public getMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumber` + +```typescript +public getNumber(attribute: string): number +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```typescript +public getNumberList(attribute: string): number[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```typescript +public getNumberMap(attribute: string): {[ key: string ]: number} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getString` + +```typescript +public getString(attribute: string): string +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```typescript +public getStringMap(attribute: string): {[ key: string ]: string} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `keys` + +```typescript +public keys(): IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```typescript +public pluckProperty(property: string): IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `values` + +```typescript +public values(): IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```typescript +import { ListTerraformIterator } from 'cdktf' + +ListTerraformIterator.fromComplexList(list: IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList, mapKeyAttributeName: string) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```typescript +const cert = new AcmCertificate(this, "cert", { + domainName: "example.com", + validationMethod: "DNS", +}); + +const dvoIterator = TerraformIterator.fromComplexList( + cert.domainValidationOptions, + "domain_name", +); + +new Route53Record(this, "record", { + allowOverwrite: true, + name: dvoIterator.getString("name"), + records: [dvoIterator.getString("record")], + ttl: 60, + type: dvoIterator.getString("type"), + zoneId: Token.asString(dataAwsRoute53ZoneExample.zoneId), + forEach: dvoIterator, +}); +``` + +###### `list`Required + +- _Type:_ IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```typescript +import { ListTerraformIterator } from 'cdktf' + +ListTerraformIterator.fromDataSources(resource: ITerraformResource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```typescript +import { ListTerraformIterator } from 'cdktf' + +ListTerraformIterator.fromList(list: string[] | IResolvable | number[] | boolean | IResolvable[]) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +##### `fromMap` + +```typescript +import { ListTerraformIterator } from 'cdktf' + +ListTerraformIterator.fromMap(map: ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean}) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean} + +--- + +##### `fromResources` + +```typescript +import { ListTerraformIterator } from 'cdktf' + +ListTerraformIterator.fromResources(resource: ITerraformResource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | ---------------- | --------------------------------------------------------------------------- | +| key | any | Returns the currently entry in the list or set that is being iterated over. | +| value | any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```typescript +public readonly key: any; +``` + +- _Type:_ any + +Returns the currently entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +Returns the value of the current item iterated over. + +--- + +### Manifest + +- _Implements:_ IManifest + +#### Initializers + +```typescript +import { Manifest } from 'cdktf' + +new Manifest(version: string, outdir: string, hclOutput: boolean) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | -------------------- | ----------------- | +| version | string | _No description._ | +| outdir | string | _No description._ | +| hclOutput | boolean | _No description._ | + +--- + +##### `version`Required + +- _Type:_ string + +--- + +##### `outdir`Required + +- _Type:_ string + +--- + +##### `hclOutput`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------- | ----------------- | +| buildManifest | _No description._ | +| forStack | _No description._ | +| writeToFile | _No description._ | + +--- + +##### `buildManifest` + +```typescript +public buildManifest(): IManifest +``` + +##### `forStack` + +```typescript +public forStack(stack: TerraformStack): StackManifest +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `writeToFile` + +```typescript +public writeToFile(): void +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------- | +| hclOutput | boolean | _No description._ | +| outdir | string | _No description._ | +| stackFileName | string | _No description._ | +| stacks | {[ key: string ]: StackManifest} | _No description._ | +| version | string | _No description._ | + +--- + +##### `hclOutput`Required + +```typescript +public readonly hclOutput: boolean; +``` + +- _Type:_ boolean + +--- + +##### `outdir`Required + +```typescript +public readonly outdir: string; +``` + +- _Type:_ string + +--- + +##### `stackFileName`Required + +```typescript +public readonly stackFileName: string; +``` + +- _Type:_ string + +--- + +##### `stacks`Required + +```typescript +public readonly stacks: {[ key: string ]: StackManifest}; +``` + +- _Type:_ {[ key: string ]: StackManifest} + +--- + +##### `version`Required + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| fileName | string | _No description._ | +| stackMetadataPath | string | _No description._ | +| stacksFolder | string | _No description._ | + +--- + +##### `fileName`Required + +```typescript +public readonly fileName: string; +``` + +- _Type:_ string + +--- + +##### `stackMetadataPath`Required + +```typescript +public readonly stackMetadataPath: string; +``` + +- _Type:_ string + +--- + +##### `stacksFolder`Required + +```typescript +public readonly stacksFolder: string; +``` + +- _Type:_ string + +--- + +### MapList + +- _Implements:_ ITerraformAddressable, IInterpolatingParent, IResolvable + +#### Initializers + +```typescript +import { MapList } from 'cdktf' + +new MapList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### MapTerraformIterator + +#### Initializers + +```typescript +import { MapTerraformIterator } from 'cdktf' + +new MapTerraformIterator(map: AnyMap | StringMap | NumberMap | BooleanMap | ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number}) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| map | AnyMap \| StringMap \| NumberMap \| BooleanMap \| ComplexMap \| {[ key: string ]: any} \| {[ key: string ]: string} \| {[ key: string ]: number} | _No description._ | + +--- + +##### `map`Required + +- _Type:_ AnyMap | StringMap | NumberMap | BooleanMap | ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```typescript +public dynamic(attributes: {[ key: string ]: any}): IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ {[ key: string ]: any} + +--- + +##### `forExpressionForList` + +```typescript +public forExpressionForList(expression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ string | IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```typescript +public forExpressionForMap(keyExpression: string | IResolvable, valueExpression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```typescript +public getAny(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```typescript +public getAnyMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```typescript +public getBoolean(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```typescript +public getBooleanMap(attribute: string): {[ key: string ]: boolean} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getList` + +```typescript +public getList(attribute: string): string[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getMap` + +```typescript +public getMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumber` + +```typescript +public getNumber(attribute: string): number +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```typescript +public getNumberList(attribute: string): number[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```typescript +public getNumberMap(attribute: string): {[ key: string ]: number} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getString` + +```typescript +public getString(attribute: string): string +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```typescript +public getStringMap(attribute: string): {[ key: string ]: string} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `keys` + +```typescript +public keys(): IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```typescript +public pluckProperty(property: string): IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `values` + +```typescript +public values(): IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```typescript +import { MapTerraformIterator } from 'cdktf' + +MapTerraformIterator.fromComplexList(list: IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList, mapKeyAttributeName: string) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```typescript +const cert = new AcmCertificate(this, "cert", { + domainName: "example.com", + validationMethod: "DNS", +}); + +const dvoIterator = TerraformIterator.fromComplexList( + cert.domainValidationOptions, + "domain_name", +); + +new Route53Record(this, "record", { + allowOverwrite: true, + name: dvoIterator.getString("name"), + records: [dvoIterator.getString("record")], + ttl: 60, + type: dvoIterator.getString("type"), + zoneId: Token.asString(dataAwsRoute53ZoneExample.zoneId), + forEach: dvoIterator, +}); +``` + +###### `list`Required + +- _Type:_ IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```typescript +import { MapTerraformIterator } from 'cdktf' + +MapTerraformIterator.fromDataSources(resource: ITerraformResource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```typescript +import { MapTerraformIterator } from 'cdktf' + +MapTerraformIterator.fromList(list: string[] | IResolvable | number[] | boolean | IResolvable[]) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +##### `fromMap` + +```typescript +import { MapTerraformIterator } from 'cdktf' + +MapTerraformIterator.fromMap(map: ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean}) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean} + +--- + +##### `fromResources` + +```typescript +import { MapTerraformIterator } from 'cdktf' + +MapTerraformIterator.fromResources(resource: ITerraformResource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------- | +| key | string | Returns the key of the current entry in the map that is being iterated over. | +| value | any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +Returns the key of the current entry in the map that is being iterated over. + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +Returns the value of the current item iterated over. + +--- + +### MigrateIds + +- _Implements:_ IAspect + +For migrating past 0.17 where the feature flag for the old id generation logic was removed after being deprecated since 0.15. + +#### Initializers + +```typescript +import { MigrateIds } from "cdktf"; + +new MigrateIds(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------------ | +| visit | All aspects can visit an IConstruct. | + +--- + +##### `visit` + +```typescript +public visit(node: IConstruct): void +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ constructs.IConstruct + +--- + +### NamedCloudWorkspace + +The name of a single Terraform Cloud workspace. + +You will only be able to use the workspace specified in the configuration with this working directory, and cannot manage workspaces from the CLI (e.g. terraform workspace select or terraform workspace new). + +#### Initializers + +```typescript +import { NamedCloudWorkspace } from 'cdktf' + +new NamedCloudWorkspace(name: string, project?: string) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| name | string | _No description._ | +| project | string | _No description._ | + +--- + +##### `name`Required + +- _Type:_ string + +--- + +##### `project`Optional + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------- | +| toTerraform | _No description._ | +| toHclTerraform | _No description._ | + +--- + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------- | ----------------- | +| name | string | _No description._ | +| project | string | _No description._ | + +--- + +##### `name`Required + +```typescript +public readonly name: string; +``` + +- _Type:_ string + +--- + +##### `project`Optional + +```typescript +public readonly project: string; +``` + +- _Type:_ string + +--- + +### NamedRemoteWorkspace + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```typescript +import { NamedRemoteWorkspace } from 'cdktf' + +new NamedRemoteWorkspace(name: string) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| name | string | _No description._ | + +--- + +##### `name`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ------------------- | ----------------- | +| name | string | _No description._ | + +--- + +##### `name`Required + +```typescript +public readonly name: string; +``` + +- _Type:_ string + +--- + +### NumberListList + +#### Initializers + +```typescript +import { NumberListList } from 'cdktf' + +new NumberListList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```typescript +public allWithMapKey(mapKeyAttributeName: string): DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): number[] +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### NumberListMap + +#### Initializers + +```typescript +import { NumberListMap } from 'cdktf' + +new NumberListMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(key: string): number[] +``` + +###### `key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### NumberMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```typescript +import { NumberMap } from 'cdktf' + +new NumberMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `lookup` + +```typescript +public lookup(key: string): number +``` + +###### `key`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### NumberMapList + +#### Initializers + +```typescript +import { NumberMapList } from 'cdktf' + +new NumberMapList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): NumberMap +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### Op + +This class contains static functions for all arithmetical and logical operators in the Terraform configuration language. + +#### Initializers + +```typescript +import { Op } from "cdktf"; + +new Op(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------- | ------------------------ | +| add | Renders left + right. | +| and | Renders left && right. | +| div | Renders left / right. | +| eq | Renders left == right. | +| gt | Renders left > right. | +| gte | Renders left >= right. | +| lt | Renders left < right. | +| lte | Renders left < = right. | +| mod | Renders left % right. | +| mul | Renders left \* right. | +| negate | Renders -expression. | +| neq | Renders left != right. | +| not | Renders !expression. | +| or | Renders left \|\| right. | +| sub | Renders left - right. | + +--- + +##### `add` + +```typescript +import { Op } from 'cdktf' + +Op.add(left: any, right: any) +``` + +Renders left + right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `and` + +```typescript +import { Op } from 'cdktf' + +Op.and(left: any, right: any) +``` + +Renders left && right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `div` + +```typescript +import { Op } from 'cdktf' + +Op.div(left: any, right: any) +``` + +Renders left / right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `eq` + +```typescript +import { Op } from 'cdktf' + +Op.eq(left: any, right: any) +``` + +Renders left == right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `gt` + +```typescript +import { Op } from 'cdktf' + +Op.gt(left: any, right: any) +``` + +Renders left > right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `gte` + +```typescript +import { Op } from 'cdktf' + +Op.gte(left: any, right: any) +``` + +Renders left >= right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `lt` + +```typescript +import { Op } from 'cdktf' + +Op.lt(left: any, right: any) +``` + +Renders left < right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `lte` + +```typescript +import { Op } from 'cdktf' + +Op.lte(left: any, right: any) +``` + +Renders left < = right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `mod` + +```typescript +import { Op } from 'cdktf' + +Op.mod(left: any, right: any) +``` + +Renders left % right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `mul` + +```typescript +import { Op } from 'cdktf' + +Op.mul(left: any, right: any) +``` + +Renders left \* right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `negate` + +```typescript +import { Op } from 'cdktf' + +Op.negate(expression: any) +``` + +Renders -expression. + +###### `expression`Required + +- _Type:_ any + +--- + +##### `neq` + +```typescript +import { Op } from 'cdktf' + +Op.neq(left: any, right: any) +``` + +Renders left != right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `not` + +```typescript +import { Op } from 'cdktf' + +Op.not(expression: any) +``` + +Renders !expression. + +###### `expression`Required + +- _Type:_ any + +--- + +##### `or` + +```typescript +import { Op } from 'cdktf' + +Op.or(left: any, right: any) +``` + +Renders left || right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +##### `sub` + +```typescript +import { Op } from 'cdktf' + +Op.sub(left: any, right: any) +``` + +Renders left - right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +### PrefixedRemoteWorkspaces + +- _Implements:_ IRemoteWorkspace + +#### Initializers + +```typescript +import { PrefixedRemoteWorkspaces } from 'cdktf' + +new PrefixedRemoteWorkspaces(prefix: string) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| prefix | string | _No description._ | + +--- + +##### `prefix`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------- | ----------------- | +| prefix | string | _No description._ | + +--- + +##### `prefix`Required + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +--- + +### ResourceTerraformIterator + +#### Initializers + +```typescript +import { ResourceTerraformIterator } from 'cdktf' + +new ResourceTerraformIterator(element: ITerraformResource) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| element | ITerraformResource | _No description._ | + +--- + +##### `element`Required + +- _Type:_ ITerraformResource + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```typescript +public dynamic(attributes: {[ key: string ]: any}): IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ {[ key: string ]: any} + +--- + +##### `forExpressionForList` + +```typescript +public forExpressionForList(expression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ string | IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```typescript +public forExpressionForMap(keyExpression: string | IResolvable, valueExpression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```typescript +public getAny(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```typescript +public getAnyMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```typescript +public getBoolean(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```typescript +public getBooleanMap(attribute: string): {[ key: string ]: boolean} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getList` + +```typescript +public getList(attribute: string): string[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getMap` + +```typescript +public getMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumber` + +```typescript +public getNumber(attribute: string): number +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```typescript +public getNumberList(attribute: string): number[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```typescript +public getNumberMap(attribute: string): {[ key: string ]: number} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getString` + +```typescript +public getString(attribute: string): string +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```typescript +public getStringMap(attribute: string): {[ key: string ]: string} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `keys` + +```typescript +public keys(): IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```typescript +public pluckProperty(property: string): IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `values` + +```typescript +public values(): IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```typescript +import { ResourceTerraformIterator } from 'cdktf' + +ResourceTerraformIterator.fromComplexList(list: IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList, mapKeyAttributeName: string) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```typescript +const cert = new AcmCertificate(this, "cert", { + domainName: "example.com", + validationMethod: "DNS", +}); + +const dvoIterator = TerraformIterator.fromComplexList( + cert.domainValidationOptions, + "domain_name", +); + +new Route53Record(this, "record", { + allowOverwrite: true, + name: dvoIterator.getString("name"), + records: [dvoIterator.getString("record")], + ttl: 60, + type: dvoIterator.getString("type"), + zoneId: Token.asString(dataAwsRoute53ZoneExample.zoneId), + forEach: dvoIterator, +}); +``` + +###### `list`Required + +- _Type:_ IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```typescript +import { ResourceTerraformIterator } from 'cdktf' + +ResourceTerraformIterator.fromDataSources(resource: ITerraformResource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```typescript +import { ResourceTerraformIterator } from 'cdktf' + +ResourceTerraformIterator.fromList(list: string[] | IResolvable | number[] | boolean | IResolvable[]) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +##### `fromMap` + +```typescript +import { ResourceTerraformIterator } from 'cdktf' + +ResourceTerraformIterator.fromMap(map: ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean}) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean} + +--- + +##### `fromResources` + +```typescript +import { ResourceTerraformIterator } from 'cdktf' + +ResourceTerraformIterator.fromResources(resource: ITerraformResource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ---------------- | ------------------------------------------------------------------------- | +| key | any | Returns the current entry in the list or set that is being iterated over. | +| value | any | Returns the value of the current item iterated over. | + +--- + +##### `key`Required + +```typescript +public readonly key: any; +``` + +- _Type:_ any + +Returns the current entry in the list or set that is being iterated over. + +For lists this is the same as `iterator.value`. If you need the index, +use count via `TerraformCount`: +https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-count + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +Returns the value of the current item iterated over. + +--- + +### StringConcat + +- _Implements:_ IFragmentConcatenator + +Converts all fragments to strings and concats those. + +Drops 'undefined's. + +#### Initializers + +```typescript +import { StringConcat } from "cdktf"; + +new StringConcat(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------- | ------------------------------ | +| join | Concatenates string fragments. | + +--- + +##### `join` + +```typescript +public join(left: any, right: any): any +``` + +Concatenates string fragments. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +### StringListList + +#### Initializers + +```typescript +import { StringListList } from 'cdktf' + +new StringListList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------------------------------- | +| allWithMapKey | Creating an iterator for this complex list. | +| computeFqn | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `allWithMapKey` + +```typescript +public allWithMapKey(mapKeyAttributeName: string): DynamicListTerraformIterator +``` + +Creating an iterator for this complex list. + +The list will be converted into a map with the mapKeyAttributeName as the key. + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): string[] +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### StringListMap + +#### Initializers + +```typescript +import { StringListMap } from 'cdktf' + +new StringListMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(key: string): string[] +``` + +###### `key`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### StringMap + +- _Implements:_ ITerraformAddressable, IResolvable + +#### Initializers + +```typescript +import { StringMap } from 'cdktf' + +new StringMap(terraformResource: IInterpolatingParent, terraformAttribute: string) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| lookup | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `lookup` + +```typescript +public lookup(key: string): string +``` + +###### `key`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### StringMapList + +#### Initializers + +```typescript +import { StringMapList } from 'cdktf' + +new StringMapList(terraformResource: IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| terraformResource | IInterpolatingParent | _No description._ | +| terraformAttribute | string | _No description._ | +| wrapsSet | boolean | _No description._ | + +--- + +##### `terraformResource`Required + +- _Type:_ IInterpolatingParent + +--- + +##### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `wrapsSet`Required + +- _Type:_ boolean + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | +| computeFqn | _No description._ | +| interpolationForAttribute | _No description._ | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | +| get | _No description._ | + +--- + +##### `computeFqn` + +```typescript +public computeFqn(): string +``` + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(property: string): IResolvable +``` + +###### `property`Required + +- _Type:_ string + +--- + +##### `resolve` + +```typescript +public resolve(_context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `_context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +##### `get` + +```typescript +public get(index: number): StringMap +``` + +###### `index`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | +| fqn | string | _No description._ | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### TaggedCloudWorkspaces + +A set of Terraform Cloud workspace tags. + +You will be able to use this working directory with any workspaces that have all of the specified tags, and can use the terraform workspace commands to switch between them or create new workspaces. New workspaces will automatically have the specified tags. This option conflicts with name. + +#### Initializers + +```typescript +import { TaggedCloudWorkspaces } from 'cdktf' + +new TaggedCloudWorkspaces(tags: string[], project?: string) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| tags | string[] | _No description._ | +| project | string | _No description._ | + +--- + +##### `tags`Required + +- _Type:_ string[] + +--- + +##### `project`Optional + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------- | +| toTerraform | _No description._ | +| toHclTerraform | _No description._ | + +--- + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | --------------------- | ----------------- | +| tags | string[] | _No description._ | +| project | string | _No description._ | + +--- + +##### `tags`Required + +```typescript +public readonly tags: string[]; +``` + +- _Type:_ string[] + +--- + +##### `project`Optional + +```typescript +public readonly project: string; +``` + +- _Type:_ string + +--- + +### TerraformCount + +Iterator for the Terraform count property. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------- | +| toString | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +##### `toTerraform` + +```typescript +public toTerraform(): number +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------- | +| isTerraformCount | _No description._ | +| of | _No description._ | + +--- + +##### `isTerraformCount` + +```typescript +import { TerraformCount } from 'cdktf' + +TerraformCount.isTerraformCount(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `of` + +```typescript +import { TerraformCount } from 'cdktf' + +TerraformCount.of(count: number) +``` + +###### `count`Required + +- _Type:_ number + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------- | ------------------- | ----------------- | +| index | number | _No description._ | + +--- + +##### `index`Required + +```typescript +public readonly index: number; +``` + +- _Type:_ number + +--- + +### TerraformIterator + +- _Implements:_ ITerraformIterator + +#### Initializers + +```typescript +import { TerraformIterator } from "cdktf"; + +new TerraformIterator(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| dynamic | Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. | +| forExpressionForList | Creates a for expression that results in a list. | +| forExpressionForMap | Creates a for expression that results in a map. | +| getAny | _No description._ | +| getAnyMap | _No description._ | +| getBoolean | _No description._ | +| getBooleanMap | _No description._ | +| getList | _No description._ | +| getMap | _No description._ | +| getNumber | _No description._ | +| getNumberList | _No description._ | +| getNumberMap | _No description._ | +| getString | _No description._ | +| getStringMap | _No description._ | +| keys | Creates a for expression that maps the iterators to its keys. | +| pluckProperty | Creates a for expression that accesses the key on each element of the iterator. | +| values | Creates a for expression that maps the iterators to its value in case it is a map. | + +--- + +##### `dynamic` + +```typescript +public dynamic(attributes: {[ key: string ]: any}): IResolvable +``` + +Creates a dynamic expression that can be used to loop over this iterator in a dynamic block. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. +See https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-for-list-attributes + +###### `attributes`Required + +- _Type:_ {[ key: string ]: any} + +--- + +##### `forExpressionForList` + +```typescript +public forExpressionForList(expression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a list. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraform's for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty() instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromList(myIteratorSourceVar).forExpressionForList("val.foo if val.bar == true")` +will result in `[ for key, val in var.myIteratorSource: val.foo if val.bar == true ]`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `expression`Required + +- _Type:_ string | IResolvable + +The expression to use in the for mapping. + +--- + +##### `forExpressionForMap` + +```typescript +public forExpressionForMap(keyExpression: string | IResolvable, valueExpression: string | IResolvable): IResolvable +``` + +Creates a for expression that results in a map. + +This method allows you to create every possible for expression, but requires more knowledge about +Terraforms for expression syntax. +For the most common use cases you can use keys(), values(), and pluckProperty instead. + +You may write any valid Terraform for each expression, e.g. +`TerraformIterator.fromMap(myIteratorSourceVar).forExpressionForMap("key", "val.foo if val.bar == true")` +will result in `{ for key, val in var.myIteratorSource: key = > val.foo if val.bar == true }`. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `keyExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as key in the for mapping. + +--- + +###### `valueExpression`Required + +- _Type:_ string | IResolvable + +The expression to use as value in the for mapping. + +--- + +##### `getAny` + +```typescript +public getAny(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getAnyMap` + +```typescript +public getAnyMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBoolean` + +```typescript +public getBoolean(attribute: string): IResolvable +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getBooleanMap` + +```typescript +public getBooleanMap(attribute: string): {[ key: string ]: boolean} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getList` + +```typescript +public getList(attribute: string): string[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getMap` + +```typescript +public getMap(attribute: string): {[ key: string ]: any} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumber` + +```typescript +public getNumber(attribute: string): number +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberList` + +```typescript +public getNumberList(attribute: string): number[] +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getNumberMap` + +```typescript +public getNumberMap(attribute: string): {[ key: string ]: number} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getString` + +```typescript +public getString(attribute: string): string +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `getStringMap` + +```typescript +public getStringMap(attribute: string): {[ key: string ]: string} +``` + +###### `attribute`Required + +- _Type:_ string + +name of the property to retrieve. + +--- + +##### `keys` + +```typescript +public keys(): IResolvable +``` + +Creates a for expression that maps the iterators to its keys. + +For lists these would be the indices, for maps the keys. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +##### `pluckProperty` + +```typescript +public pluckProperty(property: string): IResolvable +``` + +Creates a for expression that accesses the key on each element of the iterator. + +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +###### `property`Required + +- _Type:_ string + +The property of the iterators values to map to. + +--- + +##### `values` + +```typescript +public values(): IResolvable +``` + +Creates a for expression that maps the iterators to its value in case it is a map. + +For lists these would stay the same. +As this returns an IResolvable you might need to wrap the output in +a Token, e.g. `Token.asString`. + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | +| fromComplexList | Creates a new iterator from a complex list. | +| fromDataSources | Creates a new iterator from a data source that has been created with the `for_each` argument. | +| fromList | Creates a new iterator from a list. | +| fromMap | Creates a new iterator from a map. | +| fromResources | Creates a new iterator from a resource that has been created with the `for_each` argument. | + +--- + +##### `fromComplexList` + +```typescript +import { TerraformIterator } from 'cdktf' + +TerraformIterator.fromComplexList(list: IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList, mapKeyAttributeName: string) +``` + +Creates a new iterator from a complex list. + +One example for this would be a list of maps. +The list will be converted into a map with the mapKeyAttributeName as the key. + +_Example_ + +```typescript +const cert = new AcmCertificate(this, "cert", { + domainName: "example.com", + validationMethod: "DNS", +}); + +const dvoIterator = TerraformIterator.fromComplexList( + cert.domainValidationOptions, + "domain_name", +); + +new Route53Record(this, "record", { + allowOverwrite: true, + name: dvoIterator.getString("name"), + records: [dvoIterator.getString("record")], + ttl: 60, + type: dvoIterator.getString("type"), + zoneId: Token.asString(dataAwsRoute53ZoneExample.zoneId), + forEach: dvoIterator, +}); +``` + +###### `list`Required + +- _Type:_ IResolvable | ComplexList | StringMapList | NumberMapList | BooleanMapList | AnyMapList + +the list to iterate over. + +--- + +###### `mapKeyAttributeName`Required + +- _Type:_ string + +the name of the attribute that should be used as the key in the map. + +Visit https://developer.hashicorp.com/terraform/cdktf/concepts/iterators#using-iterators-on-complex-lists for more information. + +--- + +##### `fromDataSources` + +```typescript +import { TerraformIterator } from 'cdktf' + +TerraformIterator.fromDataSources(resource: ITerraformResource) +``` + +Creates a new iterator from a data source that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +##### `fromList` + +```typescript +import { TerraformIterator } from 'cdktf' + +TerraformIterator.fromList(list: string[] | IResolvable | number[] | boolean | IResolvable[]) +``` + +Creates a new iterator from a list. + +###### `list`Required + +- _Type:_ string[] | IResolvable | number[] | boolean | IResolvable[] + +--- + +##### `fromMap` + +```typescript +import { TerraformIterator } from 'cdktf' + +TerraformIterator.fromMap(map: ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean}) +``` + +Creates a new iterator from a map. + +###### `map`Required + +- _Type:_ ComplexMap | {[ key: string ]: any} | {[ key: string ]: string} | {[ key: string ]: number} | {[ key: string ]: boolean} + +--- + +##### `fromResources` + +```typescript +import { TerraformIterator } from 'cdktf' + +TerraformIterator.fromResources(resource: ITerraformResource) +``` + +Creates a new iterator from a resource that has been created with the `for_each` argument. + +###### `resource`Required + +- _Type:_ ITerraformResource + +--- + +### TerraformResourceTargets + +#### Initializers + +```typescript +import { TerraformResourceTargets } from "cdktf"; + +new TerraformResourceTargets(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------- | +| addResourceTarget | _No description._ | +| getResourceByTarget | _No description._ | + +--- + +##### `addResourceTarget` + +```typescript +public addResourceTarget(resource: TerraformResource, target: string): void +``` + +###### `resource`Required + +- _Type:_ TerraformResource + +--- + +###### `target`Required + +- _Type:_ string + +--- + +##### `getResourceByTarget` + +```typescript +public getResourceByTarget(target: string): TerraformResource +``` + +###### `target`Required + +- _Type:_ string + +--- + +### TerraformSelf + +Expressions in connection blocks cannot refer to their parent resource by name. + +References create dependencies, and referring to a resource by name within its own block would create a dependency cycle. +Instead, expressions can use the self object, which represents the connection's parent resource and has all of that resource's attributes. +For example, use self.public_ip to reference an aws_instance's public_ip attribute. + +#### Initializers + +```typescript +import { TerraformSelf } from "cdktf"; + +new TerraformSelf(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| getAny | Only usable within a connection block to reference the connections parent resource. | +| getNumber | Only usable within a connection block to reference the connections parent resource. | +| getString | Only usable within a connection block to reference the connections parent resource. | + +--- + +##### `getAny` + +```typescript +import { TerraformSelf } from 'cdktf' + +TerraformSelf.getAny(key: string) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getAny("hostPort")` + +###### `key`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +import { TerraformSelf } from 'cdktf' + +TerraformSelf.getNumber(key: string) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getNumber("hostPort")` + +###### `key`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +import { TerraformSelf } from 'cdktf' + +TerraformSelf.getString(key: string) +``` + +Only usable within a connection block to reference the connections parent resource. + +Access a property on the resource like this: `getString("publicIp")` + +###### `key`Required + +- _Type:_ string + +--- + +### Testing + +Testing utilities for cdktf applications. + +#### Initializers + +```typescript +import { Testing } from "cdktf"; + +new Testing(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| app | Returns an app for testing with the following properties: - Output directory is a temp dir. | +| enableFutureFlags | _No description._ | +| fakeCdktfJsonPath | _No description._ | +| fullSynth | _No description._ | +| renderConstructTree | _No description._ | +| setupJest | _No description._ | +| stubVersion | _No description._ | +| synth | Returns the Terraform synthesized JSON. | +| synthHcl | Returns the Terraform synthesized JSON. | +| synthScope | _No description._ | +| toBeValidTerraform | _No description._ | +| toHaveDataSource | _No description._ | +| toHaveDataSourceWithProperties | _No description._ | +| toHaveProvider | _No description._ | +| toHaveProviderWithProperties | _No description._ | +| toHaveResource | _No description._ | +| toHaveResourceWithProperties | _No description._ | + +--- + +##### `app` + +```typescript +import { Testing } from 'cdktf' + +Testing.app(options?: TestingAppConfig) +``` + +Returns an app for testing with the following properties: - Output directory is a temp dir. + +###### `options`Optional + +- _Type:_ TestingAppConfig + +--- + +##### `enableFutureFlags` + +```typescript +import { Testing } from 'cdktf' + +Testing.enableFutureFlags(app: App) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `fakeCdktfJsonPath` + +```typescript +import { Testing } from 'cdktf' + +Testing.fakeCdktfJsonPath(app: App) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `fullSynth` + +```typescript +import { Testing } from 'cdktf' + +Testing.fullSynth(stack: TerraformStack) +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `renderConstructTree` + +```typescript +import { Testing } from 'cdktf' + +Testing.renderConstructTree(construct: IConstruct) +``` + +###### `construct`Required + +- _Type:_ constructs.IConstruct + +--- + +##### `setupJest` + +```typescript +import { Testing } from "cdktf"; + +Testing.setupJest(); +``` + +##### `stubVersion` + +```typescript +import { Testing } from 'cdktf' + +Testing.stubVersion(app: App) +``` + +###### `app`Required + +- _Type:_ App + +--- + +##### `synth` + +```typescript +import { Testing } from 'cdktf' + +Testing.synth(stack: TerraformStack, runValidations?: boolean) +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `runValidations`Optional + +- _Type:_ boolean + +--- + +##### `synthHcl` + +```typescript +import { Testing } from 'cdktf' + +Testing.synthHcl(stack: TerraformStack, runValidations?: boolean, returnMetadata?: boolean) +``` + +Returns the Terraform synthesized JSON. + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +###### `runValidations`Optional + +- _Type:_ boolean + +--- + +###### `returnMetadata`Optional + +- _Type:_ boolean + +--- + +##### `synthScope` + +```typescript +import { Testing } from 'cdktf' + +Testing.synthScope(fn: IScopeCallback) +``` + +###### `fn`Required + +- _Type:_ IScopeCallback + +--- + +##### `toBeValidTerraform` + +```typescript +import { Testing } from 'cdktf' + +Testing.toBeValidTerraform(received: string) +``` + +###### `received`Required + +- _Type:_ string + +--- + +##### `toHaveDataSource` + +```typescript +import { Testing } from 'cdktf' + +Testing.toHaveDataSource(received: string, resourceType: string) +``` + +###### `received`Required + +- _Type:_ string + +--- + +###### `resourceType`Required + +- _Type:_ string + +--- + +##### `toHaveDataSourceWithProperties` + +```typescript +import { Testing } from 'cdktf' + +Testing.toHaveDataSourceWithProperties(received: string, resourceType: string, properties?: {[ key: string ]: any}) +``` + +###### `received`Required + +- _Type:_ string + +--- + +###### `resourceType`Required + +- _Type:_ string + +--- + +###### `properties`Optional + +- _Type:_ {[ key: string ]: any} + +--- + +##### `toHaveProvider` + +```typescript +import { Testing } from 'cdktf' + +Testing.toHaveProvider(received: string, resourceType: string) +``` + +###### `received`Required + +- _Type:_ string + +--- + +###### `resourceType`Required + +- _Type:_ string + +--- + +##### `toHaveProviderWithProperties` + +```typescript +import { Testing } from 'cdktf' + +Testing.toHaveProviderWithProperties(received: string, resourceType: string, properties?: {[ key: string ]: any}) +``` + +###### `received`Required + +- _Type:_ string + +--- + +###### `resourceType`Required + +- _Type:_ string + +--- + +###### `properties`Optional + +- _Type:_ {[ key: string ]: any} + +--- + +##### `toHaveResource` + +```typescript +import { Testing } from 'cdktf' + +Testing.toHaveResource(received: string, resourceType: string) +``` + +###### `received`Required + +- _Type:_ string + +--- + +###### `resourceType`Required + +- _Type:_ string + +--- + +##### `toHaveResourceWithProperties` + +```typescript +import { Testing } from 'cdktf' + +Testing.toHaveResourceWithProperties(received: string, resourceType: string, properties?: {[ key: string ]: any}) +``` + +###### `received`Required + +- _Type:_ string + +--- + +###### `resourceType`Required + +- _Type:_ string + +--- + +###### `properties`Optional + +- _Type:_ {[ key: string ]: any} + +--- + +### Token + +Represents a special or lazily-evaluated value. + +Can be used to delay evaluation of a certain value in case, for example, +that it requires some context or late-bound data. Can also be used to +mark values that need special processing at document rendering time. + +Tokens can be embedded into strings while retaining their original +semantics. + +#### Initializers + +```typescript +import { Token } from "cdktf"; + +new Token(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------- | -------------------------------------------------------- | +| asAny | Return a resolvable representation of the given value. | +| asAnyMap | Return a reversible map representation of this token. | +| asBooleanMap | Return a reversible map representation of this token. | +| asList | Return a reversible list representation of this token. | +| asMap | Return a reversible map representation of this token. | +| asNumber | Return a reversible number representation of this token. | +| asNumberList | Return a reversible list representation of this token. | +| asNumberMap | Return a reversible map representation of this token. | +| asString | Return a reversible string representation of this token. | +| asStringMap | Return a reversible map representation of this token. | +| isUnresolved | Returns true if obj represents an unresolved value. | +| nullValue | Return a Token containing a `null` value. | + +--- + +##### `asAny` + +```typescript +import { Token } from 'cdktf' + +Token.asAny(value: any) +``` + +Return a resolvable representation of the given value. + +###### `value`Required + +- _Type:_ any + +--- + +##### `asAnyMap` + +```typescript +import { Token } from 'cdktf' + +Token.asAnyMap(value: any, options?: EncodingOptions) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asBooleanMap` + +```typescript +import { Token } from 'cdktf' + +Token.asBooleanMap(value: any, options?: EncodingOptions) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asList` + +```typescript +import { Token } from 'cdktf' + +Token.asList(value: any, options?: EncodingOptions) +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asMap` + +```typescript +import { Token } from 'cdktf' + +Token.asMap(value: any, mapValue: any, options?: EncodingOptions) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +###### `mapValue`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asNumber` + +```typescript +import { Token } from 'cdktf' + +Token.asNumber(value: any) +``` + +Return a reversible number representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +##### `asNumberList` + +```typescript +import { Token } from 'cdktf' + +Token.asNumberList(value: any) +``` + +Return a reversible list representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +##### `asNumberMap` + +```typescript +import { Token } from 'cdktf' + +Token.asNumberMap(value: any, options?: EncodingOptions) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asString` + +```typescript +import { Token } from 'cdktf' + +Token.asString(value: any, options?: EncodingOptions) +``` + +Return a reversible string representation of this token. + +If the Token is initialized with a literal, the stringified value of the +literal is returned. Otherwise, a special quoted string representation +of the Token is returned that can be embedded into other strings. + +Strings with quoted Tokens in them can be restored back into +complex values with the Tokens restored by calling `resolve()` +on the string. + +###### `value`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `asStringMap` + +```typescript +import { Token } from 'cdktf' + +Token.asStringMap(value: any, options?: EncodingOptions) +``` + +Return a reversible map representation of this token. + +###### `value`Required + +- _Type:_ any + +--- + +###### `options`Optional + +- _Type:_ EncodingOptions + +--- + +##### `isUnresolved` + +```typescript +import { Token } from 'cdktf' + +Token.isUnresolved(obj: any) +``` + +Returns true if obj represents an unresolved value. + +One of these must be true: + +- `obj` is an IResolvable +- `obj` is a string containing at least one encoded `IResolvable` +- `obj` is either an encoded number or list + +This does NOT recurse into lists or objects to see if they +containing resolvables. + +###### `obj`Required + +- _Type:_ any + +The object to test. + +--- + +##### `nullValue` + +```typescript +import { Token } from "cdktf"; + +Token.nullValue(); +``` + +Return a Token containing a `null` value. + +Note: This is different than `undefined`, `nil`, `None` or similar +as it will end up in the Terraform config and can be used to explicitly +not set an attribute (which is sometimes required by Terraform providers) + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------- | -------------------------------------- | +| ANY_MAP_TOKEN_VALUE | string | Any map token representation. | +| NUMBER_MAP_TOKEN_VALUE | number | Number Map token value representation. | +| STRING_MAP_TOKEN_VALUE | string | String Map token value representation. | + +--- + +##### `ANY_MAP_TOKEN_VALUE`Required + +```typescript +public readonly ANY_MAP_TOKEN_VALUE: string; +``` + +- _Type:_ string + +Any map token representation. + +--- + +##### `NUMBER_MAP_TOKEN_VALUE`Required + +```typescript +public readonly NUMBER_MAP_TOKEN_VALUE: number; +``` + +- _Type:_ number + +Number Map token value representation. + +--- + +##### `STRING_MAP_TOKEN_VALUE`Required + +```typescript +public readonly STRING_MAP_TOKEN_VALUE: string; +``` + +- _Type:_ string + +String Map token value representation. + +--- + +### Tokenization + +Less oft-needed functions to manipulate Tokens. + +#### Initializers + +```typescript +import { Tokenization } from "cdktf"; + +new Tokenization(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| isResolvable | Return whether the given object is an IResolvable object. | +| resolve | Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. | +| reverse | Reverse any value into Resolvables, if possible. | +| reverseList | Un-encode a Tokenized value from a list. | +| reverseMap | Un-encode a Tokenized value from a map. | +| reverseNumber | Un-encode a Tokenized value from a number. | +| reverseNumberList | Un-encode a Tokenized value from a list. | +| reverseString | Un-encode a string potentially containing encoded tokens. | +| stringifyNumber | Stringify a number directly or lazily if it's a Token. | + +--- + +##### `isResolvable` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.isResolvable(obj: any) +``` + +Return whether the given object is an IResolvable object. + +This is different from Token.isUnresolved() which will also check for +encoded Tokens, whereas this method will only do a type check on the given +object. + +###### `obj`Required + +- _Type:_ any + +--- + +##### `resolve` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.resolve(obj: any, options: ResolveOptions) +``` + +Resolves an object by evaluating all tokens and removing any undefined or empty objects or arrays. + +Values can only be primitives, arrays or tokens. Other objects (i.e. with methods) will be rejected. + +###### `obj`Required + +- _Type:_ any + +The object to resolve. + +--- + +###### `options`Required + +- _Type:_ ResolveOptions + +Prefix key path components for diagnostics. + +--- + +##### `reverse` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.reverse(x: any) +``` + +Reverse any value into Resolvables, if possible. + +###### `x`Required + +- _Type:_ any + +--- + +##### `reverseList` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.reverseList(l: string[]) +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ string[] + +--- + +##### `reverseMap` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.reverseMap(m: {[ key: string ]: any}) +``` + +Un-encode a Tokenized value from a map. + +###### `m`Required + +- _Type:_ {[ key: string ]: any} + +--- + +##### `reverseNumber` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.reverseNumber(n: number) +``` + +Un-encode a Tokenized value from a number. + +###### `n`Required + +- _Type:_ number + +--- + +##### `reverseNumberList` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.reverseNumberList(l: number[]) +``` + +Un-encode a Tokenized value from a list. + +###### `l`Required + +- _Type:_ number[] + +--- + +##### `reverseString` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.reverseString(s: string) +``` + +Un-encode a string potentially containing encoded tokens. + +###### `s`Required + +- _Type:_ string + +--- + +##### `stringifyNumber` + +```typescript +import { Tokenization } from 'cdktf' + +Tokenization.stringifyNumber(x: number) +``` + +Stringify a number directly or lazily if it's a Token. + +If it is an object (i.e., { Ref: 'SomeLogicalId' }), return it as-is. + +###### `x`Required + +- _Type:_ number + +--- + +### TokenizedStringFragments + +Fragments of a concatenated string containing stringified Tokens. + +#### Initializers + +```typescript +import { TokenizedStringFragments } from "cdktf"; + +new TokenizedStringFragments(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------ | +| addEscape | _No description._ | +| addIntrinsic | Adds an intrinsic fragment. | +| addLiteral | Adds a literal fragment. | +| addToken | Adds a token fragment. | +| concat | _No description._ | +| join | Combine the string fragments using the given joiner. | +| mapTokens | Apply a transformation function to all tokens in the string. | + +--- + +##### `addEscape` + +```typescript +public addEscape(kind: string): void +``` + +###### `kind`Required + +- _Type:_ string + +--- + +##### `addIntrinsic` + +```typescript +public addIntrinsic(value: any): void +``` + +Adds an intrinsic fragment. + +###### `value`Required + +- _Type:_ any + +the intrinsic value to add. + +--- + +##### `addLiteral` + +```typescript +public addLiteral(lit: any): void +``` + +Adds a literal fragment. + +###### `lit`Required + +- _Type:_ any + +the literal to add. + +--- + +##### `addToken` + +```typescript +public addToken(token: IResolvable): void +``` + +Adds a token fragment. + +###### `token`Required + +- _Type:_ IResolvable + +the token to add. + +--- + +##### `concat` + +```typescript +public concat(other: TokenizedStringFragments): void +``` + +###### `other`Required + +- _Type:_ TokenizedStringFragments + +--- + +##### `join` + +```typescript +public join(concat: IFragmentConcatenator): any +``` + +Combine the string fragments using the given joiner. + +If there are any + +###### `concat`Required + +- _Type:_ IFragmentConcatenator + +--- + +##### `mapTokens` + +```typescript +public mapTokens(context: IResolveContext): TokenizedStringFragments +``` + +Apply a transformation function to all tokens in the string. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------ | +| escapes | IResolvable[] | Return all escape fragments from this string. | +| firstValue | any | Returns the first value. | +| intrinsic | IResolvable[] | Return all intrinsic fragments from this string. | +| length | number | Returns the number of fragments. | +| literals | IResolvable[] | Return all literals from this string. | +| tokens | IResolvable[] | Return all Tokens from this string. | +| firstToken | IResolvable | Returns the first token. | + +--- + +##### `escapes`Required + +```typescript +public readonly escapes: IResolvable[]; +``` + +- _Type:_ IResolvable[] + +Return all escape fragments from this string. + +--- + +##### `firstValue`Required + +```typescript +public readonly firstValue: any; +``` + +- _Type:_ any + +Returns the first value. + +--- + +##### `intrinsic`Required + +```typescript +public readonly intrinsic: IResolvable[]; +``` + +- _Type:_ IResolvable[] + +Return all intrinsic fragments from this string. + +--- + +##### `length`Required + +```typescript +public readonly length: number; +``` + +- _Type:_ number + +Returns the number of fragments. + +--- + +##### `literals`Required + +```typescript +public readonly literals: IResolvable[]; +``` + +- _Type:_ IResolvable[] + +Return all literals from this string. + +--- + +##### `tokens`Required + +```typescript +public readonly tokens: IResolvable[]; +``` + +- _Type:_ IResolvable[] + +Return all Tokens from this string. + +--- + +##### `firstToken`Optional + +```typescript +public readonly firstToken: IResolvable; +``` + +- _Type:_ IResolvable + +Returns the first token. + +--- + +### VariableType + +#### Initializers + +```typescript +import { VariableType } from "cdktf"; + +new VariableType(); +``` + +| **Name** | **Type** | **Description** | +| -------- | -------- | --------------- | + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------ | ----------------- | +| list | _No description._ | +| map | _No description._ | +| object | _No description._ | +| set | _No description._ | +| tuple | _No description._ | + +--- + +##### `list` + +```typescript +import { VariableType } from 'cdktf' + +VariableType.list(type: string) +``` + +###### `type`Required + +- _Type:_ string + +--- + +##### `map` + +```typescript +import { VariableType } from 'cdktf' + +VariableType.map(type: string) +``` + +###### `type`Required + +- _Type:_ string + +--- + +##### `object` + +```typescript +import { VariableType } from 'cdktf' + +VariableType.object(attributes: {[ key: string ]: string}) +``` + +###### `attributes`Required + +- _Type:_ {[ key: string ]: string} + +--- + +##### `set` + +```typescript +import { VariableType } from 'cdktf' + +VariableType.set(type: string) +``` + +###### `type`Required + +- _Type:_ string + +--- + +##### `tuple` + +```typescript +import { VariableType } from 'cdktf' + +VariableType.tuple(elements: ...string[]) +``` + +###### `elements`Required + +- _Type:_ ...string[] + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | ------------------- | ----------------- | +| ANY | string | _No description._ | +| BOOL | string | _No description._ | +| LIST | string | _No description._ | +| LIST_BOOL | string | _No description._ | +| LIST_NUMBER | string | _No description._ | +| LIST_STRING | string | _No description._ | +| MAP | string | _No description._ | +| MAP_BOOL | string | _No description._ | +| MAP_NUMBER | string | _No description._ | +| MAP_STRING | string | _No description._ | +| NUMBER | string | _No description._ | +| SET | string | _No description._ | +| SET_BOOL | string | _No description._ | +| SET_NUMBER | string | _No description._ | +| SET_STRING | string | _No description._ | +| STRING | string | _No description._ | + +--- + +##### `ANY`Required + +```typescript +public readonly ANY: string; +``` + +- _Type:_ string + +--- + +##### `BOOL`Required + +```typescript +public readonly BOOL: string; +``` + +- _Type:_ string + +--- + +##### `LIST`Required + +```typescript +public readonly LIST: string; +``` + +- _Type:_ string + +--- + +##### `LIST_BOOL`Required + +```typescript +public readonly LIST_BOOL: string; +``` + +- _Type:_ string + +--- + +##### `LIST_NUMBER`Required + +```typescript +public readonly LIST_NUMBER: string; +``` + +- _Type:_ string + +--- + +##### `LIST_STRING`Required + +```typescript +public readonly LIST_STRING: string; +``` + +- _Type:_ string + +--- + +##### `MAP`Required + +```typescript +public readonly MAP: string; +``` + +- _Type:_ string + +--- + +##### `MAP_BOOL`Required + +```typescript +public readonly MAP_BOOL: string; +``` + +- _Type:_ string + +--- + +##### `MAP_NUMBER`Required + +```typescript +public readonly MAP_NUMBER: string; +``` + +- _Type:_ string + +--- + +##### `MAP_STRING`Required + +```typescript +public readonly MAP_STRING: string; +``` + +- _Type:_ string + +--- + +##### `NUMBER`Required + +```typescript +public readonly NUMBER: string; +``` + +- _Type:_ string + +--- + +##### `SET`Required + +```typescript +public readonly SET: string; +``` + +- _Type:_ string + +--- + +##### `SET_BOOL`Required + +```typescript +public readonly SET_BOOL: string; +``` + +- _Type:_ string + +--- + +##### `SET_NUMBER`Required + +```typescript +public readonly SET_NUMBER: string; +``` + +- _Type:_ string + +--- + +##### `SET_STRING`Required + +```typescript +public readonly SET_STRING: string; +``` + +- _Type:_ string + +--- + +##### `STRING`Required + +```typescript +public readonly STRING: string; +``` + +- _Type:_ string + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/constructs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/constructs.mdx new file mode 100644 index 0000000000..dde4209862 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/constructs.mdx @@ -0,0 +1,12379 @@ +--- +page_title: Typescript Reference for Constructs +description: CDKTF Core API Reference for Constructs in Typescript. +--- + + + +# Typescript: Constructs + +### App + +Represents a cdktf application. + +#### Initializers + +```typescript +import { App } from 'cdktf' + +new App(config?: AppConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------------- | --------------- | +| config | AppConfig | configuration. | + +--- + +##### `config`Optional + +- _Type:_ AppConfig + +configuration. + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| crossStackReference | Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. | +| synth | Synthesizes all resources to the output directory. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `crossStackReference` + +```typescript +public crossStackReference(fromStack: TerraformStack, toStack: TerraformStack, identifier: string): string +``` + +Creates a reference from one stack to another, invoked on prepareStack since it creates extra resources. + +###### `fromStack`Required + +- _Type:_ TerraformStack + +--- + +###### `toStack`Required + +- _Type:_ TerraformStack + +--- + +###### `identifier`Required + +- _Type:_ string + +--- + +##### `synth` + +```typescript +public synth(): void +``` + +Synthesizes all resources to the output directory. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isApp | _No description._ | +| of | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { App } from 'cdktf' + +App.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isApp` + +```typescript +import { App } from 'cdktf' + +App.isApp(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `of` + +```typescript +import { App } from 'cdktf' + +App.of(construct: IConstruct) +``` + +###### `construct`Required + +- _Type:_ constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | --------------------------------------------------------------- | +| node | constructs.Node | The tree node. | +| hclOutput | boolean | _No description._ | +| manifest | Manifest | _No description._ | +| outdir | string | The output directory into which resources will be synthesized. | +| skipBackendValidation | boolean | Whether to skip backend validation during synthesis of the app. | +| skipValidation | boolean | Whether to skip all validations during synthesis of the app. | +| targetStackId | string | The stack which will be synthesized. | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `hclOutput`Required + +```typescript +public readonly hclOutput: boolean; +``` + +- _Type:_ boolean + +--- + +##### `manifest`Required + +```typescript +public readonly manifest: Manifest; +``` + +- _Type:_ Manifest + +--- + +##### `outdir`Required + +```typescript +public readonly outdir: string; +``` + +- _Type:_ string + +The output directory into which resources will be synthesized. + +--- + +##### `skipBackendValidation`Required + +```typescript +public readonly skipBackendValidation: boolean; +``` + +- _Type:_ boolean + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skipValidation`Required + +```typescript +public readonly skipValidation: boolean; +``` + +- _Type:_ boolean + +Whether to skip all validations during synthesis of the app. + +--- + +##### `targetStackId`Optional + +```typescript +public readonly targetStackId: string; +``` + +- _Type:_ string + +The stack which will be synthesized. + +If not set, all stacks will be synthesized. + +--- + +### AzurermBackend + +#### Initializers + +```typescript +import { AzurermBackend } from 'cdktf' + +new AzurermBackend(scope: Construct, props: AzurermBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | AzurermBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ AzurermBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { AzurermBackend } from 'cdktf' + +AzurermBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { AzurermBackend } from 'cdktf' + +AzurermBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { AzurermBackend } from 'cdktf' + +AzurermBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### CloudBackend + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +#### Initializers + +```typescript +import { CloudBackend } from 'cdktf' + +new CloudBackend(scope: Construct, props: CloudBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | CloudBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ CloudBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { CloudBackend } from 'cdktf' + +CloudBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { CloudBackend } from 'cdktf' + +CloudBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { CloudBackend } from 'cdktf' + +CloudBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### ConsulBackend + +#### Initializers + +```typescript +import { ConsulBackend } from 'cdktf' + +new ConsulBackend(scope: Construct, props: ConsulBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | ConsulBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ ConsulBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { ConsulBackend } from 'cdktf' + +ConsulBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { ConsulBackend } from 'cdktf' + +ConsulBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { ConsulBackend } from 'cdktf' + +ConsulBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### CosBackend + +#### Initializers + +```typescript +import { CosBackend } from 'cdktf' + +new CosBackend(scope: Construct, props: CosBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | CosBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ CosBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { CosBackend } from 'cdktf' + +CosBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { CosBackend } from 'cdktf' + +CosBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { CosBackend } from 'cdktf' + +CosBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### DataResource + +The DataResource implements the standard resource lifecycle, but does not directly take any other actions. + +You can use the DataResource resource without requiring or configuring a provider. + +The DataResource resource is useful for storing values which need to follow a manage resource lifecycle, and for triggering provisioners when there is no other logical managed resource in which to place them. + +It requires Terraform 1.4 or later. + +It is also possible to generate these bindings by adding "terraform.io/builtin/terraform" to the "terraformProviders" key in your cdktf.json file and running "cdktf get". + +https://developer.hashicorp.com/terraform/language/resources/terraform-data + +#### Initializers + +```typescript +import { DataResource } from 'cdktf' + +new DataResource(scope: Construct, id: string, config?: DataConfig) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------------- | +| scope | constructs.Construct | The scope in which to define this construct. | +| id | string | The scoped construct ID. | +| config | DataConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +The scope in which to define this construct. + +--- + +##### `id`Required + +- _Type:_ string + +The scoped construct ID. + +Must be unique amongst siblings in the same scope + +--- + +##### `config`Optional + +- _Type:_ DataConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| addMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| hasResourceMove | _No description._ | +| importFrom | _No description._ | +| interpolationForAttribute | _No description._ | +| moveFromId | Move the resource corresponding to "id" to this resource. | +| moveTo | Moves this resource to the target resource given by moveTarget. | +| moveToId | Moves this resource to the resource corresponding to "id". | +| resetInput | _No description._ | +| resetTriggersReplace | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `addMoveTarget` + +```typescript +public addMoveTarget(moveTarget: string): void +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `moveTarget`Required + +- _Type:_ string + +The string move target that will correspond to this resource. + +--- + +##### `getAnyMapAttribute` + +```typescript +public getAnyMapAttribute(terraformAttribute: string): {[ key: string ]: any} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanAttribute` + +```typescript +public getBooleanAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanMapAttribute` + +```typescript +public getBooleanMapAttribute(terraformAttribute: string): {[ key: string ]: boolean} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getListAttribute` + +```typescript +public getListAttribute(terraformAttribute: string): string[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberAttribute` + +```typescript +public getNumberAttribute(terraformAttribute: string): number +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberListAttribute` + +```typescript +public getNumberListAttribute(terraformAttribute: string): number[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberMapAttribute` + +```typescript +public getNumberMapAttribute(terraformAttribute: string): {[ key: string ]: number} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringAttribute` + +```typescript +public getStringAttribute(terraformAttribute: string): string +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringMapAttribute` + +```typescript +public getStringMapAttribute(terraformAttribute: string): {[ key: string ]: string} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `hasResourceMove` + +```typescript +public hasResourceMove(): TerraformResourceMoveByTarget | TerraformResourceMoveById +``` + +##### `importFrom` + +```typescript +public importFrom(id: string, provider?: TerraformProvider): void +``` + +###### `id`Required + +- _Type:_ string + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `moveFromId` + +```typescript +public moveFromId(id: string): void +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ string + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `moveTo` + +```typescript +public moveTo(moveTarget: string, index?: string | number): void +``` + +Moves this resource to the target resource given by moveTarget. + +###### `moveTarget`Required + +- _Type:_ string + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ string | number + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `moveToId` + +```typescript +public moveToId(id: string): void +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ string + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +##### `resetInput` + +```typescript +public resetInput(): void +``` + +##### `resetTriggersReplace` + +```typescript +public resetTriggersReplace(): void +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformResource | _No description._ | +| generateConfigForImport | Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". | + +--- + +##### `isConstruct` + +```typescript +import { DataResource } from 'cdktf' + +DataResource.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataResource } from 'cdktf' + +DataResource.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isTerraformResource` + +```typescript +import { DataResource } from 'cdktf' + +DataResource.isTerraformResource(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `generateConfigForImport` + +```typescript +import { DataResource } from 'cdktf' + +DataResource.generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: TerraformProvider) +``` + +Generates CDKTF code for importing a Data resource upon running "cdktf plan < stack-name >". + +###### `scope`Required + +- _Type:_ constructs.Construct + +The scope in which to define this construct. + +--- + +###### `importToId`Required + +- _Type:_ string + +The construct id used in the generated config for the Data to import. + +--- + +###### `importFromId`Required + +- _Type:_ string + +The id of the existing Data that should be imported. + +Refer to the {@link https://terraform.io/providers/builtin/terraform/latest/docs/resources/data#import import section} in the documentation of this resource for the id to use + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +? Optional instance of the provider where the Data to import is found. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| terraformMetaArguments | {[ key: string ]: any} | _No description._ | +| terraformResourceType | string | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | string[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | FileProvisioner \| LocalExecProvisioner \| RemoteExecProvisioner[] | _No description._ | +| id | string | _No description._ | +| output | AnyMap | _No description._ | +| inputInput | {[ key: string ]: any} | _No description._ | +| triggersReplaceInput | {[ key: string ]: any} | _No description._ | +| input | {[ key: string ]: any} | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggersReplace | {[ key: string ]: any} | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `terraformMetaArguments`Required + +```typescript +public readonly terraformMetaArguments: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `terraformGeneratorMetadata`Optional + +```typescript +public readonly terraformGeneratorMetadata: TerraformProviderGeneratorMetadata; +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: string[]; +``` + +- _Type:_ string[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```typescript +public readonly provisioners: FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[]; +``` + +- _Type:_ FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[] + +--- + +##### `id`Required + +```typescript +public readonly id: string; +``` + +- _Type:_ string + +--- + +##### `output`Required + +```typescript +public readonly output: AnyMap; +``` + +- _Type:_ AnyMap + +--- + +##### `inputInput`Optional + +```typescript +public readonly inputInput: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `triggersReplaceInput`Optional + +```typescript +public readonly triggersReplaceInput: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `input`Required + +```typescript +public readonly input: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggersReplace`Required + +```typescript +public readonly triggersReplace: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteState + +#### Initializers + +```typescript +import { DataTerraformRemoteState } from 'cdktf' + +new DataTerraformRemoteState(scope: Construct, id: string, config: DataTerraformRemoteStateRemoteConfig) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateRemoteConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateRemoteConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteState } from 'cdktf' + +DataTerraformRemoteState.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteState } from 'cdktf' + +DataTerraformRemoteState.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateAzurerm + +#### Initializers + +```typescript +import { DataTerraformRemoteStateAzurerm } from 'cdktf' + +new DataTerraformRemoteStateAzurerm(scope: Construct, id: string, config: DataTerraformRemoteStateAzurermConfig) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateAzurermConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateAzurermConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateAzurerm } from 'cdktf' + +DataTerraformRemoteStateAzurerm.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateAzurerm } from 'cdktf' + +DataTerraformRemoteStateAzurerm.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateConsul + +#### Initializers + +```typescript +import { DataTerraformRemoteStateConsul } from 'cdktf' + +new DataTerraformRemoteStateConsul(scope: Construct, id: string, config: DataTerraformRemoteStateConsulConfig) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateConsulConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateConsulConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateConsul } from 'cdktf' + +DataTerraformRemoteStateConsul.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateConsul } from 'cdktf' + +DataTerraformRemoteStateConsul.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateCos + +#### Initializers + +```typescript +import { DataTerraformRemoteStateCos } from 'cdktf' + +new DataTerraformRemoteStateCos(scope: Construct, id: string, config: DataTerraformRemoteStateCosConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateCosConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateCosConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateCos } from 'cdktf' + +DataTerraformRemoteStateCos.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateCos } from 'cdktf' + +DataTerraformRemoteStateCos.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateGcs + +#### Initializers + +```typescript +import { DataTerraformRemoteStateGcs } from 'cdktf' + +new DataTerraformRemoteStateGcs(scope: Construct, id: string, config: DataTerraformRemoteStateGcsConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateGcsConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateGcsConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateGcs } from 'cdktf' + +DataTerraformRemoteStateGcs.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateGcs } from 'cdktf' + +DataTerraformRemoteStateGcs.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateHttp + +#### Initializers + +```typescript +import { DataTerraformRemoteStateHttp } from 'cdktf' + +new DataTerraformRemoteStateHttp(scope: Construct, id: string, config: DataTerraformRemoteStateHttpConfig) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateHttpConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateHttpConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateHttp } from 'cdktf' + +DataTerraformRemoteStateHttp.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateHttp } from 'cdktf' + +DataTerraformRemoteStateHttp.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateLocal + +#### Initializers + +```typescript +import { DataTerraformRemoteStateLocal } from 'cdktf' + +new DataTerraformRemoteStateLocal(scope: Construct, id: string, config: DataTerraformRemoteStateLocalConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateLocalConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateLocalConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateLocal } from 'cdktf' + +DataTerraformRemoteStateLocal.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateLocal } from 'cdktf' + +DataTerraformRemoteStateLocal.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateOss + +#### Initializers + +```typescript +import { DataTerraformRemoteStateOss } from 'cdktf' + +new DataTerraformRemoteStateOss(scope: Construct, id: string, config: DataTerraformRemoteStateOssConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateOssConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateOssConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateOss } from 'cdktf' + +DataTerraformRemoteStateOss.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateOss } from 'cdktf' + +DataTerraformRemoteStateOss.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStatePg + +#### Initializers + +```typescript +import { DataTerraformRemoteStatePg } from 'cdktf' + +new DataTerraformRemoteStatePg(scope: Construct, id: string, config: DataTerraformRemoteStatePgConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStatePgConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStatePgConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStatePg } from 'cdktf' + +DataTerraformRemoteStatePg.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStatePg } from 'cdktf' + +DataTerraformRemoteStatePg.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateS3 + +#### Initializers + +```typescript +import { DataTerraformRemoteStateS3 } from 'cdktf' + +new DataTerraformRemoteStateS3(scope: Construct, id: string, config: DataTerraformRemoteStateS3Config) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateS3Config | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateS3Config + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { DataTerraformRemoteStateS3 } from 'cdktf' + +DataTerraformRemoteStateS3.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { DataTerraformRemoteStateS3 } from 'cdktf' + +DataTerraformRemoteStateS3.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateSwift + +#### Initializers + +```typescript +import { DataTerraformRemoteStateSwift } from 'cdktf' + +new DataTerraformRemoteStateSwift(scope: Construct, id: string, config: DataTerraformRemoteStateSwiftConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | DataTerraformRemoteStateSwiftConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateSwiftConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### ~~`toString`~~ + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### ~~`addOverride`~~ + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### ~~`overrideLogicalId`~~ + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### ~~`resetOverrideLogicalId`~~ + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`toHclTerraform`~~ + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### ~~`toMetadata`~~ + +```typescript +public toMetadata(): any +``` + +##### ~~`toTerraform`~~ + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### ~~`get`~~ + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### ~~`getBoolean`~~ + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### ~~`getList`~~ + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### ~~`getNumber`~~ + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### ~~`getString`~~ + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### ~~`isConstruct`~~ + +```typescript +import { DataTerraformRemoteStateSwift } from 'cdktf' + +DataTerraformRemoteStateSwift.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### ~~`isTerraformElement`~~ + +```typescript +import { DataTerraformRemoteStateSwift } from 'cdktf' + +DataTerraformRemoteStateSwift.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### ~~`cdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### ~~`friendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### ~~`tfResourceType`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### GcsBackend + +#### Initializers + +```typescript +import { GcsBackend } from 'cdktf' + +new GcsBackend(scope: Construct, props: GcsBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | GcsBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ GcsBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { GcsBackend } from 'cdktf' + +GcsBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { GcsBackend } from 'cdktf' + +GcsBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { GcsBackend } from 'cdktf' + +GcsBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### HttpBackend + +#### Initializers + +```typescript +import { HttpBackend } from 'cdktf' + +new HttpBackend(scope: Construct, props: HttpBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | HttpBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ HttpBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { HttpBackend } from 'cdktf' + +HttpBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { HttpBackend } from 'cdktf' + +HttpBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { HttpBackend } from 'cdktf' + +HttpBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### ImportableResource + +Class used to represent an importable resource. + +#### Initializers + +```typescript +import { ImportableResource } from 'cdktf' + +new ImportableResource(scope: Construct, name: string, config: IImportableConfig) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| name | string | _No description._ | +| config | IImportableConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `name`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ IImportableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { ImportableResource } from 'cdktf' + +ImportableResource.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { ImportableResource } from 'cdktf' + +ImportableResource.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### LocalBackend + +#### Initializers + +```typescript +import { LocalBackend } from 'cdktf' + +new LocalBackend(scope: Construct, props?: LocalBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | LocalBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Optional + +- _Type:_ LocalBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { LocalBackend } from 'cdktf' + +LocalBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { LocalBackend } from 'cdktf' + +LocalBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { LocalBackend } from 'cdktf' + +LocalBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### OssBackend + +#### Initializers + +```typescript +import { OssBackend } from 'cdktf' + +new OssBackend(scope: Construct, props: OssBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | OssBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ OssBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { OssBackend } from 'cdktf' + +OssBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { OssBackend } from 'cdktf' + +OssBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { OssBackend } from 'cdktf' + +OssBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### PgBackend + +#### Initializers + +```typescript +import { PgBackend } from 'cdktf' + +new PgBackend(scope: Construct, props: PgBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | PgBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ PgBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { PgBackend } from 'cdktf' + +PgBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { PgBackend } from 'cdktf' + +PgBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { PgBackend } from 'cdktf' + +PgBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### RemoteBackend + +#### Initializers + +```typescript +import { RemoteBackend } from 'cdktf' + +new RemoteBackend(scope: Construct, props: RemoteBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | RemoteBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ RemoteBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { RemoteBackend } from 'cdktf' + +RemoteBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { RemoteBackend } from 'cdktf' + +RemoteBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { RemoteBackend } from 'cdktf' + +RemoteBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### Resource + +- _Implements:_ IResource + +A construct which represents a resource. + +#### Initializers + +```typescript +import { Resource } from 'cdktf' + +new Resource(scope: Construct, id: string) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------ | -------------------------------------------------- | +| toString | Returns a string representation of this construct. | + +--- + +##### ~~`toString`~~ + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | + +--- + +##### ~~`isConstruct`~~ + +```typescript +import { Resource } from 'cdktf' + +Resource.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| node | constructs.Node | The tree node. | +| stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### ~~`stack`~~Required + +- _Deprecated:_ - Please use Construct from the constructs package instead. + +```typescript +public readonly stack: TerraformStack; +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### S3Backend + +#### Initializers + +```typescript +import { S3Backend } from 'cdktf' + +new S3Backend(scope: Construct, props: S3BackendConfig) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | S3BackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ S3BackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { S3Backend } from 'cdktf' + +S3Backend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { S3Backend } from 'cdktf' + +S3Backend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { S3Backend } from 'cdktf' + +S3Backend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### SwiftBackend + +#### Initializers + +```typescript +import { SwiftBackend } from 'cdktf' + +new SwiftBackend(scope: Construct, props: SwiftBackendConfig) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| props | SwiftBackendConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `props`Required + +- _Type:_ SwiftBackendConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### ~~`toString`~~ + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### ~~`addOverride`~~ + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### ~~`overrideLogicalId`~~ + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### ~~`resetOverrideLogicalId`~~ + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### ~~`toHclTerraform`~~ + +```typescript +public toHclTerraform(): any +``` + +##### ~~`toMetadata`~~ + +```typescript +public toMetadata(): any +``` + +##### ~~`toTerraform`~~ + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### ~~`getRemoteStateDataSource`~~ + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, _fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `_fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### ~~`isConstruct`~~ + +```typescript +import { SwiftBackend } from 'cdktf' + +SwiftBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### ~~`isTerraformElement`~~ + +```typescript +import { SwiftBackend } from 'cdktf' + +SwiftBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### ~~`isBackend`~~ + +```typescript +import { SwiftBackend } from 'cdktf' + +SwiftBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### ~~`node`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### ~~`cdktfStack`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### ~~`fqn`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### ~~`friendlyUniqueId`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### TerraformAsset + +#### Initializers + +```typescript +import { TerraformAsset } from 'cdktf' + +new TerraformAsset(scope: Construct, id: string, config: TerraformAssetConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | TerraformAssetConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ TerraformAssetConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------ | -------------------------------------------------- | +| toString | Returns a string representation of this construct. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | + +--- + +##### `isConstruct` + +```typescript +import { TerraformAsset } from 'cdktf' + +TerraformAsset.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| node | constructs.Node | The tree node. | +| fileName | string | Name of the asset. | +| path | string | The path relative to the root of the terraform directory in posix format Use this property to reference the asset. | +| assetHash | string | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `fileName`Required + +```typescript +public readonly fileName: string; +``` + +- _Type:_ string + +Name of the asset. + +--- + +##### `path`Required + +```typescript +public readonly path: string; +``` + +- _Type:_ string + +The path relative to the root of the terraform directory in posix format Use this property to reference the asset. + +--- + +##### `assetHash`Required + +```typescript +public readonly assetHash: string; +``` + +- _Type:_ string + +--- + +##### `type`Required + +```typescript +public readonly type: AssetType; +``` + +- _Type:_ AssetType + +--- + +### TerraformBackend + +#### Initializers + +```typescript +import { TerraformBackend } from 'cdktf' + +new TerraformBackend(scope: Construct, id: string, name: string) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| name | string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `name`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getRemoteStateDataSource | Creates a TerraformRemoteState resource that accesses this backend. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getRemoteStateDataSource` + +```typescript +public getRemoteStateDataSource(scope: Construct, name: string, fromStack: string): TerraformRemoteState +``` + +Creates a TerraformRemoteState resource that accesses this backend. + +###### `scope`Required + +- _Type:_ constructs.Construct + +--- + +###### `name`Required + +- _Type:_ string + +--- + +###### `fromStack`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isBackend | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformBackend } from 'cdktf' + +TerraformBackend.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformBackend } from 'cdktf' + +TerraformBackend.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isBackend` + +```typescript +import { TerraformBackend } from 'cdktf' + +TerraformBackend.isBackend(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### TerraformDataSource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```typescript +import { TerraformDataSource } from 'cdktf' + +new TerraformDataSource(scope: Construct, id: string, config: TerraformResourceConfig) +``` + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | TerraformResourceConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ TerraformResourceConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| interpolationForAttribute | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `getAnyMapAttribute` + +```typescript +public getAnyMapAttribute(terraformAttribute: string): {[ key: string ]: any} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanAttribute` + +```typescript +public getBooleanAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanMapAttribute` + +```typescript +public getBooleanMapAttribute(terraformAttribute: string): {[ key: string ]: boolean} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getListAttribute` + +```typescript +public getListAttribute(terraformAttribute: string): string[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberAttribute` + +```typescript +public getNumberAttribute(terraformAttribute: string): number +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberListAttribute` + +```typescript +public getNumberListAttribute(terraformAttribute: string): number[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberMapAttribute` + +```typescript +public getNumberMapAttribute(terraformAttribute: string): {[ key: string ]: number} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringAttribute` + +```typescript +public getStringAttribute(terraformAttribute: string): string +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringMapAttribute` + +```typescript +public getStringMapAttribute(terraformAttribute: string): {[ key: string ]: string} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformDataSource | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformDataSource } from 'cdktf' + +TerraformDataSource.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformDataSource } from 'cdktf' + +TerraformDataSource.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isTerraformDataSource` + +```typescript +import { TerraformDataSource } from 'cdktf' + +TerraformDataSource.isTerraformDataSource(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| terraformMetaArguments | {[ key: string ]: any} | _No description._ | +| terraformResourceType | string | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | string[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `terraformMetaArguments`Required + +```typescript +public readonly terraformMetaArguments: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `terraformGeneratorMetadata`Optional + +```typescript +public readonly terraformGeneratorMetadata: TerraformProviderGeneratorMetadata; +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: string[]; +``` + +- _Type:_ string[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformElement + +#### Initializers + +```typescript +import { TerraformElement } from 'cdktf' + +new TerraformElement(scope: Construct, id: string, elementType?: string) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| elementType | string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `elementType`Optional + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +#### Static Functions + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformElement } from 'cdktf' + +TerraformElement.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformElement } from 'cdktf' + +TerraformElement.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +### TerraformHclModule + +#### Initializers + +```typescript +import { TerraformHclModule } from 'cdktf' + +new TerraformHclModule(scope: Construct, id: string, options: TerraformHclModuleConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| options | TerraformHclModuleConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `options`Required + +- _Type:_ TerraformHclModuleConfig + +--- + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | +| addProvider | _No description._ | +| getString | _No description._ | +| interpolationForOutput | _No description._ | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| set | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +##### `addProvider` + +```typescript +public addProvider(provider: TerraformProvider | TerraformModuleProvider): void +``` + +###### `provider`Required + +- _Type:_ TerraformProvider | TerraformModuleProvider + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `interpolationForOutput` + +```typescript +public interpolationForOutput(moduleOutput: string): IResolvable +``` + +###### `moduleOutput`Required + +- _Type:_ string + +--- + +##### `get` + +```typescript +public get(output: string): any +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `set` + +```typescript +public set(variable: string, value: any): void +``` + +###### `variable`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformHclModule } from 'cdktf' + +TerraformHclModule.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformHclModule } from 'cdktf' + +TerraformHclModule.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| source | string | _No description._ | +| providers | TerraformProvider \| TerraformModuleProvider[] | _No description._ | +| skipAssetCreationFromLocalModules | boolean | _No description._ | +| version | string | _No description._ | +| dependsOn | string[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| variables | {[ key: string ]: any} | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `source`Required + +```typescript +public readonly source: string; +``` + +- _Type:_ string + +--- + +##### `providers`Optional + +```typescript +public readonly providers: TerraformProvider | TerraformModuleProvider[]; +``` + +- _Type:_ TerraformProvider | TerraformModuleProvider[] + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```typescript +public readonly skipAssetCreationFromLocalModules: boolean; +``` + +- _Type:_ boolean + +--- + +##### `version`Optional + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: string[]; +``` + +- _Type:_ string[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `variables`Optional + +```typescript +public readonly variables: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +### TerraformLocal + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```typescript +import { TerraformLocal } from 'cdktf' + +new TerraformLocal(scope: Construct, id: string, expression: any) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| expression | any | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `expression`Required + +- _Type:_ any + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformLocal } from 'cdktf' + +TerraformLocal.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformLocal } from 'cdktf' + +TerraformLocal.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| asAnyMap | {[ key: string ]: any} | _No description._ | +| asBoolean | IResolvable | _No description._ | +| asBooleanMap | {[ key: string ]: boolean} | _No description._ | +| asList | string[] | _No description._ | +| asNumber | number | _No description._ | +| asNumberMap | {[ key: string ]: number} | _No description._ | +| asString | string | _No description._ | +| asStringMap | {[ key: string ]: string} | _No description._ | +| expression | any | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `asAnyMap`Required + +```typescript +public readonly asAnyMap: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `asBoolean`Required + +```typescript +public readonly asBoolean: IResolvable; +``` + +- _Type:_ IResolvable + +--- + +##### `asBooleanMap`Required + +```typescript +public readonly asBooleanMap: {[ key: string ]: boolean}; +``` + +- _Type:_ {[ key: string ]: boolean} + +--- + +##### `asList`Required + +```typescript +public readonly asList: string[]; +``` + +- _Type:_ string[] + +--- + +##### `asNumber`Required + +```typescript +public readonly asNumber: number; +``` + +- _Type:_ number + +--- + +##### `asNumberMap`Required + +```typescript +public readonly asNumberMap: {[ key: string ]: number}; +``` + +- _Type:_ {[ key: string ]: number} + +--- + +##### `asString`Required + +```typescript +public readonly asString: string; +``` + +- _Type:_ string + +--- + +##### `asStringMap`Required + +```typescript +public readonly asStringMap: {[ key: string ]: string}; +``` + +- _Type:_ {[ key: string ]: string} + +--- + +##### `expression`Required + +```typescript +public readonly expression: any; +``` + +- _Type:_ any + +--- + +### TerraformModule + +- _Implements:_ ITerraformDependable + +TerraformModule can be used to reference a local terraform module or a module from the Terraform Registry. + +It should be used if you can not use generated bindings for the module as you would get by adding the module +to your cdktf.json files "terraformModules" array and running cdktf get. + +This class is not creating a Terraform module to be used outside of CDKTF. +If you want to bundle certain resources together like you would do with a Terraform module, +you should use Constructs instead, see http://cdk.tf/constructs for more details. + +#### Initializers + +```typescript +import { TerraformModule } from 'cdktf' + +new TerraformModule(scope: Construct, id: string, options: TerraformModuleConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| options | TerraformModuleConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `options`Required + +- _Type:_ TerraformModuleConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | +| addProvider | _No description._ | +| getString | _No description._ | +| interpolationForOutput | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +##### `addProvider` + +```typescript +public addProvider(provider: TerraformProvider | TerraformModuleProvider): void +``` + +###### `provider`Required + +- _Type:_ TerraformProvider | TerraformModuleProvider + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `interpolationForOutput` + +```typescript +public interpolationForOutput(moduleOutput: string): IResolvable +``` + +###### `moduleOutput`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformModule } from 'cdktf' + +TerraformModule.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformModule } from 'cdktf' + +TerraformModule.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| source | string | _No description._ | +| providers | TerraformProvider \| TerraformModuleProvider[] | _No description._ | +| skipAssetCreationFromLocalModules | boolean | _No description._ | +| version | string | _No description._ | +| dependsOn | string[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `source`Required + +```typescript +public readonly source: string; +``` + +- _Type:_ string + +--- + +##### `providers`Optional + +```typescript +public readonly providers: TerraformProvider | TerraformModuleProvider[]; +``` + +- _Type:_ TerraformProvider | TerraformModuleProvider[] + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```typescript +public readonly skipAssetCreationFromLocalModules: boolean; +``` + +- _Type:_ boolean + +--- + +##### `version`Optional + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: string[]; +``` + +- _Type:_ string[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +### TerraformOutput + +#### Initializers + +```typescript +import { TerraformOutput } from 'cdktf' + +new TerraformOutput(scope: Construct, id: string, config: TerraformOutputConfig) +``` + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | TerraformOutputConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ TerraformOutputConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +#### Static Functions + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformOutput | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformOutput } from 'cdktf' + +TerraformOutput.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformOutput } from 'cdktf' + +TerraformOutput.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isTerraformOutput` + +```typescript +import { TerraformOutput } from 'cdktf' + +TerraformOutput.isTerraformOutput(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| staticId | boolean | _No description._ | +| value | any | _No description._ | +| dependsOn | ITerraformDependable[] | _No description._ | +| description | string | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | boolean | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `staticId`Required + +```typescript +public readonly staticId: boolean; +``` + +- _Type:_ boolean + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `description`Optional + +```typescript +public readonly description: string; +``` + +- _Type:_ string + +--- + +##### `precondition`Optional + +```typescript +public readonly precondition: Precondition; +``` + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +```typescript +public readonly sensitive: boolean; +``` + +- _Type:_ boolean + +--- + +### TerraformProvider + +#### Initializers + +```typescript +import { TerraformProvider } from 'cdktf' + +new TerraformProvider(scope: Construct, id: string, config: TerraformProviderConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | TerraformProviderConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ TerraformProviderConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformProvider | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformProvider } from 'cdktf' + +TerraformProvider.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformProvider } from 'cdktf' + +TerraformProvider.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isTerraformProvider` + +```typescript +import { TerraformProvider } from 'cdktf' + +TerraformProvider.isTerraformProvider(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| metaAttributes | {[ key: string ]: any} | _No description._ | +| terraformResourceType | string | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraformProviderSource | string | _No description._ | +| alias | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `metaAttributes`Required + +```typescript +public readonly metaAttributes: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `terraformGeneratorMetadata`Optional + +```typescript +public readonly terraformGeneratorMetadata: TerraformProviderGeneratorMetadata; +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraformProviderSource`Optional + +```typescript +public readonly terraformProviderSource: string; +``` + +- _Type:_ string + +--- + +##### `alias`Optional + +```typescript +public readonly alias: string; +``` + +- _Type:_ string + +--- + +### TerraformRemoteState + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```typescript +import { TerraformRemoteState } from 'cdktf' + +new TerraformRemoteState(scope: Construct, id: string, backend: string, config: DataTerraformRemoteStateConfig) +``` + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| backend | string | _No description._ | +| config | DataTerraformRemoteStateConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `backend`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ DataTerraformRemoteStateConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | Adds this resource to the terraform JSON output. | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| get | _No description._ | +| getBoolean | _No description._ | +| getList | _No description._ | +| getNumber | _No description._ | +| getString | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `get` + +```typescript +public get(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getBoolean` + +```typescript +public getBoolean(output: string): IResolvable +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getList` + +```typescript +public getList(output: string): string[] +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getNumber` + +```typescript +public getNumber(output: string): number +``` + +###### `output`Required + +- _Type:_ string + +--- + +##### `getString` + +```typescript +public getString(output: string): string +``` + +###### `output`Required + +- _Type:_ string + +--- + +#### Static Functions + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformRemoteState } from 'cdktf' + +TerraformRemoteState.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformRemoteState } from 'cdktf' + +TerraformRemoteState.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +#### Constants + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### TerraformResource + +- _Implements:_ ITerraformResource, ITerraformDependable, IInterpolatingParent + +#### Initializers + +```typescript +import { TerraformResource } from 'cdktf' + +new TerraformResource(scope: Construct, id: string, config: TerraformResourceConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | TerraformResourceConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ TerraformResourceConfig + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | Adds this resource to the terraform JSON output. | +| addMoveTarget | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. | +| getAnyMapAttribute | _No description._ | +| getBooleanAttribute | _No description._ | +| getBooleanMapAttribute | _No description._ | +| getListAttribute | _No description._ | +| getNumberAttribute | _No description._ | +| getNumberListAttribute | _No description._ | +| getNumberMapAttribute | _No description._ | +| getStringAttribute | _No description._ | +| getStringMapAttribute | _No description._ | +| hasResourceMove | _No description._ | +| importFrom | _No description._ | +| interpolationForAttribute | _No description._ | +| moveFromId | Move the resource corresponding to "id" to this resource. | +| moveTo | Moves this resource to the target resource given by moveTarget. | +| moveToId | Moves this resource to the resource corresponding to "id". | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +Adds this resource to the terraform JSON output. + +##### `addMoveTarget` + +```typescript +public addMoveTarget(moveTarget: string): void +``` + +Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. + +###### `moveTarget`Required + +- _Type:_ string + +The string move target that will correspond to this resource. + +--- + +##### `getAnyMapAttribute` + +```typescript +public getAnyMapAttribute(terraformAttribute: string): {[ key: string ]: any} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanAttribute` + +```typescript +public getBooleanAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getBooleanMapAttribute` + +```typescript +public getBooleanMapAttribute(terraformAttribute: string): {[ key: string ]: boolean} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getListAttribute` + +```typescript +public getListAttribute(terraformAttribute: string): string[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberAttribute` + +```typescript +public getNumberAttribute(terraformAttribute: string): number +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberListAttribute` + +```typescript +public getNumberListAttribute(terraformAttribute: string): number[] +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getNumberMapAttribute` + +```typescript +public getNumberMapAttribute(terraformAttribute: string): {[ key: string ]: number} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringAttribute` + +```typescript +public getStringAttribute(terraformAttribute: string): string +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `getStringMapAttribute` + +```typescript +public getStringMapAttribute(terraformAttribute: string): {[ key: string ]: string} +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `hasResourceMove` + +```typescript +public hasResourceMove(): TerraformResourceMoveByTarget | TerraformResourceMoveById +``` + +##### `importFrom` + +```typescript +public importFrom(id: string, provider?: TerraformProvider): void +``` + +###### `id`Required + +- _Type:_ string + +--- + +###### `provider`Optional + +- _Type:_ TerraformProvider + +--- + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +##### `moveFromId` + +```typescript +public moveFromId(id: string): void +``` + +Move the resource corresponding to "id" to this resource. + +Note that the resource being moved from must be marked as moved using it's instance function. + +###### `id`Required + +- _Type:_ string + +Full id of resource being moved from, e.g. "aws_s3_bucket.example". + +--- + +##### `moveTo` + +```typescript +public moveTo(moveTarget: string, index?: string | number): void +``` + +Moves this resource to the target resource given by moveTarget. + +###### `moveTarget`Required + +- _Type:_ string + +The previously set user defined string set by .addMoveTarget() corresponding to the resource to move to. + +--- + +###### `index`Optional + +- _Type:_ string | number + +Optional The index corresponding to the key the resource is to appear in the foreach of a resource to move to. + +--- + +##### `moveToId` + +```typescript +public moveToId(id: string): void +``` + +Moves this resource to the resource corresponding to "id". + +###### `id`Required + +- _Type:_ string + +Full id of resource to move to, e.g. "aws_s3_bucket.example". + +--- + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | +| isTerraformResource | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformResource } from 'cdktf' + +TerraformResource.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformResource } from 'cdktf' + +TerraformResource.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `isTerraformResource` + +```typescript +import { TerraformResource } from 'cdktf' + +TerraformResource.isTerraformResource(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| terraformMetaArguments | {[ key: string ]: any} | _No description._ | +| terraformResourceType | string | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | string[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | FileProvisioner \| LocalExecProvisioner \| RemoteExecProvisioner[] | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `terraformMetaArguments`Required + +```typescript +public readonly terraformMetaArguments: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `terraformGeneratorMetadata`Optional + +```typescript +public readonly terraformGeneratorMetadata: TerraformProviderGeneratorMetadata; +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: string[]; +``` + +- _Type:_ string[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```typescript +public readonly provisioners: FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[]; +``` + +- _Type:_ FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[] + +--- + +### TerraformStack + +#### Initializers + +```typescript +import { TerraformStack } from 'cdktf' + +new TerraformStack(scope: Construct, id: string) +``` + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addDependency | _No description._ | +| addOverride | _No description._ | +| allProviders | _No description._ | +| dependsOn | _No description._ | +| ensureBackendExists | _No description._ | +| getLogicalId | _No description._ | +| hasResourceMove | _No description._ | +| prepareStack | _No description._ | +| registerIncomingCrossStackReference | _No description._ | +| registerOutgoingCrossStackReference | _No description._ | +| runAllValidations | Run all validations on the stack. | +| toHclTerraform | _No description._ | +| toTerraform | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addDependency` + +```typescript +public addDependency(dependency: TerraformStack): void +``` + +###### `dependency`Required + +- _Type:_ TerraformStack + +--- + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `allProviders` + +```typescript +public allProviders(): TerraformProvider[] +``` + +##### `dependsOn` + +```typescript +public dependsOn(stack: TerraformStack): boolean +``` + +###### `stack`Required + +- _Type:_ TerraformStack + +--- + +##### `ensureBackendExists` + +```typescript +public ensureBackendExists(): TerraformBackend +``` + +##### `getLogicalId` + +```typescript +public getLogicalId(tfElement: Node | TerraformElement): string +``` + +###### `tfElement`Required + +- _Type:_ constructs.Node | TerraformElement + +--- + +##### `hasResourceMove` + +```typescript +public hasResourceMove(): boolean +``` + +##### `prepareStack` + +```typescript +public prepareStack(): void +``` + +##### `registerIncomingCrossStackReference` + +```typescript +public registerIncomingCrossStackReference(fromStack: TerraformStack): TerraformRemoteState +``` + +###### `fromStack`Required + +- _Type:_ TerraformStack + +--- + +##### `registerOutgoingCrossStackReference` + +```typescript +public registerOutgoingCrossStackReference(identifier: string): TerraformOutput +``` + +###### `identifier`Required + +- _Type:_ string + +--- + +##### `runAllValidations` + +```typescript +public runAllValidations(): void +``` + +Run all validations on the stack. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): {[ key: string ]: any} +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +#### Static Functions + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isStack | _No description._ | +| of | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformStack } from 'cdktf' + +TerraformStack.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isStack` + +```typescript +import { TerraformStack } from 'cdktf' + +TerraformStack.isStack(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +##### `of` + +```typescript +import { TerraformStack } from 'cdktf' + +TerraformStack.of(construct: IConstruct) +``` + +###### `construct`Required + +- _Type:_ constructs.IConstruct + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| dependencies | TerraformStack[] | _No description._ | +| moveTargets | TerraformResourceTargets | _No description._ | +| synthesizer | IStackSynthesizer | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `dependencies`Required + +```typescript +public readonly dependencies: TerraformStack[]; +``` + +- _Type:_ TerraformStack[] + +--- + +##### `moveTargets`Required + +```typescript +public readonly moveTargets: TerraformResourceTargets; +``` + +- _Type:_ TerraformResourceTargets + +--- + +##### `synthesizer`Required + +```typescript +public readonly synthesizer: IStackSynthesizer; +``` + +- _Type:_ IStackSynthesizer + +--- + +### TerraformVariable + +- _Implements:_ ITerraformAddressable + +#### Initializers + +```typescript +import { TerraformVariable } from 'cdktf' + +new TerraformVariable(scope: Construct, id: string, config: TerraformVariableConfig) +``` + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | ----------------- | +| scope | constructs.Construct | _No description._ | +| id | string | _No description._ | +| config | TerraformVariableConfig | _No description._ | + +--- + +##### `scope`Required + +- _Type:_ constructs.Construct + +--- + +##### `id`Required + +- _Type:_ string + +--- + +##### `config`Required + +- _Type:_ TerraformVariableConfig + +--- + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| toString | Returns a string representation of this construct. | +| addOverride | _No description._ | +| overrideLogicalId | Overrides the auto-generated logical ID with a specific ID. | +| resetOverrideLogicalId | Resets a previously passed logical Id to use the auto-generated logical id again. | +| toHclTerraform | _No description._ | +| toMetadata | _No description._ | +| toTerraform | _No description._ | +| addValidation | _No description._ | +| synthesizeAttributes | _No description._ | +| synthesizeHclAttributes | _No description._ | + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Returns a string representation of this construct. + +##### `addOverride` + +```typescript +public addOverride(path: string, value: any): void +``` + +###### `path`Required + +- _Type:_ string + +--- + +###### `value`Required + +- _Type:_ any + +--- + +##### `overrideLogicalId` + +```typescript +public overrideLogicalId(newLogicalId: string): void +``` + +Overrides the auto-generated logical ID with a specific ID. + +###### `newLogicalId`Required + +- _Type:_ string + +The new logical ID to use for this stack element. + +--- + +##### `resetOverrideLogicalId` + +```typescript +public resetOverrideLogicalId(): void +``` + +Resets a previously passed logical Id to use the auto-generated logical id again. + +##### `toHclTerraform` + +```typescript +public toHclTerraform(): any +``` + +##### `toMetadata` + +```typescript +public toMetadata(): any +``` + +##### `toTerraform` + +```typescript +public toTerraform(): any +``` + +##### `addValidation` + +```typescript +public addValidation(validation: TerraformVariableValidationConfig): void +``` + +###### `validation`Required + +- _Type:_ TerraformVariableValidationConfig + +--- + +##### `synthesizeAttributes` + +```typescript +public synthesizeAttributes(): {[ key: string ]: any} +``` + +##### `synthesizeHclAttributes` + +```typescript +public synthesizeHclAttributes(): {[ key: string ]: any} +``` + +#### Static Functions + +| **Name** | **Description** | +| ----------------------------------------------------------------------------------------- | ----------------------------- | +| isConstruct | Checks if `x` is a construct. | +| isTerraformElement | _No description._ | + +--- + +##### `isConstruct` + +```typescript +import { TerraformVariable } from 'cdktf' + +TerraformVariable.isConstruct(x: any) +``` + +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. + +###### `x`Required + +- _Type:_ any + +Any object. + +--- + +##### `isTerraformElement` + +```typescript +import { TerraformVariable } from 'cdktf' + +TerraformVariable.isTerraformElement(x: any) +``` + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ----------------- | +| node | constructs.Node | The tree node. | +| cdktfStack | TerraformStack | _No description._ | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| booleanValue | IResolvable | _No description._ | +| listValue | string[] | _No description._ | +| numberValue | number | _No description._ | +| stringValue | string | _No description._ | +| value | any | _No description._ | +| default | any | _No description._ | +| description | string | _No description._ | +| nullable | boolean | _No description._ | +| sensitive | boolean | _No description._ | +| type | string | _No description._ | +| validation | TerraformVariableValidationConfig[] | _No description._ | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `cdktfStack`Required + +```typescript +public readonly cdktfStack: TerraformStack; +``` + +- _Type:_ TerraformStack + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `booleanValue`Required + +```typescript +public readonly booleanValue: IResolvable; +``` + +- _Type:_ IResolvable + +--- + +##### `listValue`Required + +```typescript +public readonly listValue: string[]; +``` + +- _Type:_ string[] + +--- + +##### `numberValue`Required + +```typescript +public readonly numberValue: number; +``` + +- _Type:_ number + +--- + +##### `stringValue`Required + +```typescript +public readonly stringValue: string; +``` + +- _Type:_ string + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +--- + +##### `default`Optional + +```typescript +public readonly default: any; +``` + +- _Type:_ any + +--- + +##### `description`Optional + +```typescript +public readonly description: string; +``` + +- _Type:_ string + +--- + +##### `nullable`Optional + +```typescript +public readonly nullable: boolean; +``` + +- _Type:_ boolean + +--- + +##### `sensitive`Optional + +```typescript +public readonly sensitive: boolean; +``` + +- _Type:_ boolean + +--- + +##### `type`Optional + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +--- + +##### `validation`Optional + +```typescript +public readonly validation: TerraformVariableValidationConfig[]; +``` + +- _Type:_ TerraformVariableValidationConfig[] + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/enums.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/enums.mdx new file mode 100644 index 0000000000..9bb340d243 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/enums.mdx @@ -0,0 +1,56 @@ +--- +page_title: Typescript Reference for Enums +description: CDKTF Core API Reference for Enums in Typescript. +--- + + + +# Typescript: Enums + +### AnnotationMetadataEntryType + +#### Members + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------- | +| INFO | _No description._ | +| WARN | _No description._ | +| ERROR | _No description._ | + +--- + +##### `INFO` + +--- + +##### `WARN` + +--- + +##### `ERROR` + +--- + +### AssetType + +#### Members + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------- | +| FILE | _No description._ | +| DIRECTORY | _No description._ | +| ARCHIVE | _No description._ | + +--- + +##### `FILE` + +--- + +##### `DIRECTORY` + +--- + +##### `ARCHIVE` + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/index.mdx new file mode 100644 index 0000000000..2c1c80ee00 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/index.mdx @@ -0,0 +1,14 @@ +--- +page_title: Typescript API resource reference overview +description: Learn about the API resources available in the Terraform CDK library for Typescript. +--- + +# Typescript API resource reference overview + +The Typescript API reference includes the following resources: + +- [Classes](/terraform/cdktf/api-reference/typescript/classes) +- [Constructs](/terraform/cdktf/api-reference/typescript/constructs) +- [Enums](/terraform/cdktf/api-reference/typescript/enums) +- [Protocols](/terraform/cdktf/api-reference/typescript/protocols) +- [Structs](/terraform/cdktf/api-reference/typescript/structs) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/protocols.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/protocols.mdx new file mode 100644 index 0000000000..d01802d100 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/protocols.mdx @@ -0,0 +1,967 @@ +--- +page_title: Typescript Reference for Protocols +description: CDKTF Core API Reference for Protocols in Typescript. +--- + + + +# Typescript: Protocols + +### IAnyProducer + +- _Implemented By:_ IAnyProducer + +Interface for lazy untyped value producers. + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------- | ------------------ | +| produce | Produce the value. | + +--- + +##### `produce` + +```typescript +public produce(context: IResolveContext): any +``` + +Produce the value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IAspect + +- _Implemented By:_ MigrateIds, IAspect + +Represents an Aspect. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------- | ------------------------------------ | +| visit | All aspects can visit an IConstruct. | + +--- + +##### `visit` + +```typescript +public visit(node: IConstruct): void +``` + +All aspects can visit an IConstruct. + +###### `node`Required + +- _Type:_ constructs.IConstruct + +--- + +### IFragmentConcatenator + +- _Implemented By:_ StringConcat, IFragmentConcatenator + +Function used to concatenate symbols in the target document language. + +Interface so it could potentially be exposed over jsii. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ----------------------------------------------- | +| join | Join the fragment on the left and on the right. | + +--- + +##### `join` + +```typescript +public join(left: any, right: any): any +``` + +Join the fragment on the left and on the right. + +###### `left`Required + +- _Type:_ any + +--- + +###### `right`Required + +- _Type:_ any + +--- + +### IImportableConfig + +- _Implemented By:_ IImportableConfig + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------- | ----------------- | +| importId | string | _No description._ | +| terraformResourceType | string | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `importId`Required + +```typescript +public readonly importId: string; +``` + +- _Type:_ string + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +### IInterpolatingParent + +- _Implemented By:_ AnyMapList, BooleanMapList, ComplexComputedList, ComplexObject, DataResource, MapList, NumberMapList, StringMapList, TerraformDataSource, TerraformResource, IInterpolatingParent + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | ----------------- | +| interpolationForAttribute | _No description._ | + +--- + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +### IListProducer + +- _Implemented By:_ IListProducer + +Interface for lazy list producers. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | ----------------------- | +| produce | Produce the list value. | + +--- + +##### `produce` + +```typescript +public produce(context: IResolveContext): string[] +``` + +Produce the list value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IManifest + +- _Implemented By:_ Manifest, IManifest + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------- | +| stacks | {[ key: string ]: StackManifest} | _No description._ | +| version | string | _No description._ | + +--- + +##### `stacks`Required + +```typescript +public readonly stacks: {[ key: string ]: StackManifest}; +``` + +- _Type:_ {[ key: string ]: StackManifest} + +--- + +##### `version`Required + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +### INumberProducer + +- _Implemented By:_ INumberProducer + +Interface for lazy number producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| produce | Produce the number value. | + +--- + +##### `produce` + +```typescript +public produce(context: IResolveContext): number +``` + +Produce the number value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IPostProcessor + +- _Implemented By:_ IPostProcessor + +A Token that can post-process the complete resolved value, after resolve() has recursed over it. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| postProcess | Process the completely resolved value, after full recursion/resolution has happened. | + +--- + +##### `postProcess` + +```typescript +public postProcess(input: any, context: IResolveContext): any +``` + +Process the completely resolved value, after full recursion/resolution has happened. + +###### `input`Required + +- _Type:_ any + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### IRemoteWorkspace + +- _Implemented By:_ NamedRemoteWorkspace, PrefixedRemoteWorkspaces, IRemoteWorkspace + +### IResolvable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, LazyBase, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, IResolvable + +Interface for values that can be resolvable later. + +Tokens are special objects that participate in synthesis. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------- | --------------------------------------------------------- | +| resolve | Produce the Token's value at resolution time. | +| toString | Return a string representation of this resolvable object. | + +--- + +##### `resolve` + +```typescript +public resolve(context: IResolveContext): any +``` + +Produce the Token's value at resolution time. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `toString` + +```typescript +public toString(): string +``` + +Return a string representation of this resolvable object. + +Returns a reversible string representation. + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------ | +| creationStack | string[] | The creation stack of this resolvable which will be appended to errors thrown during resolution. | + +--- + +##### `creationStack`Required + +```typescript +public readonly creationStack: string[]; +``` + +- _Type:_ string[] + +The creation stack of this resolvable which will be appended to errors thrown during resolution. + +If this returns an empty array the stack will not be attached. + +--- + +### IResolveContext + +- _Implemented By:_ IResolveContext + +Current resolution context for tokens. + +#### Methods + +| **Name** | **Description** | +| --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| registerPostProcessor | Use this postprocessor after the entire token structure has been resolved. | +| resolve | Resolve an inner object. | + +--- + +##### `registerPostProcessor` + +```typescript +public registerPostProcessor(postProcessor: IPostProcessor): void +``` + +Use this postprocessor after the entire token structure has been resolved. + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- + +##### `resolve` + +```typescript +public resolve(x: any): any +``` + +Resolve an inner object. + +###### `x`Required + +- _Type:_ any + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| preparing | boolean | True when we are still preparing, false if we're rendering the final output. | +| scope | constructs.IConstruct | The scope from which resolution has been initiated. | +| ignoreEscapes | boolean | True when ${} should not be parsed, and treated as literals. | +| iteratorContext | string | TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. | +| suppressBraces | boolean | True when ${} should be ommitted (because already inside them), false otherwise. | +| warnEscapes | boolean | True when ${} should not be included in the string to be resolved, outputs a warning. | + +--- + +##### `preparing`Required + +```typescript +public readonly preparing: boolean; +``` + +- _Type:_ boolean + +True when we are still preparing, false if we're rendering the final output. + +--- + +##### `scope`Required + +```typescript +public readonly scope: IConstruct; +``` + +- _Type:_ constructs.IConstruct + +The scope from which resolution has been initiated. + +--- + +##### `ignoreEscapes`Optional + +```typescript +public readonly ignoreEscapes: boolean; +``` + +- _Type:_ boolean + +True when ${} should not be parsed, and treated as literals. + +--- + +##### `iteratorContext`Optional + +```typescript +public readonly iteratorContext: string; +``` + +- _Type:_ string + +TerraformIterators can be passed for block attributes and normal list attributes both require different handling when the iterable variable is accessed e.g. a dynamic block needs each.key while a for expression just needs key. + +--- + +##### `suppressBraces`Optional + +```typescript +public readonly suppressBraces: boolean; +``` + +- _Type:_ boolean + +True when ${} should be ommitted (because already inside them), false otherwise. + +--- + +##### `warnEscapes`Optional + +```typescript +public readonly warnEscapes: boolean; +``` + +- _Type:_ boolean + +True when ${} should not be included in the string to be resolved, outputs a warning. + +Default: false + +--- + +### IResource + +- _Extends:_ constructs.IConstruct + +- _Implemented By:_ Resource, IResource + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------- | --------------------------------------------------------------- | -------------------------------------------- | +| node | constructs.Node | The tree node. | +| stack | TerraformStack | The stack in which this resource is defined. | + +--- + +##### `node`Required + +```typescript +public readonly node: Node; +``` + +- _Type:_ constructs.Node + +The tree node. + +--- + +##### `stack`Required + +```typescript +public readonly stack: TerraformStack; +``` + +- _Type:_ TerraformStack + +The stack in which this resource is defined. + +--- + +### IResourceConstructor + +- _Implemented By:_ IResourceConstructor + +### IScopeCallback + +- _Implemented By:_ IScopeCallback + +### IStackSynthesizer + +- _Implemented By:_ IStackSynthesizer + +Encodes information how a certain Stack should be deployed inspired by AWS CDK v2 implementation (synth functionality was removed in constructs v10). + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------- | ----------------------------------------------- | +| synthesize | Synthesize the associated stack to the session. | + +--- + +##### `synthesize` + +```typescript +public synthesize(session: ISynthesisSession): void +``` + +Synthesize the associated stack to the session. + +###### `session`Required + +- _Type:_ ISynthesisSession + +--- + +### IStringProducer + +- _Implemented By:_ IStringProducer + +Interface for lazy string producers. + +#### Methods + +| **Name** | **Description** | +| ----------------------------------------------------------------- | ------------------------- | +| produce | Produce the string value. | + +--- + +##### `produce` + +```typescript +public produce(context: IResolveContext): string +``` + +Produce the string value. + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +### ISynthesisSession + +- _Implemented By:_ ISynthesisSession + +Represents a single session of synthesis. + +Passed into `TerraformStack.onSynthesize()` methods. +originally from aws/constructs lib v3.3.126 (synth functionality was removed in constructs v10) + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------- | ------------------------------------------------ | +| manifest | Manifest | _No description._ | +| outdir | string | The output directory for this synthesis session. | +| skipValidation | boolean | _No description._ | + +--- + +##### `manifest`Required + +```typescript +public readonly manifest: Manifest; +``` + +- _Type:_ Manifest + +--- + +##### `outdir`Required + +```typescript +public readonly outdir: string; +``` + +- _Type:_ string + +The output directory for this synthesis session. + +--- + +##### `skipValidation`Optional + +```typescript +public readonly skipValidation: boolean; +``` + +- _Type:_ boolean + +--- + +### ITerraformAddressable + +- _Implemented By:_ AnyListList, AnyListMap, AnyMap, AnyMapList, BooleanList, BooleanListList, BooleanListMap, BooleanMap, BooleanMapList, ComplexComputedList, ComplexList, ComplexMap, ComplexObject, DataResource, DataTerraformRemoteState, DataTerraformRemoteStateAzurerm, DataTerraformRemoteStateConsul, DataTerraformRemoteStateCos, DataTerraformRemoteStateGcs, DataTerraformRemoteStateHttp, DataTerraformRemoteStateLocal, DataTerraformRemoteStateOss, DataTerraformRemoteStatePg, DataTerraformRemoteStateS3, DataTerraformRemoteStateSwift, MapList, NumberListList, NumberListMap, NumberMap, NumberMapList, StringListList, StringListMap, StringMap, StringMapList, TerraformDataSource, TerraformHclModule, TerraformLocal, TerraformModule, TerraformRemoteState, TerraformResource, TerraformVariable, ITerraformAddressable, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------ | ------------------- | ----------------- | +| fqn | string | _No description._ | + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### ITerraformDependable + +- _Extends:_ ITerraformAddressable + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformHclModule, TerraformModule, TerraformResource, ITerraformDependable + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------- | ------------------- | ----------------- | +| fqn | string | _No description._ | + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +### ITerraformIterator + +- _Implemented By:_ DynamicListTerraformIterator, ListTerraformIterator, MapTerraformIterator, ResourceTerraformIterator, TerraformIterator, ITerraformIterator + +### ITerraformResource + +- _Implemented By:_ DataResource, TerraformDataSource, TerraformResource, ITerraformResource + +#### Methods + +| **Name** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------- | +| interpolationForAttribute | _No description._ | + +--- + +##### `interpolationForAttribute` + +```typescript +public interpolationForAttribute(terraformAttribute: string): IResolvable +``` + +###### `terraformAttribute`Required + +- _Type:_ string + +--- + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| fqn | string | _No description._ | +| friendlyUniqueId | string | _No description._ | +| terraformResourceType | string | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | string[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `fqn`Required + +```typescript +public readonly fqn: string; +``` + +- _Type:_ string + +--- + +##### `friendlyUniqueId`Required + +```typescript +public readonly friendlyUniqueId: string; +``` + +- _Type:_ string + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: string[]; +``` + +- _Type:_ string[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +### ITokenMapper + +- _Implemented By:_ ITokenMapper + +Interface to apply operation to tokens in a string. + +Interface so it can be exported via jsii. + +#### Methods + +| **Name** | **Description** | +| ---------------------------------------------------------------- | ----------------------- | +| mapToken | Replace a single token. | + +--- + +##### `mapToken` + +```typescript +public mapToken(t: IResolvable): any +``` + +Replace a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +### ITokenResolver + +- _Implemented By:_ DefaultTokenResolver, ITokenResolver + +How to resolve tokens. + +#### Methods + +| **Name** | **Description** | +| ------------------------------------------------------------------------------------ | ----------------------------------------------------------- | +| resolveList | Resolve a tokenized list. | +| resolveMap | Resolve a tokenized map. | +| resolveNumberList | Resolve a tokenized number list. | +| resolveString | Resolve a string with at least one stringified token in it. | +| resolveToken | Resolve a single token. | + +--- + +##### `resolveList` + +```typescript +public resolveList(l: string[], context: IResolveContext): any +``` + +Resolve a tokenized list. + +###### `l`Required + +- _Type:_ string[] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveMap` + +```typescript +public resolveMap(m: {[ key: string ]: any}, context: IResolveContext): any +``` + +Resolve a tokenized map. + +###### `m`Required + +- _Type:_ {[ key: string ]: any} + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveNumberList` + +```typescript +public resolveNumberList(l: number[], context: IResolveContext): any +``` + +Resolve a tokenized number list. + +###### `l`Required + +- _Type:_ number[] + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveString` + +```typescript +public resolveString(s: TokenizedStringFragments, context: IResolveContext): any +``` + +Resolve a string with at least one stringified token in it. + +(May use concatenation) + +###### `s`Required + +- _Type:_ TokenizedStringFragments + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +##### `resolveToken` + +```typescript +public resolveToken(t: IResolvable, context: IResolveContext, postProcessor: IPostProcessor): any +``` + +Resolve a single token. + +###### `t`Required + +- _Type:_ IResolvable + +--- + +###### `context`Required + +- _Type:_ IResolveContext + +--- + +###### `postProcessor`Required + +- _Type:_ IPostProcessor + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/structs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/structs.mdx new file mode 100644 index 0000000000..5430c366a8 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/api-reference/typescript/structs.mdx @@ -0,0 +1,9498 @@ +--- +page_title: Typescript Reference for Structs +description: CDKTF Core API Reference for Structs in Typescript. +--- + + + +# Typescript: Structs + +### AppConfig + +#### Initializer + +```typescript +import { AppConfig } from 'cdktf' + +const appConfig: AppConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | ----------------------------------- | --------------------------------------------------------------- | +| context | {[ key: string ]: any} | Additional context values for the application. | +| hclOutput | boolean | _No description._ | +| outdir | string | The directory to output Terraform resources. | +| skipBackendValidation | boolean | Whether to skip backend validation during synthesis of the app. | +| skipValidation | boolean | Whether to skip all validations during synthesis of the app. | +| stackTraces | boolean | _No description._ | + +--- + +##### `context`Optional + +```typescript +public readonly context: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} +- _Default:_ no additional context + +Additional context values for the application. + +Context set by the CLI or the `context` key in `cdktf.json` has precedence. + +Context can be read from any construct using `node.getContext(key)`. + +--- + +##### `hclOutput`Optional + +```typescript +public readonly hclOutput: boolean; +``` + +- _Type:_ boolean + +--- + +##### `outdir`Optional + +```typescript +public readonly outdir: string; +``` + +- _Type:_ string +- _Default:_ CDKTF_OUTDIR if defined, otherwise "cdktf.out" + +The directory to output Terraform resources. + +If you are using the CDKTF CLI, this value is automatically set from one of the following three sources: + +- The `-o` / `--output` CLI option +- The `CDKTF_OUTDIR` environment variable +- The `outdir` key in `cdktf.json` + +If you are using the CDKTF CLI and want to set a different value here, you will also need to set the same value via one of the three ways specified above. + +The most common case to set this value is when you are using the CDKTF library directly (e.g. when writing unit tests). + +--- + +##### `skipBackendValidation`Optional + +```typescript +public readonly skipBackendValidation: boolean; +``` + +- _Type:_ boolean +- _Default:_ false + +Whether to skip backend validation during synthesis of the app. + +--- + +##### `skipValidation`Optional + +```typescript +public readonly skipValidation: boolean; +``` + +- _Type:_ boolean +- _Default:_ false + +Whether to skip all validations during synthesis of the app. + +--- + +##### `stackTraces`Optional + +```typescript +public readonly stackTraces: boolean; +``` + +- _Type:_ boolean + +--- + +### AzurermBackendConfig + +Stores the state as a Blob with the given Key within the Blob Container within the Blob Storage Account. + +This backend supports state locking and consistency checking +with Azure Blob Storage native capabilities. + +Note: By default the Azure Backend uses ADAL for authentication which is deprecated +in favour of MSAL - MSAL can be used by setting use_microsoft_graph to true. +The default for this will change in Terraform 1.2, +so that MSAL authentication is used by default. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/azurerm + +#### Initializer + +```typescript +import { AzurermBackendConfig } from 'cdktf' + +const azurermBackendConfig: AzurermBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| containerName | string | (Required) The Name of the Storage Container within the Storage Account. | +| key | string | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storageAccountName | string | (Required) The Name of the Storage Account. | +| accessKey | string | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| clientCertificatePassword | string | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| clientCertificatePath | string | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| clientId | string | (Optional) The Client ID of the Service Principal. | +| clientSecret | string | (Optional) The Client Secret of the Service Principal. | +| endpoint | string | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | string | (Optional) The Azure Environment which should be used. | +| metadataHost | string | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msiEndpoint | string | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidcRequestToken | string | (Optional) The bearer token for the request to the OIDC provider. | +| oidcRequestUrl | string | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidcToken | string | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidcTokenFilePath | string | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resourceGroupName | string | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sasToken | string | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | boolean | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscriptionId | string | (Optional) The Subscription ID in which the Storage Account exists. | +| tenantId | string | (Optional) The Tenant ID in which the Subscription exists. | +| useAzureadAuth | boolean | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| useMicrosoftGraph | boolean | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| useMsi | boolean | (Optional) Should Managed Service Identity authentication be used? | +| useOidc | boolean | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `containerName`Required + +```typescript +public readonly containerName: string; +``` + +- _Type:_ string + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storageAccountName`Required + +```typescript +public readonly storageAccountName: string; +``` + +- _Type:_ string + +(Required) The Name of the Storage Account. + +--- + +##### `accessKey`Optional + +```typescript +public readonly accessKey: string; +``` + +- _Type:_ string + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `clientCertificatePassword`Optional + +```typescript +public readonly clientCertificatePassword: string; +``` + +- _Type:_ string + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `clientCertificatePath`Optional + +```typescript +public readonly clientCertificatePath: string; +``` + +- _Type:_ string + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `clientId`Optional + +```typescript +public readonly clientId: string; +``` + +- _Type:_ string + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `clientSecret`Optional + +```typescript +public readonly clientSecret: string; +``` + +- _Type:_ string + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +```typescript +public readonly environment: string; +``` + +- _Type:_ string + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadataHost`Optional + +```typescript +public readonly metadataHost: string; +``` + +- _Type:_ string + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msiEndpoint`Optional + +```typescript +public readonly msiEndpoint: string; +``` + +- _Type:_ string + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidcRequestToken`Optional + +```typescript +public readonly oidcRequestToken: string; +``` + +- _Type:_ string + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidcRequestUrl`Optional + +```typescript +public readonly oidcRequestUrl: string; +``` + +- _Type:_ string + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidcToken`Optional + +```typescript +public readonly oidcToken: string; +``` + +- _Type:_ string + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidcTokenFilePath`Optional + +```typescript +public readonly oidcTokenFilePath: string; +``` + +- _Type:_ string + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resourceGroupName`Optional + +```typescript +public readonly resourceGroupName: string; +``` + +- _Type:_ string + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sasToken`Optional + +```typescript +public readonly sasToken: string; +``` + +- _Type:_ string + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +```typescript +public readonly snapshot: boolean; +``` + +- _Type:_ boolean + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscriptionId`Optional + +```typescript +public readonly subscriptionId: string; +``` + +- _Type:_ string + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenantId`Optional + +```typescript +public readonly tenantId: string; +``` + +- _Type:_ string + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `useAzureadAuth`Optional + +```typescript +public readonly useAzureadAuth: boolean; +``` + +- _Type:_ boolean + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `useMicrosoftGraph`Optional + +```typescript +public readonly useMicrosoftGraph: boolean; +``` + +- _Type:_ boolean + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `useMsi`Optional + +```typescript +public readonly useMsi: boolean; +``` + +- _Type:_ boolean + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `useOidc`Optional + +```typescript +public readonly useOidc: boolean; +``` + +- _Type:_ boolean + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### CloudBackendConfig + +The Cloud Backend synthesizes a {@link https://developer.hashicorp.com/terraform/cli/cloud/settings#the-cloud-block cloud block}. The cloud block is a nested block within the top-level terraform settings block. It specifies which Terraform Cloud workspaces to use for the current working directory. The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings. + +https://developer.hashicorp.com/terraform/cli/cloud/settings#arguments + +#### Initializer + +```typescript +import { CloudBackendConfig } from 'cdktf' + +const cloudBackendConfig: CloudBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| organization | string | The name of the organization containing the workspace(s) the current configuration should use. | +| workspaces | NamedCloudWorkspace \| TaggedCloudWorkspaces | A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. | +| hostname | string | The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. | +| token | string | The token used to authenticate with Terraform Cloud. | + +--- + +##### `organization`Required + +```typescript +public readonly organization: string; +``` + +- _Type:_ string + +The name of the organization containing the workspace(s) the current configuration should use. + +--- + +##### `workspaces`Required + +```typescript +public readonly workspaces: NamedCloudWorkspace | TaggedCloudWorkspaces; +``` + +- _Type:_ NamedCloudWorkspace | TaggedCloudWorkspaces + +A nested block that specifies which remote Terraform Cloud workspaces to use for the current configuration. + +The workspaces block must contain exactly one of the following arguments, each denoting a strategy for how workspaces should be mapped: + +--- + +##### `hostname`Optional + +```typescript +public readonly hostname: string; +``` + +- _Type:_ string +- _Default:_ app.terraform.io + +The hostname of a Terraform Enterprise installation, if using Terraform Enterprise. + +--- + +##### `token`Optional + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +The token used to authenticate with Terraform Cloud. + +We recommend omitting the token from the configuration, and instead using terraform login or manually configuring credentials in the CLI config file. + +--- + +### ConsulBackendConfig + +Stores the state in the Consul KV store at a given path. This backend supports state locking. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/consul + +#### Initializer + +```typescript +import { ConsulBackendConfig } from 'cdktf' + +const consulBackendConfig: ConsulBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| accessToken | string | (Required) Access token. | +| path | string | (Required) Path in the Consul KV store. | +| address | string | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| caFile | string | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| certFile | string | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | string | (Optional) The datacenter to use. | +| gzip | boolean | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| httpAuth | string | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| keyFile | string | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | boolean | (Optional) false to disable locking. | +| scheme | string | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `accessToken`Required + +```typescript +public readonly accessToken: string; +``` + +- _Type:_ string + +(Required) Access token. + +--- + +##### `path`Required + +```typescript +public readonly path: string; +``` + +- _Type:_ string + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +```typescript +public readonly address: string; +``` + +- _Type:_ string + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `caFile`Optional + +```typescript +public readonly caFile: string; +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `certFile`Optional + +```typescript +public readonly certFile: string; +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +```typescript +public readonly datacenter: string; +``` + +- _Type:_ string + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +```typescript +public readonly gzip: boolean; +``` + +- _Type:_ boolean + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `httpAuth`Optional + +```typescript +public readonly httpAuth: string; +``` + +- _Type:_ string + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `keyFile`Optional + +```typescript +public readonly keyFile: string; +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +```typescript +public readonly lock: boolean; +``` + +- _Type:_ boolean + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +```typescript +public readonly scheme: string; +``` + +- _Type:_ string + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### CosBackendAssumeRole + +#### Initializer + +```typescript +import { CosBackendAssumeRole } from 'cdktf' + +const cosBackendAssumeRole: CosBackendAssumeRole = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------------- | ----------------------------------------------------------------------- | +| roleArn | string | (Required) The ARN of the role to assume. | +| sessionDuration | number | (Required) The duration of the session when making the AssumeRole call. | +| sessionName | string | (Required) The session name to use when making the AssumeRole call. | +| policy | any | (Optional) A more restrictive policy when making the AssumeRole call. | + +--- + +##### `roleArn`Required + +```typescript +public readonly roleArn: string; +``` + +- _Type:_ string + +(Required) The ARN of the role to assume. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_ARN. + +--- + +##### `sessionDuration`Required + +```typescript +public readonly sessionDuration: number; +``` + +- _Type:_ number + +(Required) The duration of the session when making the AssumeRole call. + +Its value ranges from 0 to 43200(seconds), and default is 7200 seconds. +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_DURATION. + +--- + +##### `sessionName`Required + +```typescript +public readonly sessionName: string; +``` + +- _Type:_ string + +(Required) The session name to use when making the AssumeRole call. + +It can be sourced from the TENCENTCLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `policy`Optional + +```typescript +public readonly policy: any; +``` + +- _Type:_ any + +(Optional) A more restrictive policy when making the AssumeRole call. + +Its content must not contains principal elements. +Please refer to {@link https://www.tencentcloud.com/document/product/598/10603 policies syntax logic}. + +--- + +### CosBackendConfig + +Stores the state as an object in a configurable prefix in a given bucket on Tencent Cloud Object Storage (COS). + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the COS bucket to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/cos + +#### Initializer + +```typescript +import { CosBackendConfig } from 'cdktf' + +const cosBackendConfig: CosBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| bucket | string | (Required) The name of the COS bucket. | +| accelerate | boolean | (Optional) Whether to enable global Acceleration. | +| acl | string | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | string | (Optional) The root domain of the API request. | +| encrypt | boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | string | (Optional) The Custom Endpoint for the COS backend. | +| key | string | (Optional) The path for saving the state file in bucket. | +| prefix | string | (Optional) The directory for saving the state file in bucket. | +| region | string | (Optional) The region of the COS bucket. | +| secretId | string | (Optional) Secret id of Tencent Cloud. | +| secretKey | string | (Optional) Secret key of Tencent Cloud. | +| securityToken | string | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +```typescript +public readonly accelerate: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +```typescript +public readonly acl: string; +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assumeRole`Optional + +```typescript +public readonly assumeRole: CosBackendAssumeRole; +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +```typescript +public readonly domain: string; +``` + +- _Type:_ string + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +```typescript +public readonly encrypt: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +```typescript +public readonly region: string; +``` + +- _Type:_ string + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secretId`Optional + +```typescript +public readonly secretId: string; +``` + +- _Type:_ string + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secretKey`Optional + +```typescript +public readonly secretKey: string; +``` + +- _Type:_ string + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `securityToken`Optional + +```typescript +public readonly securityToken: string; +``` + +- _Type:_ string + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataConfig + +#### Initializer + +```typescript +import { DataConfig } from 'cdktf' + +const dataConfig: DataConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | ITerraformDependable[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | FileProvisioner \| LocalExecProvisioner \| RemoteExecProvisioner[] | _No description._ | +| input | {[ key: string ]: any} | (Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. | +| triggersReplace | {[ key: string ]: any} | (Optional) A value which is stored in the instance state, and will force replacement when the value changes. | + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```typescript +public readonly provisioners: FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[]; +``` + +- _Type:_ FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[] + +--- + +##### `input`Optional + +```typescript +public readonly input: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +(Optional) A value which will be stored in the instance state, and reflected in the output attribute after apply. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#input + +--- + +##### `triggersReplace`Optional + +```typescript +public readonly triggersReplace: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +(Optional) A value which is stored in the instance state, and will force replacement when the value changes. + +https://developer.hashicorp.com/terraform/language/resources/terraform-data#triggers_replace + +--- + +### DataTerraformRemoteStateAzurermConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateAzurermConfig } from 'cdktf' + +const dataTerraformRemoteStateAzurermConfig: DataTerraformRemoteStateAzurermConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| containerName | string | (Required) The Name of the Storage Container within the Storage Account. | +| key | string | (Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. | +| storageAccountName | string | (Required) The Name of the Storage Account. | +| accessKey | string | access_key - (Optional) The Access Key used to access the Blob Storage Account. | +| clientCertificatePassword | string | (Optional) The password associated with the Client Certificate specified in client_certificate_path. | +| clientCertificatePath | string | (Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. | +| clientId | string | (Optional) The Client ID of the Service Principal. | +| clientSecret | string | (Optional) The Client Secret of the Service Principal. | +| endpoint | string | (Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. | +| environment | string | (Optional) The Azure Environment which should be used. | +| metadataHost | string | (Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). | +| msiEndpoint | string | (Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. | +| oidcRequestToken | string | (Optional) The bearer token for the request to the OIDC provider. | +| oidcRequestUrl | string | (Optional) The URL for the OIDC provider from which to request an ID token. | +| oidcToken | string | (Optional) The ID token when authenticating using OpenID Connect (OIDC). | +| oidcTokenFilePath | string | (Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). | +| resourceGroupName | string | (Required) The Name of the Resource Group in which the Storage Account exists. | +| sasToken | string | (Optional) The SAS Token used to access the Blob Storage Account. | +| snapshot | boolean | (Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? | +| subscriptionId | string | (Optional) The Subscription ID in which the Storage Account exists. | +| tenantId | string | (Optional) The Tenant ID in which the Subscription exists. | +| useAzureadAuth | boolean | (Optional) Should AzureAD Authentication be used to access the Blob Storage Account. | +| useMicrosoftGraph | boolean | (Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? | +| useMsi | boolean | (Optional) Should Managed Service Identity authentication be used? | +| useOidc | boolean | (Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `containerName`Required + +```typescript +public readonly containerName: string; +``` + +- _Type:_ string + +(Required) The Name of the Storage Container within the Storage Account. + +--- + +##### `key`Required + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +(Required) The name of the Blob used to retrieve/store Terraform's State file inside the Storage Container. + +--- + +##### `storageAccountName`Required + +```typescript +public readonly storageAccountName: string; +``` + +- _Type:_ string + +(Required) The Name of the Storage Account. + +--- + +##### `accessKey`Optional + +```typescript +public readonly accessKey: string; +``` + +- _Type:_ string + +access_key - (Optional) The Access Key used to access the Blob Storage Account. + +This can also be sourced from the ARM_ACCESS_KEY environment variable. + +--- + +##### `clientCertificatePassword`Optional + +```typescript +public readonly clientCertificatePassword: string; +``` + +- _Type:_ string + +(Optional) The password associated with the Client Certificate specified in client_certificate_path. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PASSWORD environment variable. + +--- + +##### `clientCertificatePath`Optional + +```typescript +public readonly clientCertificatePath: string; +``` + +- _Type:_ string + +(Optional) The path to the PFX file used as the Client Certificate when authenticating as a Service Principal. + +This can also be sourced from the +ARM_CLIENT_CERTIFICATE_PATH environment variable. + +--- + +##### `clientId`Optional + +```typescript +public readonly clientId: string; +``` + +- _Type:_ string + +(Optional) The Client ID of the Service Principal. + +This can also be sourced from the ARM_CLIENT_ID environment variable. + +--- + +##### `clientSecret`Optional + +```typescript +public readonly clientSecret: string; +``` + +- _Type:_ string + +(Optional) The Client Secret of the Service Principal. + +This can also be sourced from the ARM_CLIENT_SECRET environment variable. + +--- + +##### `endpoint`Optional + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for Azure Resource Manager. This can also be sourced from the ARM_ENDPOINT environment variable. + +NOTE: An endpoint should only be configured when using Azure Stack. + +--- + +##### `environment`Optional + +```typescript +public readonly environment: string; +``` + +- _Type:_ string + +(Optional) The Azure Environment which should be used. + +This can also be sourced from the ARM_ENVIRONMENT environment variable. +Possible values are public, china, german, stack and usgovernment. Defaults to public. + +--- + +##### `metadataHost`Optional + +```typescript +public readonly metadataHost: string; +``` + +- _Type:_ string + +(Optional) The Hostname of the Azure Metadata Service (for example management.azure.com), used to obtain the Cloud Environment when using a Custom Azure Environment. This can also be sourced from the ARM_METADATA_HOSTNAME Environment Variable.). + +--- + +##### `msiEndpoint`Optional + +```typescript +public readonly msiEndpoint: string; +``` + +- _Type:_ string + +(Optional) The path to a custom Managed Service Identity endpoint which is automatically determined if not specified. + +This can also be sourced from the ARM_MSI_ENDPOINT environment variable. + +--- + +##### `oidcRequestToken`Optional + +```typescript +public readonly oidcRequestToken: string; +``` + +- _Type:_ string + +(Optional) The bearer token for the request to the OIDC provider. + +This can +also be sourced from the ARM_OIDC_REQUEST_TOKEN or +ACTIONS_ID_TOKEN_REQUEST_TOKEN environment variables. + +--- + +##### `oidcRequestUrl`Optional + +```typescript +public readonly oidcRequestUrl: string; +``` + +- _Type:_ string + +(Optional) The URL for the OIDC provider from which to request an ID token. + +This can also be sourced from the ARM_OIDC_REQUEST_URL or +ACTIONS_ID_TOKEN_REQUEST_URL environment variables. + +--- + +##### `oidcToken`Optional + +```typescript +public readonly oidcToken: string; +``` + +- _Type:_ string + +(Optional) The ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN environment variable. + +--- + +##### `oidcTokenFilePath`Optional + +```typescript +public readonly oidcTokenFilePath: string; +``` + +- _Type:_ string + +(Optional) The path to a file containing an ID token when authenticating using OpenID Connect (OIDC). + +This can also be sourced from the ARM_OIDC_TOKEN_FILE_PATH environment variable. + +--- + +##### `resourceGroupName`Optional + +```typescript +public readonly resourceGroupName: string; +``` + +- _Type:_ string + +(Required) The Name of the Resource Group in which the Storage Account exists. + +--- + +##### `sasToken`Optional + +```typescript +public readonly sasToken: string; +``` + +- _Type:_ string + +(Optional) The SAS Token used to access the Blob Storage Account. + +This can also be sourced from the ARM_SAS_TOKEN environment variable. + +--- + +##### `snapshot`Optional + +```typescript +public readonly snapshot: boolean; +``` + +- _Type:_ boolean + +(Optional) Should the Blob used to store the Terraform Statefile be snapshotted before use? + +Defaults to false. This value can also be sourced +from the ARM_SNAPSHOT environment variable. + +--- + +##### `subscriptionId`Optional + +```typescript +public readonly subscriptionId: string; +``` + +- _Type:_ string + +(Optional) The Subscription ID in which the Storage Account exists. + +This can also be sourced from the ARM_SUBSCRIPTION_ID environment variable. + +--- + +##### `tenantId`Optional + +```typescript +public readonly tenantId: string; +``` + +- _Type:_ string + +(Optional) The Tenant ID in which the Subscription exists. + +This can also be sourced from the ARM_TENANT_ID environment variable. + +--- + +##### `useAzureadAuth`Optional + +```typescript +public readonly useAzureadAuth: boolean; +``` + +- _Type:_ boolean + +(Optional) Should AzureAD Authentication be used to access the Blob Storage Account. + +This can also be sourced from the ARM_USE_AZUREAD environment +variable. + +Note: When using AzureAD for Authentication to Storage you also need to +ensure the Storage Blob Data Owner role is assigned. + +--- + +##### `useMicrosoftGraph`Optional + +```typescript +public readonly useMicrosoftGraph: boolean; +``` + +- _Type:_ boolean + +(Optional) Should MSAL be used for authentication instead of ADAL, and should Microsoft Graph be used instead of Azure Active Directory Graph? + +Defaults to true. + +Note: In Terraform 1.2 the Azure Backend uses MSAL (and Microsoft Graph) +rather than ADAL (and Azure Active Directory Graph) for authentication by +default - you can disable this by setting use_microsoft_graph to false. +This setting will be removed in Terraform 1.3, due to Microsoft's +deprecation of ADAL. + +--- + +##### `useMsi`Optional + +```typescript +public readonly useMsi: boolean; +``` + +- _Type:_ boolean + +(Optional) Should Managed Service Identity authentication be used? + +This can also be sourced from the ARM_USE_MSI environment variable. + +--- + +##### `useOidc`Optional + +```typescript +public readonly useOidc: boolean; +``` + +- _Type:_ boolean + +(Optional) Should OIDC authentication be used? This can also be sourced from the ARM_USE_OIDC environment variable. + +Note: When using OIDC for authentication, use_microsoft_graph +must be set to true (which is the default). + +--- + +### DataTerraformRemoteStateConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateConfig } from 'cdktf' + +const dataTerraformRemoteStateConfig: DataTerraformRemoteStateConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------- | ----------------------------------- | ----------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateConsulConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateConsulConfig } from 'cdktf' + +const dataTerraformRemoteStateConsulConfig: DataTerraformRemoteStateConsulConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| accessToken | string | (Required) Access token. | +| path | string | (Required) Path in the Consul KV store. | +| address | string | (Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. | +| caFile | string | (Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. | +| certFile | string | (Optional) A path to a PEM-encoded certificate provided to the remote agent; | +| datacenter | string | (Optional) The datacenter to use. | +| gzip | boolean | (Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. | +| httpAuth | string | (Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. | +| keyFile | string | (Optional) A path to a PEM-encoded private key, required if cert_file is specified. | +| lock | boolean | (Optional) false to disable locking. | +| scheme | string | (Optional) Specifies what protocol to use when talking to the given address,either http or https. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `accessToken`Required + +```typescript +public readonly accessToken: string; +``` + +- _Type:_ string + +(Required) Access token. + +--- + +##### `path`Required + +```typescript +public readonly path: string; +``` + +- _Type:_ string + +(Required) Path in the Consul KV store. + +--- + +##### `address`Optional + +```typescript +public readonly address: string; +``` + +- _Type:_ string + +(Optional) DNS name and port of your Consul endpoint specified in the format dnsname:port. + +Defaults to the local agent HTTP listener. + +--- + +##### `caFile`Optional + +```typescript +public readonly caFile: string; +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate authority used to verify the remote agent's certificate. + +--- + +##### `certFile`Optional + +```typescript +public readonly certFile: string; +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded certificate provided to the remote agent; + +requires use of key_file. + +--- + +##### `datacenter`Optional + +```typescript +public readonly datacenter: string; +``` + +- _Type:_ string + +(Optional) The datacenter to use. + +Defaults to that of the agent. + +--- + +##### `gzip`Optional + +```typescript +public readonly gzip: boolean; +``` + +- _Type:_ boolean + +(Optional) true to compress the state data using gzip, or false (the default) to leave it uncompressed. + +--- + +##### `httpAuth`Optional + +```typescript +public readonly httpAuth: string; +``` + +- _Type:_ string + +(Optional) HTTP Basic Authentication credentials to be used when communicating with Consul, in the format of either user or user:pass. + +--- + +##### `keyFile`Optional + +```typescript +public readonly keyFile: string; +``` + +- _Type:_ string + +(Optional) A path to a PEM-encoded private key, required if cert_file is specified. + +--- + +##### `lock`Optional + +```typescript +public readonly lock: boolean; +``` + +- _Type:_ boolean + +(Optional) false to disable locking. + +This defaults to true, but will require session permissions with Consul and +at least kv write permissions on $path/.lock to perform locking. + +--- + +##### `scheme`Optional + +```typescript +public readonly scheme: string; +``` + +- _Type:_ string + +(Optional) Specifies what protocol to use when talking to the given address,either http or https. + +SSL support can also be triggered by setting then environment variable CONSUL_HTTP_SSL to true. + +--- + +### DataTerraformRemoteStateCosConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateCosConfig } from 'cdktf' + +const dataTerraformRemoteStateCosConfig: DataTerraformRemoteStateCosConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| bucket | string | (Required) The name of the COS bucket. | +| accelerate | boolean | (Optional) Whether to enable global Acceleration. | +| acl | string | (Optional) Object ACL to be applied to the state file, allows private and public-read. | +| assumeRole | CosBackendAssumeRole | (Optional) The assume_role block. | +| domain | string | (Optional) The root domain of the API request. | +| encrypt | boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | string | (Optional) The Custom Endpoint for the COS backend. | +| key | string | (Optional) The path for saving the state file in bucket. | +| prefix | string | (Optional) The directory for saving the state file in bucket. | +| region | string | (Optional) The region of the COS bucket. | +| secretId | string | (Optional) Secret id of Tencent Cloud. | +| secretKey | string | (Optional) Secret key of Tencent Cloud. | +| securityToken | string | (Optional) TencentCloud Security Token of temporary access credentials. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +(Required) The name of the COS bucket. + +You shall manually create it first. + +--- + +##### `accelerate`Optional + +```typescript +public readonly accelerate: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to enable global Acceleration. + +Defaults to false. + +--- + +##### `acl`Optional + +```typescript +public readonly acl: string; +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file, allows private and public-read. + +Defaults to private. + +--- + +##### `assumeRole`Optional + +```typescript +public readonly assumeRole: CosBackendAssumeRole; +``` + +- _Type:_ CosBackendAssumeRole + +(Optional) The assume_role block. + +If provided, terraform will attempt to assume this role using the supplied credentials. + +--- + +##### `domain`Optional + +```typescript +public readonly domain: string; +``` + +- _Type:_ string + +(Optional) The root domain of the API request. + +Defaults to tencentcloudapi.com. +It supports the environment variable TENCENTCLOUD_DOMAIN. + +--- + +##### `encrypt`Optional + +```typescript +public readonly encrypt: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, COS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) The Custom Endpoint for the COS backend. + +It supports the environment variable TENCENTCLOUD_ENDPOINT. + +--- + +##### `key`Optional + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +(Optional) The path for saving the state file in bucket. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +(Optional) The directory for saving the state file in bucket. + +Default to "env:". + +--- + +##### `region`Optional + +```typescript +public readonly region: string; +``` + +- _Type:_ string + +(Optional) The region of the COS bucket. + +It supports environment variables TENCENTCLOUD_REGION. + +--- + +##### `secretId`Optional + +```typescript +public readonly secretId: string; +``` + +- _Type:_ string + +(Optional) Secret id of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_ID. + +--- + +##### `secretKey`Optional + +```typescript +public readonly secretKey: string; +``` + +- _Type:_ string + +(Optional) Secret key of Tencent Cloud. + +It supports environment variables TENCENTCLOUD_SECRET_KEY. + +--- + +##### `securityToken`Optional + +```typescript +public readonly securityToken: string; +``` + +- _Type:_ string + +(Optional) TencentCloud Security Token of temporary access credentials. + +It supports environment variables TENCENTCLOUD_SECURITY_TOKEN. + +--- + +### DataTerraformRemoteStateGcsConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateGcsConfig } from 'cdktf' + +const dataTerraformRemoteStateGcsConfig: DataTerraformRemoteStateGcsConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| bucket | string | (Required) The name of the GCS bucket. | +| accessToken | string | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | string | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryptionKey | string | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonateServiceAccount | string | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonateServiceAccountDelegates | string[] | (Optional) The delegation chain for an impersonating a service account. | +| kmsEncryptionKey | string | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | string | (Optional) GCS prefix inside the bucket. | +| storeageCustomEndpoint | string | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `accessToken`Optional + +```typescript +public readonly accessToken: string; +``` + +- _Type:_ string + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +```typescript +public readonly credentials: string; +``` + +- _Type:_ string + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryptionKey`Optional + +```typescript +public readonly encryptionKey: string; +``` + +- _Type:_ string + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonateServiceAccount`Optional + +```typescript +public readonly impersonateServiceAccount: string; +``` + +- _Type:_ string + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonateServiceAccountDelegates`Optional + +```typescript +public readonly impersonateServiceAccountDelegates: string[]; +``` + +- _Type:_ string[] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kmsEncryptionKey`Optional + +```typescript +public readonly kmsEncryptionKey: string; +``` + +- _Type:_ string + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeageCustomEndpoint`Optional + +```typescript +public readonly storeageCustomEndpoint: string; +``` + +- _Type:_ string + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### DataTerraformRemoteStateHttpConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateHttpConfig } from 'cdktf' + +const dataTerraformRemoteStateHttpConfig: DataTerraformRemoteStateHttpConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| address | string | (Required) The address of the REST endpoint. | +| clientCaCertificatePem | string | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| clientCertificatePem | string | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| clientPrivateKeyPem | string | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lockAddress | string | (Optional) The address of the lock REST endpoint. | +| lockMethod | string | (Optional) The HTTP method to use when locking. | +| password | string | (Optional) The password for HTTP basic authentication. | +| retryMax | number | (Optional) The number of HTTP request retries. | +| retryWaitMax | number | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retryWaitMin | number | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skipCertVerification | boolean | (Optional) Whether to skip TLS verification. | +| unlockAddress | string | (Optional) The address of the unlock REST endpoint. | +| unlockMethod | string | (Optional) The HTTP method to use when unlocking. | +| updateMethod | string | (Optional) HTTP method to use when updating state. | +| username | string | (Optional) The username for HTTP basic authentication. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `address`Required + +```typescript +public readonly address: string; +``` + +- _Type:_ string + +(Required) The address of the REST endpoint. + +--- + +##### `clientCaCertificatePem`Optional + +```typescript +public readonly clientCaCertificatePem: string; +``` + +- _Type:_ string + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `clientCertificatePem`Optional + +```typescript +public readonly clientCertificatePem: string; +``` + +- _Type:_ string + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `clientPrivateKeyPem`Optional + +```typescript +public readonly clientPrivateKeyPem: string; +``` + +- _Type:_ string + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lockAddress`Optional + +```typescript +public readonly lockAddress: string; +``` + +- _Type:_ string + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lockMethod`Optional + +```typescript +public readonly lockMethod: string; +``` + +- _Type:_ string + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +```typescript +public readonly password: string; +``` + +- _Type:_ string + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retryMax`Optional + +```typescript +public readonly retryMax: number; +``` + +- _Type:_ number + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retryWaitMax`Optional + +```typescript +public readonly retryWaitMax: number; +``` + +- _Type:_ number + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retryWaitMin`Optional + +```typescript +public readonly retryWaitMin: number; +``` + +- _Type:_ number + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skipCertVerification`Optional + +```typescript +public readonly skipCertVerification: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlockAddress`Optional + +```typescript +public readonly unlockAddress: string; +``` + +- _Type:_ string + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlockMethod`Optional + +```typescript +public readonly unlockMethod: string; +``` + +- _Type:_ string + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `updateMethod`Optional + +```typescript +public readonly updateMethod: string; +``` + +- _Type:_ string + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +```typescript +public readonly username: string; +``` + +- _Type:_ string + +(Optional) The username for HTTP basic authentication. + +--- + +### DataTerraformRemoteStateLocalConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateLocalConfig } from 'cdktf' + +const dataTerraformRemoteStateLocalConfig: DataTerraformRemoteStateLocalConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | ----------------------------------- | ---------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| path | string | Path where the state file is stored. | +| workspaceDir | string | (Optional) The path to non-default workspaces. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `path`Optional + +```typescript +public readonly path: string; +``` + +- _Type:_ string +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspaceDir`Optional + +```typescript +public readonly workspaceDir: string; +``` + +- _Type:_ string + +(Optional) The path to non-default workspaces. + +--- + +### DataTerraformRemoteStateOssConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateOssConfig } from 'cdktf' + +const dataTerraformRemoteStateOssConfig: DataTerraformRemoteStateOssConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| bucket | string | (Required) The name of the OSS bucket. | +| accessKey | string | (Optional) Alibaba Cloud access key. | +| acl | string | (Optional) Object ACL to be applied to the state file. | +| assumeRole | OssAssumeRole | _No description._ | +| assumeRolePolicy | string | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assumeRoleRoleArn | string | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assumeRoleSessionExpiration | number | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assumeRoleSessionName | string | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecsRoleName | string | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | string | (Optional) A custom endpoint for the OSS API. | +| key | string | (Optional) The name of the state file. | +| prefix | string | (Optional) The path directory of the state file will be stored. | +| profile | string | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | string | (Optional) The region of the OSS bucket. | +| secretKey | string | (Optional) Alibaba Cloud secret access key. | +| securityToken | string | (Optional) STS access token. | +| sharedCredentialsFile | string | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| stsEndpoint | string | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestoreEndpoint | string | (Optional) A custom endpoint for the TableStore API. | +| tablestoreTable | string | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +(Required) The name of the OSS bucket. + +--- + +##### `accessKey`Optional + +```typescript +public readonly accessKey: string; +``` + +- _Type:_ string + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +```typescript +public readonly acl: string; +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```typescript +public readonly assumeRole: OssAssumeRole; +``` + +- _Type:_ OssAssumeRole + +--- + +##### `assumeRolePolicy`Optional + +```typescript +public readonly assumeRolePolicy: string; +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assumeRoleRoleArn`Optional + +```typescript +public readonly assumeRoleRoleArn: string; +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assumeRoleSessionExpiration`Optional + +```typescript +public readonly assumeRoleSessionExpiration: number; +``` + +- _Type:_ number + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assumeRoleSessionName`Optional + +```typescript +public readonly assumeRoleSessionName: string; +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecsRoleName`Optional + +```typescript +public readonly ecsRoleName: string; +``` + +- _Type:_ string + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +```typescript +public readonly encrypt: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +```typescript +public readonly profile: string; +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +```typescript +public readonly region: string; +``` + +- _Type:_ string + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secretKey`Optional + +```typescript +public readonly secretKey: string; +``` + +- _Type:_ string + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `securityToken`Optional + +```typescript +public readonly securityToken: string; +``` + +- _Type:_ string + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `sharedCredentialsFile`Optional + +```typescript +public readonly sharedCredentialsFile: string; +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `stsEndpoint`Optional + +```typescript +public readonly stsEndpoint: string; +``` + +- _Type:_ string + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestoreEndpoint`Optional + +```typescript +public readonly tablestoreEndpoint: string; +``` + +- _Type:_ string + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestoreTable`Optional + +```typescript +public readonly tablestoreTable: string; +``` + +- _Type:_ string + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### DataTerraformRemoteStatePgConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStatePgConfig } from 'cdktf' + +const dataTerraformRemoteStatePgConfig: DataTerraformRemoteStatePgConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| connStr | string | Postgres connection string; | +| schemaName | string | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skipIndexCreation | boolean | If set to true, the Postgres index must already exist. | +| skipSchemaCreation | boolean | If set to true, the Postgres schema must already exist. | +| skipTableCreation | boolean | If set to true, the Postgres table must already exist. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `connStr`Required + +```typescript +public readonly connStr: string; +``` + +- _Type:_ string + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schemaName`Optional + +```typescript +public readonly schemaName: string; +``` + +- _Type:_ string + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skipIndexCreation`Optional + +```typescript +public readonly skipIndexCreation: boolean; +``` + +- _Type:_ boolean + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skipSchemaCreation`Optional + +```typescript +public readonly skipSchemaCreation: boolean; +``` + +- _Type:_ boolean + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skipTableCreation`Optional + +```typescript +public readonly skipTableCreation: boolean; +``` + +- _Type:_ boolean + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### DataTerraformRemoteStateRemoteConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateRemoteConfig } from 'cdktf' + +const dataTerraformRemoteStateRemoteConfig: DataTerraformRemoteStateRemoteConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| organization | string | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | string | _No description._ | +| token | string | _No description._ | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `organization`Required + +```typescript +public readonly organization: string; +``` + +- _Type:_ string + +--- + +##### `workspaces`Required + +```typescript +public readonly workspaces: IRemoteWorkspace; +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +```typescript +public readonly hostname: string; +``` + +- _Type:_ string + +--- + +##### `token`Optional + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +--- + +### DataTerraformRemoteStateS3Config + +#### Initializer + +```typescript +import { DataTerraformRemoteStateS3Config } from 'cdktf' + +const dataTerraformRemoteStateS3Config: DataTerraformRemoteStateS3Config = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| bucket | string | Name of the S3 Bucket. | +| key | string | Path to the state file inside the S3 Bucket. | +| accessKey | string | (Optional) AWS access key. | +| acl | string | (Optional) Canned ACL to be applied to the state file. | +| allowedAccountIds | string[] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assumeRolePolicy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assumeRolePolicyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assumeRoleTags | {[ key: string ]: string} | (Optional) Map of assume role session tags. | +| assumeRoleTransitiveTagKeys | string[] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| customCaBundle | string | (Optional) File containing custom root and intermediate certificates. | +| dynamodbEndpoint | string | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodbTable | string | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2MetadataServiceEndpoint | string | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2MetadataServiceEndpointMode | string | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | boolean | (Optional) Enable server side encryption of the state file. | +| endpoint | string | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| externalId | string | (Optional) External identifier to use when assuming the role. | +| forbiddenAccountIds | string[] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| forcePathStyle | boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| httpProxy | string | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| httpsProxy | string | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iamEndpoint | string | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | boolean | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kmsKeyId | string | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| maxRetries | number | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| noProxy | string | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | string | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | string | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retryMode | string | (Optional) Specifies how retries are attempted. | +| roleArn | string | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secretKey | string | (Optional) AWS secret access key. | +| sessionName | string | (Optional) Session name to use when assuming the role. | +| sharedConfigFiles | string[] | (Optional) List of paths to AWS shared configuration files. | +| sharedCredentialsFile | string | (Optional) Path to the AWS shared credentials file. | +| sharedCredentialsFiles | string[] | (Optional) List of paths to AWS shared credentials files. | +| skipCredentialsValidation | boolean | (Optional) Skip credentials validation via the STS API. | +| skipMetadataApiCheck | boolean | (Optional) Skip usage of EC2 Metadata API. | +| skipRegionValidation | boolean | (Optional) Skip validation of provided region name. | +| skipRequestingAccountId | boolean | (Optional) Whether to skip requesting the account ID. | +| skipS3Checksum | boolean | (Optional) Do not include checksum when uploading S3 Objects. | +| sseCustomerKey | string | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| stsEndpoint | string | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| stsRegion | string | (Optional) AWS region for STS. | +| token | string | (Optional) Multi-Factor Authentication (MFA) token. | +| useLegacyWorkflow | boolean | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| usePathStyle | boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspaceKeyPrefix | string | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `defaults`Optional + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `workspace`Optional + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +Name of the S3 Bucket. + +--- + +##### `key`Required + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `accessKey`Optional + +```typescript +public readonly accessKey: string; +``` + +- _Type:_ string + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +```typescript +public readonly acl: string; +``` + +- _Type:_ string + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowedAccountIds`Optional + +```typescript +public readonly allowedAccountIds: string[]; +``` + +- _Type:_ string[] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assumeRole`Optional + +```typescript +public readonly assumeRole: S3BackendAssumeRoleConfig; +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```typescript +public readonly assumeRolePolicy: string; +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```typescript +public readonly assumeRolePolicyArns: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```typescript +public readonly assumeRoleTags: {[ key: string ]: string}; +``` + +- _Type:_ {[ key: string ]: string} + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```typescript +public readonly assumeRoleTransitiveTagKeys: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assumeRoleWithWebIdentity`Optional + +```typescript +public readonly assumeRoleWithWebIdentity: S3BackendAssumeRoleWithWebIdentityConfig; +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `customCaBundle`Optional + +```typescript +public readonly customCaBundle: string; +``` + +- _Type:_ string + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```typescript +public readonly dynamodbEndpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodbTable`Optional + +```typescript +public readonly dynamodbTable: string; +``` + +- _Type:_ string + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2MetadataServiceEndpoint`Optional + +```typescript +public readonly ec2MetadataServiceEndpoint: string; +``` + +- _Type:_ string + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2MetadataServiceEndpointMode`Optional + +```typescript +public readonly ec2MetadataServiceEndpointMode: string; +``` + +- _Type:_ string + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +```typescript +public readonly encrypt: boolean; +``` + +- _Type:_ boolean + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +```typescript +public readonly endpoints: S3BackendEndpointConfig; +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`externalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```typescript +public readonly externalId: string; +``` + +- _Type:_ string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbiddenAccountIds`Optional + +```typescript +public readonly forbiddenAccountIds: string[]; +``` + +- _Type:_ string[] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`forcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```typescript +public readonly forcePathStyle: boolean; +``` + +- _Type:_ boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `httpProxy`Optional + +```typescript +public readonly httpProxy: string; +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `httpsProxy`Optional + +```typescript +public readonly httpsProxy: string; +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```typescript +public readonly iamEndpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +```typescript +public readonly insecure: boolean; +``` + +- _Type:_ boolean + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kmsKeyId`Optional + +```typescript +public readonly kmsKeyId: string; +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `maxRetries`Optional + +```typescript +public readonly maxRetries: number; +``` + +- _Type:_ number + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `noProxy`Optional + +```typescript +public readonly noProxy: string; +``` + +- _Type:_ string + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +```typescript +public readonly profile: string; +``` + +- _Type:_ string + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +```typescript +public readonly region: string; +``` + +- _Type:_ string + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retryMode`Optional + +```typescript +public readonly retryMode: string; +``` + +- _Type:_ string + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`roleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```typescript +public readonly roleArn: string; +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secretKey`Optional + +```typescript +public readonly secretKey: string; +``` + +- _Type:_ string + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`sessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```typescript +public readonly sessionName: string; +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +--- + +##### `sharedConfigFiles`Optional + +```typescript +public readonly sharedConfigFiles: string[]; +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `sharedCredentialsFile`Optional + +```typescript +public readonly sharedCredentialsFile: string; +``` + +- _Type:_ string + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `sharedCredentialsFiles`Optional + +```typescript +public readonly sharedCredentialsFiles: string[]; +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skipCredentialsValidation`Optional + +```typescript +public readonly skipCredentialsValidation: boolean; +``` + +- _Type:_ boolean + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skipMetadataApiCheck`Optional + +```typescript +public readonly skipMetadataApiCheck: boolean; +``` + +- _Type:_ boolean + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skipRegionValidation`Optional + +```typescript +public readonly skipRegionValidation: boolean; +``` + +- _Type:_ boolean + +(Optional) Skip validation of provided region name. + +--- + +##### `skipRequestingAccountId`Optional + +```typescript +public readonly skipRequestingAccountId: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skipS3Checksum`Optional + +```typescript +public readonly skipS3Checksum: boolean; +``` + +- _Type:_ boolean + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sseCustomerKey`Optional + +```typescript +public readonly sseCustomerKey: string; +``` + +- _Type:_ string + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`stsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```typescript +public readonly stsEndpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `stsRegion`Optional + +```typescript +public readonly stsRegion: string; +``` + +- _Type:_ string + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `useLegacyWorkflow`Optional + +```typescript +public readonly useLegacyWorkflow: boolean; +``` + +- _Type:_ boolean + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `usePathStyle`Optional + +```typescript +public readonly usePathStyle: boolean; +``` + +- _Type:_ boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspaceKeyPrefix`Optional + +```typescript +public readonly workspaceKeyPrefix: string; +``` + +- _Type:_ string + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### DataTerraformRemoteStateSwiftConfig + +#### Initializer + +```typescript +import { DataTerraformRemoteStateSwiftConfig } from 'cdktf' + +const dataTerraformRemoteStateSwiftConfig: DataTerraformRemoteStateSwiftConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | ----------------- | +| defaults | {[ key: string ]: any} | _No description._ | +| workspace | string | _No description._ | +| container | string | _No description._ | +| applicationCredentialId | string | _No description._ | +| applicationCredentialName | string | _No description._ | +| applicationCredentialSecret | string | _No description._ | +| archiveContainer | string | _No description._ | +| authUrl | string | _No description._ | +| cacertFile | string | _No description._ | +| cert | string | _No description._ | +| cloud | string | _No description._ | +| defaultDomain | string | _No description._ | +| domainId | string | _No description._ | +| domainName | string | _No description._ | +| expireAfter | string | _No description._ | +| insecure | boolean | _No description._ | +| key | string | _No description._ | +| password | string | _No description._ | +| projectDomainId | string | _No description._ | +| projectDomainName | string | _No description._ | +| regionName | string | _No description._ | +| stateName | string | _No description._ | +| tenantId | string | _No description._ | +| tenantName | string | _No description._ | +| token | string | _No description._ | +| userDomainId | string | _No description._ | +| userDomainName | string | _No description._ | +| userId | string | _No description._ | +| userName | string | _No description._ | + +--- + +##### ~~`defaults`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly defaults: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### ~~`workspace`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly workspace: string; +``` + +- _Type:_ string + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly container: string; +``` + +- _Type:_ string + +--- + +##### ~~`applicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly applicationCredentialId: string; +``` + +- _Type:_ string + +--- + +##### ~~`applicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly applicationCredentialName: string; +``` + +- _Type:_ string + +--- + +##### ~~`applicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly applicationCredentialSecret: string; +``` + +- _Type:_ string + +--- + +##### ~~`archiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly archiveContainer: string; +``` + +- _Type:_ string + +--- + +##### ~~`authUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly authUrl: string; +``` + +- _Type:_ string + +--- + +##### ~~`cacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cacertFile: string; +``` + +- _Type:_ string + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cert: string; +``` + +- _Type:_ string + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cloud: string; +``` + +- _Type:_ string + +--- + +##### ~~`defaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly defaultDomain: string; +``` + +- _Type:_ string + +--- + +##### ~~`domainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly domainId: string; +``` + +- _Type:_ string + +--- + +##### ~~`domainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly domainName: string; +``` + +- _Type:_ string + +--- + +##### ~~`expireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly expireAfter: string; +``` + +- _Type:_ string + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly insecure: boolean; +``` + +- _Type:_ boolean + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly password: string; +``` + +- _Type:_ string + +--- + +##### ~~`projectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly projectDomainId: string; +``` + +- _Type:_ string + +--- + +##### ~~`projectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly projectDomainName: string; +``` + +- _Type:_ string + +--- + +##### ~~`regionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly regionName: string; +``` + +- _Type:_ string + +--- + +##### ~~`stateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly stateName: string; +``` + +- _Type:_ string + +--- + +##### ~~`tenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly tenantId: string; +``` + +- _Type:_ string + +--- + +##### ~~`tenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly tenantName: string; +``` + +- _Type:_ string + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +--- + +##### ~~`userDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userDomainId: string; +``` + +- _Type:_ string + +--- + +##### ~~`userDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userDomainName: string; +``` + +- _Type:_ string + +--- + +##### ~~`userId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userId: string; +``` + +- _Type:_ string + +--- + +##### ~~`userName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userName: string; +``` + +- _Type:_ string + +--- + +### EncodingOptions + +Properties to string encodings. + +#### Initializer + +```typescript +import { EncodingOptions } from 'cdktf' + +const encodingOptions: EncodingOptions = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------- | +| displayHint | string | A hint for the Token's purpose when stringifying it. | + +--- + +##### `displayHint`Optional + +```typescript +public readonly displayHint: string; +``` + +- _Type:_ string +- _Default:_ no display hint + +A hint for the Token's purpose when stringifying it. + +--- + +### FileProvisioner + +The file provisioner copies files or directories from the machine running Terraform to the newly created resource. + +The file provisioner supports both ssh and winrm type connections. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/file file} + +#### Initializer + +```typescript +import { FileProvisioner } from 'cdktf' + +const fileProvisioner: FileProvisioner = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| destination | string | The source file or directory. | +| type | string | _No description._ | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| content | string | The destination path to write to on the remote system. | +| source | string | The direct content to copy on the destination. | + +--- + +##### `destination`Required + +```typescript +public readonly destination: string; +``` + +- _Type:_ string + +The source file or directory. + +Specify it either relative to the current working directory or as an absolute path. +This argument cannot be combined with content. + +--- + +##### `type`Required + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +--- + +##### `content`Optional + +```typescript +public readonly content: string; +``` + +- _Type:_ string + +The destination path to write to on the remote system. + +See Destination Paths below for more information. + +--- + +##### `source`Optional + +```typescript +public readonly source: string; +``` + +- _Type:_ string + +The direct content to copy on the destination. + +If destination is a file, the content will be written on that file. +In case of a directory, a file named tf-file-content is created inside that directory. +We recommend using a file as the destination when using content. +This argument cannot be combined with source. + +--- + +### GcsBackendConfig + +Stores the state as an object in a configurable prefix in a pre-existing bucket on Google Cloud Storage (GCS). + +The bucket must exist prior to configuring the backend. + +This backend supports state locking. + +Warning! It is highly recommended that you enable Object Versioning on the GCS bucket +to allow for state recovery in the case of accidental deletions and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/gcs + +#### Initializer + +```typescript +import { GcsBackendConfig } from 'cdktf' + +const gcsBackendConfig: GcsBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | string | (Required) The name of the GCS bucket. | +| accessToken | string | (Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. | +| credentials | string | (Optional) Local path to Google Cloud Platform account credentials in JSON format. | +| encryptionKey | string | (Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. | +| impersonateServiceAccount | string | (Optional) The service account to impersonate for accessing the State Bucket. | +| impersonateServiceAccountDelegates | string[] | (Optional) The delegation chain for an impersonating a service account. | +| kmsEncryptionKey | string | (Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. | +| prefix | string | (Optional) GCS prefix inside the bucket. | +| storeageCustomEndpoint | string | (Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). | + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +(Required) The name of the GCS bucket. + +This name must be globally unique. + +--- + +##### `accessToken`Optional + +```typescript +public readonly accessToken: string; +``` + +- _Type:_ string + +(Optional) A temporary [OAuth 2.0 access token] obtained from the Google Authorization server, i.e. the Authorization: Bearer token used to authenticate HTTP requests to GCP APIs. This is an alternative to credentials. If both are specified, access_token will be used over the credentials field. + +--- + +##### `credentials`Optional + +```typescript +public readonly credentials: string; +``` + +- _Type:_ string + +(Optional) Local path to Google Cloud Platform account credentials in JSON format. + +If unset, Google Application Default Credentials are used. +The provided credentials must have Storage Object Admin role on the bucket. + +Warning: if using the Google Cloud Platform provider as well, +it will also pick up the GOOGLE_CREDENTIALS environment variable. + +--- + +##### `encryptionKey`Optional + +```typescript +public readonly encryptionKey: string; +``` + +- _Type:_ string + +(Optional) A 32 byte base64 encoded 'customer supplied encryption key' used to encrypt all state. + +--- + +##### `impersonateServiceAccount`Optional + +```typescript +public readonly impersonateServiceAccount: string; +``` + +- _Type:_ string + +(Optional) The service account to impersonate for accessing the State Bucket. + +You must have roles/iam.serviceAccountTokenCreator role on that account for the impersonation to succeed. +If you are using a delegation chain, you can specify that using the impersonate_service_account_delegates field. +Alternatively, this can be specified using the GOOGLE_IMPERSONATE_SERVICE_ACCOUNT environment variable. + +--- + +##### `impersonateServiceAccountDelegates`Optional + +```typescript +public readonly impersonateServiceAccountDelegates: string[]; +``` + +- _Type:_ string[] + +(Optional) The delegation chain for an impersonating a service account. + +--- + +##### `kmsEncryptionKey`Optional + +```typescript +public readonly kmsEncryptionKey: string; +``` + +- _Type:_ string + +(Optional) A Cloud KMS key ('customer-managed encryption key') used when reading and writing state files in the bucket. + +Format should be projects/{{project}}/locations/{{location}}/keyRings/{{keyRing}}/cryptoKeys/{{name}}. +For more information, including IAM requirements, see {@link https://cloud.google.com/storage/docs/encryption/customer-managed-keys Customer-managed Encryption Keys}. + +--- + +##### `prefix`Optional + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +(Optional) GCS prefix inside the bucket. + +Named states for workspaces are stored in an object called < prefix >/< name >.tfstate. + +--- + +##### `storeageCustomEndpoint`Optional + +```typescript +public readonly storeageCustomEndpoint: string; +``` + +- _Type:_ string + +(Optional) A URL containing three parts: the protocol, the DNS name pointing to a Private Service Connect endpoint, and the path for the Cloud Storage API (/storage/v1/b). + +{@link https://developer.hashicorp.com/terraform/language/settings/backends/gcs#storage_custom_endpoint See here for more details} + +--- + +### HttpBackendConfig + +Stores the state using a simple REST client. + +State will be fetched via GET, updated via POST, and purged with DELETE. +The method used for updating is configurable. + +This backend optionally supports state locking. +When locking support is enabled it will use LOCK and UNLOCK requests providing the lock info in the body. +The endpoint should return a 423: Locked or 409: Conflict with the holding lock info when +it's already taken, 200: OK for success. Any other status will be considered an error. +The ID of the holding lock info will be added as a query parameter to state updates requests. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/http + +#### Initializer + +```typescript +import { HttpBackendConfig } from 'cdktf' + +const httpBackendConfig: HttpBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------- | +| address | string | (Required) The address of the REST endpoint. | +| clientCaCertificatePem | string | (Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. | +| clientCertificatePem | string | (Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. | +| clientPrivateKeyPem | string | (Optional) A PEM-encoded private key, required if client_certificate_pem is specified. | +| lockAddress | string | (Optional) The address of the lock REST endpoint. | +| lockMethod | string | (Optional) The HTTP method to use when locking. | +| password | string | (Optional) The password for HTTP basic authentication. | +| retryMax | number | (Optional) The number of HTTP request retries. | +| retryWaitMax | number | (Optional) The maximum time in seconds to wait between HTTP request attempts. | +| retryWaitMin | number | (Optional) The minimum time in seconds to wait between HTTP request attempts. | +| skipCertVerification | boolean | (Optional) Whether to skip TLS verification. | +| unlockAddress | string | (Optional) The address of the unlock REST endpoint. | +| unlockMethod | string | (Optional) The HTTP method to use when unlocking. | +| updateMethod | string | (Optional) HTTP method to use when updating state. | +| username | string | (Optional) The username for HTTP basic authentication. | + +--- + +##### `address`Required + +```typescript +public readonly address: string; +``` + +- _Type:_ string + +(Required) The address of the REST endpoint. + +--- + +##### `clientCaCertificatePem`Optional + +```typescript +public readonly clientCaCertificatePem: string; +``` + +- _Type:_ string + +(Optional) A PEM-encoded CA certificate chain used by the client to verify server certificates during TLS authentication. + +--- + +##### `clientCertificatePem`Optional + +```typescript +public readonly clientCertificatePem: string; +``` + +- _Type:_ string + +(Optional) A PEM-encoded certificate used by the server to verify the client during mutual TLS (mTLS) authentication. + +--- + +##### `clientPrivateKeyPem`Optional + +```typescript +public readonly clientPrivateKeyPem: string; +``` + +- _Type:_ string + +(Optional) A PEM-encoded private key, required if client_certificate_pem is specified. + +--- + +##### `lockAddress`Optional + +```typescript +public readonly lockAddress: string; +``` + +- _Type:_ string + +(Optional) The address of the lock REST endpoint. + +Defaults to disabled. + +--- + +##### `lockMethod`Optional + +```typescript +public readonly lockMethod: string; +``` + +- _Type:_ string + +(Optional) The HTTP method to use when locking. + +Defaults to LOCK. + +--- + +##### `password`Optional + +```typescript +public readonly password: string; +``` + +- _Type:_ string + +(Optional) The password for HTTP basic authentication. + +--- + +##### `retryMax`Optional + +```typescript +public readonly retryMax: number; +``` + +- _Type:_ number + +(Optional) The number of HTTP request retries. + +Defaults to 2. + +--- + +##### `retryWaitMax`Optional + +```typescript +public readonly retryWaitMax: number; +``` + +- _Type:_ number + +(Optional) The maximum time in seconds to wait between HTTP request attempts. + +Defaults to 30. + +--- + +##### `retryWaitMin`Optional + +```typescript +public readonly retryWaitMin: number; +``` + +- _Type:_ number + +(Optional) The minimum time in seconds to wait between HTTP request attempts. + +Defaults to 1. + +--- + +##### `skipCertVerification`Optional + +```typescript +public readonly skipCertVerification: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to skip TLS verification. + +Defaults to false. + +--- + +##### `unlockAddress`Optional + +```typescript +public readonly unlockAddress: string; +``` + +- _Type:_ string + +(Optional) The address of the unlock REST endpoint. + +Defaults to disabled. + +--- + +##### `unlockMethod`Optional + +```typescript +public readonly unlockMethod: string; +``` + +- _Type:_ string + +(Optional) The HTTP method to use when unlocking. + +Defaults to UNLOCK. + +--- + +##### `updateMethod`Optional + +```typescript +public readonly updateMethod: string; +``` + +- _Type:_ string + +(Optional) HTTP method to use when updating state. + +Defaults to POST. + +--- + +##### `username`Optional + +```typescript +public readonly username: string; +``` + +- _Type:_ string + +(Optional) The username for HTTP basic authentication. + +--- + +### LazyAnyValueOptions + +Options for creating lazy untyped tokens. + +#### Initializer + +```typescript +import { LazyAnyValueOptions } from 'cdktf' + +const lazyAnyValueOptions: LazyAnyValueOptions = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------ | +| displayHint | string | Use the given name as a display hint. | +| omitEmptyArray | boolean | If the produced value is an array and it is empty, return 'undefined' instead. | + +--- + +##### `displayHint`Optional + +```typescript +public readonly displayHint: string; +``` + +- _Type:_ string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `omitEmptyArray`Optional + +```typescript +public readonly omitEmptyArray: boolean; +``` + +- _Type:_ boolean +- _Default:_ false + +If the produced value is an array and it is empty, return 'undefined' instead. + +--- + +### LazyListValueOptions + +Options for creating a lazy list token. + +#### Initializer + +```typescript +import { LazyListValueOptions } from 'cdktf' + +const lazyListValueOptions: LazyListValueOptions = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | -------------------- | ---------------------------------------------------------- | +| displayHint | string | Use the given name as a display hint. | +| omitEmpty | boolean | If the produced list is empty, return 'undefined' instead. | + +--- + +##### `displayHint`Optional + +```typescript +public readonly displayHint: string; +``` + +- _Type:_ string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +##### `omitEmpty`Optional + +```typescript +public readonly omitEmpty: boolean; +``` + +- _Type:_ boolean +- _Default:_ false + +If the produced list is empty, return 'undefined' instead. + +--- + +### LazyStringValueOptions + +Options for creating a lazy string token. + +#### Initializer + +```typescript +import { LazyStringValueOptions } from 'cdktf' + +const lazyStringValueOptions: LazyStringValueOptions = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | ------------------- | ------------------------------------- | +| displayHint | string | Use the given name as a display hint. | + +--- + +##### `displayHint`Optional + +```typescript +public readonly displayHint: string; +``` + +- _Type:_ string +- _Default:_ No hint + +Use the given name as a display hint. + +--- + +### LocalBackendConfig + +The local backend stores state on the local filesystem, locks that state using system APIs, and performs operations locally. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/local + +#### Initializer + +```typescript +import { LocalBackendConfig } from 'cdktf' + +const localBackendConfig: LocalBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------- | +| path | string | Path where the state file is stored. | +| workspaceDir | string | (Optional) The path to non-default workspaces. | + +--- + +##### `path`Optional + +```typescript +public readonly path: string; +``` + +- _Type:_ string +- _Default:_ defaults to terraform.${stackId}.tfstate + +Path where the state file is stored. + +--- + +##### `workspaceDir`Optional + +```typescript +public readonly workspaceDir: string; +``` + +- _Type:_ string + +(Optional) The path to non-default workspaces. + +--- + +### LocalExecProvisioner + +The local-exec provisioner invokes a local executable after a resource is created. + +This invokes a process on the machine running Terraform, not on the resource. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/local-exec local-exec} + +#### Initializer + +```typescript +import { LocalExecProvisioner } from 'cdktf' + +const localExecProvisioner: LocalExecProvisioner = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | -------------------------------------- | --------------------------------------------------------------------------------- | +| command | string | This is the command to execute. | +| type | string | _No description._ | +| environment | {[ key: string ]: string} | A record of key value pairs representing the environment of the executed command. | +| interpreter | string[] | If provided, this is a list of interpreter arguments used to execute the command. | +| when | string | If provided, specifies when Terraform will execute the command. | +| workingDir | string | If provided, specifies the working directory where command will be executed. | + +--- + +##### `command`Required + +```typescript +public readonly command: string; +``` + +- _Type:_ string + +This is the command to execute. + +It can be provided as a relative path to the current working directory or as an absolute path. +It is evaluated in a shell, and can use environment variables or Terraform variables. + +--- + +##### `type`Required + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +--- + +##### `environment`Optional + +```typescript +public readonly environment: {[ key: string ]: string}; +``` + +- _Type:_ {[ key: string ]: string} + +A record of key value pairs representing the environment of the executed command. + +It inherits the current process environment. + +--- + +##### `interpreter`Optional + +```typescript +public readonly interpreter: string[]; +``` + +- _Type:_ string[] + +If provided, this is a list of interpreter arguments used to execute the command. + +The first argument is the interpreter itself. +It can be provided as a relative path to the current working directory or as an absolute path +The remaining arguments are appended prior to the command. +This allows building command lines of the form "/bin/bash", "-c", "echo foo". +If interpreter is unspecified, sensible defaults will be chosen based on the system OS. + +--- + +##### `when`Optional + +```typescript +public readonly when: string; +``` + +- _Type:_ string + +If provided, specifies when Terraform will execute the command. + +For example, when = destroy specifies that the provisioner will run when the associated resource is destroyed + +--- + +##### `workingDir`Optional + +```typescript +public readonly workingDir: string; +``` + +- _Type:_ string + +If provided, specifies the working directory where command will be executed. + +It can be provided as a relative path to the current working directory or as an absolute path. +The directory must exist. + +--- + +### OssAssumeRole + +#### Initializer + +```typescript +import { OssAssumeRole } from 'cdktf' + +const ossAssumeRole: OssAssumeRole = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| roleArn | string | _No description._ | +| policy | string | _No description._ | +| sessionExpiration | number | _No description._ | +| sessionName | string | _No description._ | + +--- + +##### `roleArn`Required + +```typescript +public readonly roleArn: string; +``` + +- _Type:_ string + +--- + +##### `policy`Optional + +```typescript +public readonly policy: string; +``` + +- _Type:_ string + +--- + +##### `sessionExpiration`Optional + +```typescript +public readonly sessionExpiration: number; +``` + +- _Type:_ number + +--- + +##### `sessionName`Optional + +```typescript +public readonly sessionName: string; +``` + +- _Type:_ string + +--- + +### OssBackendConfig + +#### Initializer + +```typescript +import { OssBackendConfig } from 'cdktf' + +const ossBackendConfig: OssBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | string | (Required) The name of the OSS bucket. | +| accessKey | string | (Optional) Alibaba Cloud access key. | +| acl | string | (Optional) Object ACL to be applied to the state file. | +| assumeRole | OssAssumeRole | _No description._ | +| assumeRolePolicy | string | (Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. | +| assumeRoleRoleArn | string | (Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. | +| assumeRoleSessionExpiration | number | (Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. | +| assumeRoleSessionName | string | (Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. | +| ecsRoleName | string | (Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. | +| encrypt | boolean | (Optional) Whether to enable server side encryption of the state file. | +| endpoint | string | (Optional) A custom endpoint for the OSS API. | +| key | string | (Optional) The name of the state file. | +| prefix | string | (Optional) The path directory of the state file will be stored. | +| profile | string | (Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. | +| region | string | (Optional) The region of the OSS bucket. | +| secretKey | string | (Optional) Alibaba Cloud secret access key. | +| securityToken | string | (Optional) STS access token. | +| sharedCredentialsFile | string | (Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. | +| stsEndpoint | string | (Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. | +| tablestoreEndpoint | string | (Optional) A custom endpoint for the TableStore API. | +| tablestoreTable | string | (Optional) A TableStore table for state locking and consistency. | + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +(Required) The name of the OSS bucket. + +--- + +##### `accessKey`Optional + +```typescript +public readonly accessKey: string; +``` + +- _Type:_ string + +(Optional) Alibaba Cloud access key. + +It supports environment variables ALICLOUD_ACCESS_KEY and ALICLOUD_ACCESS_KEY_ID. + +--- + +##### `acl`Optional + +```typescript +public readonly acl: string; +``` + +- _Type:_ string + +(Optional) Object ACL to be applied to the state file. + +--- + +##### ~~`assumeRole`~~Optional + +- _Deprecated:_ Use flattened assume role options + +```typescript +public readonly assumeRole: OssAssumeRole; +``` + +- _Type:_ OssAssumeRole + +--- + +##### `assumeRolePolicy`Optional + +```typescript +public readonly assumeRolePolicy: string; +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) A more restrictive policy to apply to the temporary credentials. This gives you a way to further restrict the permissions for the resulting temporary security credentials. You cannot use this policy to grant permissions that exceed those of the role that is being assumed. + +--- + +##### `assumeRoleRoleArn`Optional + +```typescript +public readonly assumeRoleRoleArn: string; +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The ARN of the role to assume. If ARN is set to an empty string, it does not perform role switching. It supports the environment variable ALICLOUD_ASSUME_ROLE_ARN. Terraform executes configuration on account with provided credentials. + +--- + +##### `assumeRoleSessionExpiration`Optional + +```typescript +public readonly assumeRoleSessionExpiration: number; +``` + +- _Type:_ number + +(Optional, Available in 1.1.0+) The time after which the established session for assuming role expires. Valid value range: [900-3600] seconds. Default to 3600 (in this case Alibaba Cloud uses its own default value). It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_EXPIRATION. + +--- + +##### `assumeRoleSessionName`Optional + +```typescript +public readonly assumeRoleSessionName: string; +``` + +- _Type:_ string + +(Optional, Available in 1.1.0+) The session name to use when assuming the role. If omitted, 'terraform' is passed to the AssumeRole call as session name. It supports environment variable ALICLOUD_ASSUME_ROLE_SESSION_NAME. + +--- + +##### `ecsRoleName`Optional + +```typescript +public readonly ecsRoleName: string; +``` + +- _Type:_ string + +(Optional, Available in 0.12.14+) The RAM Role Name attached on a ECS instance for API operations. You can retrieve this from the 'Access Control' section of the Alibaba Cloud console. + +--- + +##### `encrypt`Optional + +```typescript +public readonly encrypt: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to enable server side encryption of the state file. + +If it is true, OSS will use 'AES256' encryption algorithm to encrypt state file. + +--- + +##### `endpoint`Optional + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) A custom endpoint for the OSS API. + +It supports environment variables ALICLOUD_OSS_ENDPOINT and OSS_ENDPOINT. + +--- + +##### `key`Optional + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +(Optional) The name of the state file. + +Defaults to terraform.tfstate. + +--- + +##### `prefix`Optional + +```typescript +public readonly prefix: string; +``` + +- _Type:_ string + +(Optional) The path directory of the state file will be stored. + +Default to "env:". + +--- + +##### `profile`Optional + +```typescript +public readonly profile: string; +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the Alibaba Cloud profile name as set in the shared credentials file. It can also be sourced from the ALICLOUD_PROFILE environment variable. + +--- + +##### `region`Optional + +```typescript +public readonly region: string; +``` + +- _Type:_ string + +(Optional) The region of the OSS bucket. + +It supports environment variables ALICLOUD_REGION and ALICLOUD_DEFAULT_REGION. + +--- + +##### `secretKey`Optional + +```typescript +public readonly secretKey: string; +``` + +- _Type:_ string + +(Optional) Alibaba Cloud secret access key. + +It supports environment variables ALICLOUD_SECRET_KEY and ALICLOUD_ACCESS_KEY_SECRET. + +--- + +##### `securityToken`Optional + +```typescript +public readonly securityToken: string; +``` + +- _Type:_ string + +(Optional) STS access token. + +It supports environment variable ALICLOUD_SECURITY_TOKEN. + +--- + +##### `sharedCredentialsFile`Optional + +```typescript +public readonly sharedCredentialsFile: string; +``` + +- _Type:_ string + +(Optional, Available in 0.12.8+) This is the path to the shared credentials file. It can also be sourced from the ALICLOUD_SHARED_CREDENTIALS_FILE environment variable. If this is not set and a profile is specified, ~/.aliyun/config.json will be used. + +--- + +##### `stsEndpoint`Optional + +```typescript +public readonly stsEndpoint: string; +``` + +- _Type:_ string + +(Optional, Available in 1.0.11+) Custom endpoint for the AliCloud Security Token Service (STS) API. It supports environment variable ALICLOUD_STS_ENDPOINT. + +--- + +##### `tablestoreEndpoint`Optional + +```typescript +public readonly tablestoreEndpoint: string; +``` + +- _Type:_ string + +(Optional) A custom endpoint for the TableStore API. + +--- + +##### `tablestoreTable`Optional + +```typescript +public readonly tablestoreTable: string; +``` + +- _Type:_ string + +(Optional) A TableStore table for state locking and consistency. + +The table must have a primary key named LockID of type String. + +--- + +### PgBackendConfig + +#### Initializer + +```typescript +import { PgBackendConfig } from 'cdktf' + +const pgBackendConfig: PgBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------ | -------------------- | ------------------------------------------------------------------------------------- | +| connStr | string | Postgres connection string; | +| schemaName | string | Name of the automatically-managed Postgres schema, default to terraform_remote_state. | +| skipIndexCreation | boolean | If set to true, the Postgres index must already exist. | +| skipSchemaCreation | boolean | If set to true, the Postgres schema must already exist. | +| skipTableCreation | boolean | If set to true, the Postgres table must already exist. | + +--- + +##### `connStr`Required + +```typescript +public readonly connStr: string; +``` + +- _Type:_ string + +Postgres connection string; + +a postgres:// URL. +The PG_CONN_STR and standard libpq environment variables can also be used to indicate how to connect to the PostgreSQL database. + +--- + +##### `schemaName`Optional + +```typescript +public readonly schemaName: string; +``` + +- _Type:_ string + +Name of the automatically-managed Postgres schema, default to terraform_remote_state. + +Can also be set using the PG_SCHEMA_NAME environment variable. + +--- + +##### `skipIndexCreation`Optional + +```typescript +public readonly skipIndexCreation: boolean; +``` + +- _Type:_ boolean + +If set to true, the Postgres index must already exist. + +Can also be set using the PG_SKIP_INDEX_CREATION environment variable. +Terraform won't try to create the index, this is useful when it has already been created by a database administrator. + +--- + +##### `skipSchemaCreation`Optional + +```typescript +public readonly skipSchemaCreation: boolean; +``` + +- _Type:_ boolean + +If set to true, the Postgres schema must already exist. + +Can also be set using the PG_SKIP_SCHEMA_CREATION environment variable. +Terraform won't try to create the schema, this is useful when it has already been created by a database administrator. + +--- + +##### `skipTableCreation`Optional + +```typescript +public readonly skipTableCreation: boolean; +``` + +- _Type:_ boolean + +If set to true, the Postgres table must already exist. + +Can also be set using the PG_SKIP_TABLE_CREATION environment variable. +Terraform won't try to create the table, this is useful when it has already been created by a database administrator. + +--- + +### Postcondition + +Terraform checks a postcondition after evaluating the object it is associated with. + +#### Initializer + +```typescript +import { Postcondition } from 'cdktf' + +const postcondition: Postcondition = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```typescript +public readonly condition: any; +``` + +- _Type:_ any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```typescript +public readonly errorMessage: string; +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### Precondition + +Terraform checks a precondition before evaluating the object it is associated with. + +#### Initializer + +```typescript +import { Precondition } from 'cdktf' + +const precondition: Precondition = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```typescript +public readonly condition: any; +``` + +- _Type:_ any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```typescript +public readonly errorMessage: string; +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### RemoteBackendConfig + +#### Initializer + +```typescript +import { RemoteBackendConfig } from 'cdktf' + +const remoteBackendConfig: RemoteBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| organization | string | _No description._ | +| workspaces | IRemoteWorkspace | _No description._ | +| hostname | string | _No description._ | +| token | string | _No description._ | + +--- + +##### `organization`Required + +```typescript +public readonly organization: string; +``` + +- _Type:_ string + +--- + +##### `workspaces`Required + +```typescript +public readonly workspaces: IRemoteWorkspace; +``` + +- _Type:_ IRemoteWorkspace + +--- + +##### `hostname`Optional + +```typescript +public readonly hostname: string; +``` + +- _Type:_ string + +--- + +##### `token`Optional + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +--- + +### RemoteExecProvisioner + +The remote-exec provisioner invokes a script on a remote resource after it is created. + +This can be used to run a configuration management tool, bootstrap into a cluster, etc +The remote-exec provisioner requires a connection and supports both ssh and winrm. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/remote-exec remote-exec} + +#### Initializer + +```typescript +import { RemoteExecProvisioner } from 'cdktf' + +const remoteExecProvisioner: RemoteExecProvisioner = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| type | string | _No description._ | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. | +| inline | string[] | This is a list of command strings. | +| script | string | This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. | +| scripts | string[] | This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. | + +--- + +##### `type`Required + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +A connection must be provided here or in the parent resource. + +--- + +##### `inline`Optional + +```typescript +public readonly inline: string[]; +``` + +- _Type:_ string[] + +This is a list of command strings. + +They are executed in the order they are provided. +This cannot be provided with script or scripts. + +--- + +##### `script`Optional + +```typescript +public readonly script: string; +``` + +- _Type:_ string + +This is a path (relative or absolute) to a local script that will be copied to the remote resource and then executed. + +This cannot be provided with inline or scripts. + +--- + +##### `scripts`Optional + +```typescript +public readonly scripts: string[]; +``` + +- _Type:_ string[] + +This is a list of paths (relative or absolute) to local scripts that will be copied to the remote resource and then executed. + +They are executed in the order they are provided. +This cannot be provided with inline or script. + +--- + +### ResolveOptions + +Options to the resolve() operation. + +NOT the same as the ResolveContext; ResolveContext is exposed to Token +implementors and resolution hooks, whereas this struct is just to bundle +a number of things that would otherwise be arguments to resolve() in a +readable way. + +#### Initializer + +```typescript +import { ResolveOptions } from 'cdktf' + +const resolveOptions: ResolveOptions = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------- | +| resolver | ITokenResolver | The resolver to apply to any resolvable tokens found. | +| scope | constructs.IConstruct | The scope from which resolution is performed. | +| preparing | boolean | Whether the resolution is being executed during the prepare phase or not. | + +--- + +##### `resolver`Required + +```typescript +public readonly resolver: ITokenResolver; +``` + +- _Type:_ ITokenResolver + +The resolver to apply to any resolvable tokens found. + +--- + +##### `scope`Required + +```typescript +public readonly scope: IConstruct; +``` + +- _Type:_ constructs.IConstruct + +The scope from which resolution is performed. + +--- + +##### `preparing`Optional + +```typescript +public readonly preparing: boolean; +``` + +- _Type:_ boolean +- _Default:_ false + +Whether the resolution is being executed during the prepare phase or not. + +--- + +### S3BackendAssumeRoleConfig + +#### Initializer + +```typescript +import { S3BackendAssumeRoleConfig } from 'cdktf' + +const s3BackendAssumeRoleConfig: S3BackendAssumeRoleConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| roleArn | string | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| duration | string | (Optional) The duration individual credentials will be valid. | +| externalId | string | (Optional) External identifier to use when assuming the role. | +| policy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| policyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| sessionName | string | (Optional) Session name to use when assuming the role. | +| sourceIdentity | string | (Optional) Source identity specified by the principal assuming the. | +| tags | {[ key: string ]: string} | (Optional) Map of assume role session tags. | +| transitiveTagKeys | string[] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | + +--- + +##### `roleArn`Required + +```typescript +public readonly roleArn: string; +``` + +- _Type:_ string + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `duration`Optional + +```typescript +public readonly duration: string; +``` + +- _Type:_ string + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `externalId`Optional + +```typescript +public readonly externalId: string; +``` + +- _Type:_ string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `policy`Optional + +```typescript +public readonly policy: string; +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `policyArns`Optional + +```typescript +public readonly policyArns: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `sessionName`Optional + +```typescript +public readonly sessionName: string; +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +--- + +##### `sourceIdentity`Optional + +```typescript +public readonly sourceIdentity: string; +``` + +- _Type:_ string + +(Optional) Source identity specified by the principal assuming the. + +--- + +##### `tags`Optional + +```typescript +public readonly tags: {[ key: string ]: string}; +``` + +- _Type:_ {[ key: string ]: string} + +(Optional) Map of assume role session tags. + +--- + +##### `transitiveTagKeys`Optional + +```typescript +public readonly transitiveTagKeys: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +### S3BackendAssumeRoleWithWebIdentityConfig + +#### Initializer + +```typescript +import { S3BackendAssumeRoleWithWebIdentityConfig } from 'cdktf' + +const s3BackendAssumeRoleWithWebIdentityConfig: S3BackendAssumeRoleWithWebIdentityConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| duration | string | (Optional) The duration individual credentials will be valid. | +| policy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| policyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| roleArn | string | (Required) Amazon Resource Name (ARN) of the IAM Role to assume. | +| sessionName | string | (Optional) Session name to use when assuming the role. | +| webIdentityToken | string | (Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. | +| webIdentityTokenFile | string | (Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. | + +--- + +##### `duration`Optional + +```typescript +public readonly duration: string; +``` + +- _Type:_ string + +(Optional) The duration individual credentials will be valid. + +Credentials are automatically renewed up to the maximum defined by the AWS account. +Specified using the format < hours >h< minutes >m< seconds >s with any unit being optional. +For example, an hour and a half can be specified as 1h30m or 90m. +Must be between 15 minutes (15m) and 12 hours (12h). + +--- + +##### `policy`Optional + +```typescript +public readonly policy: string; +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `policyArns`Optional + +```typescript +public readonly policyArns: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### `roleArn`Optional + +```typescript +public readonly roleArn: string; +``` + +- _Type:_ string + +(Required) Amazon Resource Name (ARN) of the IAM Role to assume. + +Can also be set with the AWS_ROLE_ARN environment variable. + +--- + +##### `sessionName`Optional + +```typescript +public readonly sessionName: string; +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +Can also be set with the AWS_ROLE_SESSION_NAME environment variable. + +--- + +##### `webIdentityToken`Optional + +```typescript +public readonly webIdentityToken: string; +``` + +- _Type:_ string + +(Optional) The value of a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token or web_identity_token_file is required. + +--- + +##### `webIdentityTokenFile`Optional + +```typescript +public readonly webIdentityTokenFile: string; +``` + +- _Type:_ string + +(Optional) File containing a web identity token from an OpenID Connect (OIDC) or OAuth provider. + +One of web_identity_token_file or web_identity_token is required. +Can also be set with the AWS_WEB_IDENTITY_TOKEN_FILE environment variable. + +--- + +### S3BackendConfig + +Stores the state as a given key in a given bucket on Amazon S3. + +This backend +also supports state locking and consistency checking via Dynamo DB, which +can be enabled by setting the dynamodb_table field to an existing DynamoDB +table name. A single DynamoDB table can be used to lock multiple remote +state files. Terraform generates key names that include the values of the +bucket and key variables. + +Warning! It is highly recommended that you enable Bucket Versioning on the +S3 bucket to allow for state recovery in the case of accidental deletions +and human error. + +Read more about this backend in the Terraform docs: +https://developer.hashicorp.com/terraform/language/settings/backends/s3 + +#### Initializer + +```typescript +import { S3BackendConfig } from 'cdktf' + +const s3BackendConfig: S3BackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bucket | string | Name of the S3 Bucket. | +| key | string | Path to the state file inside the S3 Bucket. | +| accessKey | string | (Optional) AWS access key. | +| acl | string | (Optional) Canned ACL to be applied to the state file. | +| allowedAccountIds | string[] | (Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. | +| assumeRole | S3BackendAssumeRoleConfig | Assuming an IAM Role can be configured in two ways. | +| assumeRolePolicy | string | (Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. | +| assumeRolePolicyArns | string[] | (Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. | +| assumeRoleTags | {[ key: string ]: string} | (Optional) Map of assume role session tags. | +| assumeRoleTransitiveTagKeys | string[] | (Optional) Set of assume role session tag keys to pass to any subsequent sessions. | +| assumeRoleWithWebIdentity | S3BackendAssumeRoleWithWebIdentityConfig | Assume Role With Web Identity Configuration. | +| customCaBundle | string | (Optional) File containing custom root and intermediate certificates. | +| dynamodbEndpoint | string | (Optional) Custom endpoint for the AWS DynamoDB API. | +| dynamodbTable | string | (Optional) Name of DynamoDB Table to use for state locking and consistency. | +| ec2MetadataServiceEndpoint | string | Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. | +| ec2MetadataServiceEndpointMode | string | (Optional) Mode to use in communicating with the metadata service. | +| encrypt | boolean | (Optional) Enable server side encryption of the state file. | +| endpoint | string | (Optional) Custom endpoint for the AWS S3 API. | +| endpoints | S3BackendEndpointConfig | (Optional) The endpoint configuration block. | +| externalId | string | (Optional) External identifier to use when assuming the role. | +| forbiddenAccountIds | string[] | (Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. | +| forcePathStyle | boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| httpProxy | string | (Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. | +| httpsProxy | string | (Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. | +| iamEndpoint | string | (Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. | +| insecure | boolean | Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. | +| kmsKeyId | string | (Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. | +| maxRetries | number | (Optional) The maximum number of times an AWS API request is retried on retryable failure. | +| noProxy | string | (Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. | +| profile | string | (Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. | +| region | string | AWS Region of the S3 Bucket and DynamoDB Table (if used). | +| retryMode | string | (Optional) Specifies how retries are attempted. | +| roleArn | string | (Optional) Amazon Resource Name (ARN) of the IAM Role to assume. | +| secretKey | string | (Optional) AWS secret access key. | +| sessionName | string | (Optional) Session name to use when assuming the role. | +| sharedConfigFiles | string[] | (Optional) List of paths to AWS shared configuration files. | +| sharedCredentialsFile | string | (Optional) Path to the AWS shared credentials file. | +| sharedCredentialsFiles | string[] | (Optional) List of paths to AWS shared credentials files. | +| skipCredentialsValidation | boolean | (Optional) Skip credentials validation via the STS API. | +| skipMetadataApiCheck | boolean | (Optional) Skip usage of EC2 Metadata API. | +| skipRegionValidation | boolean | (Optional) Skip validation of provided region name. | +| skipRequestingAccountId | boolean | (Optional) Whether to skip requesting the account ID. | +| skipS3Checksum | boolean | (Optional) Do not include checksum when uploading S3 Objects. | +| sseCustomerKey | string | (Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). | +| stsEndpoint | string | (Optional) Custom endpoint for the AWS Security Token Service (STS) API. | +| stsRegion | string | (Optional) AWS region for STS. | +| token | string | (Optional) Multi-Factor Authentication (MFA) token. | +| useLegacyWorkflow | boolean | (Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. | +| usePathStyle | boolean | (Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). | +| workspaceKeyPrefix | string | (Optional) Prefix applied to the state path inside the bucket. | + +--- + +##### `bucket`Required + +```typescript +public readonly bucket: string; +``` + +- _Type:_ string + +Name of the S3 Bucket. + +--- + +##### `key`Required + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +Path to the state file inside the S3 Bucket. + +When using a non-default workspace, the state path will be /workspace_key_prefix/workspace_name/key + +--- + +##### `accessKey`Optional + +```typescript +public readonly accessKey: string; +``` + +- _Type:_ string + +(Optional) AWS access key. + +If configured, must also configure secret_key. +This can also be sourced from +the AWS_ACCESS_KEY_ID environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config). + +--- + +##### `acl`Optional + +```typescript +public readonly acl: string; +``` + +- _Type:_ string + +(Optional) Canned ACL to be applied to the state file. + +--- + +##### `allowedAccountIds`Optional + +```typescript +public readonly allowedAccountIds: string[]; +``` + +- _Type:_ string[] + +(Optional) List of allowed AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with forbidden_account_ids. + +--- + +##### `assumeRole`Optional + +```typescript +public readonly assumeRole: S3BackendAssumeRoleConfig; +``` + +- _Type:_ S3BackendAssumeRoleConfig + +Assuming an IAM Role can be configured in two ways. + +The preferred way is to use the argument assume_role, the other, which is deprecated, is with arguments at the top level. + +--- + +##### ~~`assumeRolePolicy`~~Optional + +- _Deprecated:_ Use assumeRole.policy instead. + +```typescript +public readonly assumeRolePolicy: string; +``` + +- _Type:_ string + +(Optional) IAM Policy JSON describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRolePolicyArns`~~Optional + +- _Deprecated:_ Use assumeRole.policyArns instead. + +```typescript +public readonly assumeRolePolicyArns: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of Amazon Resource Names (ARNs) of IAM Policies describing further restricting permissions for the IAM Role being assumed. + +--- + +##### ~~`assumeRoleTags`~~Optional + +- _Deprecated:_ Use assumeRole.tags instead. + +```typescript +public readonly assumeRoleTags: {[ key: string ]: string}; +``` + +- _Type:_ {[ key: string ]: string} + +(Optional) Map of assume role session tags. + +--- + +##### ~~`assumeRoleTransitiveTagKeys`~~Optional + +- _Deprecated:_ Use assumeRole.transitiveTagKeys instead. + +```typescript +public readonly assumeRoleTransitiveTagKeys: string[]; +``` + +- _Type:_ string[] + +(Optional) Set of assume role session tag keys to pass to any subsequent sessions. + +--- + +##### `assumeRoleWithWebIdentity`Optional + +```typescript +public readonly assumeRoleWithWebIdentity: S3BackendAssumeRoleWithWebIdentityConfig; +``` + +- _Type:_ S3BackendAssumeRoleWithWebIdentityConfig + +Assume Role With Web Identity Configuration. + +--- + +##### `customCaBundle`Optional + +```typescript +public readonly customCaBundle: string; +``` + +- _Type:_ string + +(Optional) File containing custom root and intermediate certificates. + +Can also be set using the AWS_CA_BUNDLE environment variable. +Setting ca_bundle in the shared config file is not supported. + +--- + +##### ~~`dynamodbEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.dynamodb instead + +```typescript +public readonly dynamodbEndpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS DynamoDB API. + +This can also be sourced from the AWS_DYNAMODB_ENDPOINT environment variable. + +--- + +##### `dynamodbTable`Optional + +```typescript +public readonly dynamodbTable: string; +``` + +- _Type:_ string + +(Optional) Name of DynamoDB Table to use for state locking and consistency. + +The table must have a partition key named LockID with type of String. +If not configured, state locking will be disabled. + +--- + +##### `ec2MetadataServiceEndpoint`Optional + +```typescript +public readonly ec2MetadataServiceEndpoint: string; +``` + +- _Type:_ string + +Optional) Custom endpoint URL for the EC2 Instance Metadata Service (IMDS) API. + +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT environment variable. + +--- + +##### `ec2MetadataServiceEndpointMode`Optional + +```typescript +public readonly ec2MetadataServiceEndpointMode: string; +``` + +- _Type:_ string + +(Optional) Mode to use in communicating with the metadata service. + +Valid values are IPv4 and IPv6. +Can also be set with the AWS_EC2_METADATA_SERVICE_ENDPOINT_MODE environment variable. + +--- + +##### `encrypt`Optional + +```typescript +public readonly encrypt: boolean; +``` + +- _Type:_ boolean + +(Optional) Enable server side encryption of the state file. + +--- + +##### ~~`endpoint`~~Optional + +- _Deprecated:_ Use endpoints.s3 instead + +```typescript +public readonly endpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS S3 API. + +This can also be sourced from the AWS_S3_ENDPOINT environment variable. + +--- + +##### `endpoints`Optional + +```typescript +public readonly endpoints: S3BackendEndpointConfig; +``` + +- _Type:_ S3BackendEndpointConfig + +(Optional) The endpoint configuration block. + +--- + +##### ~~`externalId`~~Optional + +- _Deprecated:_ Use assume_role.external_id instead. + +```typescript +public readonly externalId: string; +``` + +- _Type:_ string + +(Optional) External identifier to use when assuming the role. + +--- + +##### `forbiddenAccountIds`Optional + +```typescript +public readonly forbiddenAccountIds: string[]; +``` + +- _Type:_ string[] + +(Optional) List of forbidden AWS account IDs to prevent potential destruction of a live environment. + +Conflicts with allowed_account_ids. + +--- + +##### ~~`forcePathStyle`~~Optional + +- _Deprecated:_ Use usePathStyle instead + +```typescript +public readonly forcePathStyle: boolean; +``` + +- _Type:_ boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `httpProxy`Optional + +```typescript +public readonly httpProxy: string; +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTP requests when accessing the AWS API. + +Can also be set using the HTTP_PROXY or http_proxy environment variables. + +--- + +##### `httpsProxy`Optional + +```typescript +public readonly httpsProxy: string; +``` + +- _Type:_ string + +(Optional) URL of a proxy to use for HTTPS requests when accessing the AWS API. + +Can also be set using the HTTPS_PROXY or https_proxy environment variables. + +--- + +##### ~~`iamEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.iam instead + +```typescript +public readonly iamEndpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Identity and Access Management (IAM) API. + +This can also be sourced from the AWS_IAM_ENDPOINT environment variable. + +--- + +##### `insecure`Optional + +```typescript +public readonly insecure: boolean; +``` + +- _Type:_ boolean + +Optional) Whether to explicitly allow the backend to perform "insecure" SSL requests. + +If omitted, the default value is false. + +--- + +##### `kmsKeyId`Optional + +```typescript +public readonly kmsKeyId: string; +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of a Key Management Service (KMS) Key to use for encrypting the state. + +Note that if this value is specified, +Terraform will need kms:Encrypt, kms:Decrypt and kms:GenerateDataKey permissions on this KMS key. + +--- + +##### `maxRetries`Optional + +```typescript +public readonly maxRetries: number; +``` + +- _Type:_ number + +(Optional) The maximum number of times an AWS API request is retried on retryable failure. + +Defaults to 5. + +--- + +##### `noProxy`Optional + +```typescript +public readonly noProxy: string; +``` + +- _Type:_ string + +(Optional) Comma-separated list of hosts that should not use HTTP or HTTPS proxies. + +Each value can be one of: + +- A domain name +- An IP address +- A CIDR address +- An asterisk (\*), to indicate that no proxying should be performed Domain name and IP address values can also include a port number. + Can also be set using the NO_PROXY or no_proxy environment variables. + +--- + +##### `profile`Optional + +```typescript +public readonly profile: string; +``` + +- _Type:_ string + +(Optional) Name of AWS profile in AWS shared credentials file (e.g. ~/.aws/credentials) or AWS shared configuration file (e.g. ~/.aws/config) to use for credentials and/or configuration. This can also be sourced from the AWS_PROFILE environment variable. + +--- + +##### `region`Optional + +```typescript +public readonly region: string; +``` + +- _Type:_ string + +AWS Region of the S3 Bucket and DynamoDB Table (if used). + +This can also +be sourced from the AWS_DEFAULT_REGION and AWS_REGION environment +variables. + +--- + +##### `retryMode`Optional + +```typescript +public readonly retryMode: string; +``` + +- _Type:_ string + +(Optional) Specifies how retries are attempted. + +Valid values are standard and adaptive. +Can also be configured using the AWS_RETRY_MODE environment variable or the shared config file parameter retry_mode. + +--- + +##### ~~`roleArn`~~Optional + +- _Deprecated:_ Use assumeRole.roleArn instead. + +```typescript +public readonly roleArn: string; +``` + +- _Type:_ string + +(Optional) Amazon Resource Name (ARN) of the IAM Role to assume. + +--- + +##### `secretKey`Optional + +```typescript +public readonly secretKey: string; +``` + +- _Type:_ string + +(Optional) AWS secret access key. + +If configured, must also configure access_key. +This can also be sourced from +the AWS_SECRET_ACCESS_KEY environment variable, +AWS shared credentials file (e.g. ~/.aws/credentials), +or AWS shared configuration file (e.g. ~/.aws/config) + +--- + +##### ~~`sessionName`~~Optional + +- _Deprecated:_ Use assumeRole.sessionName instead. + +```typescript +public readonly sessionName: string; +``` + +- _Type:_ string + +(Optional) Session name to use when assuming the role. + +--- + +##### `sharedConfigFiles`Optional + +```typescript +public readonly sharedConfigFiles: string[]; +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared configuration files. + +Defaults to ~/.aws/config. + +--- + +##### `sharedCredentialsFile`Optional + +```typescript +public readonly sharedCredentialsFile: string; +``` + +- _Type:_ string + +(Optional) Path to the AWS shared credentials file. + +Defaults to ~/.aws/credentials. + +--- + +##### `sharedCredentialsFiles`Optional + +```typescript +public readonly sharedCredentialsFiles: string[]; +``` + +- _Type:_ string[] + +(Optional) List of paths to AWS shared credentials files. + +Defaults to ~/.aws/credentials. + +--- + +##### `skipCredentialsValidation`Optional + +```typescript +public readonly skipCredentialsValidation: boolean; +``` + +- _Type:_ boolean + +(Optional) Skip credentials validation via the STS API. + +--- + +##### `skipMetadataApiCheck`Optional + +```typescript +public readonly skipMetadataApiCheck: boolean; +``` + +- _Type:_ boolean + +(Optional) Skip usage of EC2 Metadata API. + +--- + +##### `skipRegionValidation`Optional + +```typescript +public readonly skipRegionValidation: boolean; +``` + +- _Type:_ boolean + +(Optional) Skip validation of provided region name. + +--- + +##### `skipRequestingAccountId`Optional + +```typescript +public readonly skipRequestingAccountId: boolean; +``` + +- _Type:_ boolean + +(Optional) Whether to skip requesting the account ID. + +Useful for AWS API implementations that do not have the IAM, STS API, or metadata API. + +--- + +##### `skipS3Checksum`Optional + +```typescript +public readonly skipS3Checksum: boolean; +``` + +- _Type:_ boolean + +(Optional) Do not include checksum when uploading S3 Objects. + +Useful for some S3-Compatible APIs. + +--- + +##### `sseCustomerKey`Optional + +```typescript +public readonly sseCustomerKey: string; +``` + +- _Type:_ string + +(Optional) The key to use for encrypting state with Server-Side Encryption with Customer-Provided Keys (SSE-C). + +This is the base64-encoded value of the key, which must decode to 256 bits. +This can also be sourced from the AWS_SSE_CUSTOMER_KEY environment variable, +which is recommended due to the sensitivity of the value. +Setting it inside a terraform file will cause it to be persisted to disk in terraform.tfstate. + +--- + +##### ~~`stsEndpoint`~~Optional + +- _Deprecated:_ Use endpoints.sts instead + +```typescript +public readonly stsEndpoint: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint for the AWS Security Token Service (STS) API. + +This can also be sourced from the AWS_STS_ENDPOINT environment variable. + +--- + +##### `stsRegion`Optional + +```typescript +public readonly stsRegion: string; +``` + +- _Type:_ string + +(Optional) AWS region for STS. + +If unset, AWS will use the same region for STS as other non-STS operations. + +--- + +##### `token`Optional + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +(Optional) Multi-Factor Authentication (MFA) token. + +This can also be sourced from the AWS_SESSION_TOKEN environment variable. + +--- + +##### `useLegacyWorkflow`Optional + +```typescript +public readonly useLegacyWorkflow: boolean; +``` + +- _Type:_ boolean + +(Optional) Use the legacy authentication workflow, preferring environment variables over backend configuration. + +Defaults to true. +This behavior does not align with the authentication flow of the AWS CLI or SDK's, and will be removed in the future. + +--- + +##### `usePathStyle`Optional + +```typescript +public readonly usePathStyle: boolean; +``` + +- _Type:_ boolean + +(Optional) Enable path-style S3 URLs (https://< HOST >/< BUCKET > instead of https://< BUCKET >.< HOST >). + +--- + +##### `workspaceKeyPrefix`Optional + +```typescript +public readonly workspaceKeyPrefix: string; +``` + +- _Type:_ string + +(Optional) Prefix applied to the state path inside the bucket. + +This is only relevant when using a non-default workspace. Defaults to env: + +--- + +### S3BackendEndpointConfig + +#### Initializer + +```typescript +import { S3BackendEndpointConfig } from 'cdktf' + +const s3BackendEndpointConfig: S3BackendEndpointConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | ------------------- | ----------------------------------------------------------------------------------------------- | +| dynamodb | string | (Optional) Custom endpoint URL for the AWS DynamoDB API. | +| iam | string | (Optional) Custom endpoint URL for the AWS IAM API. | +| s3 | string | (Optional) Custom endpoint URL for the AWS S3 API. | +| sso | string | (Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. | +| sts | string | (Optional) Custom endpoint URL for the AWS STS API. | + +--- + +##### `dynamodb`Optional + +```typescript +public readonly dynamodb: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS DynamoDB API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_DYNAMODB or the deprecated environment variable AWS_DYNAMODB_ENDPOINT. + +--- + +##### `iam`Optional + +```typescript +public readonly iam: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS IAM API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_IAM or the deprecated environment variable AWS_IAM_ENDPOINT. + +--- + +##### `s3`Optional + +```typescript +public readonly s3: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS S3 API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_S3 or the deprecated environment variable AWS_S3_ENDPOINT. + +--- + +##### `sso`Optional + +```typescript +public readonly sso: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS IAM Identity Center (formerly known as AWS SSO) API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_SSO. + +--- + +##### `sts`Optional + +```typescript +public readonly sts: string; +``` + +- _Type:_ string + +(Optional) Custom endpoint URL for the AWS STS API. + +This can also be sourced from the environment variable AWS_ENDPOINT_URL_STS or the deprecated environment variable AWS_STS_ENDPOINT. + +--- + +### SSHProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```typescript +import { SSHProvisionerConnection } from 'cdktf' + +const sSHProvisionerConnection: SSHProvisionerConnection = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------- | ------------------- | ------------------------------------------------------------------------------------------------------- | +| host | string | The address of the resource to connect to. | +| type | string | The connection type. | +| agent | string | Set to false to disable using ssh-agent to authenticate. | +| agentIdentity | string | The preferred identity from the ssh agent for authentication. | +| bastionCertificate | string | The contents of a signed CA Certificate. | +| bastionHost | string | Setting this enables the bastion Host connection. | +| bastionHostKey | string | The public key from the remote host or the signing CA, used to verify the host connection. | +| bastionPassword | string | The password to use for the bastion host. | +| bastionPort | number | The port to use connect to the bastion host. | +| bastionPrivateKey | string | The contents of an SSH key file to use for the bastion host. | +| bastionUser | string | The user for the connection to the bastion host. | +| certificate | string | The contents of a signed CA Certificate. | +| hostKey | string | The public key from the remote host or the signing CA, used to verify the connection. | +| password | string | The password to use for the connection. | +| port | number | The port to connect to. | +| privateKey | string | The contents of an SSH key to use for the connection. | +| proxyHost | string | Setting this enables the SSH over HTTP connection. | +| proxyPort | number | The port to use connect to the proxy host. | +| proxyScheme | string | The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. | +| proxyUserName | string | The username to use connect to the private proxy host. | +| proxyUserPassword | string | The password to use connect to the private proxy host. | +| scriptPath | string | The path used to copy scripts meant for remote execution. | +| targetPlatform | string | The target platform to connect to. | +| timeout | string | The timeout to wait for the connection to become available. | +| user | string | The user to use for the connection. | + +--- + +##### `host`Required + +```typescript +public readonly host: string; +``` + +- _Type:_ string + +The address of the resource to connect to. + +--- + +##### `type`Required + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `agent`Optional + +```typescript +public readonly agent: string; +``` + +- _Type:_ string + +Set to false to disable using ssh-agent to authenticate. + +On Windows the only supported SSH authentication agent is Pageant. + +--- + +##### `agentIdentity`Optional + +```typescript +public readonly agentIdentity: string; +``` + +- _Type:_ string + +The preferred identity from the ssh agent for authentication. + +--- + +##### `bastionCertificate`Optional + +```typescript +public readonly bastionCertificate: string; +``` + +- _Type:_ string + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a bastion_private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `bastionHost`Optional + +```typescript +public readonly bastionHost: string; +``` + +- _Type:_ string + +Setting this enables the bastion Host connection. + +The provisioner will connect to bastion_host first, and then connect from there to host. + +--- + +##### `bastionHostKey`Optional + +```typescript +public readonly bastionHostKey: string; +``` + +- _Type:_ string + +The public key from the remote host or the signing CA, used to verify the host connection. + +--- + +##### `bastionPassword`Optional + +```typescript +public readonly bastionPassword: string; +``` + +- _Type:_ string + +The password to use for the bastion host. + +--- + +##### `bastionPort`Optional + +```typescript +public readonly bastionPort: number; +``` + +- _Type:_ number + +The port to use connect to the bastion host. + +--- + +##### `bastionPrivateKey`Optional + +```typescript +public readonly bastionPrivateKey: string; +``` + +- _Type:_ string + +The contents of an SSH key file to use for the bastion host. + +These can be loaded from a file on disk using the file function. + +--- + +##### `bastionUser`Optional + +```typescript +public readonly bastionUser: string; +``` + +- _Type:_ string + +The user for the connection to the bastion host. + +--- + +##### `certificate`Optional + +```typescript +public readonly certificate: string; +``` + +- _Type:_ string + +The contents of a signed CA Certificate. + +The certificate argument must be used in conjunction with a private_key. +These can be loaded from a file on disk using the the file function. + +--- + +##### `hostKey`Optional + +```typescript +public readonly hostKey: string; +``` + +- _Type:_ string + +The public key from the remote host or the signing CA, used to verify the connection. + +--- + +##### `password`Optional + +```typescript +public readonly password: string; +``` + +- _Type:_ string + +The password to use for the connection. + +--- + +##### `port`Optional + +```typescript +public readonly port: number; +``` + +- _Type:_ number +- _Default:_ 22 + +The port to connect to. + +--- + +##### `privateKey`Optional + +```typescript +public readonly privateKey: string; +``` + +- _Type:_ string + +The contents of an SSH key to use for the connection. + +These can be loaded from a file on disk using the file function. +This takes preference over password if provided. + +--- + +##### `proxyHost`Optional + +```typescript +public readonly proxyHost: string; +``` + +- _Type:_ string + +Setting this enables the SSH over HTTP connection. + +This host will be connected to first, and then the host or bastion_host connection will be made from there. + +--- + +##### `proxyPort`Optional + +```typescript +public readonly proxyPort: number; +``` + +- _Type:_ number + +The port to use connect to the proxy host. + +--- + +##### `proxyScheme`Optional + +```typescript +public readonly proxyScheme: string; +``` + +- _Type:_ string + +The ssh connection also supports the following fields to facilitate connections by SSH over HTTP proxy. + +--- + +##### `proxyUserName`Optional + +```typescript +public readonly proxyUserName: string; +``` + +- _Type:_ string + +The username to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `proxyUserPassword`Optional + +```typescript +public readonly proxyUserPassword: string; +``` + +- _Type:_ string + +The password to use connect to the private proxy host. + +This argument should be specified only if authentication is required for the HTTP Proxy server. + +--- + +##### `scriptPath`Optional + +```typescript +public readonly scriptPath: string; +``` + +- _Type:_ string + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `targetPlatform`Optional + +```typescript +public readonly targetPlatform: string; +``` + +- _Type:_ string +- _Default:_ unix + +The target platform to connect to. + +Valid values are "windows" and "unix". +If the platform is set to windows, the default script*path is c:\windows\temp\terraform*%RAND%.cmd, assuming the SSH default shell is cmd.exe. +If the SSH default shell is PowerShell, set script*path to "c:/windows/temp/terraform*%RAND%.ps1" + +--- + +##### `timeout`Optional + +```typescript +public readonly timeout: string; +``` + +- _Type:_ string +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `user`Optional + +```typescript +public readonly user: string; +``` + +- _Type:_ string +- _Default:_ root + +The user to use for the connection. + +--- + +### StackAnnotation + +#### Initializer + +```typescript +import { StackAnnotation } from 'cdktf' + +const stackAnnotation: StackAnnotation = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | +| constructPath | string | _No description._ | +| level | AnnotationMetadataEntryType | _No description._ | +| message | string | _No description._ | +| stacktrace | string[] | _No description._ | + +--- + +##### `constructPath`Required + +```typescript +public readonly constructPath: string; +``` + +- _Type:_ string + +--- + +##### `level`Required + +```typescript +public readonly level: AnnotationMetadataEntryType; +``` + +- _Type:_ AnnotationMetadataEntryType + +--- + +##### `message`Required + +```typescript +public readonly message: string; +``` + +- _Type:_ string + +--- + +##### `stacktrace`Optional + +```typescript +public readonly stacktrace: string[]; +``` + +- _Type:_ string[] + +--- + +### StackManifest + +#### Initializer + +```typescript +import { StackManifest } from 'cdktf' + +const stackManifest: StackManifest = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | ----------------- | +| annotations | StackAnnotation[] | _No description._ | +| constructPath | string | _No description._ | +| dependencies | string[] | _No description._ | +| name | string | _No description._ | +| stackMetadataPath | string | _No description._ | +| synthesizedStackPath | string | _No description._ | +| workingDirectory | string | _No description._ | + +--- + +##### `annotations`Required + +```typescript +public readonly annotations: StackAnnotation[]; +``` + +- _Type:_ StackAnnotation[] + +--- + +##### `constructPath`Required + +```typescript +public readonly constructPath: string; +``` + +- _Type:_ string + +--- + +##### `dependencies`Required + +```typescript +public readonly dependencies: string[]; +``` + +- _Type:_ string[] + +--- + +##### `name`Required + +```typescript +public readonly name: string; +``` + +- _Type:_ string + +--- + +##### `stackMetadataPath`Required + +```typescript +public readonly stackMetadataPath: string; +``` + +- _Type:_ string + +--- + +##### `synthesizedStackPath`Required + +```typescript +public readonly synthesizedStackPath: string; +``` + +- _Type:_ string + +--- + +##### `workingDirectory`Required + +```typescript +public readonly workingDirectory: string; +``` + +- _Type:_ string + +--- + +### SwiftBackendConfig + +#### Initializer + +```typescript +import { SwiftBackendConfig } from 'cdktf' + +const swiftBackendConfig: SwiftBackendConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------- | -------------------- | ----------------- | +| container | string | _No description._ | +| applicationCredentialId | string | _No description._ | +| applicationCredentialName | string | _No description._ | +| applicationCredentialSecret | string | _No description._ | +| archiveContainer | string | _No description._ | +| authUrl | string | _No description._ | +| cacertFile | string | _No description._ | +| cert | string | _No description._ | +| cloud | string | _No description._ | +| defaultDomain | string | _No description._ | +| domainId | string | _No description._ | +| domainName | string | _No description._ | +| expireAfter | string | _No description._ | +| insecure | boolean | _No description._ | +| key | string | _No description._ | +| password | string | _No description._ | +| projectDomainId | string | _No description._ | +| projectDomainName | string | _No description._ | +| regionName | string | _No description._ | +| stateName | string | _No description._ | +| tenantId | string | _No description._ | +| tenantName | string | _No description._ | +| token | string | _No description._ | +| userDomainId | string | _No description._ | +| userDomainName | string | _No description._ | +| userId | string | _No description._ | +| userName | string | _No description._ | + +--- + +##### ~~`container`~~Required + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly container: string; +``` + +- _Type:_ string + +--- + +##### ~~`applicationCredentialId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly applicationCredentialId: string; +``` + +- _Type:_ string + +--- + +##### ~~`applicationCredentialName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly applicationCredentialName: string; +``` + +- _Type:_ string + +--- + +##### ~~`applicationCredentialSecret`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly applicationCredentialSecret: string; +``` + +- _Type:_ string + +--- + +##### ~~`archiveContainer`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly archiveContainer: string; +``` + +- _Type:_ string + +--- + +##### ~~`authUrl`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly authUrl: string; +``` + +- _Type:_ string + +--- + +##### ~~`cacertFile`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cacertFile: string; +``` + +- _Type:_ string + +--- + +##### ~~`cert`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cert: string; +``` + +- _Type:_ string + +--- + +##### ~~`cloud`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly cloud: string; +``` + +- _Type:_ string + +--- + +##### ~~`defaultDomain`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly defaultDomain: string; +``` + +- _Type:_ string + +--- + +##### ~~`domainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly domainId: string; +``` + +- _Type:_ string + +--- + +##### ~~`domainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly domainName: string; +``` + +- _Type:_ string + +--- + +##### ~~`expireAfter`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly expireAfter: string; +``` + +- _Type:_ string + +--- + +##### ~~`insecure`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly insecure: boolean; +``` + +- _Type:_ boolean + +--- + +##### ~~`key`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly key: string; +``` + +- _Type:_ string + +--- + +##### ~~`password`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly password: string; +``` + +- _Type:_ string + +--- + +##### ~~`projectDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly projectDomainId: string; +``` + +- _Type:_ string + +--- + +##### ~~`projectDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly projectDomainName: string; +``` + +- _Type:_ string + +--- + +##### ~~`regionName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly regionName: string; +``` + +- _Type:_ string + +--- + +##### ~~`stateName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly stateName: string; +``` + +- _Type:_ string + +--- + +##### ~~`tenantId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly tenantId: string; +``` + +- _Type:_ string + +--- + +##### ~~`tenantName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly tenantName: string; +``` + +- _Type:_ string + +--- + +##### ~~`token`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly token: string; +``` + +- _Type:_ string + +--- + +##### ~~`userDomainId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userDomainId: string; +``` + +- _Type:_ string + +--- + +##### ~~`userDomainName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userDomainName: string; +``` + +- _Type:_ string + +--- + +##### ~~`userId`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userId: string; +``` + +- _Type:_ string + +--- + +##### ~~`userName`~~Optional + +- _Deprecated:_ CDK for Terraform no longer supports the swift backend. Terraform deprecated swift in v1.2.3 and removed it in v1.3. + +```typescript +public readonly userName: string; +``` + +- _Type:_ string + +--- + +### TerraformAssetConfig + +#### Initializer + +```typescript +import { TerraformAssetConfig } from 'cdktf' + +const terraformAssetConfig: TerraformAssetConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------- | +| path | string | _No description._ | +| assetHash | string | _No description._ | +| type | AssetType | _No description._ | + +--- + +##### `path`Required + +```typescript +public readonly path: string; +``` + +- _Type:_ string + +--- + +##### `assetHash`Optional + +```typescript +public readonly assetHash: string; +``` + +- _Type:_ string + +--- + +##### `type`Optional + +```typescript +public readonly type: AssetType; +``` + +- _Type:_ AssetType + +--- + +### TerraformCondition + +#### Initializer + +```typescript +import { TerraformCondition } from 'cdktf' + +const terraformCondition: TerraformCondition = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```typescript +public readonly condition: any; +``` + +- _Type:_ any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```typescript +public readonly errorMessage: string; +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TerraformConstructor + +#### Initializer + +```typescript +import { testingMatchers } from 'cdktf' + +const terraformConstructor: testingMatchers.TerraformConstructor = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| tfResourceType | string | _No description._ | + +--- + +##### `tfResourceType`Required + +```typescript +public readonly tfResourceType: string; +``` + +- _Type:_ string + +--- + +### TerraformElementMetadata + +#### Initializer + +```typescript +import { TerraformElementMetadata } from 'cdktf' + +const terraformElementMetadata: TerraformElementMetadata = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------- | --------------------- | ----------------- | +| path | string | _No description._ | +| stackTrace | string[] | _No description._ | +| uniqueId | string | _No description._ | + +--- + +##### `path`Required + +```typescript +public readonly path: string; +``` + +- _Type:_ string + +--- + +##### `stackTrace`Required + +```typescript +public readonly stackTrace: string[]; +``` + +- _Type:_ string[] + +--- + +##### `uniqueId`Required + +```typescript +public readonly uniqueId: string; +``` + +- _Type:_ string + +--- + +### TerraformHclModuleConfig + +#### Initializer + +```typescript +import { TerraformHclModuleConfig } from 'cdktf' + +const terraformHclModuleConfig: TerraformHclModuleConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| dependsOn | ITerraformDependable[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | TerraformProvider \| TerraformModuleProvider[] | _No description._ | +| skipAssetCreationFromLocalModules | boolean | _No description._ | +| source | string | _No description._ | +| version | string | _No description._ | +| variables | {[ key: string ]: any} | _No description._ | + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```typescript +public readonly providers: TerraformProvider | TerraformModuleProvider[]; +``` + +- _Type:_ TerraformProvider | TerraformModuleProvider[] + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```typescript +public readonly skipAssetCreationFromLocalModules: boolean; +``` + +- _Type:_ boolean + +--- + +##### `source`Required + +```typescript +public readonly source: string; +``` + +- _Type:_ string + +--- + +##### `version`Optional + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +##### `variables`Optional + +```typescript +public readonly variables: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +### TerraformMetaArguments + +#### Initializer + +```typescript +import { TerraformMetaArguments } from 'cdktf' + +const terraformMetaArguments: TerraformMetaArguments = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | ITerraformDependable[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | FileProvisioner \| LocalExecProvisioner \| RemoteExecProvisioner[] | _No description._ | + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```typescript +public readonly provisioners: FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[]; +``` + +- _Type:_ FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[] + +--- + +### TerraformModuleConfig + +#### Initializer + +```typescript +import { TerraformModuleConfig } from 'cdktf' + +const terraformModuleConfig: TerraformModuleConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| dependsOn | ITerraformDependable[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | TerraformProvider \| TerraformModuleProvider[] | _No description._ | +| skipAssetCreationFromLocalModules | boolean | _No description._ | +| source | string | _No description._ | +| version | string | _No description._ | + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```typescript +public readonly providers: TerraformProvider | TerraformModuleProvider[]; +``` + +- _Type:_ TerraformProvider | TerraformModuleProvider[] + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```typescript +public readonly skipAssetCreationFromLocalModules: boolean; +``` + +- _Type:_ boolean + +--- + +##### `source`Required + +```typescript +public readonly source: string; +``` + +- _Type:_ string + +--- + +##### `version`Optional + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +### TerraformModuleProvider + +#### Initializer + +```typescript +import { TerraformModuleProvider } from 'cdktf' + +const terraformModuleProvider: TerraformModuleProvider = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| moduleAlias | string | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `moduleAlias`Required + +```typescript +public readonly moduleAlias: string; +``` + +- _Type:_ string + +--- + +##### `provider`Required + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformModuleUserConfig + +#### Initializer + +```typescript +import { TerraformModuleUserConfig } from 'cdktf' + +const terraformModuleUserConfig: TerraformModuleUserConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| dependsOn | ITerraformDependable[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| providers | TerraformProvider \| TerraformModuleProvider[] | _No description._ | +| skipAssetCreationFromLocalModules | boolean | _No description._ | + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `providers`Optional + +```typescript +public readonly providers: TerraformProvider | TerraformModuleProvider[]; +``` + +- _Type:_ TerraformProvider | TerraformModuleProvider[] + +--- + +##### `skipAssetCreationFromLocalModules`Optional + +```typescript +public readonly skipAssetCreationFromLocalModules: boolean; +``` + +- _Type:_ boolean + +--- + +### TerraformOutputConfig + +#### Initializer + +```typescript +import { TerraformOutputConfig } from 'cdktf' + +const terraformOutputConfig: TerraformOutputConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| value | any | _No description._ | +| dependsOn | ITerraformDependable[] | _No description._ | +| description | string | _No description._ | +| precondition | Precondition | _No description._ | +| sensitive | boolean | _No description._ | +| staticId | boolean | If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). | + +--- + +##### `value`Required + +```typescript +public readonly value: any; +``` + +- _Type:_ any + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `description`Optional + +```typescript +public readonly description: string; +``` + +- _Type:_ string + +--- + +##### `precondition`Optional + +```typescript +public readonly precondition: Precondition; +``` + +- _Type:_ Precondition + +--- + +##### `sensitive`Optional + +```typescript +public readonly sensitive: boolean; +``` + +- _Type:_ boolean + +--- + +##### `staticId`Optional + +```typescript +public readonly staticId: boolean; +``` + +- _Type:_ boolean +- _Default:_ false + +If set to true the synthesized Terraform Output will be named after the `id` passed to the constructor instead of the default (TerraformOutput.friendlyUniqueId). + +--- + +### TerraformProviderConfig + +#### Initializer + +```typescript +import { TerraformProviderConfig } from 'cdktf' + +const terraformProviderConfig: TerraformProviderConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | ----------------- | +| terraformResourceType | string | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | +| terraformProviderSource | string | _No description._ | + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `terraformGeneratorMetadata`Optional + +```typescript +public readonly terraformGeneratorMetadata: TerraformProviderGeneratorMetadata; +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +##### `terraformProviderSource`Optional + +```typescript +public readonly terraformProviderSource: string; +``` + +- _Type:_ string + +--- + +### TerraformProviderGeneratorMetadata + +#### Initializer + +```typescript +import { TerraformProviderGeneratorMetadata } from 'cdktf' + +const terraformProviderGeneratorMetadata: TerraformProviderGeneratorMetadata = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| --------------------------------------------------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| providerName | string | _No description._ | +| providerVersion | string | _No description._ | +| providerVersionConstraint | string | _No description._ | + +--- + +##### `providerName`Required + +```typescript +public readonly providerName: string; +``` + +- _Type:_ string + +--- + +##### `providerVersion`Optional + +```typescript +public readonly providerVersion: string; +``` + +- _Type:_ string + +--- + +##### `providerVersionConstraint`Optional + +```typescript +public readonly providerVersionConstraint: string; +``` + +- _Type:_ string + +--- + +### TerraformResourceConfig + +#### Initializer + +```typescript +import { TerraformResourceConfig } from 'cdktf' + +const terraformResourceConfig: TerraformResourceConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | +| connection | SSHProvisionerConnection \| WinrmProvisionerConnection | _No description._ | +| count | number \| TerraformCount | _No description._ | +| dependsOn | ITerraformDependable[] | _No description._ | +| forEach | ITerraformIterator | _No description._ | +| lifecycle | TerraformResourceLifecycle | _No description._ | +| provider | TerraformProvider | _No description._ | +| provisioners | FileProvisioner \| LocalExecProvisioner \| RemoteExecProvisioner[] | _No description._ | +| terraformResourceType | string | _No description._ | +| terraformGeneratorMetadata | TerraformProviderGeneratorMetadata | _No description._ | + +--- + +##### `connection`Optional + +```typescript +public readonly connection: SSHProvisionerConnection | WinrmProvisionerConnection; +``` + +- _Type:_ SSHProvisionerConnection | WinrmProvisionerConnection + +--- + +##### `count`Optional + +```typescript +public readonly count: number | TerraformCount; +``` + +- _Type:_ number | TerraformCount + +--- + +##### `dependsOn`Optional + +```typescript +public readonly dependsOn: ITerraformDependable[]; +``` + +- _Type:_ ITerraformDependable[] + +--- + +##### `forEach`Optional + +```typescript +public readonly forEach: ITerraformIterator; +``` + +- _Type:_ ITerraformIterator + +--- + +##### `lifecycle`Optional + +```typescript +public readonly lifecycle: TerraformResourceLifecycle; +``` + +- _Type:_ TerraformResourceLifecycle + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +##### `provisioners`Optional + +```typescript +public readonly provisioners: FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[]; +``` + +- _Type:_ FileProvisioner | LocalExecProvisioner | RemoteExecProvisioner[] + +--- + +##### `terraformResourceType`Required + +```typescript +public readonly terraformResourceType: string; +``` + +- _Type:_ string + +--- + +##### `terraformGeneratorMetadata`Optional + +```typescript +public readonly terraformGeneratorMetadata: TerraformProviderGeneratorMetadata; +``` + +- _Type:_ TerraformProviderGeneratorMetadata + +--- + +### TerraformResourceImport + +#### Initializer + +```typescript +import { TerraformResourceImport } from 'cdktf' + +const terraformResourceImport: TerraformResourceImport = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | ----------------- | +| id | string | _No description._ | +| provider | TerraformProvider | _No description._ | + +--- + +##### `id`Required + +```typescript +public readonly id: string; +``` + +- _Type:_ string + +--- + +##### `provider`Optional + +```typescript +public readonly provider: TerraformProvider; +``` + +- _Type:_ TerraformProvider + +--- + +### TerraformResourceLifecycle + +#### Initializer + +```typescript +import { TerraformResourceLifecycle } from 'cdktf' + +const terraformResourceLifecycle: TerraformResourceLifecycle = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------- | +| createBeforeDestroy | boolean | _No description._ | +| ignoreChanges | string[] \| string | _No description._ | +| postcondition | Postcondition[] | _No description._ | +| precondition | Precondition[] | _No description._ | +| preventDestroy | boolean | _No description._ | +| replaceTriggeredBy | string \| ITerraformDependable[] | _No description._ | + +--- + +##### `createBeforeDestroy`Optional + +```typescript +public readonly createBeforeDestroy: boolean; +``` + +- _Type:_ boolean + +--- + +##### `ignoreChanges`Optional + +```typescript +public readonly ignoreChanges: string[] | string; +``` + +- _Type:_ string[] | string + +--- + +##### `postcondition`Optional + +```typescript +public readonly postcondition: Postcondition[]; +``` + +- _Type:_ Postcondition[] + +--- + +##### `precondition`Optional + +```typescript +public readonly precondition: Precondition[]; +``` + +- _Type:_ Precondition[] + +--- + +##### `preventDestroy`Optional + +```typescript +public readonly preventDestroy: boolean; +``` + +- _Type:_ boolean + +--- + +##### `replaceTriggeredBy`Optional + +```typescript +public readonly replaceTriggeredBy: string | ITerraformDependable[]; +``` + +- _Type:_ string | ITerraformDependable[] + +--- + +### TerraformResourceMoveById + +#### Initializer + +```typescript +import { TerraformResourceMoveById } from 'cdktf' + +const terraformResourceMoveById: TerraformResourceMoveById = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------ | ------------------- | ----------------- | +| from | string | _No description._ | +| to | string | _No description._ | + +--- + +##### `from`Required + +```typescript +public readonly from: string; +``` + +- _Type:_ string + +--- + +##### `to`Required + +```typescript +public readonly to: string; +``` + +- _Type:_ string + +--- + +### TerraformResourceMoveByTarget + +#### Initializer + +```typescript +import { TerraformResourceMoveByTarget } from 'cdktf' + +const terraformResourceMoveByTarget: TerraformResourceMoveByTarget = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ---------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| moveTarget | string | _No description._ | +| index | string \| number | _No description._ | + +--- + +##### `moveTarget`Required + +```typescript +public readonly moveTarget: string; +``` + +- _Type:_ string + +--- + +##### `index`Optional + +```typescript +public readonly index: string | number; +``` + +- _Type:_ string | number + +--- + +### TerraformStackMetadata + +#### Initializer + +```typescript +import { TerraformStackMetadata } from 'cdktf' + +const terraformStackMetadata: TerraformStackMetadata = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------- | ------------------- | ----------------- | +| backend | string | _No description._ | +| stackName | string | _No description._ | +| version | string | _No description._ | +| cloud | string | _No description._ | + +--- + +##### `backend`Required + +```typescript +public readonly backend: string; +``` + +- _Type:_ string + +--- + +##### `stackName`Required + +```typescript +public readonly stackName: string; +``` + +- _Type:_ string + +--- + +##### `version`Required + +```typescript +public readonly version: string; +``` + +- _Type:_ string + +--- + +##### `cloud`Optional + +```typescript +public readonly cloud: string; +``` + +- _Type:_ string + +--- + +### TerraformVariableConfig + +#### Initializer + +```typescript +import { TerraformVariableConfig } from 'cdktf' + +const terraformVariableConfig: TerraformVariableConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| default | any | _No description._ | +| description | string | _No description._ | +| nullable | boolean | _No description._ | +| sensitive | boolean | _No description._ | +| type | string | The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. | +| validation | TerraformVariableValidationConfig[] | Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. | + +--- + +##### `default`Optional + +```typescript +public readonly default: any; +``` + +- _Type:_ any + +--- + +##### `description`Optional + +```typescript +public readonly description: string; +``` + +- _Type:_ string + +--- + +##### `nullable`Optional + +```typescript +public readonly nullable: boolean; +``` + +- _Type:_ boolean + +--- + +##### `sensitive`Optional + +```typescript +public readonly sensitive: boolean; +``` + +- _Type:_ boolean + +--- + +##### `type`Optional + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +The type argument in a variable block allows you to restrict the type of value that will be accepted as the value for a variable. + +If no type constraint is set then a value of any type is accepted. + +While type constraints are optional, we recommend specifying them; they serve as easy reminders for users of the module, and allow Terraform to return a helpful error message if the wrong type is used. + +Type constraints are created from a mixture of type keywords and type constructors. The supported type keywords are: + +- string +- number +- bool + +The type constructors allow you to specify complex types such as collections: + +- list(\< TYPE\ >) +- set(\< TYPE\ >) +- map(\< TYPE\ >) +- object({\< ATTR NAME\ > = \< TYPE\ >, ... }) +- tuple([\< TYPE\ >, ...]) + +The keyword any may be used to indicate that any type is acceptable. For more information on the meaning and behavior of these different types, as well as detailed information about automatic conversion of complex types, refer to {@link https://developer.hashicorp.com/terraform/language/expressions/type-constraints Type Constraints}. + +If both the type and default arguments are specified, the given default value must be convertible to the specified type. + +--- + +##### `validation`Optional + +```typescript +public readonly validation: TerraformVariableValidationConfig[]; +``` + +- _Type:_ TerraformVariableValidationConfig[] + +Specify arbitrary custom validation rules for a particular variable using a validation block nested within the corresponding variable block. + +--- + +### TerraformVariableValidationConfig + +Add one or more validation blocks within the variable block to specify custom conditions. + +#### Initializer + +```typescript +import { TerraformVariableValidationConfig } from 'cdktf' + +const terraformVariableValidationConfig: TerraformVariableValidationConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------------------ | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| condition | any | This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. | +| errorMessage | string | This contains the text that Terraform will include as part of error messages when it detects an unmet condition. | + +--- + +##### `condition`Required + +```typescript +public readonly condition: any; +``` + +- _Type:_ any + +This is a boolean expression that should return true if the intended assumption or guarantee is fulfilled or false if it does not. + +--- + +##### `errorMessage`Required + +```typescript +public readonly errorMessage: string; +``` + +- _Type:_ string + +This contains the text that Terraform will include as part of error messages when it detects an unmet condition. + +--- + +### TestingAppConfig + +#### Initializer + +```typescript +import { TestingAppConfig } from 'cdktf' + +const testingAppConfig: TestingAppConfig = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ----------------------------------------------------------------------------------------------- | ----------------------------------- | ----------------- | +| context | {[ key: string ]: any} | _No description._ | +| enableFutureFlags | boolean | _No description._ | +| fakeCdktfJsonPath | boolean | _No description._ | +| outdir | string | _No description._ | +| stackTraces | boolean | _No description._ | +| stubVersion | boolean | _No description._ | + +--- + +##### `context`Optional + +```typescript +public readonly context: {[ key: string ]: any}; +``` + +- _Type:_ {[ key: string ]: any} + +--- + +##### `enableFutureFlags`Optional + +```typescript +public readonly enableFutureFlags: boolean; +``` + +- _Type:_ boolean + +--- + +##### `fakeCdktfJsonPath`Optional + +```typescript +public readonly fakeCdktfJsonPath: boolean; +``` + +- _Type:_ boolean + +--- + +##### `outdir`Optional + +```typescript +public readonly outdir: string; +``` + +- _Type:_ string + +--- + +##### `stackTraces`Optional + +```typescript +public readonly stackTraces: boolean; +``` + +- _Type:_ boolean + +--- + +##### `stubVersion`Optional + +```typescript +public readonly stubVersion: boolean; +``` + +- _Type:_ boolean + +--- + +### WinrmProvisionerConnection + +Most provisioners require access to the remote resource via SSH or WinRM and expect a nested connection block with details about how to connect. + +See {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection connection} + +#### Initializer + +```typescript +import { WinrmProvisionerConnection } from 'cdktf' + +const winrmProvisionerConnection: WinrmProvisionerConnection = { ... } +``` + +#### Properties + +| **Name** | **Type** | **Description** | +| ------------------------------------------------------------------------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| host | string | The address of the resource to connect to. | +| type | string | The connection type. | +| cacert | string | The CA certificate to validate against. | +| https | boolean | Set to true to connect using HTTPS instead of HTTP. | +| insecure | boolean | Set to true to skip validating the HTTPS certificate chain. | +| password | string | The password to use for the connection. | +| port | number | The port to connect to. | +| scriptPath | string | The path used to copy scripts meant for remote execution. | +| timeout | string | The timeout to wait for the connection to become available. | +| useNtlm | boolean | Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. | +| user | string | The user to use for the connection. | + +--- + +##### `host`Required + +```typescript +public readonly host: string; +``` + +- _Type:_ string + +The address of the resource to connect to. + +--- + +##### `type`Required + +```typescript +public readonly type: string; +``` + +- _Type:_ string + +The connection type. + +Valid values are "ssh" and "winrm". +Provisioners typically assume that the remote system runs Microsoft Windows when using WinRM. +Behaviors based on the SSH target_platform will force Windows-specific behavior for WinRM, unless otherwise specified. + +--- + +##### `cacert`Optional + +```typescript +public readonly cacert: string; +``` + +- _Type:_ string + +The CA certificate to validate against. + +--- + +##### `https`Optional + +```typescript +public readonly https: boolean; +``` + +- _Type:_ boolean + +Set to true to connect using HTTPS instead of HTTP. + +--- + +##### `insecure`Optional + +```typescript +public readonly insecure: boolean; +``` + +- _Type:_ boolean + +Set to true to skip validating the HTTPS certificate chain. + +--- + +##### `password`Optional + +```typescript +public readonly password: string; +``` + +- _Type:_ string + +The password to use for the connection. + +--- + +##### `port`Optional + +```typescript +public readonly port: number; +``` + +- _Type:_ number +- _Default:_ 22 + +The port to connect to. + +--- + +##### `scriptPath`Optional + +```typescript +public readonly scriptPath: string; +``` + +- _Type:_ string + +The path used to copy scripts meant for remote execution. + +Refer to {@link https://developer.hashicorp.com/terraform/language/resources/provisioners/connection#how-provisioners-execute-remote-scripts How Provisioners Execute Remote Scripts below for more details} + +--- + +##### `timeout`Optional + +```typescript +public readonly timeout: string; +``` + +- _Type:_ string +- _Default:_ 5m + +The timeout to wait for the connection to become available. + +Should be provided as a string (e.g., "30s" or "5m".) + +--- + +##### `useNtlm`Optional + +```typescript +public readonly useNtlm: boolean; +``` + +- _Type:_ boolean + +Set to true to use NTLM authentication rather than default (basic authentication), removing the requirement for basic authentication to be enabled within the target guest. + +Refer to Authentication for Remote Connections in the Windows App Development documentation for more details. + +--- + +##### `user`Optional + +```typescript +public readonly user: string; +``` + +- _Type:_ string +- _Default:_ root + +The user to use for the connection. + +--- diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/cli-configuration.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/cli-configuration.mdx new file mode 100644 index 0000000000..76c13d2639 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/cli-configuration.mdx @@ -0,0 +1,110 @@ +--- +page_title: CLI Configuration - CDK for Terraform +description: Install and configure the CDKTF Command Line Interface. +--- + +# CLI Configuration + +The CDK for Terraform (CDKTF) CLI allows you to initialize a new CDKTF project, adjust project settings, synthesize your infrastructure into Terraform configuration files, deploy your CDKTF application, and more. You can also use some Terraform CLI commands like `terraform apply` and `terraform destroy` directly, but we recommend using the available [`cdktf cli` commands](/terraform/cdktf/cli-reference/commands) where possible. + +## Install + +```bash +$ npm install -g cdktf-cli +``` + +## Use + +```bash +$ cdktf --help +``` + +Help output: + +``` +Commands: + cdktf init [OPTIONS] Create a new cdktf project from a template. + cdktf get [OPTIONS] Generate CDK Constructs for Terraform providers and modules. + cdktf convert [OPTIONS] Converts a single file of HCL configuration to CDK for Terraform. Takes the file to be converted on stdin. + cdktf deploy [OPTIONS] Deploy the given stacks [aliases: apply] + cdktf destroy [OPTIONS] Destroy the given stacks + cdktf diff [stack] [OPTIONS] Perform a diff (terraform plan) for the given stack [aliases: plan] + cdktf list [OPTIONS] List stacks in app. + cdktf login Retrieves an API token to connect to Terraform Cloud. + cdktf synth [stack] [OPTIONS] Synthesizes Terraform code for the given app in a directory. [aliases: synthesize] + cdktf watch [stack] [OPTIONS] [experimental] Watch for file changes and automatically trigger a deploy + cdktf output [stack] [OPTIONS] Prints the output of a stack + cdktf debug Get debug information about the current project and environment + cdktf provider A set of subcommands that facilitates provider management [aliases: outputs] + cdktf completion generate completion script + +Options: + --version Show version number [boolean] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + -h, --help Show help [boolean] + +Options can be specified via environment variables with the "CDKTF_" prefix (e.g. "CDKTF_OUTPUT") +``` + +### CI Environment + +If you are running the CLI in an automated environment, you can force the dynamic CLI output rendering to be static by setting the `CI` environment variable to `true`. + +## Configuration File + +You can configure the behavior of the Terraform CDK CLI by modifying the `cdktf.json` file in your project root directory. Refer to the [cdktf.json documentation](/terraform/cdktf/create-and-deploy/configuration-file) for more detail on how you can supply custom configuration settings for your application. + +## Telemetry + +The CDKTF CLI ([cdktf-cli](https://github.com/hashicorp/terraform-cdk/tree/main/packages/cdktf-cli) interacts with a HashiCorp service called [Checkpoint](https://checkpoint.hashicorp.com) +to report project metrics such as cdktf version, project language, provider name, platform name, and other details that help guide the project maintainers with feature and roadmap decisions. The [code that interacts with Checkpoint](https://github.com/hashicorp/terraform-cdk/blob/main/packages/%40cdktf/commons/src/checkpoint.ts) is part of the CDK for Terraform CLI. + +The use of Checkpoint is completely optional. Refer to the [telemetry documentation](/terraform/cdktf/telemetry) for more information about Checkpoint and you can disable it if desired. + +## `node-gyp` errors + +CDKTF CLI invokes the Terraform CLI interactively in a pseudo-terminal (PTY) for the deploy and destroy commands. This requires native code that needs to be compiled for the architecture of the system the CDKTF CLI is installed on. To make things easier, we maintain [a fork](https://github.com/cdktf/node-pty-prebuilt-multiarch) that includes pre-compiled native bindings for multiple target architectures and Node.js versions. However, there is still the rare possibility, that no precompiled binary is available. In such a case `node-gyp` will attempt to compile the native libraries upon installation of the `cdktf-cli` package and will require additional software to compile the native code that might not be installed yet. + +For example, you might encounter the following error when installing the CDKTF CLI: + +``` +npm ERR! Prebuild binary missing for platform. +npm ERR! prebuild-install WARN install No prebuilt binaries found (target=19.4.0 runtime=node arch=x64 libc= platform=win32) +... +npm ERR! gyp ERR! find VS msvs_version not set from command line or npm config +npm ERR! gyp ERR! find VS VCINSTALLDIR not set, not running in VS Command Prompt +npm ERR! gyp ERR! find VS could not use PowerShell to find Visual Studio 2017 or newer, try re-running with '--loglevel silly' for more details +npm ERR! gyp ERR! find VS not looking for VS2015 as it is only supported up to Node.js 18 +npm ERR! gyp ERR! find VS not looking for VS2013 as it is only supported up to Node.js 8 +npm ERR! gyp ERR! find VS +npm ERR! gyp ERR! find VS ************************************************************** +npm ERR! gyp ERR! find VS You need to install the latest version of Visual Studio +npm ERR! gyp ERR! find VS including the "Desktop development with C++" workload. +npm ERR! gyp ERR! find VS For more information consult the documentation at: +npm ERR! gyp ERR! find VS https://github.com/nodejs/node-gyp#on-windows +npm ERR! gyp ERR! find VS ************************************************************** +npm ERR! gyp ERR! find VS +npm ERR! gyp ERR! configure error +npm ERR! gyp ERR! stack Error: Could not find any Visual Studio installation to use +npm ERR! gyp ERR! stack at VisualStudioFinder.fail (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:122:47) +npm ERR! gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:75:16 +npm ERR! gyp ERR! stack at VisualStudioFinder.findVisualStudio2013 (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:369:14) +npm ERR! gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:71:14 +npm ERR! gyp ERR! stack at VisualStudioFinder.findVisualStudio2015 (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:353:14) +npm ERR! gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:67:12 +npm ERR! gyp ERR! stack at failPowershell (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:156:7) +npm ERR! gyp ERR! stack at VisualStudioFinder.parseData (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:170:14) +npm ERR! gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:143:14 +npm ERR! gyp ERR! stack at ChildProcess.exithandler (node:child_process:411:7) +npm ERR! gyp ERR! System Windows_NT 10.0.20348 +npm ERR! gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild" +npm ERR! gyp ERR! cwd C:\Users\Administrator\node_modules\node-pty-prebuilt-multiarch +npm ERR! gyp ERR! node -v v19.4.0 +npm ERR! gyp ERR! node-gyp -v v9.3.0 +npm ERR! gyp ERR! not ok +``` + +If you encounter this or a similar error message, install the additional tools, as described in the `node-gyp` documentation for [UNIX](https://github.com/nodejs/node-gyp#on-unix), [Mac OS X](https://github.com/nodejs/node-gyp#on-macos), and [Windows](https://github.com/nodejs/node-gyp#on-windows). + +You might also encounter this message if you're using a Node.js version for which we don't pre-compile native code. We currently support Node.js versions 17, 18, 19, and 20. If you're using a different Node.js version you can either install the required additional software as described above or switch your Node.js versions to a supported one. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx new file mode 100644 index 0000000000..7f4e4426b5 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx @@ -0,0 +1,896 @@ +--- +page_title: CLI Commands - CDK for Terraform +description: >- + Use the CLI to initialize a new project, deploy your CDKTF app, generate + Terraform configuration files, and more. +--- + +# CLI Commands + +The CDK for Terraform CLI has the following commands: + +- [completion](/terraform/cdktf/cli-reference/commands#completion) +- [convert](/terraform/cdktf/cli-reference/commands#convert) +- [debug](/terraform/cdktf/cli-reference/commands#debug) +- [deploy](/terraform/cdktf/cli-reference/commands#deploy) +- [destroy](/terraform/cdktf/cli-reference/commands#destroy) +- [diff](/terraform/cdktf/cli-reference/commands#diff) +- [get](/terraform/cdktf/cli-reference/commands#get) +- [init](/terraform/cdktf/cli-reference/commands#init) +- [login](/terraform/cdktf/cli-reference/commands#login) +- [output](/terraform/cdktf/cli-reference/commands#output) +- [provider add](/terraform/cdktf/cli-reference/commands#provider-add) +- [provider upgrade](/terraform/cdktf/cli-reference/commands#provider-upgrade) +- [provider list](/terraform/cdktf/cli-reference/commands#provider-list) +- [synth](/terraform/cdktf/cli-reference/commands#synth) +- [watch](/terraform/cdktf/cli-reference/commands#watch) + +## completion + +This command outputs a script that you can use to set up autocompletion for bash or zsh. + +``` +> cdktf completion + +#compdef cdktf +###-begin-cdktf-completions-### +# +# yargs command completion script +# +# Installation: cdktf completion >> ~/.zshrc +# or cdktf completion >> ~/.zsh_profile on OSX. +# +_cdktf_yargs_completions() +{ + local reply + local si=$IFS + IFS=$' +' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" cdktf --get-yargs-completions "${words[@]}")) + IFS=$si + _describe 'values' reply +} +compdef _cdktf_yargs_completions cdktf +###-end-cdktf-completions-### + +``` + +The output also contains the installation instructions. For example, here are the instructions for Mac OSX: + +``` +cdktf completion >> ~/.bash_profile on OSX. +# or if using zsh instead of bash +cdktf completion >> ~/.zshrc +``` + +After you configure auto completion, reload your shell by running `source ~/.zshrc`, `source ~/.bash_profile` or opening a new terminal window. You can now autocomplete `cdktf` commands by pressing the `` key. You may need to enter a space after `cdktf` for autocomplete to take effect. + +``` +> cdktf +completion -- generate completion script +convert -- Converts a single file of HCL configuration to CDK for Terraform. Takes the file to be converted on stdin. +deploy -- Deploy the given stacks +destroy -- Destroy the given stacks +diff -- Perform a diff (terraform plan) for the given stack +get -- Generate CDK Constructs for Terraform providers and modules. +init -- Create a new cdktf project from a template. +list -- List stacks in app. +login -- Retrieves an API token to connect to Terraform Cloud. +synth -- Synthesizes Terraform code for the given app in a directory. +watch -- [experimental] Watch for file changes and automatically trigger a deploy +``` + +## convert + +This command converts Terraform configuration written in HCL to the equivalent configuration in your preferred language. + +->**Note**: The `convert` command has [known limitations](https://cdk.tf/convert-limitations). + +``` +cdktf convert + +Converts a single file of HCL configuration to CDK for Terraform. Takes the file to be converted on stdin. + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + --language [choices: "typescript", "python", "csharp", "java", "go"] [default: "typescript"] + --provider The conversion needs to know which providers are used in addition to the ones in your cdktf.json file. We search for a cdktf.json below + your current working directory. [array] [default: []] + --stack Wrap the generated code within a stack class [boolean] [default: false] + -h, --help Show help [boolean] + +Examples: + cat main.tf | cdktf convert --provider integrations/github Takes the HCL content of main.tf and converts it to CDK for Terraform content and prints + it + cat main.tf | cdktf convert --provider hashicorp/aws > imported.ts Takes the HCL content of main.tf and converts it to CDK for Terraform content in + imported.ts + cat main.tf | cdktf convert --provider 'hashicorp/aws@ ~>3.62.0' 'integrations/github@ Takes the HCL content of main.tf and converts it to CDK for Terraform content in + ~>4.16.0' --language python > imported.py imported.py +``` + +**Examples** + +Convert a local file. + +```bash +cat main.tf | cdktf convert > imported.ts +``` + +Convert a local file and wrap it into a `cdktf.TerraformStack` instead of a `cdktf.Construct`. + +```bash +cat main.tf | cdktf convert --stack > imported.ts +``` + +Convert HCL in your clipboard to Python on OSX. + +```bash +pbpaste | cdktf convert --language python | pbcopy +``` + +## deploy + +This command deploys a given application. + +```bash +$ cdktf deploy --help +``` + +**Help Output** + +``` +cdktf deploy [stacks...] + +Deploy the given stacks + +Positionals: + stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply + but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not + supported by remote / cloud backend [number] [default: -1] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one + variable. [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more + than once to include more than one variables file. [array] [default: []] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] +``` + +~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. + +**Examples** + +Deploy an application. + +```bash +$ cdktf deploy +``` + +Deploy an application with automatic approval of the diff (Terraform plan). + +```bash +$ cdktf deploy --auto-approve my-first-stack my-second-stack my-third-stack +``` + +Deploy multiple stacks in one run. + +```bash +$ cdktf deploy my-first-stack my-second-stack my-third-stack +``` + +Deploy all stacks in one run: + +```bash +$ cdktf deploy '*' +``` + +Deploy all stacks ending with `-production` in one run: + +```bash +$ cdktf deploy '*-production' +``` + +If the stacks have dependencies (through cross stack references or by calling `myStack.addDependency(otherStack)`) deploy will figure out the right order to run. + +For more info on the `--outputs-file` option, refer to the [`output` command](/terraform/cdktf/cli-reference/commands#output). + +## destroy + +This command destroys a given application. + +```bash +$ cdktf destroy --help +``` + +Help output: + +``` +cdktf destroy [stacks..] + +Destroy the given stacks + +Positionals: + stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one + variable. [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more + than once to include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] +``` + +~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. + +**Examples** + +Destroy an application. + +```bash +$ cdktf destroy +``` + +Destroy an application with automatic approval of the diff (Terraform plan). + +```bash +$ cdktf destroy --auto-approve +``` + +Destroy multiple stacks in one run. + +```bash +$ cdktf destroy my-first-stack my-second-stack my-third-stack +``` + +Destroy all stacks in one run: + +```bash +$ cdktf destroy '*' +``` + +Destroy all stacks ending with production in one run: + +```bash +$ cdktf destroy '*-production' +``` + +If the stacks have dependencies (through cross stack references or by calling `myStack.addDependency(otherStack)`) deploy will figure out the right order to run. + +## diff + +This command generates a diff for a given application by running Terraform plan. + +```bash +$ cdktf diff --help +``` + +Help output: + +``` +cdktf diff [stack] + +Perform a diff (terraform plan) for the given stack + +Positionals: + stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply + but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. + [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more + than once to include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] +``` + +~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/plan#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. + +Examples: + +Generate a diff for a given application. + +```bash +$ cdktf diff +``` + +## get + +This command downloads the providers and modules for an application and +generates CDK constructs for them. It can use the `cdktf.json` configuration file to read the list of providers and modules. +This command only generates currently missing provider bindings, so it is very fast if nothing changed. +The command does not update the version when you specify loose version constraints in your `cdktf.json` file and have already generated an existing version locally. To update the version anyway, run `cdktf get --force` to recreate all bindings. + +When you change a version constraint, the `cdktf get` command recreates the bindings for that provider. + +```bash +$ cdktf get --help +``` + +**Help Output** + +``` +cdktf get + +Generate CDK Constructs for Terraform providers and modules. + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -o, --output Output directory for generated Constructs [string] [default: ".gen"] + -l, --language Output programming language [string] [required] [choices: "typescript", "python", "java", "csharp", "go"] [default: "typescript"] + --force Regenerates all generated constructs [boolean] [default: false] + --parallelism Number of concurrently generated provider / module bindings. Only applies for languages that are not Typescript (translated by JSII). + Defaults to infinity, denoted by -1 [number] [default: -1] + --show-performance-info Shows performance information after generation [boolean] + -h, --help Show help [boolean] +``` + +**Examples** + +Download the providers and modules defined in the `cdktf.json` configuration file. + +```bash +$ cat cdktf.json +{ + "language": "typescript", + "app": "node main.js", + "terraformProviders": ["aws@~> 2.0"] +} +``` + +```bash +$ cdktf get +``` + +If you run into issues generating a lot of bindings you can use the `--parallelism` option to limit the number of bindings generated in parallel. + +```bash +$ cdktf get --parallelism 1 +``` + +## init + +This command creates a new CDK for Terraform project using a template. + +```sh +$ cdktf init --help +``` + +**Help Output** + +``` +cdktf init + +Create a new cdktf project from a template. + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + --template The template to be used to create a new project. Either URL to zip file or one of the built-in templates. [string] + --project-name The name of the project. [string] + --project-description The description of the project. [string] + --dist Install dependencies from a "dist" directory (for development) [string] + --local Use local state storage for generated Terraform. [boolean] [default: false] + --cdktf-version The cdktf version to use while creating a new project. [string] [default: "0.0.0"] + --from-terraform-project Use a terraform project as the basis, CDK constructs will be generated based on the .tf files in the path [string] + --enable-crash-reporting Enable crash reporting for the CLI, refer to https://cdk.tf/crash-reporting for more details [boolean] + --providers Providers to add to your project [array] [default: []] + --providers-force-local Force local installation of provider specified in init [boolean] + --tfe-hostname The hostname of the Terraform Enterprise instance to use for remote state storage [string] + -h, --help Show help [boolean] +``` + +**Examples** + +Create a new Typescript project. + +```bash +$ cdktf init --template="typescript" +``` + +Create a new Python project and use a specific version of the `cdktf` package. + +```bash +$ cdktf init --template="python" --cdktf-version="0.0.1" +``` + +Create a new Typescript project from an existing Terraform codebase. Currently, you can only use the `--from-terraform-project` flag with TypeScript, and there are some known limitations. + +```bash +$ cdktf init --template="typescript" --from-terraform-project /path/to/terraform/project +``` + +## login + +This command helps log in to HCP Terraform by fetching a HCP Terraform API token. + +```bash +$ cdktf login --help +``` + +**Help Output** + +``` +cdktf login + +Retrieves an API token to connect to Terraform Cloud or Terraform Enterprise. + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + --tfe-hostname The Terraform Enterprise hostname to authenticate against. If you use Terraform Cloud you can leave this on the default. + [string] [default: "app.terraform.io"] + -h, --help Show help [boolean] + +Examples: + cdktf login Takes you through the interactive login process + cdktf login --tfe-hostname tfe.my-company.com Takes you through the interactive login process on your companies Terraform Enterprise instance. + cat my-token.txt | cdktf login Uses a locally stored token directly, instead of going through the interactive login process +``` + +Please note that we currently expect custom TFE instances to be using the `https` protocol. + +**Examples** + +Fetch an API token from HCP Terraform. + +```bash +$ cdktf login +``` + +## synth + +This command synthesizes Terraform configuration for an application. CDKTF stores the synthesized configuration in the `cdktf.out` directory, unless you use the `--output` flag to specify a different location. The output folder is ephemeral and might be erased for each `synth` that you run manually or that happens automatically when you run `deploy`, `diff`, or `destroy`. + +```sh +$ cdktf synth --help +``` + +**Help Output** + +``` +cdktf synth + +Synthesizes Terraform code for the given app in a directory. + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [default: "cdktf.out"] + --check-code-maker-output Should `codeMakerOutput` existence check be performed? By default it will be checked if providers or modules are configured. + [boolean] [default: false] + --hcl Should the output be in HCL format? [boolean] [default: false] + -h, --help Show help [boolean] +``` + +**Examples** + +Synthesize code for an application. + +```bash +$ cdktf synth +``` + +Synthesize code when providing a custom command to execute and an output directory. + +```bash +$ cdktf synth --app="npm compile && node main.js" --output="dirname" +``` + +Synthesize code in Terraform HCL instead of JSON + +```bash +$ cdktf synth --hcl +``` + +## watch + +~> **Warning:** The `watch` command is experimental, so you should only use it in development environments. It also automatically deploys all changes without asking for confirmation. + +When the `watch` command is first run it creates a `watchPattern` in your `cdktf.json` based on the language you configured. It's a list of glob patterns matching all files that should be watched. + +Whenever a file matching the watch pattern is changed, the command will run `cdktf deploy --auto-approve` for you. It allows for rapid iterations when developing infrastructure, especially when working with serverless services. You can specify the stacks you want to deploy or you can use `cdktf watch --auto-approve '*'` to deploy all stacks. + +### Requirements + +Before using `watch` you should check your environment. The `watch` command should only be used for development environments. We recommend making sure that the terminal where you want to run `watch` has no access keys that allow the `cdktf-cli` to deploy to your production environment. + +### Run watch + +```sh +$ cdktf watch --help +``` + +**Help Output** + +``` +cdktf watch [stacks..] + +[experimental] Watch for file changes and automatically trigger a deploy + +Positionals: + stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not + supported by remote / cloud backend [number] [default: -1] + -h, --help Show help [boolean] +``` + +~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. + +**Examples** + +Run `watch` on the development stack (dev). The `--auto-approve` flag skips the explicit plan approval step and is currently always required. + +``` +cdktf watch dev --auto-approve +``` + +Besides for the required `--auto-approve` flag, you can use the same configuration options as in `cdktf deploy`. + +### Troubleshoot watch + +Set the `CDKTF_LOG_LEVEL` environment variable to `all` and set `CDKTF_LOG_FILE_DIRECTORY` to your projects root directory. + +The debug output is directed to a `cdktf.log` file in your projects root directory. The log contains information about detected file system changes and the actions they triggered. + +The debug output is directed to a `cdktf.log` file in your projects root directory. The log contains information about detected file system changes and the actions they triggered. + +## output + +This command gets the outputs defined in the Terraform configuration of the given stack. It uses `terraform output` under the hood. + +```sh +$ cdktf output --help +``` + +**Help Output** + +``` +cdktf output [stacks..] + +Prints the output of stacks + +Positionals: + stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] +➜ +``` + +### `--outputs-file` + +The `--outputs-file` option allows you to specify a file where the stack outputs will be written as JSON. +The JSONs structure is matching your construct structure, the name of each construct is used as a key. + +```jsonc +{ + "MyStack": { + "MyConstructInstance": { + "MyOutput": "my-value", + "MySecretOutput": "my-secret-value", // not present if --outputs-file-include-sensitive-outputs is not set + }, + }, +} +``` + +Please be aware that sensitive outputs are only written to the file if the `--outputs-file-include-sensitive-outputs` option is used. + +## debug + +This command prints debug information about the current project and environment to help troubleshoot issues. + +**Help Output** + +```sh +$ cdktf debug --help + +cdktf debug + +Get debug information about the current project and environment + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + --json If set, output will be in JSON format. [boolean] [default: false] + -h, --help Show help [boolean] +``` + +The debug information depends on the programming language. The following example is from a Java application, where CDKTF collects information about Java, Gradle, and Maven. CDKTF detects the installed `constructs` version through Gradle. + +``` +$ cdktf debug +cdktf debug +language: java +cdktf-cli: 0.20.1 +node: v18.12.0 +cdktf: 0.20.1 +constructs: 10.1.167 +jsii: null +terraform: 1.4.0 +arch: x64 +os: darwin 22.6.0 +java: +maven: Apache Maven 3.9.3 (21122926829f1ead511c958d89bd2f672198ae9f)Maven home: /usr/local/Cellar/maven/3.9.3/libexecJava version: 20.0.1, vendor: Homebrew, runtime: /usr/local/Cellar/openjdk/20.0.1/libexec/openjdk.jdk/Contents/HomeDefault locale: en_DE, platform encoding: UTF-8OS name: "mac os x", version: "13.5.2", arch: "x86_64", family: "mac" +gradle: ------------------------------------------------------------Gradle 8.2.1------------------------------------------------------------Build time: 2023-07-10 12:12:35 UTCRevision: a38ec64d3c4612da9083cc506a1ccb212afeecaaKotlin: 1.8.20Groovy: 3.0.17Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023JVM: 20.0.1 (Homebrew 20.0.1)OS: Mac OS X 13.5.2 x86_64 +providers +kreuzwerker/docker@~>2.0 (LOCAL) + terraform provider version: 2.25.0 +com.hashicorp.cdktf-provider-ad (PREBUILT) + terraform provider version: 0.4.4 + prebuilt provider version: 8.0.0 + cdktf version: ^0.20.0 +``` + +## provider add + +This command facilitates adding Terraform providers to a CDKTF project. If a [pre-built provider](/terraform/cdktf/concepts/providers#install-pre-built-providers) is available for the CDKTF version you are using and the Terraform provider version you requested (if any), it will be installed using e.g. `npm install` or `dotnet add` depending on the language you are using. Otherwise, the provider will be added to the `cdktf.json` config and `cdktf get` will be automatically invoked to generate [local provider bindings](/terraform/cdktf/concepts/providers#add-provider-to-cdktf-json). + +```sh +$ cdktf provider add --help +``` + +**Help Output** + +``` +cdktf provider add + +Add one or more Terraform providers to your project. + +Positionals: + provider Name of the provider to add. Can include a version constraint (e.g. aws@~>4.0). [array] [required] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + --force-local force local provider installation, even if pre-built provider exists [boolean] + -h, --help Show help [boolean] +``` + +**Examples** + +Add the `aws` provider to the project. As the namespace of the AWS Terraform provider is `hashicorp` it can be left out. + +```bash +$ cdktf provider add aws +``` + +Add a specific version of the `aws` provider to the project. You can use the `@` symbol to specify a [version constraint](/terraform/language/providers/requirements#version-constraints). + +```bash +$ cdktf provider add aws@~>4.0 +``` + +Add multiple providers to the project and force local generation of provider bindings. + +```bash +$ cdktf provider add kreuzwerker/docker google --force-local +``` + +Add a provider from a private registry to the project. + +```bash +$ cdktf provider add registry.example.com/acme/my-provider +``` + +## provider upgrade + +This command lets you upgrade Terraform providers in a CDKTF project to the newest version compatible with your `cdktf` version. You can also optionally add a version constraint. + +If your project has the associated [pre-built provider](/terraform/cdktf/concepts/providers#install-pre-built-providers) already installed, CDKTF updates the pre-built provider. Otherwise, CDKTF adds the provider to the `cdktf.json` configuration file and invokes `cdktf get` to generate [local provider bindings](/terraform/cdktf/concepts/providers#add-provider-to-cdktf-json). + +```sh +$ cdktf provider upgrade --help +cdktf provider upgrade + +Upgrade one or more Terraform providers in your project to the newest version compatible with your CDKTF version. +If your project has the associated pre-built provider already installed, CDKTF updates the pre-built provider. Otherwise, CDKTF adds the specified provider to the cdktf.json +configuration file and generates local provider bindings. + +Positionals: + provider Name of the provider to upgrade. Can include a version constraint (e.g. aws@~>4.0). [array] [required] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -h, --help Show help [boolean] +``` + +## provider list + +This command prints out a table (or json with the `--json` option) containing details about the providers installed for the project. It gathers information for both locally built and pre-built providers. + +Information printed varies between locally generated and prebuilt providers. The information for each provider includes the Terraform provider version, the CDKTF version, and the package name and version (if pre-built provider). + +```sh +$ cdktf provider list --help +cdktf provider list [flags] + +List installed providers + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + --json get providers list as json [boolean] [default: false] + -h, --help Show help [boolean] +``` + +**Help Output** + +``` +cdktf provider upgrade + +Upgrade one or more Terraform providers in your project to the newest version compatible with your CDKTF version. +If your project has the associated pre-built provider already installed, CDKTF updates the pre-built provider. Otherwise, CDKTF adds the specified provider to the cdktf.json +configuration file and generates local provider bindings. + +Positionals: + provider Name of the provider to upgrade. Can include a version constraint (e.g. aws@~>4.0). [array] [required] [default: []] + +Options: + --version Show version number [boolean] + --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -h, --help Show help [boolean] +``` + +**Examples** + +Upgrade the `aws` provider to the newest version available for your `cdktf` version. + +```bash +$ cdktf provider add aws +``` + +Upgrade the `aws` provider to the newest version available for your `cdktf` version and at version `4` of the provider version. + +```bash +$ cdktf provider add aws@~>4.0 +``` + +Upgrade multiple providers to the latest version available for your `cdktf` version. + +```bash +$ cdktf provider add kreuzwerker/docker google +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/community.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/community.mdx new file mode 100644 index 0000000000..ab1fdeb609 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/community.mdx @@ -0,0 +1,24 @@ +--- +page_title: CDKTF Community - CDK for Terraform +description: >- + Resources to help you contribute to the codebase, submit issues, ask + questions, and see our roadmap. +--- + +# Community + +CDK for Terraform (CDKTF) is under active development, and we would love your feedback and direct contributions to help guide the project. + +## Questions & Issues + +If you have questions, the HashiCorp [Discuss](https://discuss.hashicorp.com/) platform using the [terraform-cdk](https://discuss.hashicorp.com/c/terraform-core/cdk-for-terraform/) category is the best place for general discussion. If you run into issues or have ideas for improvements, please file a [bug](https://github.com/hashicorp/terraform-cdk/issues/new?assignees=&labels=bug&template=bug-report.md&title=) or request a new [feature](https://github.com/hashicorp/terraform-cdk/issues/new?assignees=&labels=enhancement&template=feature-request.md&title=). Please let us know if you'd like to talk - we are very interested in learning how people use CDKTF in practice. + +## Contributing + +The CDKTF project is very open to community contributions. The easiest ways to help are by filing bugs for issues, commenting on existing issues you encounter, and commenting on or upvoting feature requests when you have use cases where they would be helpful. Hearing _why_ you are interested is extremely useful, and we appreciate your feedback. + +If you are interested in contributing code, please look at the [CONTRIBUTING.md](https://github.com/hashicorp/terraform-cdk/blob/main/CONTRIBUTING.md) guide. Before you file a large pull request, please file a feature request to tell us what you're interested in building. We're happy to work with you on the design to make sure we can review and accept your PR quickly. + +## Roadmap + +We release CDKTF on a monthly cadence. The [GitHub milestones](https://github.com/hashicorp/terraform-cdk/milestones) for the project show what is planned for the next release and tentatively planned for subsequent releases. Issues labeled `committed` will land in the planned release, and all others are implicitly stretch goals that may shift to a future release as needed. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/aspects.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/aspects.mdx new file mode 100644 index 0000000000..5f93249497 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/aspects.mdx @@ -0,0 +1,513 @@ +--- +page_title: Aspects - CDK for Terraform +description: >- + Aspects apply an operation to all constructs in a given scope. You can use + them for mutation (e.g., add resource tags) and validation (e.g., check + encryption). +--- + +# Aspects + +Aspects allow you to apply an operation to all constructs within a given scope. You may want to use them in your CDK for Terraform (CDKTF) application to mutate elements (e.g., add tags to cloud resources) or for validation (e.g., ensure all S3 Buckets are encrypted). + +## Define Aspects + +To create an aspect, you must import the `Aspects` class and the `IAspect` interface and implement one or more methods for `IAspect`. Then, you can call the aspect one or more times on any construct within your application. + +Everything within a CDKTF application descends from the `Construct` class, so you could call the construct on any instantiated element. This includes the entire application, a particular [stack](/terraform/cdktf/concepts/stacks), or all of the resources for a specific [provider](/terraform/cdktf/concepts/providers). When you call the aspect, CDKTF applies its methods to all of the the constructs that fall within the specified scope. + +The following example defines an aspect to add tags to resources. + + + + + + + + + +```ts +import { Construct, IConstruct } from "constructs"; +import { Aspects, IAspect, TerraformStack } from "cdktf"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { S3Bucket } from "./.gen/providers/aws/s3-bucket"; + +// Not all constructs are taggable, so we need to filter it +type TaggableConstruct = IConstruct & { + tags?: { [key: string]: string }; + tagsInput?: { [key: string]: string }; +}; + +function isTaggableConstruct(x: IConstruct): x is TaggableConstruct { + return "tags" in x && "tagsInput" in x; +} + +export class TagsAddingAspect implements IAspect { + constructor(private tagsToAdd: Record) {} + + // This method is called on every Construct within the specified scope (resources, data sources, etc.). + visit(node: IConstruct) { + if (isTaggableConstruct(node)) { + // We need to take the input value to not create a circular reference + const currentTags = node.tagsInput || {}; + node.tags = { ...this.tagsToAdd, ...currentTags }; + } + } +} + +export class AspectTaggingStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + new S3Bucket(this, "bucket", { + bucket: "demo", + tags: { + owner: "cdktf", + }, + }); + + // Add tags to every resource defined within this stack. + Aspects.of(this).add(new TagsAddingAspect({ createdBy: "cdktf" })); + } +} +``` + +```java + public class TagsAddingAspect implements IAspect { + private final Map tags; + + public TagsAddingAspect(Map tags) { + this.tags = tags; + } + + public Method getInputTags(IConstruct node) { + Method getTagsInput; + try { + getTagsInput = node.getClass().getDeclaredMethod("getTagsInput"); + } catch (NoSuchMethodException e) { + // Not all constructs are taggable, so we need to filter it + throw new RuntimeException("Resource " + node.getClass() + " is un-taggable"); + } + getTagsInput.setAccessible(true); + return getTagsInput; + } + + public Method getTagsSet(IConstruct node) { + Method setTags; + try { + setTags = node.getClass().getDeclaredMethod("setTags", Map.class); + } catch (NoSuchMethodException e) { + // Not all constructs are taggable, so we need to filter it + throw new RuntimeException("Resource " + node.getClass() + " is un-taggable"); + } + setTags.setAccessible(true); + return setTags; + } + + // This method is called on every Construct within the defined scope (resource, + // data sources, etc.). + public void visit(IConstruct node) { + Method getTagsInput = getInputTags(node); + Method setTags = getTagsSet(node); + Map currentTags; + try { + // We need to take the input value to not create a circular reference + currentTags = (Map) getTagsInput.invoke(node); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + try { + HashMap newTags = new HashMap<>(); + newTags.putAll(this.tags); + if (currentTags != null) { + newTags.putAll(currentTags); + } + setTags.invoke(node, newTags); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + } + } + + // Add tags to every resource defined within `myStack`. + Aspects.of(bucket).add(new TagsAddingAspect(new HashMap() { + { + put("createdBy", "cdktf"); + } + })); +``` + +```python +import jsii +from constructs import Construct, IConstruct +from cdktf import TerraformStack, Aspects, IAspect +from imports.aws.instance import Instance +from imports.aws.provider import AwsProvider + +@jsii.implements(IAspect) +class TagsAddingAspect: + def __init__(self, tagsToAdd): + self.tagsToAdd = tagsToAdd + + # This method is called on every Construct within the specified scope (resources, data sources, etc.). + def visit(self, node: IConstruct): + # Not all constructs are taggable, so we need to check + if(hasattr(node, "tags") and hasattr(node, "tags_input")): + # We need to take the input value to not create a circular reference + currentTags = node.tags_input if node.tags_input is not None else {} + node.tags = {**self.tagsToAdd, **currentTags} + +class MySingleStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + AwsProvider(self, "aws", + region = "us-east-1" + ) + Instance(self, "Hello", + ami = "ami-2757f631", + instance_type = "t2.micro" + ) + + # Add tags to every resource defined within `MySingleStack`. + Aspects.of(self).add(TagsAddingAspect({ "createdBy": "cdktf" })) + + # Add tags to every resource defined within `myStack`. + Aspects.of(myStack).add(TagsAddingAspect({ "createdBy": "cdktf" })) +``` + +```csharp +using System.Collections.Generic; +using Constructs; +using HashiCorp.Cdktf; +using aws.S3Bucket; +using aws.Provider; +using Amazon.JSII.Runtime; + +namespace Examples +{ + public class TagsAddingAspect : Amazon.JSII.Runtime.Deputy.DeputyBase, IAspect + { + private readonly IDictionary tagsToAdd; + + public TagsAddingAspect(IDictionary tagsToAdd) + { + this.tagsToAdd = tagsToAdd; + } + + public void Visit(IConstruct node) + { + var nodeType = node.GetType(); + var tagsProperty = nodeType.GetProperty("Tags"); + var tagsInputProperty = nodeType.GetProperty("TagsInput"); + if (tagsProperty != null && tagsInputProperty != null) + { + var inputTags = (IDictionary)tagsInputProperty.GetValue(node); + + IDictionary newTags; + if (inputTags == null) + { + newTags = tagsToAdd; + } + else + { + newTags = new Dictionary(tagsToAdd); + foreach ((string key, string value) in inputTags) + { + newTags[key] = value; + } + } + + tagsProperty.SetValue(node, newTags); + } + } + } + + class MyAspectsStack : TerraformStack + { + public MyAspectsStack(Construct scope, string name) : base(scope, name) + { + new AwsProvider(this, "Aws", new AwsProviderConfig + { + Region = "us-east-1" + }); + S3Bucket bucket = new S3Bucket(this, "bucket", new S3BucketConfig + { + Bucket = "demo" + }); + + Aspects.Of(this).Add(new TagsAddingAspect(new Dictionary { + { "createdBy", "cdktf" } + })); + } + } +} +``` + +```go +package main + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/s3bucket" + "golang.org/x/exp/maps" +) + +type Taggable interface { + TagsInput() *map[string]*string + SetTags(val *map[string]*string) +} + +type TagsAddingAspect struct { + Tags *map[string]*string +} + +func (taa TagsAddingAspect) Visit(node constructs.IConstruct) { + if taggable, ok := node.(Taggable); ok { + existing := *taggable.TagsInput() + tags := *taa.Tags + maps.Copy(existing, tags) // requires Go 1.18 + taggable.SetTags(&existing) + } +} + +func NewTagsAddingAspect(tags *map[string]*string) *TagsAddingAspect { + return &TagsAddingAspect{Tags: tags} +} + +func NewAspectsStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + + s3bucket.NewS3Bucket(stack, jsii.String("bucket"), &s3bucket.S3BucketConfig{ + Bucket: jsii.String("demo"), + Tags: &map[string]*string{ + "owner": jsii.String("cdktf"), + }, + }) + + cdktf.Aspects_Of(stack).Add( + NewTagsAddingAspect(&map[string]*string{"createdBy": jsii.String("cdktf")}), + ) + + return stack +} + +``` + + + +You can also use aspects for validation. The following example defines an aspect that checks whether all S3 Buckets start with the correct prefix. + + + + + + + + + +```ts +import { Annotations, Aspects, IAspect, TerraformStack } from "cdktf"; +import { Construct, IConstruct } from "constructs"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { S3Bucket } from "./.gen/providers/aws/s3-bucket"; + +export class ValidateS3IsPrefixed implements IAspect { + constructor(private prefix: string) {} + + // This method is called on every Construct within the defined scope (resource, data sources, etc.). + visit(node: IConstruct) { + if (node instanceof S3Bucket) { + if (node.bucketInput && !node.bucketInput.startsWith(this.prefix)) { + // You can include `addInfo`, `addWarning`, and `addError`. + // CDKTF prints these messages when the user runs `synth`, `plan`, or `deploy`. + Annotations.of(node).addError( + `Each S3 Bucket name needs to start with ${this.prefix}`, + ); + } + } + } +} + +export class AspectValidationStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + new S3Bucket(this, "bucket", { + bucket: "myPrefixDemo", + }); + + Aspects.of(this).add(new ValidateS3IsPrefixed("myPrefix")); + } +} +``` + +```java + public class ValidateS3IsPrefixed implements IAspect { + + private final String prefix; + + public ValidateS3IsPrefixed(String prefix) { + this.prefix = prefix; + } + + // This method is called on every Construct within the defined scope (resource, + // data sources, etc.). + public void visit(IConstruct node) { + if (node instanceof S3Bucket) { + if (((S3Bucket) node).getBucketInput() != null && !((S3Bucket) node).getBucketInput().startsWith(this.prefix)) { + // You can include `addInfo`, `addWarning`, and `addError`. + // CDKTF prints these messages when the user runs `synth`, `plan`, or `deploy`. + Annotations.of(node).addError( + "Each S3 Bucket name needs to start with " + this.prefix); + } + } + } + } + + // Check the prefix for every resource within `myStack`. + Aspects.of(bucket).add(new ValidateS3IsPrefixed("myPrefix")); +``` + +```python +from constructs import IConstruct +from cdktf import Aspects, IAspect, Annotations +from imports.aws.s3_bucket import S3Bucket + +@jsii.implements(IAspect) +class ValidateS3IsPrefixed: + def __init__(self, prefix: str): + self.prefix = prefix + + # This method is called on every Construct within the defined scope (resource, data sources, etc.). + def visit(self, node: IConstruct): + if isinstance(node, S3Bucket): + if(node.bucket_input and not node.bucket_input.startswith(self.prefix)): + # You can include `addInfo`, `addWarning`, and `addError`. + # CDKTF prints these messages when the user runs `synth`, `plan`, or `deploy`. + Annotations.of(node).add_error( + "Each S3 Bucket name needs to start with {}".format(self.prefix) + ) + + # Check the prefix for every resource within `myStack`. + Aspects.of(myStack).add(ValidateS3IsPrefixed("myPrefix")) +``` + +```csharp +using System.Collections.Generic; +using Constructs; +using HashiCorp.Cdktf; +using aws.S3Bucket; +using aws.Provider; +using Amazon.JSII.Runtime; + +namespace Examples +{ + public class ValidateS3IsPrefixed : Amazon.JSII.Runtime.Deputy.DeputyBase, IAspect + { + private readonly string prefix; + + public ValidateS3IsPrefixed(string prefix) + { + this.prefix = prefix; + } + + public void Visit(IConstruct node) + { + if (node is S3Bucket bucket) + { + if (bucket.BucketInput != null && !bucket.BucketInput.StartsWith(this.prefix)) + { + Annotations.Of(node).AddError($"Each S3 Bucket name needs to start with {this.prefix}"); + } + } + } + } + + class MyAspectsValidationStack : TerraformStack + { + public MyAspectsValidationStack(Construct scope, string name) : base(scope, name) + { + new AwsProvider(this, "Aws", new AwsProviderConfig + { + Region = "us-east-1" + }); + S3Bucket bucket = new S3Bucket(this, "bucket", new S3BucketConfig + { + Bucket = "myPrefixDemo" + }); + + Aspects.Of(this).Add(new ValidateS3IsPrefixed("myPrefix")); + } + } +} +``` + +```go +package main + +import ( + "strings" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/s3bucket" +) + +type S3Bucket interface { + GetBucketInput() *string +} + +type ValidateS3IsPrefixedAspect struct { + Prefix string +} + +func (vpa ValidateS3IsPrefixedAspect) Visit(node constructs.IConstruct) { + if bucket, ok := node.(s3bucket.S3Bucket); ok && strings.HasPrefix(*bucket.BucketInput(), vpa.Prefix) { + cdktf.Annotations_Of(node).AddError(jsii.String("Each S3 Bucket name needs to start with " + vpa.Prefix)) + } +} + +func NewValidateS3IsPrefixedAspect(prefix string) *ValidateS3IsPrefixedAspect { + return &ValidateS3IsPrefixedAspect{Prefix: prefix} +} + +func NewPrefixAspectsStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + + s3bucket.NewS3Bucket(stack, jsii.String("bucket"), &s3bucket.S3BucketConfig{ + Bucket: jsii.String("myPrefixDemo"), + }) + + cdktf.Aspects_Of(stack).Add(NewValidateS3IsPrefixedAspect("myPrefix")) + + return stack +} + +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/assets.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/assets.mdx new file mode 100644 index 0000000000..7499ab9e47 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/assets.mdx @@ -0,0 +1,254 @@ +--- +page_title: Assets - CDK for Terraform +description: >- + Asset constructs manage assets for resources that need them, such as + template_file, S3 bucket objects, or Lambda function archive files. +--- + +# Assets + +In CDK for Terraform (CDKTF) v0.4+, asset constructs can manage assets for resources that need them, such as template_file, S3 bucket objects, or Lambda function archive files. You can use Terraform assets to move existing files or directories into your CDKTF application so that you can use them in resource definitions. + +Assets are especially useful for: + +- Copying over previously generated zip files with Lambda functions. +- Deploying static local files to S3. + +## Usage Example + +> **Hands-on:** Try the [Deploy Multiple Lambda Functions with TypeScript](/terraform/tutorials/cdktf/cdktf-assets-stacks-lambda) tutorial. This tutorial guides you through using a `TerraformAsset` to archive a Lambda function, uploading the archive to an S3 bucket, then deploying the Lambda function. + +The following example uses `TerraformAsset` to upload the contents of the specified directory into an S3 Bucket. The `TerraformAsset` is responsible for making sure the directory ends up in the correct output folder as a zip file that the `S3BucketObject` can reference. + +The stack output directory in `cdktf.out` contains all of the assets that `TerraformAsset` needs. This is important for workflows where you use synthesized configurations with Terraform directly. For example, you would only need to upload the contents of the stack output folder to HCP Terraform or Terraform Enterprise. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack } from "cdktf"; +import { TerraformAsset, AssetType } from "cdktf"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { S3Bucket } from "./.gen/providers/aws/s3-bucket"; +import { S3BucketObject } from "./.gen/providers/aws/s3-bucket-object"; +import * as path from "path"; + +export class AssetsStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const bucket = new S3Bucket(this, "bucket", { + bucket: "demo", + }); + + const asset = new TerraformAsset(this, "lambda-asset", { + path: path.resolve(__dirname, "lambda"), + type: AssetType.ARCHIVE, // if left empty it infers directory and file + }); + + new S3BucketObject(this, "lambda-archive", { + bucket: bucket.bucket, + key: asset.fileName, + source: asset.path, // returns a posix path + }); + } +} +``` + +```python +from constructs import Construct +from cdktf import TerraformAsset, TerraformStack, AssetType +from imports.aws.provider import AwsProvider +from imports.aws.s3_bucket import S3Bucket +from imports.aws.s3_bucket_object import S3BucketObject +import os + + +class MyAssetStack(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + + AwsProvider(self, 'aws', region='eu-central-1') + + bucket = S3Bucket(self, "bucket", bucket="demo") + + asset = TerraformAsset(self, "lambda-asset", + path=os.path.join(os.path.dirname(__file__), 'lambda'), + type=AssetType.ARCHIVE + ) + + S3BucketObject(self, "lambda-archive", + bucket=bucket.bucket, + key=asset.file_name, + source=asset.path + ) + +app = cdktf.App() +MyAssetStack(app, "demo") +app.synth() +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.TerraformAsset; +import com.hashicorp.cdktf.TerraformAssetConfig; +import com.hashicorp.cdktf.AssetType; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; +import imports.aws.s3_bucket.S3Bucket; +import imports.aws.s3_bucket.S3BucketConfig; +import imports.aws.s3_bucket_object.S3BucketObject; +import imports.aws.s3_bucket_object.S3BucketObjectConfig; + +import java.nio.file.Paths; + +public class MyAssetStack extends TerraformStack { + public MyAssetStack(Construct scope, String name){ + super(scope, name); + + new AwsProvider(this,"aws", AwsProviderConfig.builder() + .region("eu-central-1") + .build() + ); + + S3Bucket bucket = new S3Bucket(this, "bucket", S3BucketConfig.builder() + .bucket("demo") + .build() + ); + + TerraformAsset asset = new TerraformAsset(this, "lambda-asset", TerraformAssetConfig.builder() + .path(Paths.get(System.getProperty("user.dir"), "lambda").toString()) + .type(AssetType.ARCHIVE) + .build() + ); + + new S3BucketObject(this, "lambda-archive", S3BucketObjectConfig.builder() + .bucket(bucket.getBucket()) + .key(asset.getFileName()) + .source(asset.getPath()) + .build() + ); + + } + + public static void main(String[] args) { + final App app = new App(); + new MyAssetStack(app, "demo"); + app.synth(); + } +} +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.S3Bucket; +using aws.S3BucketObject; + +namespace Examples +{ + class MyAssetStack : TerraformStack + { + public MyAssetStack(Construct scope, string name) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-central-1" + }); + + S3Bucket bucket = new S3Bucket(this, "bucket", new S3BucketConfig + { + Bucket = "demo" + }); + + TerraformAsset asset = new TerraformAsset(this, "lambda-asset", new TerraformAssetConfig + { + Path = Path.Join(Environment.CurrentDirectory, "lambda"), + Type = AssetType.ARCHIVE + }); + + new S3BucketObject(this, "lambda-archive", new S3BucketObjectConfig + { + Bucket = bucket.Bucket, + Key = asset.FileName, + Source = asset.Path + }); + } + } +} +``` + +```go +package main + +import ( + "os" + "path" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/s3bucket" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/s3bucketobject" +) + +func NewAssetsStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cwd, _ := os.Getwd() + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + + bucket := s3bucket.NewS3Bucket(stack, jsii.String("bucket"), &s3bucket.S3BucketConfig{ + Bucket: jsii.String("demo"), + }) + + asset := cdktf.NewTerraformAsset(stack, jsii.String("lambda-asset"), &cdktf.TerraformAssetConfig{ + Path: jsii.String(path.Join(cwd, "lambda")), + Type: cdktf.AssetType_ARCHIVE, + }) + + s3bucketobject.NewS3BucketObject(stack, jsii.String("lambda-archive"), &s3bucketobject.S3BucketObjectConfig{ + Bucket: bucket.Bucket(), + Key: asset.FileName(), + Source: asset.Path(), + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewAssetsStack(app, "assets") + + app.Synth() +} + +``` + + + +## Paths + +Assets support both absolute and relative paths. Relative paths are always considered to be relative to your project's `cdktf.json` file. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/cdktf-architecture.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/cdktf-architecture.mdx new file mode 100644 index 0000000000..231dcb8cce --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/cdktf-architecture.mdx @@ -0,0 +1,72 @@ +--- +page_title: CDKTF Architecture - CDK for Terraform +description: Key CDK for Terraform components and application structure. +--- + +# Architecture + +This page explains the tools and processes that CDK for Terraform (CDKTF) uses to leverage the Terraform ecosystem and convert code into Terraform configuration files. It also explains the major components of a CDKTF application and how those pieces fit together. + +## CDKTF Building Blocks + +CDKTF leverages existing libraries and tools to help convert the definitions you write in your preferred programming language to Terraform configuration files. It also uses Terraform to provision and manage your infrastructure when you deploy your application. + +### Amazon Web Services Cloud Development Kit + +CDKTF shares core concepts and components with the [Amazon Web Services Cloud Development Kit](https://aws.amazon.com/cdk/) (AWS CDK), a tool that allows you to use familiar programming languages to define infrastructure on AWS CloudFormation. AWS CDK and CDK for Terraform are different products, and you cannot yet use [AWS CDK constructs](https://docs.aws.amazon.com/cdk/latest/guide/constructs.html) within CDKTF. The [interoperability layer](/terraform/cdktf/create-and-deploy/aws-adapter) is a technical preview, and it is not yet ready for use in production. + +### jsii + +The [`jsii` tool](https://aws.github.io/jsii/) enables publishing polyglot libraries in all supported languages from a single Typescript code base. CDKTF uses Typescript types to generate an assembly file that `jsii` uses to generate the code bindings for the other supported languages. + +### Terraform + +CDKTF [synthesizes](/terraform/cdktf/cli-reference/commands#synth) infrastructure that you define in a supported programming language into [JSON configuration files](/terraform/language/syntax/json) that Terraform can use to manage infrastructure. + +The following diagram shows how synthesizing a CDKTF application produces a series of artifacts in a designated output folder. You can then either use the JSON file with Terraform directly or provision your infrastructure using CDKTF CLI commands. All CDKTF CLI operations like `diff`, `deploy`, and `destroy` communicate with Terraform for execution. + +![cdktf-terraform](/img/cdktf-terraform-workflow.png) + +CDKTF also automatically extracts the schemas from existing Terraform [providers](/terraform/cdktf/concepts/providers) or [modules](/terraform/cdktf/concepts/modules) and generates the necessary code bindings for your application. + +![cdktf-terraform](/img/provider-modules.png) + +## CDKTF Components + +CDKTF has two major components that allow you to define and provision infrastructure. + +- **Lib:** This is the `cdktf` package that is the foundation for each CDKTF project. It contains all of the core libraries that allow you to leverage the Terraform ecosystem and synthesize your application into Terraform configuration files. + +- **CLI:** The [`cdktf` CLI](/terraform/cdktf/cli-reference/cli-configuration) allows you to initialize a new CDKTF project, adjust project settings, synthesize your infrastructure into Terraform configuration files, deploy your CDKTF application, and more. Refer to the [CLI commands documentation](/terraform/cdktf/cli-reference/commands) for more details. You can also use some Terraform CLI commands like `terraform apply` and `terraform destroy` directly, but we recommend using the available `cdktf cli` commands where possible. + +## Application Architecture + +CDKTF applications are structured as a tree of [constructs](https://github.com/aws/constructs), which the AWS documentation defines as "classes that define a 'piece of system state'". The foundational classes to build a CDKTF application are `App`, `Stack`, and `Resource`. + +![cdktf-terraform](/img/cdktf-app-architecture.png) + +### `App` Class + +Each CDKTF project has one or more `App` instances that act as a container for the infrastructure configurations you create and deploy. An `App` can have one or more [`Stacks`](/terraform/cdktf/concepts/stacks) that represent a collection of related infrastructure. + +### `Stack` Class + +A `Stack` represents a collection of infrastructure resources that CDKTF synthesizes as a separate Terraform configuration. It is equivalent to a [Terraform working directory](/terraform/cli/init). + +Stacks allow you to separate the state management within an application. For example, you may want to deploy and manage separate infrastructure resources for development and testing. Reference the [stack documentation](/terraform/cdktf/concepts/stacks) for more details on when and how to use stacks in your project. + +### `Resource` Class + +A `Resource` represents the definition for one or more infrastructure objects. Resources and their required attributes vary depending on the provider. Reference the [resources documentation](/terraform/cdktf/concepts/resources) for more details. + +### Constructs + +Rather than defining resources by hand, you can leverage constructs to reuse existing resource configurations written in your programming language. For example, you might create a construct that describes a Kubernetes deployment, import it into your application, and customize the deployment via the exposed properties. + +This is an example of a [custom construct written in TypeScript](https://github.com/skorfmann/cdktf-hybrid-module/blob/7a84cbea62fbc3c3b7e92c00d75fcaad495cf29b/packages/cdktf-hybrid-module/lib/construct.ts) that creates a machine image. The exported interface allows users to specify the instance type and one or more tags. The rest of the configuration is defined in the construct and is abstracted from the consumer. + +Reference the [constructs documentation](/terraform/cdktf/concepts/constructs) for more details. + +### Examples + +Reference the [examples page](/terraform/cdktf/examples-and-guides/examples) to see configured CDKTF applications in each supported programming language. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/constructs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/constructs.mdx new file mode 100644 index 0000000000..08d125e9a8 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/constructs.mdx @@ -0,0 +1,783 @@ +--- +page_title: Constructs - CDK for Terraform +description: >- + “Constructs are classes that allow you to reuse existing configurations. Learn + about using constructs in your CDKTF application and how to publish custom + constructs.” +--- + +# Constructs + +## What is a construct? + +In CDKTF, a construct is a building block that can represent anything from a single resource to a complex subset of your infrastructure. Each CDKTF program can be thought of as a tree being made up of constructs. + +Since constructs can also represent a collection of resources, they are often compared with Terraform modules, but constructs provide a superset of what Terraform modules can do. + +## Various use cases of constructs + +- Terraform modules are limited in the sense that they can generate resources based on HCL configuration, but constructs are not constrained to just creating, and can also modify, enrich, and validate resources created outside of the construct. + +- Constructs can build complex resources that can be used as any other provider-supplied resource without using a different syntax like in Terraform. + +- Constructs allow strict type checking and parameter validation for creating resources. This is not possible in Terraform modules. + +- Constructs can be used to codify best practices across the organization / codebase. + +- Constructs can be tested like any other code within the CDKTF supported languages. + +### Constructs can enrich and modify resource configuration to match best practices + +While Terraform modules can be used to generate a part of infrastructure, constructs can be used to enrich and modify existing resource configurations. This enables authors to codify best practices within constructs, and users of those constructs can be assured that their infrastructure is compliant. + +The following example extends the AWS S3 Bucket resource to add required tags. Any consumer of this `TaggedS3Bucket` can be assured that the correct tags are applied to their resource. + +```ts +class TaggedS3Bucket extends S3Bucket { + constructor(scope: Construct, name: string, config: S3BucketConfig) { + super(scope, name, config); + + this.tagsInput = { + ...this.tagsInput, + owner: "my-team", + purpose: "storage", + }; + } +} + +class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new TaggedS3Bucket(this, "my-bucket", { + bucket: "my-bucket", + }); + } +} +``` + +Constructs are not limited to modifying specific resources and can be used to operate on entire stacks. The following example is a construct that can be used to list all S3 buckets in a stack and output them as a list. + +```ts +import { Construct } from "constructs"; +class OutputAllBucketNames extends Construct { + constructor(scope: Construct, name: string) { + super(scope, name); + + const buckets = []; + Aspects.of(TerraformStack.of(this)).add({ + visit: (node) => { + if (node instanceof S3Bucket) { + buckets.push(node); + } + }, + }); + + new TerraformOutput(this, "all_buckets", { + value: new Lazy({ + produce: () => { + return buckets; + }, + }), + }); + } +} +``` + +Constructs can also be used to mutate many existing resources after creation. In the following example, the `DataDogInspector` construct takes in a list of various constructs and whenever it encounters an `S3Bucket`, it enables logging to DataDog for that bucket. This is especially useful for applying team level compliance requirements that happen after the original infrastructure is created. + +```ts +import { Construct } from "constructs"; +class DataDogInspector extends Construct { + constructor(constructsToInspect: Construct[]) { + super(); + constructsToInspect.forEach((c) => { + if (c instanceof S3Bucket) { + new DataDogS3Logging(c); + } + }); + } +} +``` + +### Constructs allow consumers of the construct to change behaviour conditionally + +Since constructs are classes, they support declaring methods to programmatically add or modify infrastructure based on conditions. This enables the construct's consumer to selectively enhance their infrastructure. + +In the following example, the `CustomS3Bucket` construct exposes a `giveAccess` method that can be used by the consumer to programmatically generate IAM policies for accessing the bucket for any resource that requires it. + +```ts +import { Construct } from "constructs"; +class CustomS3Bucket extends S3Bucket { + constructor(scope: Construct, name: string, config: S3BucketConfig) { + super(scope, name); + + // create the s3 bucket + // ... + } + + public giveAccess(item: LambdaFunction | CloudfrontDistribution) { + if (item instanceof LambdaFunction) { + // Create IAM Policy for Lambda to access S3 + // ... + } + + if (item instanceof CloudfrontDistribution) { + // Create IAM Policy for CloudFront to access S3 + // ... + } + } +} + +class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + const bucket = new CustomS3Bucket(this, "my-bucket", { + bucket: "my-bucket", + }); + + const lambda = new LambdaFunction(this, "my-lambda", { + // ... + }); + + const cloudfront = new CloudfrontDistribution(this, "my-cloudfront", { + // ... + }); + + bucket.giveAccess(lambda); + bucket.giveAccess(cloudfront); + } +} +``` + +### Constructs can be used to codify relationships between systems + +Constructs can also be used to represent relationships between different parts of the infrastructure in a type-safe manner. Creating relationships through constructs also has the benefit that the relationship is easily understandable in most modern IDEs. + +In the following example, we have a contrived `Cluster` construct that allows various web services to be registered with it. During development, any consumer of the `Cluster` class will be able to see that any `Cluster` construct accepts `Webservice` constructs to be connected to it. + +```ts +import { Construct } from "constructs"; + +class Cluster extends Construct { + constructor(scope: Construct, name: string) { + super(scope, name); + } + + addService(webservice: Webservice) { + // e.g. register a service in a k8s cluster + } +} + +class Webservice extends Construct { + constructor(scope: Construct, name: string) { + super(scope, name); + } +} + +class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + const cluster = new Cluster(this, "cluster"); + const webservice = new Webservice(this, "webservice"); + + cluster.addService(webservice); + } +} +``` + +### You can codify architectural patterns + +If you have complex architectural patterns you can codify them and have an abstraction where you can create a flexible architecture with less work. In this DataPipeline example you can see that each of the steps in the pipeline is bringing their own logic on how to connect to the next step and how to write their output into an S3Bucket. This means as long as a set of resources can fulfill this contract one could build a pipeline using e.g. LambdaFunctions, EC2 Instances, and CloudwatchEvents if one implemented the `PipelineStep` class for these types. + +```ts +abstract class PipelineStep extends Construct { + abstract connect(next: PipelineStep); + abstract finalize(sink: S3Bucket); +} + +class DataPipeline extends Construct { + _nextStep: PipelineStep; + + constructor(scope: Construct, name: string) { + super(scope, name); + // this is always the first step + this._nextStep = new PipelineWebhookStep(this); + } + + public addStep(step: PipelineStep) { + this._nextStep.connect(step); + this.addAccessPermissions(this._nextStep, step); + this._nextStep = step; + } + + public finalize() { + this._nextStep.finalize(); + } +} + +class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + const pipeline = new DataPipeline(this, "my-pipeline"); + pipeline.addStep(new TransformInputPipelineStep(this)); + pipeline.addStep(new AggregateValuesPipelineStep(this)); + pipeline.addStep(new PipelineStoreResultStep(this)); + pipeline.finalize(); + } +} +``` + +### You can codify security constraints earlier in the process + +You can shift left security concerns for developers from the end of the workflow (like code review, CI, or solutions like Sentinel policies) to the point where the configuration is authored. This can be done through type hints (disallowing options that are not safe on the type system level) or through validation. Validations allow dynamic verification and are shown to users as hints during cdktf synth. If they are set to the error level, they also fail the synth. + +#### Through Types + +```ts +import { Construct } from "constructs"; +import { Ec2InstanceConfig as GeneratedEc2InstanceConfig } from "./.gen/providers/aws/lib/ec2-instance"; + +enum AllowedInstanceSizes { + Nano = "t3.nano" + Micro = "t3.micro" + Small = "t3.small" + Medium = "t3.medium" +} +interface Ec2InstanceConfig extends GeneratedEc2InstanceConfig { + instanceSize: AllowedInstanceSizes; +} + +class Ec2Instance extends Construct { + constructor(scope: Construct, name: string, config: Ec2InstanceConfig) { + super(scope, name, config); + } +} +``` + +#### Through Validations + +```ts +import { Annotations, Construct } from "constructs"; + +class S3Bucket extends Construct { + constructor(scope: Construct, name: string, config: S3BucketConfig) { + super(scope, name); + + if ( + this.isOpenToThePublic(config) && + !config.tags["reason-why-this-is-public"] + ) { + Annotations.of(this).addWarning( + `This S3Bucket is open to the public and no reason why is stated in the tags, please add a "reason-why-this-is-public" tag`, + ); + } + } +} +``` + +### Constructs and Testing + +Since Constructs can contain logic and are not just a data structure, they can be tested. This allows you to test the composition of your constructs and the logic they contain. This can be done with snapshot testing or unit testing. + +```ts +import { Testing } from "cdktf"; +import MyApplicationsAbstraction from "../main"; +import { Ec2 } from "./custom-ec2-construct"; + + +describe("Construct is of correct composition and plans successfully", () => { + // make assertions about the composition of constructs + it("has EC2 of correct size", () => { + expect( + Testing.synthScope((scope) => { + new MyApplicationsAbstraction(scope, "app", {}); + }) + ).toHaveResourceWithProperties(Ec2, { + instanceSize: "t3.micro", + }); + }); + + // assert that plan runs sucessfully before a deploy + it("successfully plans", () => { + const app = Testing.app(); + const stack = new TerraformStack(app, "test"); + const myAppAbstraction = new MyApplicationsAbstraction(stack, "app", {}); + + expect(Testing.fullSynth(stack)).toPlanSuccessfully(); + }); + + // catch unexpected changes with snapshot testing + it("matches snapshot", () => { + expect( + Testing.synthScope((scope) => { + new MyApplicationsAbstraction(scope, "app", {}); + }) + ).toMatchSnapshot(); +}); +``` + +### Interoperability + +You can use the [`cdktf convert`](/terraform/cdktf/cli-reference/commands#convert) command to translate existing projects written in HashiCorp Configuration Language (HCL) into CDKTF-compatible projects. You could then use the output as a starting point to create custom constructs. + +You can use the [`cdktf get`](/terraform/cdktf/cli-reference/commands#get) command to download Terraform modules and use them as constructs in your CDKTF project. You can also [publish these generated constructs](/terraform/cdktf/develop-custom-constructs/publishing-and-distribution#translate-constructs-to-terraform-modules) representing a module to your registry of choice. + +You cannot create a Terraform module directly from an existing CDKTF construct, but you can use the synthesized output of a CDKTF project as a Terraform Module. Refer to the [HCL interoperability](/terraform/cdktf/concepts/hcl-interoperability) page for more details. + +## Constructs vs. Stacks + +[Stacks](/terraform/cdktf/concepts/stacks) represent a collection of infrastructure that CDK for Terraform (CDKTF) synthesizes as a dedicated Terraform configuration. Stacks allow you to separate the state management for multiple environments within an application. For example, you may want to have one stack that describes the infrastructure for development and another with slightly different inputs for testing. + +Constructs also provide a way to logically structure a set of resources, but you can only use them as part of a stack. A single stack may contain multiple constructs that act as building blocks to create the full infrastructure configuration. For example, you could use one construct to define a Kubernetes deployment and a different construct to define an AWS DynamoDB table. + +## Construct Types + +Construct classes define system state at various levels of granularity. For example, you can write a custom construct that defines and configures a single Elastic Cloud Compute resource or one that defines and configures an entire deployment with multiple resources from different providers. + +The Cloud Development Kit community has identified three major construct types that indicate an increasing level of abstraction: + +- **L1** constructs define single resources or very small units of configuration. For example, the code bindings that CDKTF generates for each Terraform provider are considered L1 constructs. Another example would be creating a custom L1 construct that defines the configuration for an Azure virtual machine. + +- **L2** constructs define resources and include an intent-driven API with additional helper methods, properties, and functionality. For example, you could create a custom L2 construct that contains a method for adding files to an S3 Bucket and a method for granting resource access to a particular user group. + +- **L3** constructs define common design patterns and larger pieces of functionality. For example, you could create a custom L3 construct that configures all of the necessary resources to deploy and host a static website frontend. + +## Use Constructs + +> **Hands On:** Try [Deploy Applications with CDK for Terraform](/terraform/tutorials/cdktf/cdktf-applications) tutorial to use a custom construct. It includes the example code below. + +You can import any [CDKTF-compatible](#available-constructs) construct that is available in your project's programming language. Then, you can create new instances of the construct and use any exposed properties to customize the construct configuration. + +The following example instantiates a construct called `KubernetesWebAppDeployment` and uses the available arguments to specify that the deployment will have two replicas. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack } from "cdktf"; +import { KubernetesWebAppDeployment } from "./constructs/kubernetes-web-app-deployment"; +import { KubernetesProvider } from "./.gen/providers/kubernetes/provider"; +import * as path from "path"; + +export class ConstructsStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new KubernetesProvider(this, "kind", { + configPath: path.join(__dirname, "../kubeconfig.yaml"), + }); + + new KubernetesWebAppDeployment(this, "deployment", { + image: "nginx:latest", + replicas: 2, + app: "myapp", + component: "frontend", + environment: "dev", + }); + } +} +``` + +```python +class MyKubernetesStack(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + KubernetesProvider(self, "kind", + config_path=os.path.join(os.path.dirname(__file__), '..', 'kubeconfig.yaml') + ) + + KubernetesWebAppDeployment(self, "deployment", + image="nginx:latest", + replicas=2, + app="myapp", + component="frontend", + environment="dev" + ) + + + +app = App() +MyKubernetesStack(app, "demo") +app.synth() +``` + +```java +import java.nio.file.Paths; +import imports.kubernetes.provider.KubernetesProvider; +import imports.kubernetes.provider.KubernetesProviderConfig; +import com.mycompany.app.myconstructs.KubernetesWebAppDeployment; +import com.mycompany.app.myconstructs.KubernetesWebAppDeploymentConfig; + + +public class MainUseConstructs extends TerraformStack { + + public MainUseConstructs(Construct scope, String name){ + super(scope, name); + + new KubernetesProvider(this, "kind", KubernetesProviderConfig.builder() + .configPath(Paths.get(System.getProperty("user.dir"), "..", "kubeconfig.yaml").toString()) + .build() + ); + + new KubernetesWebAppDeployment(this, "deployment", KubernetesWebAppDeploymentConfig.builder() + .image("nginx:latest") + .replicas(2) + .app("myapp") + .components("frontend") + .environments("dev") + .build() + ); + } + + public static void main(String[] args) { + final App app = new App(); + new MainUseConstructs(app, "demo"); + app.synth(); + } +} +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using kubernetes.Provider; +using MyConstructs; + +namespace Examples +{ + class MyConstructsStack : TerraformStack + { + public MyConstructsStack(Construct scope, string name) : base(scope, name) + { + new KubernetesProvider(this, "kind", new KubernetesProviderConfig + { + ConfigPath = Path.Join(Environment.CurrentDirectory, "../kubeconfig.yaml") + }); + new KubernetesWebAppDeployment(this, "deployment", new Dictionary { + { "image", "nginx:latest" }, + { "replicas", 2 }, + { "app", "myapp" }, + { "component", "frontend" }, + { "environment", "dev" } + }); + } + } +} +``` + +```go +package main + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + kubernetes "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/kubernetes/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/myconstructs" + + "os" + "path" +) + +func NewConstructsStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cwd, _ := os.Getwd() + + kubernetes.NewKubernetesProvider(stack, jsii.String("kind"), &kubernetes.KubernetesProviderConfig{ + ConfigPath: jsii.String(path.Join(cwd, "kubeconfig.yaml")), + }) + myconstructs.NewKubernetesWebAppDeployment(stack, "deployment", map[string]interface{}{ + "image": jsii.String("nginx:latest"), + "replicas": jsii.Number(2), + "app": jsii.String("myapp"), + "component": jsii.String("frontend"), + "environment": jsii.String("dev"), + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewConstructsStack(app, "constructs") + + app.Synth() +} + +``` + + + +### Scope + +You can instantiate a construct multiple times throughout your infrastructure. For example, you may want to create multiple S3 Buckets with different configurations. CDKTF infers a unique `name` for each instance from its `Construct#id` and parent construct. Instances that share the same parent element are considered to be part of the same scope. If you instantiate multiple constructs within the same scope, you must set a different `name` for each instance to avoid naming conflicts. + +The following example creates three different S3 buckets, two of which are in the same scope. When CDKTF synthesizes this configuration, the Terraform IDs for these resources will be the construct names prefixed by the stack name and suffixed with a hash for each Construct instance. + + + + + + + + + +```ts +import { S3Bucket } from "./.gen/providers/aws/s3-bucket"; +import { S3BucketWebsiteConfiguration } from "./.gen/providers/aws/s3-bucket-website-configuration"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { Construct } from "constructs"; +import { TerraformStack } from "cdktf"; + +export class PublicS3Bucket extends Construct { + public bucket: S3Bucket; + constructor(scope: Construct, name: string) { + super(scope, name); // This creates a new scope since we extend from construct + + // This bucket is in a different scope than the buckets + // defined in `MyStack`. Therefore, it does not need a unique name. + this.bucket = new S3Bucket(this, "bucket", { + bucketPrefix: name, + }); + + new S3BucketWebsiteConfiguration(this, "bucket-website", { + bucket: this.bucket.bucket, + indexDocument: { + suffix: "index.html", + }, + errorDocument: { + key: "5xx.html", + }, + }); + } +} + +export class ConstructsScopeStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + // Both buckets are inside of the same stack, meaning they share + // the same scope. Therefore, their names must be unique. + new PublicS3Bucket(this, "first-bucket"); + new PublicS3Bucket(this, "second-bucket"); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack + +class PublicS3Bucket(Construct): + + bucket: S3Bucket + + def __init__(self, scope: Construct, name: str): + # This creates a new scope since we extend from construct + super().__init__(scope, name) + + AwsProvider(self, "aws", + region="us-east-1" + ) + + # This bucket is in a different scope than the buckets + # defined in `MyStack`. Therefore, it does not need a unique name. + self.bucket = S3Bucket(self, "bucket", + bucket_prefix=name, + website=S3BucketWebsite( + index_document="index.html", + error_document="5xx.html", + ) + ) + +class MyS3BucketStack(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + + # Both buckets are inside of the same stack, meaning they share + # the same scope. Therefore, their names must be unique. + PublicS3Bucket(self, "first-bucket") + PublicS3Bucket(self, "second-bucket") + +app = App() +MyS3BucketStack(app, "s3-stack") +app.synth() +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.App; +public class MainConstructScope extends TerraformStack { + + public MainConstructScope(Construct scope, String name){ + super(scope, name); + + new MainConstructScope.PublicS3Bucket(this, "first-bucket"); + new MainConstructScope.PublicS3Bucket(this, "second-bucket"); + + } + + static class PublicS3Bucket extends Construct{ + + public S3Bucket bucket; + + public PublicS3Bucket(Construct scope, String name){ + super(scope, name); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + + this.bucket = new S3Bucket(this, "bucket", S3BucketConfig.builder() + .bucketPrefix(name) + .website(S3BucketWebsite.builder() + .indexDocument("index.html") + .errorDocument("5xx.html") + .build() + ) + .build() + ); + } + } +} +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.S3Bucket; + +namespace Examples +{ + + class PublicS3Bucket : Construct + { + public S3Bucket bucket; + public PublicS3Bucket(Construct scope, string name) : base(scope, name) + { + // This bucket is in a different scope than the buckets + // defined in `MyStack`. Therefore, it does not need a unique name. + this.bucket = new S3Bucket(this, "bucket", new S3BucketConfig + { + BucketPrefix = name, + Website = new S3BucketWebsite + { + IndexDocument = "index.html", + ErrorDocument = "5xx.html" + } + }); + } + } + + class ConstructsScopeStack : TerraformStack + { + public ConstructsScopeStack(Construct scope, string name) : base(scope, name) + { + new AwsProvider(this, "Aws", new AwsProviderConfig + { + Region = "us-east-1" + }); + + // Both buckets are inside of the same stack, meaning they share + // the same scope. Therefore, their names must be unique. + new PublicS3Bucket(this, "first-bucket"); + new PublicS3Bucket(this, "second-bucket"); + } + } +} +``` + +```go +package main + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + s3bucket "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/s3bucket" +) + +type PublicS3Bucket struct { + Bucket *s3bucket.S3Bucket +} + +func NewPublicS3Bucket(scope constructs.Construct, name *string) *PublicS3Bucket { + c := constructs.NewConstruct(scope, name) + + bucket := s3bucket.NewS3Bucket(c, name, &s3bucket.S3BucketConfig{ + BucketPrefix: name, + Website: &s3bucket.S3BucketWebsite{ + IndexDocument: jsii.String("index.html"), + ErrorDocument: jsii.String("5xx.html"), + }, + }) + + return &PublicS3Bucket{ + Bucket: &bucket, + } +} + +func NewConstructsScopingStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + NewPublicS3Bucket(stack, jsii.String("first-bucket")) + NewPublicS3Bucket(stack, jsii.String("second-bucket")) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewConstructsScopingStack(app, "constructs-scope") + + app.Synth() +} + +``` + + + +### Aspects + +`Aspects` allow you to implement a visitor pattern, dynamically add or remove constructs, and automatically change attributes of existing constructs when you synthesize your CDTKF application. For example, you could use an aspect to help tag resources based on dynamic conditions. Refer to the [aspects documentation](/terraform/cdktf/concepts/aspects) for more details. + +### Available Constructs + +You can search the Amazon Web Services (AWS) [Construct Hub](https://constructs.dev/search?q=&cdk=cdktf&offset=0) for existing CDKTF-compatible constructs. We are also building the [AWS Adapter](/terraform/cdktf/create-and-deploy/aws-adapter), which lets you use AWS Constructs in your CDKTF projects. + +~> **Note:** The AWS Adapter is in tech preview. + +## Write and Publish Constructs + +You can write construct classes in any language and distribute them to other users. Refer to [Construct Design](/terraform/cdktf/develop-custom-constructs/construct-design) and [Construct Publishing and Distribution](/terraform/cdktf/develop-custom-constructs/publishing-and-distribution) for details. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx new file mode 100644 index 0000000000..7334b7723b --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx @@ -0,0 +1,323 @@ +--- +page_title: Data Sources - CDK for Terraform +description: >- + Use data sources to allow Terraform to use external data, function output, and + data from other configurations. +--- + +# Data Sources + +[Terraform data sources](/terraform/language/data-sources) fetch information from external APIs and from other Terraform configurations. For example, you may want to import disk image IDs from a cloud provider or share data between configurations for different parts of your infrastructure. + +## When to Use Data Sources + +Use data sources when you need to reference dynamic data that is not known until after Terraform applies a configuration. For example, instance IDs that cloud providers assign on creation. + +When data is static or you know the values before [synthesizing your code](/terraform/cdktf/cli-reference/commands#synth), we recommend creating static references in your preferred programming language or using [Terraform variables](/terraform/cdktf/concepts/variables-and-outputs). + +## Define Data Sources + +Data Sources are part of a [Terraform provider](/terraform/cdktf/concepts/providers). All classes representing Data Sources are prefixed with `Data`. + +In the following TypeScript example, a Terraform data source fetches the AWS region `DataAwsRegion` from the AWS provider. + + + + + + + + + +```ts +import { TerraformStack } from "cdktf"; +import { Construct } from "constructs"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { DataAwsRegion } from "@cdktf/provider-aws/lib/data-aws-region"; + +export class DataSourcesStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const region = new DataAwsRegion(this, "region"); + } +} +``` + +```java +import imports.aws.data_aws_region.DataAwsRegion; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; + +public class DataSourcesDefine extends TerraformStack { + + public DataSourcesDefine(Construct scope, String id){ + super(scope, id); + + new AwsProvider(this, "temp", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + //...... + DataAwsRegion region = new DataAwsRegion(this, "region"); + } +} +``` + +```python +from cdktf import TerraformStack, App +from imports.aws.data_aws_region import DataAwsRegion +from imports.aws.provider import AwsProvider + +class HelloTerraform(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region="us-east-1" + ) + + # ..... + region = DataAwsRegion(self, "region") + + +app = App() +HelloTerraform(app, "data-sources") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.DataAwsRegion; + +namespace Examples +{ + class DataSourceStack : TerraformStack + { + public DataSourceStack(Construct scope, string name) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-central-1" + }); + + DataAwsRegion region = new DataAwsRegion(this, "region", new DataAwsRegionConfig + { + Name = "eu-central-1" + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/dataawsregion" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func NewDatasourcesStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("eu-central-1"), + }) + + dataawsregion.NewDataAwsRegion(stack, jsii.String("region"), &dataawsregion.DataAwsRegionConfig{ + Name: jsii.String("eu-central-1"), + }) + + return stack +} + +``` + + + +## Remote State Data Source + +The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/settings/backends/configuration). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. + +The following example uses the global `DataTerraformRemoteState` to reference a Terraform Output of another Terraform configuration. + + + + + + + + + +```ts +import { TerraformStack } from "cdktf"; +import { Construct } from "constructs"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { DataTerraformRemoteState } from "cdktf"; +import { Instance } from "@cdktf/provider-aws/lib/instance"; + +export class DataSourcesStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const remoteState = new DataTerraformRemoteState(this, "remote-state", { + organization: "hashicorp", + workspaces: { + name: "vpc-prod", + }, + }); + + new Instance(this, "foo", { + instanceType: "t2.micro", + ami: "ami-123456", + subnetId: `${remoteState.get("subnet_id")}`, + }); + } +} +``` + +```java +import com.hashicorp.cdktf.DataTerraformRemoteState; +import com.hashicorp.cdktf.DataTerraformRemoteStateRemoteConfig; +import imports.aws.instance.Instance; +import imports.aws.instance.InstanceConfig; + +public class DataSourcesRemoteState extends TerraformStack { + + public DataSourcesRemoteState(Construct scope, String id) { + super(scope, id); + + // .... + DataTerraformRemoteState remoteState = new DataTerraformRemoteState(this, "state", + DataTerraformRemoteStateRemoteConfig.builder() + .organization("hashicorp") + .workspaces(new NamedRemoteWorkspace("vpc-prod")) + .build()); + + new Instance(this, "foo", InstanceConfig.builder() + // .... + .subnetId(remoteState.getString("subnet_id")) + .build()); + } +} +``` + +```python +from cdktf import TerraformStack, App +from cdktf import DataTerraformRemoteState, NamedRemoteWorkspace +class HelloTerraformRemoteState(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region="us-east-1" + ) + + # ..... + remoteState = DataTerraformRemoteState(self, "vpc-prod-remote-state", + organization="hashicorp", + workspaces=NamedRemoteWorkspace(name='vpc-prod') + ) + + Instance(self, "foo", + # ..... + subnet_id=remoteState.get_string('subnet_id') + ) +app = App() +HelloTerraformRemoteState(app, "terraform-remotes-state") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.Instance; + +namespace Examples +{ + class RemoteStateDataSourceStack : TerraformStack + { + public RemoteStateDataSourceStack(Construct scope, string name) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-central-1" + }); + + DataTerraformRemoteState remoteState = new DataTerraformRemoteState(this, "remoteState", new DataTerraformRemoteStateRemoteConfig + { + Organization = "hashicorp", + Workspaces = new NamedRemoteWorkspace("vpc-prod") + }); + + new Instance(this, "foo", new InstanceConfig + { + // .... + SubnetId = remoteState.GetString("subnet_id") + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/instance" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func RemoteStateDataSourceStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("eu-central-1"), + }) + + remote_state := cdktf.NewDataTerraformRemoteState(stack, jsii.String("remote_state"), &cdktf.DataTerraformRemoteStateRemoteConfig{ + Organization: jsii.String("hashicorp"), + Workspaces: cdktf.NewNamedRemoteWorkspace(jsii.String("vpc-prod")), + }) + + instance.NewInstance(stack, jsii.String("region"), &instance.InstanceConfig{ + SubnetId: remote_state.GetString(jsii.String("subnet_id")), + }) + + return stack +} + +``` + + + +### Large Data Source Configurations + +A few individual Terraform Data Sources have very deeply nested schemas with a lot of attributes. This blows up the config classes and slows down the code generation for languages besides Typescript. To work around this we sometimes limit the depth of the config classes and use `any` on deeper level, some attributes we directly expose as `any` on the top level config class. + +- `aws` Provider: + - `data.aws_quicksight_analysis.definition` is set to `any` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/functions.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/functions.mdx new file mode 100644 index 0000000000..f690e4c6ee --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/functions.mdx @@ -0,0 +1,413 @@ +--- +page_title: Functions - CDK for Terraform +description: Learn when to use built-in Terraform functions to transform or combine values. +--- + +# Functions + +Terraform provides a set of built-in functions that transform and combine values within Terraform configurations. The [Terraform function documentation](/terraform/language/functions) contains a complete list. You can also use your editor autocompletion on the `Fn` object to find available options. + +Functions can handle normal and [token](/terraform/cdktf/concepts/tokens) values and will return either tokenized values or `IResolvable` values. + +## When to Use Terraform Functions + +Use Terraform functions when you need to calculate new values based on runtime values that are unknown before Terraform applies a configuration. For example, instance IDs that cloud providers assign on creation. + +When inputs are available before [synthesizing your code](/terraform/cdktf/cli-reference/commands#synth) (e.g. local files), we recommend transforming the values with your preferred programming language. + +## Usage Example + +The following example uses a Data Source from the AWS Provider to fetch the Availability Zones of the given region. As this data is unknown until Terraform applies the configuration, this CDKTF application uses both [Terraform Outputs](/terraform/cdktf/concepts/variables-and-outputs#output-values) and the Terraform [`element`](/terraform/language/functions/element) function. + +The `element` function gets the first element from the list of Availability Zone names. + + + + + + + + + +```ts +import { TerraformStack, TerraformVariable } from "cdktf"; +import { Construct } from "constructs"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { Fn, TerraformOutput } from "cdktf"; +import { DataAwsAvailabilityZones } from "@cdktf/provider-aws/lib/data-aws-availability-zones"; +export class FunctionsStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const zones = new DataAwsAvailabilityZones(this, "zones", { + state: "available", + }); + new TerraformOutput(this, "first-zone", { + value: Fn.element(zones.names, 0), + }); + } +} +``` + +```java +import com.hashicorp.cdktf.Fn; +import com.hashicorp.cdktf.TerraformVariable; +import com.hashicorp.cdktf.TerraformVariableConfig; +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; +import imports.aws.data_aws_availability_zones.DataAwsAvailabilityZones; +import imports.aws.data_aws_availability_zones.DataAwsAvailabilityZonesConfig; + + DataAwsAvailabilityZones zones = new DataAwsAvailabilityZones(this, "zones", + DataAwsAvailabilityZonesConfig.builder() + .state("available") + .build()); + + new TerraformOutput(this, "first-zone", TerraformOutputConfig.builder() + .value(Fn.element(zones.getNames(), 0)) + .build()); +``` + +```python +from cdktf import Fn, TerraformOutput +from imports.aws.provider import AwsProvider +from imports.aws.data_aws_availability_zones import DataAwsAvailabilityZones + + zones = DataAwsAvailabilityZones(self, 'zones', + state="available", + ) + + TerraformOutput(self, 'first-zone', + value=Fn.element(zones.names, 0) + ) + +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.DataAwsAvailabilityZones; + +namespace Examples +{ + class FunctionStack : TerraformStack + { + public FunctionStack(Construct scope, string name) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-central-1" + }); + + DataAwsAvailabilityZones zones = new DataAwsAvailabilityZones(this, "zones", new DataAwsAvailabilityZonesConfig + { + State = "available" + }); + + new TerraformOutput(this, "first-zone", new TerraformOutputConfig + { + Value = Fn.Element(zones.Names, 0) + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/dataawsavailabilityzones" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func NewFunctionsStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("use-west-2"), + }) + + zones := dataawsavailabilityzones.NewDataAwsAvailabilityZones(stack, jsii.String("zones"), &dataawsavailabilityzones.DataAwsAvailabilityZonesConfig{ + State: jsii.String("available"), + }) + + cdktf.NewTerraformOutput(stack, jsii.String("first-zone"), &cdktf.TerraformOutputConfig{ + Value: cdktf.Fn_Element(cdktf.Token_AsAny(zones.Names()), jsii.Number(0)), + }) + + return stack +} + +``` + + + +## Special functions + +### Property Access Helpers + +To access nested properties from untyped objects or other datasources that return a dynamic datatype, use the Terraform function `lookup` or, for nested access, the function "Fn.lookupNested()" which is a function offered by CDKTF that allows to avoid nesting `Fn.lookup` calls. + + + + + + + +```ts +const v = new TerraformVariable(this, "complex_object", { + type: "object({users: list(object({name: string}))})", +}); +new TerraformOutput(this, "users", { value: Fn.lookup(v.value, "users") }); +new TerraformOutput(this, "first_user_name", { + value: Fn.lookupNested(v.value, ["users", 0, "name"]), +}); +``` + +```python +v = TerraformVariable(self, "complex-object", + type = 'object({users: list(object({name: string}))})', +) +TerraformOutput(self, 'users', + value=Fn.lookup(v.string_value, "users") +) +TerraformOutput(self, 'first_user_name', + value=Fn.lookup_nested(v.string_value, ["users", 0, "name"]) +) +``` + +```java +TerraformVariable v = new TerraformVariable(this, "complex_object", TerraformVariableConfig.builder() + .type("object({users: list(object({name: string}))})") + .build()); +new TerraformOutput(this, "users", TerraformOutputConfig.builder() + .value(Fn.lookup(v.getValue(), "users")) + .build()); +new TerraformOutput(this, "first-user-name", TerraformOutputConfig.builder() + .value(Fn.lookupNested(v.getValue(), Arrays.asList("users", "0", "name"))) + .build()); +``` + +```csharp +TerraformVariable v = new TerraformVariable(this, "complex_object", new TerraformVariableConfig +{ + Type = "object({users: list(object({name: string}))})", +}); +new TerraformOutput(this, "users", new TerraformOutputConfig +{ + Value = Fn.Lookup(v.Value, "users") +}); +new TerraformOutput(this, "first-user-name", new TerraformOutputConfig +{ + Value = Fn.LookupNested(v.Value, new[] { "users", "0", "name" }) +}); +``` + +```go +v := cdktf.NewTerraformVariable(stack, jsii.String("complex-object"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("object({users: list(object({name: string}))})"), +}) +cdktf.NewTerraformOutput(stack, jsii.String("users"), &cdktf.TerraformOutputConfig{ + Value: cdktf.Fn_Lookup(v.Value(), jsii.String("users"), nil), +}) +cdktf.NewTerraformOutput(stack, jsii.String("first-user-name"), &cdktf.TerraformOutputConfig{ + Value: cdktf.Fn_LookupNested(v.Value(), &[]interface{}{"users", 0, "name"}), +}) +``` + +### Raw string helper + +Another helper function offered by CDKTF is `Fn.rawString` which can be used to escape raw strings that contain characters that CDKTF or Terraform would try to interpret otherwise. + + + + + + + +```ts +new TerraformOutput(this, "quotes", { + value: Fn.rawString(`"b"`), +}); +new TerraformOutput(this, "template", { + value: Fn.rawString("${TEMPLATE}"), +}); +``` + +```python +TerraformOutput(self, 'quotes', + value=Fn.raw_string('"b"') +) +TerraformOutput(self, 'template', + value=Fn.raw_string('${TEMPLATE}') +) +``` + +```java +new TerraformOutput(this, "quotes", TerraformOutputConfig.builder() + .value(Fn.rawString("\"b\"")) + .build()); +new TerraformOutput(this, "template", TerraformOutputConfig.builder() + .value(Fn.rawString("${TEMPLATE}")) + .build()); +``` + +```csharp +new TerraformOutput(this, "quotes", new TerraformOutputConfig +{ + Value = Fn.RawString("\"b\"") +}); +new TerraformOutput(this, "template", new TerraformOutputConfig +{ + Value = Fn.RawString("${TEMPLATE}") +}); +``` + +```go +cdktf.NewTerraformOutput(stack, jsii.String("quotes"), &cdktf.TerraformOutputConfig{ + Value: cdktf.Fn_RawString(jsii.String("\"b\"")), +}) +cdktf.NewTerraformOutput(stack, jsii.String("template"), &cdktf.TerraformOutputConfig{ + Value: cdktf.Fn_RawString(jsii.String("${TEMPLATE}")), +}) +``` + +## Operators + +Use the `Op` object to include operators like `!`, `+`, and `-`. + + + + + + + +```ts +import { Fn, TerraformOutput } from "cdktf"; +import { Op } from "cdktf"; + +const zones = new DataAwsAvailabilityZones(this, "zones", { + state: "available", +}); + +// ... + +new TerraformOutput(this, "half-of-the-zone", { + value: Op.div(Fn.lengthOf(zones.names), 2), +}); +``` + +```csharp + DataAwsAvailabilityZones zones = new DataAwsAvailabilityZones(this, "zones", new DataAwsAvailabilityZonesConfig { + State = "available" + }); + + new TerraformOutput(this, "half-of-the-zone", new TerraformOutputConfig { + Value = Op.Div(Fn.LengthOf(Token.AsList(zones.Names)), 2) + }); +``` + +```go +import ( + "fmt" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/dataawsavailabilityzones" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + + zones := dataawsavailabilityzones.NewDataAwsAvailabilityZones(stack, jsii.String("zones"), + &dataawsavailabilityzones.DataAwsAvailabilityZonesConfig{ + State: jsii.String("available"), + }, + ) + + cdktf.NewTerraformOutput(stack, jsii.String("half-of-the-zone"), &cdktf.TerraformOutputConfig{ + Value: cdktf.Op_Div( + cdktf.Fn_LengthOf(cdktf.Token_AsAny(zones.Names())), + jsii.Number(2), + ), + }) +``` + + + +# Using Terraform built-in functions directly within strings + +It is also possible to use all built-in Terraform functions without using CDKTF's `Fn.*` functions described above. To write Terraform built-in functions the same as you would in HCL, simply wrap the desired string within the HCL `${` and `}` syntax. **Note:** CDKTF doesn't do any further processing within the escaped syntax (`${` and `}`), and thus is unable to handle nested escape syntaxes yet. + + + + + + + +```ts +import { Fn, TerraformOutput } from "cdktf"; +import { Op } from "cdktf"; +import { DataAwsAvailabilityZones } from "@cdktf/provider-aws/lib/data-aws-availability-zones"; + +const zones = new DataAwsAvailabilityZones(this, "zones", { + state: "available", +}); + +// ... + +new TerraformOutput(this, "half-of-the-zone-raw", { + value: `\${length(${zones.fqn}.names) / 2}`, +}); +``` + +```csharp + DataAwsAvailabilityZones zones = new DataAwsAvailabilityZones(this, "zones", new DataAwsAvailabilityZonesConfig + { + State = "available" + }); + + new TerraformOutput(this, "half-of-the-zone", new TerraformOutputConfig + { + Value = $"${{length({zones.Fqn}.names) / 2}}" + }); +``` + +```go +import ( + "fmt" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/dataawsavailabilityzones" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + + zones := dataawsavailabilityzones.NewDataAwsAvailabilityZones(stack, jsii.String("zones"), + &dataawsavailabilityzones.DataAwsAvailabilityZonesConfig{ + State: jsii.String("available"), + }, + ) + + cdktf.NewTerraformOutput(stack, jsii.String("half-of-the-zone-raw"), &cdktf.TerraformOutputConfig{ + Value: jsii.String( + fmt.Sprintf("${length(%s.names) / 2}", + *cdktf.Token_AsString(zones.Names(), &cdktf.EncodingOptions{}), + ), + ), + }) +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/hcl-interoperability.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/hcl-interoperability.mdx new file mode 100644 index 0000000000..34b53dba64 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/hcl-interoperability.mdx @@ -0,0 +1,235 @@ +--- +page_title: HCL Interoperability - CDK for Terraform +description: >- + Use configurations written in HCL and configurations written in CDK for + Terraform together to define and provision infrastructure. +--- + +# HCL Interoperability + +Terraform requires infrastructure configuration files written in either [HashiCorp Configuration Language (HCL)](/terraform/language/syntax/configuration) or JSON syntax. CDK for Terraform (CDKTF) works by translating configurations defined in an imperative programming language to JSON configuration files for Terraform. +Starting from version 0.20, CDKTF can also generate Terraform HCL as output by setting the `--hcl` flag when running `cdktf synth`. + +CDKTF may not be the right choice for every team and project within your organization. For example, some teams may already be very familiar with Terraform and have created HCL modules, providers, etc. To provide flexibility, CDKTF applications are interoperable with Terraform projects written in HCL. Specifically: + +- CDKTF applications can use all existing Terraform [providers](/terraform/cdktf/concepts/providers) and HCL [modules](/terraform/cdktf/concepts/modules). +- CDKTF can generate modules that HCL Terraform projects can use in their configurations. + +This page shows how you can interoperate HCL and CDK for Terraform configuration. + +## CDKTF to HCL + +The following example is a CDKTF application that uses the `hashicorp/random` provider to generate a random name. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformOutput, TerraformStack, TerraformVariable } from "cdktf"; +import { Pet } from "@cdktf/provider-random/lib/pet"; +import { RandomProvider } from "@cdktf/provider-random/lib/provider"; + +export class HCLInteropStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new RandomProvider(this, "default", {}); + const petNameLength = new TerraformVariable(this, "petNameLength", { + type: "number", + default: 2, + description: "Pet name length", + }); + + const myPet = new Pet(this, "example", { + length: petNameLength.value, + }); + + new TerraformOutput(this, "name", { + value: myPet.id, + }); + } +} +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; +import com.hashicorp.cdktf.TerraformVariable; +import com.hashicorp.cdktf.TerraformVariableConfig; +import com.hashicorp.cdktf.App; +import imports.random.provider.RandomProvider; +import imports.random.pet.Pet; +import imports.random.pet.PetConfig; + +public class MainHCL extends TerraformStack { + + public MainHCL(Construct scope, String id) { + super(scope, id); + + new RandomProvider(this, "default"); + TerraformVariable petNameLength = new TerraformVariable(this, "petNameLength", TerraformVariableConfig.builder() + .type("number") + .defaultValue(2) + .description("Pet name length") + .build()); + + Pet myPet = new Pet(this, "example", PetConfig.builder() + .length(petNameLength.getNumberValue()) + .build()); + + new TerraformOutput(this, "name", TerraformOutputConfig.builder() + .value(myPet.getId()) + .build()); + } + + public static void main(String[] args) { + final App app = new App(); + new MainHCL(app, "random-pet-module"); + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformOutput, TerraformStack, TerraformVariable +from imports.random.pet import Pet +from imports.random.provider import RandomProvider + +class HclInteropStack(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + + RandomProvider(self, "default") + petNameLength = TerraformVariable(self, "petNameLength", + type="number", + default=2, + description="Pet name length" + ) + + myPet = Pet(self, "example", + length=petNameLength.number_value + ) + + TerraformOutput(self, "name", + value=myPet.id + ) +# app = App() +# HclInteropStack(app, "random-pet-module") +# app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using random.Provider; +using random.Pet; + +namespace Examples +{ + class HclInteropStack : TerraformStack + { + public HclInteropStack(Construct scope, string name) : base(scope, name) + { + new RandomProvider(this, "default", new RandomProviderConfig { }); + + var petNameLength = new TerraformVariable(this, "petNameLength", new TerraformVariableConfig + { + Type = "number", + Default = 2, + Description = "Pet name length" + }); + + var myPet = new Pet(this, "example", new PetConfig + { + Length = petNameLength.NumberValue + }); + + new TerraformOutput(this, "name", new TerraformOutputConfig + { + Value = myPet.Id + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/random/pet" + random "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/random/provider" +) + +func NewHclInteropStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + random.NewRandomProvider(stack, jsii.String("default"), &random.RandomProviderConfig{}) + + petNameLength := cdktf.NewTerraformVariable(stack, jsii.String("petNameLength"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("number"), + Default: jsii.Number(2), + Description: jsii.String("Pet name length"), + }) + + myPet := pet.NewPet(stack, jsii.String("example"), &pet.PetConfig{ + Length: petNameLength.NumberValue(), + }) + + cdktf.NewTerraformOutput(stack, jsii.String("name"), &cdktf.TerraformOutputConfig{ + Value: myPet.Id(), + }) + + return stack +} + +``` + + + +To use this as a Terraform module, run `cdktf synth` and copy the resulting `cdktf.out/stacks/random-pet-module/cdk.tf.json` file out to the module directory in your HCL project. +By default, `cdktf synth` generates Terraform JSON, but starting from version 0.20, CDKTF can also generate Terraform HCL output by passing the `--hcl` flag to `cdktf synth`. + +After you transfer the `cdk.tf.json` (or `cdk.tf`) file, you can reference the pet name module as you would any other HCL Terraform module. + +```terraform +terraform { + required_providers { + docker = { + source = "hashicorp/random" + version = "~> 3.1" + } + } +} + +module "pet" { + source = "./mods/pet" + petNameLength = "1" +} + +output "name" { + value = module.pet.name +} +``` + +## HCL to CDKTF + +HCL can be used with Terraform CDK in two ways. Converting HCL code directly to a CDKTF language, and using Terraform modules directly within CDKTF projects. + +- In order to convert HCL to a CDKTF language, the [`cdktf convert`](/terraform/cdktf/cli-reference/commands#convert) command can be used. It automatically translates HCL into a preferred CDKTF language. This is useful when working with an existing codebase that needs to be converted to CDKTF. + +- While CDKTF has the ability to import HCL modules through `cdktf get` when referenced within the `cdktf.json` file, Terraform modules can also be referenced without generating language specific bindings. The [modules documentation](/terraform/cdktf/concepts/modules) shows how to use existing Terraform modules in CDK for Terraform projects. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/iterators.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/iterators.mdx new file mode 100644 index 0000000000..a4e45721cb --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/iterators.mdx @@ -0,0 +1,1098 @@ +--- +page_title: Iterators - CDK for Terraform +description: >- + Iterators let you loop over a collection of values that are only available at runtime. +--- + +# Iterators + +Iterators let you loop over a collection of values. You can use them to create multiple resources of the same type based on dynamic data that is only known at runtime. + +## When to Use Iterators + +Use iterators when you need to reference dynamic data that is not known until after Terraform applies a configuration. For example, instance IDs that cloud providers assign on creation. + +When data is static or you know the values before [synthesizing your code](/terraform/cdktf/cli-reference/commands#synth), we recommend using loops in your preferred programming language. + +## Define Iterators + +Import the `TerraformIterator` class and call the `.fromList()` or `.fromMap()` static method. Then use the `forEach` property to pass the iterator to a resource, data source, or module. This lets you use the iterator in attributes. + +The following example uses an iterator to create a unique name for each new S3 bucket. + + + + + + + + + +```ts +import { + TerraformIterator, + TerraformLocal, + TerraformStack, + TerraformVariable, + Token, +} from "cdktf"; +import { Construct } from "constructs"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { S3Bucket } from "@cdktf/provider-aws/lib/s3-bucket"; + +export class IteratorsStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const list = new TerraformVariable(this, "list", { + type: "list(string)", + }); + + const simpleIterator = TerraformIterator.fromList(list.listValue); + + new S3Bucket(this, "iterator-bucket", { + forEach: simpleIterator, + bucket: simpleIterator.value, + }); + } +} +``` + +```java + TerraformVariable list = new TerraformVariable(this, "list", TerraformVariableConfig.builder() + .type("list(string)") + .build()); + + TerraformIterator terraformIterator = TerraformIterator.fromList(list.getListValue()); + + S3Bucket awsS3Bucket = new S3Bucket(this, "bucket", S3BucketConfig.builder() + .forEach(terraformIterator) + .bucket(Token.asString(terraformIterator.getString(""))) + .build()); +``` + +```python +from imports.aws.s3_bucket import S3Bucket +from cdktf import TerraformIterator, TerraformVariable, TerraformLocal + + list = TerraformVariable(self, "list", + type="list(string)" + ) + + iterator = TerraformIterator.from_list(list=list.list_value) + + s3Bucket = S3Bucket(self, "bucket", + for_each=iterator, + bucket=Token.as_string(iterator.value) + ) +``` + +```csharp + TerraformVariable list = new TerraformVariable(this, "list", new TerraformVariableConfig + { + Type = "list(string)" + }); + + ListTerraformIterator iterator = ListTerraformIterator.FromList(list.ListValue); + S3Bucket s3Bucket = new S3Bucket(this, "value-bucket", new S3BucketConfig + { + ForEach = iterator, + Bucket = Token.AsString(iterator.Value) + }); +``` + +```go +list := cdktf.NewTerraformVariable(stack, jsii.String("list"), &cdktf.TerraformVariableConfig{ + Type: cdktf.VariableType_LIST_STRING(), +}) + +simpleIterator := cdktf.TerraformIterator_FromList(list.ListValue()) + +s3bucket.NewS3Bucket(stack, jsii.String("iterator-bucket"), &s3bucket.S3BucketConfig{ + ForEach: simpleIterator, + Bucket: cdktf.Token_AsString(simpleIterator.Value(), nil), +}) +``` + + + +You cannot access the index of items when iterating over lists. This is because CDKTF implicitly converts lists to sets when iterating over them, but Terraform requires sets for iteration. This behavior prevents Terraform from accidentally deleting and recreating resources when their indices change. If you need an index, use an [escape hatch](/terraform/cdktf/concepts/resources#escape-hatch) with the [`count.index` property](/terraform/language/meta-arguments/count). + +## Using Iterators on Complex Types + +The iterator also exposes methods to access nested attributes. The following example uses the `getString` and `getStringMap` methods to access the `name` and `tags` attributes of each list item. + + + + + + + + + +```ts +import { + TerraformIterator, + TerraformLocal, + TerraformStack, + TerraformVariable, + Token, +} from "cdktf"; +import { Construct } from "constructs"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { S3Bucket } from "@cdktf/provider-aws/lib/s3-bucket"; + +export class IteratorsStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const complexIterator = TerraformIterator.fromMap({ + website: { + name: "website-static-files", + tags: { app: "website" }, + }, + images: { + name: "images", + tags: { app: "image-converter" }, + }, + }); + + new S3Bucket(this, "complex-iterator-bucket", { + forEach: complexIterator, + bucket: complexIterator.getString("name"), + tags: complexIterator.getStringMap("tags"), + }); + } +} +``` + +```java +import imports.aws.s3_bucket.S3Bucket; +import imports.aws.s3_bucket.S3BucketConfig; + + TerraformLocal myComplexLocal = new TerraformLocal(this, "my-map", new HashMap() { + { + put("website", new HashMap() { + { + put("name", "website-static-files"); + put("tags", new HashMap() { + { + put("app", "website"); + } + }); + } + }); + put("images", new HashMap() { + { + put("name", "images"); + put("tags", new HashMap() { + { + put("app", "image-converter"); + } + }); + } + }); + } + }); + + TerraformIterator iterator = TerraformIterator.fromMap(myComplexLocal.getAsAnyMap()); + + S3Bucket s3Bucket = new S3Bucket(this, "bucket", S3BucketConfig.builder() + .forEach(iterator) + .bucket(iterator.getString("name")) + .tags(iterator.getStringMap("tags")) + .build()); +``` + +```python +from imports.aws.s3_bucket import S3Bucket +from cdktf import TerraformIterator, TerraformVariable, TerraformLocal + map = TerraformLocal(self, "my-map", { + "website": { + "name": "website-static-files", + "tags": {"app": "website"} + }, + "images": { + "name": "images", + "tags": {"app": "image-converter"} + } + }) + + iterator = TerraformIterator.from_map( + map=map.as_any_map + ) + + s3Bucket = S3Bucket(self, "s3-bucket", + for_each=iterator, + bucket=iterator.get_string("name"), + tags=iterator.get_map("tags") + ) +``` + +```csharp +// We need a local to be able to pass the list to the iterator +TerraformLocal complexLocal = new TerraformLocal(this, "complex_local", new Dictionary { + { + "website ", + new Dictionary { + { "name", "website-static-files" }, + { "tags", new Dictionary { + { "app", "website" } + }} + } + }, + { + "images", + new Dictionary { + { "name", "images" }, + { "tags", new Dictionary { + { "app", "image-converter" } + }} + } + } +}); +MapTerraformIterator mapIterator = MapTerraformIterator.FromMap(complexLocal.AsAnyMap); +new S3Bucket(this, "tag-bucket", new S3BucketConfig +{ + ForEach = mapIterator, + Bucket = mapIterator.GetString("name"), + Tags = mapIterator.GetStringMap("tags") +}); +``` + +```go +complexList := cdktf.NewTerraformLocal(stack, jsii.String("complex-list-local"), []map[string]interface{}{ + { + "name": "website-static-files", + "tags": map[string]string{"app": "website"}, + }, + { + "name": "images", + "tags": map[string]string{"app": "image-converter"}, + }, +}) + +complexIterator := cdktf.TerraformIterator_FromList(complexList.Expression()) + +s3bucket.NewS3Bucket(stack, jsii.String("complex-iterator-bucket"), &s3bucket.S3BucketConfig{ + ForEach: complexIterator, + Bucket: complexIterator.GetString(jsii.String("name")), + Tags: complexIterator.GetStringMap(jsii.String("tags")), +}) +``` + + + +## Using Iterators on Complex Lists + +There are resources with attributes which are lists of objects whose properties are not all known at plan time. When trying to iterate over these directly, Terraform will error and complain about an invalid `for_each` argument. To workaround this problem, you can use the `TerraformIterator.fromComplexList()` method to create an iterator that transforms the list of objects into a map first, which has a key that is known at plan time and whose name is passed to that method. This is common for the `aws_acm_certificate` resource, whose `domain_validation_options` attribute is a list of objects with a `domain_name` property that is known at plan time. + +The following example validates an ACM certificate through DNS validation: + + + + + + + + + +```ts +const cert = new AcmCertificate(this, "cert", { + domainName: "example.com", + validationMethod: "DNS", +}); +const dataAwsRoute53ZoneExample = new DataAwsRoute53Zone(this, "dns_zone", { + name: "example.com", + privateZone: false, +}); + +const exampleForEachIterator = TerraformIterator.fromComplexList( + cert.domainValidationOptions, + "domain_name", +); + +const records = new Route53Record(this, "record", { + forEach: exampleForEachIterator, + allowOverwrite: true, + name: exampleForEachIterator.getString("resource_record_name"), + records: [exampleForEachIterator.getString("resource_record_value")], + ttl: 60, + type: exampleForEachIterator.getString("resource_record_type"), + zoneId: dataAwsRoute53ZoneExample.zoneId, +}); + +const recordsIterator = TerraformIterator.fromResources(records); + +new AcmCertificateValidation(this, "validation", { + certificateArn: cert.arn, + validationRecordFqdns: Token.asList(recordsIterator.pluckProperty("fqdn")), +}); +``` + +```python + cert = AcmCertificate(self, "cert", + domain_name="example.com", + validation_method="DNS", + ) + data_aws_route53_zone_example = DataAwsRoute53Zone(self, "dns_zone", + name="example.com", + private_zone=False + ) + + example_for_each_iterator = TerraformIterator.from_complex_list( + cert.domain_validation_options, + "domain_name" + ) + + records = Route53Record(self, "record", + for_each=example_for_each_iterator, + allow_overwrite=True, + name=example_for_each_iterator.get_string( + "resource_record_name"), + records=[ + example_for_each_iterator.get_string("resource_record_value")], + ttl=60, + type=example_for_each_iterator.get_string( + "resource_record_type"), + zone_id=data_aws_route53_zone_example.zone_id, + ) + + records_iterator = TerraformIterator.from_resources(records) + + AcmCertificateValidation(self, "validation", + certificate_arn=cert.arn, + validation_record_fqdns=Token.as_list( + records_iterator.pluck_property( + "fqdn") + ), + ) +``` + +```java + AcmCertificate cert = new AcmCertificate(this, "cert", AcmCertificateConfig.builder() + .domainName("example.com") + .validationMethod("DNS") + .build()); + + DataAwsRoute53Zone dataAwsRoute53ZoneExample = new DataAwsRoute53Zone(this, "dns_zone", DataAwsRoute53ZoneConfig.builder() + .name("example.com") + .privateZone(false) + .build()); + + TerraformIterator exampleForEachIterator = TerraformIterator.fromComplexList( + cert.getDomainValidationOptions(), + "domain_name" + ); + + Route53Record records = new Route53Record(this, "record", Route53RecordConfig.builder() + .forEach(exampleForEachIterator) + .allowOverwrite(true) + .name(exampleForEachIterator.getString("resource_record_name")) + .records(Arrays.asList(exampleForEachIterator.getString("resource_record_value"))) + .ttl(60) + .type(exampleForEachIterator.getString("resource_record_type")) + .zoneId(dataAwsRoute53ZoneExample.getZoneId()) + .build()); + + TerraformIterator recordsIterator = TerraformIterator.fromResources(records); + + AcmCertificateValidation validation = new AcmCertificateValidation(this, "validation", AcmCertificateValidationConfig.builder() + .certificateArn(cert.getArn()) + .validationRecordFqdns(Token.asList( + recordsIterator.pluckProperty("fqdn") + )) + .build()); +``` + +```csharp + var cert = new AcmCertificate(this, "cert", new AcmCertificateConfig + { + DomainName = "example.com", + ValidationMethod = "DNS" + }); + + var dataAwsRoute53ZoneExample = new DataAwsRoute53Zone(this, "dns_zone", new DataAwsRoute53ZoneConfig + { + Name = "example.com", + PrivateZone = false + }); + + var exampleForEachIterator = TerraformIterator.FromComplexList(cert.DomainValidationOptions, "domain_name"); + + var records = new Route53Record(this, "record", new Route53RecordConfig + { + ForEach = exampleForEachIterator, + AllowOverwrite = true, + Name = exampleForEachIterator.GetString("resource_record_name"), + Records = new string[] { exampleForEachIterator.GetString("resource_record_value") }, + Ttl = 60, + Type = exampleForEachIterator.GetString("resource_record_type"), + ZoneId = dataAwsRoute53ZoneExample.ZoneId + }); + + new AcmCertificateValidation(this, "validation", new AcmCertificateValidationConfig + { + CertificateArn = cert.Arn, + ValidationRecordFqdns = Token.AsList($"${{[for s in {records}: s.fqdn]}}") + }); +``` + +```go +cert := acmcertificate.NewAcmCertificate(stack, jsii.String("cert"), &acmcertificate.AcmCertificateConfig{ + DomainName: jsii.String("example.com"), + ValidationMethod: jsii.String("DNS"), +}) + +dataAwsRoute53ZoneExample := dataawsroute53zone.NewDataAwsRoute53Zone(stack, jsii.String("dns_zone"), &dataawsroute53zone.DataAwsRoute53ZoneConfig{ + Name: jsii.String("example.com"), + PrivateZone: jsii.Bool(false), +}) + +exampleForEachIterator := cdktf.TerraformIterator_FromComplexList(cert.DomainValidationOptions(), jsii.String("domain_name")) + +records := route53record.NewRoute53Record(stack, jsii.String("record"), &route53record.Route53RecordConfig{ + ForEach: exampleForEachIterator, + AllowOverwrite: jsii.Bool(true), + Name: exampleForEachIterator.GetString(jsii.String("resource_record_name")), + Records: jsii.Strings(*exampleForEachIterator.GetString(jsii.String("resource_record_value"))), + Ttl: jsii.Number(60), + Type: exampleForEachIterator.GetString(jsii.String("resource_record_type")), + ZoneId: dataAwsRoute53ZoneExample.ZoneId(), +}) + +recordsIterator := cdktf.TerraformIterator_FromResources(records) + +acmcertificatevalidation.NewAcmCertificateValidation(stack, jsii.String("validation"), &acmcertificatevalidation.AcmCertificateValidationConfig{ + CertificateArn: cert.Arn(), + ValidationRecordFqdns: cdktf.Token_AsList(recordsIterator.PluckProperty(jsii.String("fqdn")), nil), +}) +``` + + + +## Using Iterators for List Attributes + +You can also use iterators to create a list of objects based on each item in a list and assign the result as a value to a property of a resource. This is equivalent to using `Array.map` in TypeScript and using [dynamic blocks](/terraform/language/expressions/dynamic-blocks) in a Terraform HCL configuration. + +Use iterators for list attributes if the length of the list is not known before deploying. Otherwise, use native functions that are available in your language (e.g., `Array.map` in TypeScript). + +The following examples use an iterator to create a team containing each member of an organization. + + + + + + + + + +```ts +const orgName = "my-org"; + +new GithubProvider(this, "github", { + organization: orgName, +}); + +const team = new Team(this, "core-team", { + name: "core", +}); + +const orgMembers = new DataGithubOrganization(this, "org", { + name: orgName, +}); + +const orgMemberIterator = TerraformIterator.fromList(orgMembers.members); + +new TeamMembers(this, "members", { + teamId: team.id, + members: orgMemberIterator.dynamic({ + username: orgMemberIterator.value, + role: "maintainer", + }), +}); +``` + +```python + org_name = "my-org" + + GithubProvider(self, "github", + organization=org_name + ) + + github_team = Team(self, "core-team", + name="core" + ) + + org_members = DataGithubOrganization(self, "org", + name=org_name + ) + + org_member_iterator = TerraformIterator.from_list(org_members.members) + + TeamMembers(self, "members", + team_id=github_team.id, + members=org_member_iterator.dynamic({ + "username": Token().as_string(org_member_iterator.value), + "role": "maintainer" + }) + ) +``` + +```java + String orgName = "my-org"; + new GithubProvider(this, "github", GithubProviderConfig.builder() + .organization(orgName) + .build()); + Team team = new Team(this, "core-team", TeamConfig.builder() + .name("core") + .build()); + + DataGithubOrganization orgMembers = new DataGithubOrganization(this, "org", + DataGithubOrganizationConfig.builder() + .name(orgName) + .build()); + + ListTerraformIterator orgMemberIterator = TerraformIterator.fromList(orgMembers.getMembers()); + + Map content = new HashMap() { + { + put("username", Token.asString(orgMemberIterator.getValue())); + put("role", "maintainer"); + } + }; + + new TeamMembers(this, "members", TeamMembersConfig.builder() + .teamId(team.getId()) + .members(orgMemberIterator.dynamic(content)) + .build()); +``` + +```csharp + var orgName = "my-org"; + + new GithubProvider(this, "github", new GithubProviderConfig + { + Organization = orgName + }); + + var team = new Team(this, "core-team", new TeamConfig + { + Name = "core" + }); + + var orgMembers = new DataGithubOrganization(this, "org", new DataGithubOrganizationConfig + { + Name = orgName + }); + + ListTerraformIterator orgMemberIterator = TerraformIterator.FromList(orgMembers.Members); + + new TeamMembers(this, "members", new TeamMembersConfig + { + TeamId = team.Id, + Members = orgMemberIterator.Dynamic(new Dictionary { + { "username", Token.AsString(orgMemberIterator.Value) }, + { "role", "maintainer" } + }) + }); +``` + +```go +orgName := "my-org" + +github.NewGithubProvider(stack, jsii.String("github"), &github.GithubProviderConfig{ + Organization: &orgName, +}) + +team := team.NewTeam(stack, jsii.String("core-team"), &team.TeamConfig{ + Name: jsii.String("core"), +}) + +orgMembers := datagithuborganization.NewDataGithubOrganization(stack, jsii.String("org"), &datagithuborganization.DataGithubOrganizationConfig{ + Name: &orgName, +}) + +orgMemberIterator := cdktf.TerraformIterator_FromList(orgMembers.Members()) + +teammembers.NewTeamMembers(stack, jsii.String("members"), &teammembers.TeamMembersConfig{ + TeamId: team.Id(), + Members: orgMemberIterator.Dynamic(&map[string]interface{}{ + "username": orgMemberIterator.Value(), + "role": jsii.String("maintainer"), + }), +}) +``` + + + +## Chaining Iterators + +Sometimes the need arises to loop over resources created through an iterator; commonly referred to as chaining. +To chain iterators you can use the `TerraformIterator.fromResources` or `TerraformIterator.fromDataSources` methods with the resource or data source you want to chain as an argument. + + + + + + + + + +```ts +const s3BucketConfigurationIterator = TerraformIterator.fromMap({ + website: { + name: "website-static-files", + tags: { app: "website" }, + }, + images: { + name: "images", + tags: { app: "image-converter" }, + }, +}); + +const s3Buckets = new S3Bucket(this, "complex-iterator-buckets", { + forEach: s3BucketConfigurationIterator, + bucket: s3BucketConfigurationIterator.getString("name"), + tags: s3BucketConfigurationIterator.getStringMap("tags"), +}); + +// This would be TerraformIterator.fromDataSources for data_sources +const s3BucketsIterator = TerraformIterator.fromResources(s3Buckets); +const helpFile = new TerraformAsset(this, "help", { + path: "./help", +}); +new S3BucketObject(this, "object", { + forEach: s3BucketsIterator, + bucket: s3BucketsIterator.getString("id"), + key: "help", + source: helpFile.path, +}); +``` + +```python + map = TerraformLocal(self, "my-map", { + "website": { + "name": "website-static-files", + "tags": {"app": "website"} + }, + "images": { + "name": "images", + "tags": {"app": "image-converter"} + } + }) + s3_bucket_configuration_iterator = TerraformIterator.from_map( + map=map.as_any_map + ) + s3_buckets = S3Bucket(self, "complex-iterator-buckets", + for_each=s3_bucket_configuration_iterator, + bucket=s3_bucket_configuration_iterator.get_string( + "name"), + tags=s3_bucket_configuration_iterator.get_map( + "tags") + ) + + # This would be TerraformIterator.from_data_sources for data_sources + s3_buckets_iterator = TerraformIterator.from_resources(s3_buckets) + help_file = TerraformAsset(self, "help", + path="./help" + ) + S3BucketObject(self, "object", + for_each=s3_buckets_iterator, + bucket=s3_buckets_iterator.get_string("id"), + key="help", + source=help_file.path + ) +``` + +```java + TerraformLocal myComplexLocal = new TerraformLocal(this, "my-map", new HashMap() { + { + put("website", new HashMap() { + { + put("name", "website-static-files"); + put("tags", new HashMap() { + { + put("app", "website"); + } + }); + } + }); + put("images", new HashMap() { + { + put("name", "images"); + put("tags", new HashMap() { + { + put("app", "image-converter"); + } + }); + } + }); + } + }); + + TerraformIterator s3BucketConfigurationIterator = TerraformIterator.fromMap(myComplexLocal.getAsAnyMap()); + S3Bucket s3Bucket = new S3Bucket(this, "buckets", S3BucketConfig.builder() + .forEach(s3BucketConfigurationIterator) + .bucket(s3BucketConfigurationIterator.getString("name")) + .tags(s3BucketConfigurationIterator.getStringMap("tags")) + .build()); + + TerraformAsset asset = new TerraformAsset(this, "help", TerraformAssetConfig.builder() + .path(Paths.get(System.getProperty("user.dir"), "help").toString()) + .build() + ); + + // This would be TerraformIterator.fromDataSources for data_sources + TerraformIterator s3BucketIterator = TerraformIterator.fromResources(s3Bucket); + new S3BucketObject(this, "object", S3BucketObjectConfig.builder() + .forEach(s3BucketIterator) + .bucket(s3BucketIterator.getString("id")) + .key("help") + .source(asset.getPath()) + .build() + ); +``` + +```csharp + // We need a local to be able to pass the list to the iterator + TerraformLocal configuration = new TerraformLocal(this, "configuration", new Dictionary { + { + "website", + new Dictionary { + { "name", "website-static-files" }, + { "tags", new Dictionary { + { "app", "website" } + }} + } + }, + { + "images", + new Dictionary { + { "name", "images" }, + { "tags", new Dictionary { + { "app", "image-converter" } + }} + } + } + }); + MapTerraformIterator s3BucketConfigurationIterator = MapTerraformIterator.FromMap(configuration.AsAnyMap); + S3Bucket s3Buckets = new S3Bucket(this, "complex-iterator-buckets", new S3BucketConfig + { + ForEach = s3BucketConfigurationIterator, + Bucket = s3BucketConfigurationIterator.GetString("name"), + Tags = mapIterator.GetStringMap("tags") + }); + + // This would be TerraformIterator.fromDataSources for data_sources + TerraformIterator s3BucketsIterator = TerraformIterator.FromResources(s3Buckets); + TerraformAsset helpFile = new TerraformAsset(this, "help", new TerraformAssetConfig + { + Path = "./help" + }); + new S3BucketObject(this, "object", new S3BucketObjectConfig + { + ForEach = s3BucketsIterator, + Bucket = s3BucketsIterator.GetString("id"), + Key = "help", + Source = helpFile.Path + }); +``` + +```go +config := cdktf.NewTerraformLocal(stack, jsii.String("config-local"), []map[string]interface{}{ + { + "name": "website-static-files", + "tags": map[string]string{"app": "website"}, + }, + { + "name": "images", + "tags": map[string]string{"app": "image-converter"}, + }, +}) + +s3BucketConfigurationIterator := cdktf.TerraformIterator_FromList(config.Expression()) +s3Buckets := s3bucket.NewS3Bucket(stack, jsii.String("complex-iterator-buckets"), &s3bucket.S3BucketConfig{ + ForEach: s3BucketConfigurationIterator, + Bucket: s3BucketConfigurationIterator.GetString(jsii.String("name")), + Tags: s3BucketConfigurationIterator.GetStringMap(jsii.String("tags")), +}) + +s3BucketsIterator := cdktf.TerraformIterator_FromResources(s3Buckets) +helpFile := cdktf.NewTerraformAsset(stack, jsii.String("help"), &cdktf.TerraformAssetConfig{ + Path: jsii.String("./help"), +}) +s3bucketobject.NewS3BucketObject(stack, jsii.String("object"), &s3bucketobject.S3BucketObjectConfig{ + ForEach: s3BucketsIterator, + Bucket: s3BucketsIterator.GetString(jsii.String("id")), + Key: jsii.String("help"), + Source: helpFile.Path(), +}) +``` + + + +## Using for expressions + +To use the values of an iterator for example in a list attribute for a resource you can use one of the following methods (given that `iterator` got created through one of the static methods on `TerraformIterator`): + +- `iterator.keys()`: Results in equivalent of `[for k, v in var.iteratorSource : k]`. +- `iterator.values()`: Results in equivalent of `[for k, v in var.iteratorSource : v]`. +- `iterator.pluckProperty("foo")`: Results in equivalent of `[for k, v in var.iteratorSource : v.foo]`. +- `iterator.forExpressionForList('uppercase(val.owner) if val.owner != ""')`: Results in equivalent of `[ for key, val in toset(var.list): uppercase(val.owner) if val.owner != "" ]`. +- `iterator.forExpressionForMap("val.teamName", `join(",", val.teamMembers) if length(val.teamMembers) > 0`)`: Results in equivalent of `{ for key, val in toset(var.list): val.teamName => join(",", val.teamMembers) if length(val.teamMembers) > 0 }`. + + + + + + + + + +```ts +const mapIterator = TerraformIterator.fromMap({ + website: { + name: "website-static-files", + tags: { app: "website" }, + included: true, + }, + images: { + name: "images", + tags: { app: "image-converter" }, + }, +}); +new TerraformLocal(this, "list-of-keys", mapIterator.keys()); +new TerraformLocal(this, "list-of-values", mapIterator.values()); +new TerraformLocal(this, "list-of-names", mapIterator.pluckProperty("name")); +new TerraformLocal( + this, + "list-of-names-of-included", + mapIterator.forExpressionForList("val.name if val.included"), +); +new TerraformLocal( + this, + "map-with-names-as-key-and-tags-as-value-of-included", + mapIterator.forExpressionForMap("val.name", "val.tags if val.included"), +); +``` + +```python +values = TerraformLocal(self, "map-local", { + "website": { + "name": "website-static-files", + "tags": {"app": "website"} + }, + "images": { + "name": "images", + "tags": {"app": "image-converter"} + } +}) +mapIterator = TerraformIterator.from_map( + map=values.as_any_map +) +TerraformLocal(self, "list-of-keys", mapIterator.keys()) +TerraformLocal(self, "list-of-values", mapIterator.values()) +TerraformLocal(self, "list-of-names", + mapIterator.pluck_property("name")) +TerraformLocal(self, "list-of-names-of-included", + mapIterator.for_expression_for_list("val.name if val.included")) +TerraformLocal(self, "map-with-names-as-key-and-tags-as-value-of-included", + mapIterator.for_expression_for_map("val.name", "val.tags if val.included")) +``` + +```java + TerraformLocal values = new TerraformLocal(this, "values", new HashMap() { + { + put("website", new HashMap() { + { + put("name", "website-static-files"); + put("tags", new HashMap() { + { + put("app", "website"); + } + }); + } + }); + put("images", new HashMap() { + { + put("name", "images"); + put("tags", new HashMap() { + { + put("app", "image-converter"); + } + }); + } + }); + } + }); + + TerraformIterator mapIterator = TerraformIterator.fromMap(values.getAsAnyMap()); + new TerraformLocal(this, "list-of-keys", mapIterator.keys()); + new TerraformLocal(this, "list-of-values", mapIterator.values()); + new TerraformLocal(this, "list-of-names", mapIterator.pluckProperty("name")); + new TerraformLocal(this, "list-of-names-of-included", mapIterator.forExpressionForList("val.name if val.included")); + new TerraformLocal(this, "map-with-names-as-key-and-tags-as-value-of-included", mapIterator.forExpressionForMap("val.name", "val.tags if val.included")); +``` + +```csharp +TerraformLocal values = new TerraformLocal(this, "iterator-values", new Dictionary { + { + "website", + new Dictionary { + { "name", "website-static-files" }, + { "tags", new Dictionary { + { "app", "website" } + }} + } + }, + { + "images", + new Dictionary { + { "name", "images" }, + { "tags", new Dictionary { + { "app", "image-converter" } + }} + } + } +}); +MapTerraformIterator mapIterator = MapTerraformIterator.FromMap(values.AsAnyMap); +new TerraformLocal(this, "list-of-keys", mapIterator.Keys()); +new TerraformLocal(this, "list-of-values", mapIterator.Values()); +new TerraformLocal(this, "list-of-names", mapIterator.PluckProperty("name")); +new TerraformLocal(this, "list-of-names-of-included", mapIterator.ForExpressionForList("val.name if val.included")); +new TerraformLocal(this, "map-with-names-as-key-and-tags-as-value-of-included", mapIterator.ForExpressionForMap("val.name", "val.tags if val.included")); +``` + +```go +values := cdktf.NewTerraformLocal(stack, jsii.String("values"), []map[string]interface{}{ + { + "name": "website-static-files", + "tags": map[string]string{"app": "website"}, + }, + { + "name": "images", + "tags": map[string]string{"app": "image-converter"}, + }, +}) + +mapIterator := cdktf.TerraformIterator_FromList(values.Expression()) +cdktf.NewTerraformLocal(stack, jsii.String("list-of-keys"), mapIterator.Keys()) +cdktf.NewTerraformLocal(stack, jsii.String("list-of-values"), mapIterator.Values()) +cdktf.NewTerraformLocal(stack, jsii.String("list-of-names"), mapIterator.PluckProperty(jsii.String("name"))) +cdktf.NewTerraformLocal(stack, jsii.String("list-of-names-of-included"), mapIterator.ForExpressionForList(jsii.String("val.name if val.included"))) +cdktf.NewTerraformLocal(stack, jsii.String("map-with-names-as-key-and-tags-as-value-of-included"), mapIterator.ForExpressionForMap(jsii.String("val.name"), jsii.String("val.tags if val.included"))) +``` + + + +## Using Count + +You can also use the `TerraformCount` class to achieve the equivalent of setting `count` on resources in HCL Terraform. Refer to the [Terraform docs](/terraform/language/meta-arguments/count) for more information on the count meta argument. +This is useful when there's a numeric value that is only known at runtime that affects the amount of resources that should be created and those resources are almost identical. For most cases, however, Iterators are preferred over `count`. Refer to the [Terraform docs](/terraform/language/meta-arguments/count#when-to-use-for_each-instead-of-count) for the underlying reasons. + +The following examples use `TerraformCount` to create a specific amount of instances that is defined via a Terraform variable. + + + + + + + + + +```ts +const servers = new TerraformVariable(this, "servers", { + type: "number", +}); + +const count = TerraformCount.of(servers.numberValue); + +new Instance(this, "server", { + count: count, + ami: "ami-a1b2c3d4", + instanceType: "t2.micro", + tags: { + Name: "Server ${" + count.index + "}", + }, +}); +``` + +```python + servers = TerraformVariable(self, "servers", + type="number" + ) + + count = TerraformCount.of(servers.number_value) + + Instance(self, "server", + count=count, + ami="ami-a1b2c3d4", + instance_type="t2.micro", + tags={ + "Name": "Server ${" + Token().as_string(count.index) + "}" + } + ) +``` + +```java + TerraformVariable servers = TerraformVariable.Builder.create(this, "servers") + .type(VariableType.NUMBER) + .build(); + + TerraformCount count = TerraformCount.of(servers.getNumberValue()); + + new Instance(this, "server", InstanceConfig.builder() + .count(count) + .ami("ami-a1b2c3d4") + .instanceType("t2.micro") + .tags( + new HashMap() { + { + put("Name", "Server ${" + count.getIndex() + "}"); + } + }) + .build()); +``` + +```csharp +var servers = new TerraformVariable(this, "servers", new TerraformVariableConfig +{ + Type = "number" +}); +var count = TerraformCount.Of(servers.NumberValue); +new Instance(this, "server", new InstanceConfig +{ + Count = count, + Ami = "ami-a1b2c3d4", + InstanceType = "t2.micro", + Tags = new Dictionary { + { "Name", "Server ${" + count.Index + "}" } + } +}); +``` + +```go +servers := cdktf.NewTerraformVariable(stack, jsii.String("servers"), &cdktf.TerraformVariableConfig{ + Type: cdktf.VariableType_NUMBER(), +}) +count := cdktf.TerraformCount_Of(servers.NumberValue()) +instance.NewInstance(stack, jsii.String("server"), &instance.InstanceConfig{ + Count: count, + Ami: jsii.String("ami-a1b2c3d4"), + InstanceType: jsii.String("t2.micro"), + Tags: &map[string]*string{ + "Name": jsii.String("Server ${" + *cdktf.Token_AsString(count.Index(), nil) + "}"), + }, +}) +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/modules.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/modules.mdx new file mode 100644 index 0000000000..2f15efa846 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/modules.mdx @@ -0,0 +1,570 @@ +--- +page_title: Modules - CDK for Terraform +description: >- + Use both public and private modules in your CDKTF application to reuse + existing configurations. +--- + +# Modules + +A [Terraform module](/terraform/language/modules) is a single directory that contains one or more configuration files. + +Modules let you reuse configurations across projects and teams, saving time, enforcing consistency, and reducing errors. For example, you could create a module to describe the configuration for all of your organization's public website buckets. When you package and share this module, other users can incorporate it into their configurations. As requirements evolve, you can make changes to your module once, release a new version, and apply those changes everywhere that module is used. + +You can specify any existing public or private module in your `cdktf.json` file, and CDK for Terraform (CDKTF) generates the necessary code bindings for you to use in your application. + +## Install Modules + +You can use modules from the [Terraform Registry](https://registry.terraform.io/) and other sources like GitHub in your application. For example, the following TypeScript project has a `main.ts` file that defines AWS resources and uses the [AWS VPC module](https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest). + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { Vpc } from "./.gen/modules/terraform-aws-modules/aws/vpc"; + +export class ModulesStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + const provider = new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + new Vpc(this, "MyVpc", { + name: "my-vpc", + cidr: "10.0.0.0/16", + azs: ["us-west-2a", "us-west-2b", "us-west-2c"], + privateSubnets: ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"], + publicSubnets: ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"], + enableNatGateway: true, + }); + } +} +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.App; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; +import imports.vpc.Vpc; +import imports.vpc.VpcConfig; + +public class MainInstallModules extends TerraformStack { + + public MainInstallModules(Construct scope, String id){ + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + + new Vpc(this, "myVpc", VpcConfig.builder() + .name("my-vpc") + .cidr("10.0.0.0/16") + .azs(Arrays.asList("us-west-2a", "us-west-2b", "us-west-2c")) + .privateSubnets(Arrays.asList("10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24")) + .publicSubnets(Arrays.asList("10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24")) + .enableNatGateway(true) + .build() + ); + } + + public static void main(String[] args) { + final App app = new App(); + new MainInstallModules(app, "hello-terraform"); + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack +from imports.aws.provider import AwsProvider +from imports.vpc import Vpc + +class ModuleStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region = "us-east-1", + ) + + Vpc(self, "MyVpc", + name = "my-vpc", + cidr = "10.0.0.0/16", + azs = ['us-west-2a', 'us-west-2b', 'us-west-2c'], + private_subnets = ['10.0.1.0/24', '10.0.2.0/24', '10.0.3.0/24'], + public_subnets = ['10.0.101.0/24', '10.0.102.0/24', '10.0.103.0/24'], + enable_nat_gateway = True + ) + +app = App() +ModuleStack(app, "hello-terraform") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using vpc; + +namespace Examples +{ + class ModuleStack : TerraformStack + { + public ModuleStack(Construct scope, string name) : base(scope, name) + { + // Add this to your project's .csproj file: + // + // + // + new Vpc(this, "vpc", new VpcConfig + { + Name = "my-vpc", + Cidr = "10.0.0.0/16", + Azs = new[] { "us-west-2a", "us-west-2b", "us-west-2c" }, + PrivateSubnets = new[] { "10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24" }, + PublicSubnets = new[] { "10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24" }, + EnableNatGateway = true + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/terraform-aws-modules/aws/vpc" +) + +func NewModulesStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + provider := aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-west-2"), + }) + + vpc.NewVpc(stack, jsii.String("MyVpc"), &vpc.VpcConfig{ + Name: jsii.String("my-vpc"), + Cidr: jsii.String("10.0.0.0/16"), + Azs: jsii.Strings("us-west-2a", "us-west-2b", "us-west-2c"), + PrivateSubnets: jsii.Strings("10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"), + PublicSubnets: jsii.Strings("10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"), + EnableNatGateway: jsii.Bool(true), + }) + + return stack +} + +``` + + + +### Add Module to `cdktf.json` + +To use a module in your application, you must first add it to the `terraformModules` array in the [`cdktf.json` configuration file](/terraform/cdktf/create-and-deploy/configuration-file). + +To add a module from the Terraform Registry or a private registry, provide a fully qualified name: `registry-namespace/module-name`. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformProviders": [], + "terraformModules": [ + { + "name": "vpc", + "source": "terraform-aws-modules/vpc/aws", + "version": "~> 3.0" + } + ] +} +``` + +For local modules, use the object format. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformProviders": [], + "terraformModules": [ + { + "name": "my-local-module", + "source": "./path/to/local/terraform/module" + } + ] +} +``` + +For performance reasons, we don't automatically generate bindings for submodules. To generate bindings for submodules, specify the module source as `terraform-aws-modules/vpc/aws//submodules/vpc-endpoints`, where after the `//` is the path to the submodule in the modules repository. Refer to [the Terraform source specification](/terraform/language/modules/sources) for more details. +When you are using local modules that reference other local modules you need to add all referenced modules to the `terraformModules` array. + +### Generate Module Bindings + +Go to the working directory and run `cdktf get`. CDKTF automatically creates the appropriate module bindings in the `./.gen` directory for you to use in your application. + +## Configure Modules + +You can configure modules in the same way as [resources](/terraform/cdktf/concepts/resources), with one exception. + +For module inputs that use the `map` type, like `map(string)` or `list(map(string))`, you must specify the map values as strings. You must also ensure that the keys follow the required format listed in the module's documentation. For example, the module may specify that the keys must be in snake case. + +## Work with Module Outputs + +Modules often return data that you can use as inputs to other modules or resources. When this data is only available after Terraform applies the configuration, you must use [Terraform Outputs](/terraform/cdktf/concepts/variables-and-outputs#output-values). + +### Examples + +The following example uses a local module and references its output as a Terraform output. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { TerraformOutput } from "cdktf"; + +// This module can come from a registry or through a local / remote reference +import { MyLocalModule } from "./.gen/modules/my-local-module"; + +export class ModulesStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + const provider = new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + const localModule = new MyLocalModule(this, "local-module", { + ipAddress: "127.0.0.1", + }); + + new TerraformOutput(this, "dns-server", { + value: localModule.dnsServerOutput, + }); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack, TerraformOutput +# This module can come from a registry or through a local / remote reference +from imports.my_local_module import MyLocalModule + + +class ModuleWithOutputStack(TerraformStack): + def __init__(self, scope: Construct, ns: str): + super().__init__(scope, ns) + + localModule = MyLocalModule(self, "local-module", ip_address='127.0.0.1') + TerraformOutput(self, "dns-server", value=localModule.dns_server_output) + +app = App() +ModuleWithOutputStack(app, "hello-terraform") +app.synth() +``` + +```java +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; +import com.hashicorp.cdktf.TerraformStack; +import software.constructs.Construct; +import imports.my_local_module.MyLocalModule; +import imports.my_local_module.MyLocalModuleConfig; +public class MainModuleExample extends TerraformStack { + + public MainModuleExample(Construct scope, String id){ + super(scope, id); + + MyLocalModule localModule = new MyLocalModule(this, "local-module", MyLocalModuleConfig.builder() + .ipAddress("127.0.0.1") + .build() + ); + + new TerraformOutput(this, "dns-server", TerraformOutputConfig.builder() + .value(localModule.getDnsServerOutputOutput()) + .build() + ); + + } +} +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using my_local_module; + + +namespace Examples +{ + class LocalModuleStack : TerraformStack + { + public LocalModuleStack(Construct scope, string name) : base(scope, name) + { + // Add this to your project's .csproj file: + // + // + // + MyLocalModule localModule = new MyLocalModule(this, "local-module", new MyLocalModuleConfig + { + IpAddress = "127.0.0.1", + }); + + new TerraformOutput(this, "dns-server", new TerraformOutputConfig + { + Value = localModule.DnsServerOutput + }); + + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + + // This module can come from a registry or through a local / remote reference + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/my_local_module" +) + +func NewModulesStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + localModule := my_local_module.NewMyLocalModule(stack, jsii.String("local-module"), &my_local_module.MyLocalModuleConfig{ + IpAddress: jsii.String("127.0.0.1"), + }) + + cdktf.NewTerraformOutput(stack, jsii.String("dns-server"), &cdktf.TerraformOutputConfig{ + Value: localModule.DnsServerOutput(), + }) + + return stack +} + +``` + + + +## Create Modules + +While we generally recommend generating code bindings for modules, you can also use the `TerraformHclModule` class to reference any module that Terraform supports. Both methods create identical synthesized Terraform configuration files, but using `TerraformHclModule` does not generate any types or type-safe inputs or outputs. + +The following example uses `TerraformHclModule` to import an AWS module. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { TerraformHclModule } from "cdktf"; + +export class ModulesStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + const provider = new AwsProvider(this, "aws", { + region: "us-west-2", + }); + + new TerraformHclModule(this, "Vpc", { + source: "terraform-aws-modules/vpc/aws", + // Note: variables has no types for its inputs. + // When using this for other modules consult the docs of the module + // to ensure the arguments are correct. + variables: { + name: "my-vpc", + cidr: "10.0.0.0/16", + azs: ["us-west-2a", "us-west-2b", "us-west-2c"], + private_subnets: ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"], + public_subnets: ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"], + enable_nat_gateway: true, + }, + providers: [provider], + }); + } +} +``` + +```java + AwsProvider provider = new AwsProvider(stack, "provider", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + + TerraformHclModule module = new TerraformHclModule(stack, "Vpc", TerraformHclModuleConfig.builder() + .source("terraform-aws-modules/vpc/aws") + // Note: variables has no types for its inputs. + // When using this for other modules consult the docs of the module + // to ensure the arguments are correct. + .variables(new HashMap(){{ + put("name", "my-vpc"); + put("cidr", "10.0.0.0/16"); + put("azs", Arrays.asList("us-west-2a", "us-west-2b", "us-west-2c")); + put("private_subnets", Arrays.asList("10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24")); + put("public_subnets", Arrays.asList("10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24")); + put("enable_nat_gateway", true); + }}) + .providers(Arrays.asList(provider)) + .build() + ); +``` + +```python +class HclModuleStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + provider = AwsProvider(self, "provider", + region = "us-east-1", + ) + + module = TerraformHclModule(self, "Vpc", + source = "terraform-aws-modules/vpc/aws", + # Note: variables has no types for its inputs. + # When using this for other modules consult the docs of the module + # to ensure the arguments are correct. + variables = { + "name": "my-vpc", + "cidr": "10.0.0.0/16", + "azs": ["us-west-2a", "us-west-2b", "us-west-2c"], + "private_subnets": ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"], + "public_subnets": ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"], + "enable_nat_gateway": True, + }, + providers = [provider] + ) + +app = App() +HclModuleStack(app, "hello-terraform") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; + +namespace Examples +{ + class TerraformHclModuleStack : TerraformStack + { + public TerraformHclModuleStack(Construct scope, string name) : base(scope, name) + { + AwsProvider provider = new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-east-1" + }); + + new TerraformHclModule(this, "vpc", new TerraformHclModuleConfig + { + Source = "terraform-aws-modules/vpc/aws", + // Note: Variables has no types for its inputs. + // When using this for other modules consult the docs of the module + // to ensure the arguments are correct. + Variables = new Dictionary { + { "name", "my-vpc" }, + { "cidr", "10.0.0.0/16" }, + { "azs", new [] { "us-west-2a", "us-west-2b", "us-west-2c" } }, + { "private_subnets", new [] { "10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24" } }, + { "public_subnets", new [] { "10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24" } }, + { "enable_nat_gateway", true } + }, + Providers = new[] { provider } + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func NewModulesStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + provider := aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-west-2"), + }) + + // create a list with the AWS provider construct to pass to the module + providers := append(make([]interface{}, 0), provider) + + cdktf.NewTerraformHclModule(stack, jsii.String("Vpc"), &cdktf.TerraformHclModuleConfig{ + Source: jsii.String("terraform-aws-modules/vpc/aws"), + // Note: Variables has no types for its inputs. + // When using this for other modules consult the docs of the module + // to ensure the arguments are correct. + Variables: &map[string]interface{}{ + "name": "my-vpc", + "cidr": "10.0.0.0/16", + "azs": []string{"us-west-2a", "us-west-2b", "us-west-2c"}, + "private_subnets": []string{"10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"}, + "public_subnets": []string{"10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"}, + "enable_nat_gateway": true, + }, + Providers: &providers, + }) + + return stack +} + +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/providers.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/providers.mdx new file mode 100644 index 0000000000..1fac925e7e --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/providers.mdx @@ -0,0 +1,622 @@ +--- +page_title: Providers - CDK for Terraform +description: >- + Providers allow Terraform to communicate with external APIs. Learn to define + providers in a CDK for Terraform application. +--- + +# Providers + +A [provider](/terraform/language/providers) is a plugin that lets Terraform manage an external API. In your CDK for Terraform (CDKTF) application, you use your preferred programming language to define the [resources](/terraform/cdktf/concepts/resources) you want Terraform to manage on one or more providers. + +You can install pre-built providers packaged with the required code bindings for your language or add providers to the [`cdktf.json`](/terraform/cdktf/create-and-deploy/configuration-file) file and generate code bindings manually. To use providers in your application, you can import them from the Terraform Registry or from your local machine. + +## What Are Providers? + +Provider plugins like the [AWS provider](https://registry.terraform.io/providers/hashicorp/aws/latest) or the [cloud-init provider](https://registry.terraform.io/providers/hashicorp/cloudinit/latest/docs) act as a translation layer that allows Terraform to communicate with many different cloud providers, databases, and services. + +![diagram: How Terraform uses plugins](/img/terraform-plugin-overview.png) + +Terraform uses providers to provision [resources](/terraform/language/resources), which describe one or more infrastructure objects like virtual networks and compute instances. Each provider on the [Terraform Registry](https://registry.terraform.io/) has documentation detailing available resources and their configuration options. + +## Install Pre-Built Providers + +It can take several minutes for CDKTF to generate the code bindings for providers with very large schemas, so we offer several popular providers as pre-built packages. Pre-built providers are a completely optional performance optimization, and you may prefer to generate the code bindings for these providers yourself. For example, you may want to use a different version of that provider than the one in the pre-built package. The [Terraform CDK Providers](https://github.com/orgs/cdktf/repositories?q=cdktf-provider-) page has a complete list, but available pre-built providers include the following options: + +- [AWS Provider](https://cdk.tf/provider/aws) +- [Google Provider](https://cdk.tf/provider/google) +- [Azure Provider](https://cdk.tf/provider/azurerm) +- [Kubernetes Provider](https://cdk.tf/provider/kubernetes) +- [Docker Provider](https://cdk.tf/provider/docker) +- [Github Provider](https://cdk.tf/provider/github) +- [Null Provider](https://cdk.tf/provider/null) + +We regularly publish these packages to NPM / PyPi, and you can treat them like any other dependency. The following example shows how to install the AWS provider in TypeScript / Node. + +``` +npm install @cdktf/provider-aws +``` + +When you use `npm install` to install a pre-built provider, you should not define that provider again in your `cdktf.json` file. If you receive errors while running `cdktf synth` because of duplicate providers, remove the duplicates from your `cdktf.json` file, delete `tsbuildinfo.json`, and run `cdktf synth` again. + +## Add Providers with CLI + +Use the [`provider add` command](/terraform/cdktf/cli-reference/commands#provider-add) to automatically install a pre-built provider if available. If a pre-built provider is not available, CDKTF uses local provider bindings. + +## Import Providers + +CDK for Terraform lets you import Terraform [providers](/terraform/language/providers) to your project. + +This TypeScript example project has a `main.ts` file that defines AWS resources. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack, TerraformVariable, Token } from "cdktf"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { Instance } from "./.gen/providers/aws/instance"; + +export class ProvidersStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + const instance = new Instance(this, "Hello", { + ami: "ami-2757f631", + instanceType: "t2.micro", + }); + } +} +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformStack; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; +import imports.aws.instance.Instance; +import imports.aws.instance.InstanceConfig; + +public class MainImportProviders extends TerraformStack { + + public MainImportProviders(Construct scope, String id){ + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + + new Instance(this, "hello", InstanceConfig.builder() + .ami("ami-2757f631") + .instanceType("t2.micro") + .build() + ); + } + + public static void main(String[] args) { + final App app = new App(); + new MainImportProviders(app, "hello-terraform"); + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack +from imports.aws.provider import AwsProvider +from imports.aws.instance import Instance + +class SimpleProviderStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region = "us-east-1", + ) + + Instance(self, "hello", + ami = "ami-2757f631", + instance_type = "t2.micro", + ) + +app = App() +SimpleProviderStack(app, "provider-stack") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.Instance; + +namespace Examples +{ + class ProviderStack : TerraformStack + { + public ProviderStack(Construct scope, string name) : base(scope, name) + { + // Add this to your project's .csproj file: + // + // + // + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-central-1" + }); + + new Instance(this, "instance", new InstanceConfig + { + Ami = "ami-2757f631", + InstanceType = "t2.micro" + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/instance" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func NewProvidersStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String(("us-east-1")), + }) + + instance := instance.NewInstance(stack, jsii.String("hello"), &instance.InstanceConfig{ + Ami: jsii.String("ami-2757f631"), + InstanceType: jsii.String("t2.micro"), + }) + return stack +} + +``` + + + +### Add Provider to `cdktf.json` + +To use a new provider, first add it to the `"terraformProviders"` array in the [`cdktf.json` file](/terraform/cdktf/create-and-deploy/configuration-file). + +The following example adds the [DNS Simple](https://registry.terraform.io/providers/dnsimple/dnsimple/latest/docs) provider. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformProviders": ["aws@~> 2.0", "dnsimple/dnsimple"] +} +``` + +### Generate Classes + +Go to the working directory and run `cdktf get` to create the appropriate TypeScript classes for the provider automatically. + +```bash +cdktf get +⠋ downloading and generating providers... +``` + +```bash +Generated typescript constructs in the output directory: .gen +``` + +### Import Classes + +Import and use the generated classes in your application. The following example imports the `DnsimpleProvider` and `Record` resources from `./.gen/providers/dnsimple` and defines them. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { TerraformStack, TerraformVariable, Token } from "cdktf"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { Instance } from "./.gen/providers/aws/instance"; +import { DnsimpleProvider } from "./.gen/providers/dnsimple/provider"; +import { ZoneRecord } from "./.gen/providers/dnsimple/zone-record"; + +export class ProvidersStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + const instance = new Instance(this, "Hello", { + ami: "ami-2757f631", + instanceType: "t2.micro", + }); + + const dnsimpleToken = new TerraformVariable(this, "dnsimpleToken", { + type: "string", + description: "dnsimple token", + sensitive: true, + }); + + const dnsimpleAccount = new TerraformVariable(this, "dnsimpleAccount", { + type: "string", + description: "dnsimple account", + sensitive: true, + }); + + new DnsimpleProvider(this, "dnsimple", { + token: dnsimpleToken.stringValue, + account: dnsimpleAccount.stringValue, + }); + + new ZoneRecord(this, "web-www", { + zoneName: "example.com", + name: "web", + value: instance.publicIp, + type: "A", + }); + } +} +``` + +```java +import com.hashicorp.cdktf.TerraformVariableConfig; +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.TerraformVariable; +import imports.aws.instance.Instance; +import imports.aws.instance.InstanceConfig; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; +import imports.dnsimple.provider.DnsimpleProvider; +import imports.dnsimple.provider.DnsimpleProviderConfig; +import imports.dnsimple.zone_record.ZoneRecord; +import imports.dnsimple.zone_record.ZoneRecordConfig; + +public class MainImportClasses extends TerraformStack { + + public MainImportClasses(Construct scope, String id){ + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + + Instance instance = new Instance(this, "Hello", InstanceConfig.builder() + .ami("ami-2757f631") + .instanceType("t2.micro") + .build() + ); + + TerraformVariable dnsimpleToken = new TerraformVariable(this, "dnsimpleToken", TerraformVariableConfig.builder() + .type("string") + .description("dnsimple token") + .sensitive(true) + .build() + ); + + TerraformVariable dnsimpleAccount = new TerraformVariable(this, "dnsimpleAccount", TerraformVariableConfig.builder() + .type("string") + .description("dnsimple account") + .sensitive(true) + .build() + ); + + new DnsimpleProvider(this, "dnsimple", DnsimpleProviderConfig.builder() + .token(dnsimpleToken.getStringValue()) + .account(dnsimpleAccount.getStringValue()) + .build() + ); + + new ZoneRecord(this, "web-www", ZoneRecordConfig.builder() + .zoneName("example.com") + .name("web") + .value(instance.getPublicIp()) + .type("A") + .build() + ); + } + + public static void main(String[] args) { + final App app = new App(); + new MainImportClasses(app, "hello-terraform"); + app.synth(); + } +} +``` + +```python +import os +from constructs import Construct +from cdktf import App, TerraformStack, TerraformVariable, Token +from imports.aws.provider import AwsProvider +from imports.dnsimple.provider import DnsimpleProvider +from imports.dnsimple.zone_record import ZoneRecord + +class ProviderStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region = "us-east-1", + ) + + instance = Instance(self, "Hello", + ami = "ami-2757f631", + instance_type = "t2.micro", + ) + + dnsimpleToken = TerraformVariable(self, "dnsimpleToken", + type = "string", + description = "dnsimple token", + sensitive = True + ) + + dnsimpleAccount = TerraformVariable(self, "dnsimpleAccount", + type = "string", + description = "dnsimple account", + sensitive = True + ) + + DnsimpleProvider(self, "dnsimple", + token = dnsimpleToken.string_value, + account = dnsimpleAccount.string_value + ) + + ZoneRecord(self, "web-www", + zone_name = "example.com", + name = "web", + value = instance.public_ip, + type = "A" + ) + +app = App() +ProviderStack(app, "provider-stack") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.Instance; +using dnsimple.Provider; +using dnsimple.ZoneRecord; + + +namespace Examples +{ + class ProviderClassesStack : TerraformStack + { + public ProviderClassesStack(Construct scope, string name) : base(scope, name) + { + // Add this to your project's .csproj file: + // + // + // + // + // + // + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-east-1" + }); + + Instance instance = new Instance(this, "instance", new InstanceConfig + { + Ami = "ami-2757f631", + InstanceType = "t2.micro" + }); + + TerraformVariable dnsimpleToken = new TerraformVariable(this, "dnsimpleToken", new TerraformVariableConfig + { + Type = "string", + Description = "dnsimple token", + Sensitive = true + }); + + TerraformVariable dnsimpleAccount = new TerraformVariable(this, "dnsimpleAccount", new TerraformVariableConfig + { + Type = "string", + Description = "dnsimple account", + Sensitive = true + }); + + new DnsimpleProvider(this, "dnsimple", new DnsimpleProviderConfig + { + Token = dnsimpleToken.StringValue, + Account = dnsimpleAccount.StringValue + }); + + new ZoneRecord(this, "web-www", new ZoneRecordConfig + { + ZoneName = "example.com", + Name = "web", + Value = instance.PublicIp, + Type = "A" + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + + dnsimple "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/dnsimple/dnsimple/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/dnsimple/dnsimple/zonerecord" + + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/instance" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func NewProvidersStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String(("us-east-1")), + }) + + instance := instance.NewInstance(stack, jsii.String("hello"), &instance.InstanceConfig{ + Ami: jsii.String("ami-2757f631"), + InstanceType: jsii.String("t2.micro"), + }) + + dnsimpleToken := cdktf.NewTerraformVariable(stack, jsii.String("dnsimpleToken"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("string"), + Description: jsii.String("dnsimple token"), + Sensitive: jsii.Bool(true), + }) + + dnsimpleAccount := cdktf.NewTerraformVariable(stack, jsii.String("dnsimpleAccount"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("string"), + Description: jsii.String("dnsimple account"), + Sensitive: jsii.Bool(true), + }) + + dnsimple.NewDnsimpleProvider(stack, jsii.String("dnsimple"), &dnsimple.DnsimpleProviderConfig{ + Token: dnsimpleToken.StringValue(), + Account: dnsimpleAccount.StringValue(), + }) + + zonerecord.NewZoneRecord(stack, jsii.String("web-www"), &zonerecord.ZoneRecordConfig{ + ZoneName: jsii.String("example.com"), + Name: jsii.String("web"), + Value: instance.PublicIp(), + Type: jsii.String("A"), + }) + + return stack +} + +``` + + + +Use the `synth` command to convert your code into a JSON Terraform configuration file. + +```bash +cdktf synth --json +``` + +```json +{ + "//": { + "metadata": { + "version": "0.0.11-pre.8757404fa25b6e405f1a51eac11b96943ccb372e", + "stackName": "vpc-example" + } + }, + "terraform": { + "required_providers": { + "aws": "~> 2.0", + "dnsimple": "undefined" + } + }, + "provider": { + "aws": [ + { + "region": "us-east-1" + } + ], + "dnsimple": [ + { + "account": "hello@example.com", + "token": "xxxxxxxxxx" + } + ] + }, + "resource": { + "aws_instance": { + "vpcexample_Hello_279554CB": { + "ami": "ami-2757f631", + "instance_type": "t2.micro", + "//": { + "metadata": { + "path": "vpc-example/Hello", + "uniqueId": "vpcexample_Hello_279554CB", + "stackTrace": [ + ..... + ] + } + } + } + }, + "dnsimple_record": { + "vpcexample_webwww_477C7150": { + "domain": "example.com", + "name": "web", + "type": "A", + "value": "${aws_instance.vpcexample_Hello_279554CB.public_ip}", + "//": { + "metadata": { + "path": "vpc-example/web-www", + "uniqueId": "vpcexample_webwww_477C7150", + "stackTrace": [ + ..... + ] + } + } + } + } + } +} + +``` + +## Provider Caching + +Caching prevents CDK for Terraform from re-downloading providers between each CLI command. It is also useful when you need to remove the `cdktf.out` folder and re-synthesize your configuration. Finally, caching is necessary when you use multiple [stacks](/terraform/cdktf/concepts/stacks) within one application. + +### Set the Caching Directory + +Refer to the Terraform documentation about [how to configure your plugin cache](/terraform/cli/config/config-file#provider-plugin-cache). Otherwise, CDKTF automatically sets the `TF_PLUGIN_CACHE_DIR` environment variable to `$HOME/.terraform.d/plugin-cache` when you use `cdktf` cli commands. + +To disable this behavior, set `CDKTF_DISABLE_PLUGIN_CACHE_ENV` to a non null value, like `CDKTF_DISABLE_PLUGIN_CACHE_ENV=1`. You may want to do this when a different cache directory is configured via a `.terraformrc` configuration file. + +## Use a Local Provider + +Terraform needs to know the location of local providers to enable CDKTF to generate the appropriate type bindings. You can configure this in two ways: + +- [Implied Local Mirrors](/terraform/cli/config/config-file#implied-local-mirror-directories) +- [Development Overrides](/terraform/cli/config/config-file#development-overrides-for-provider-developers) + +Once configured properly, you can reference these providers in the `cdktf.json` file the same way that you reference providers from the Terraform Registry. Refer to the [project configuration documentation](/terraform/cdktf/create-and-deploy/configuration-file) for more details about the `cdktf.json` specification. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/remote-backends.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/remote-backends.mdx new file mode 100644 index 0000000000..faf1a214eb --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/remote-backends.mdx @@ -0,0 +1,484 @@ +--- +page_title: Remote Backends - CDK for Terraform +description: >- + Configure a remote backend where Terraform can store infrastructure state + files remotely. +--- + +# Remote Backends + +Terraform stores [state](/terraform/language/state) about managed infrastructure to map real-world resources to the configuration, keep track of metadata, and improve performance. Terraform stores this state in a local file by default, but you can also use a Terraform [remote backend](/terraform/language/settings/backends/remote) to store state remotely. + +By default, `cdktf init` will configure a HCP Terraform workspace and a corresponding remote backend to store state for the new project. If you run `cdktf init --local` to configure your new project to use a local backend to store state, you can still [migrate the state](#migrate-local-state-storage-to-remote) to a remote backend later. + +You can configure your CDK for Terraform (CDKTF) remote backend to be [HCP Terraform](https://cloud.hashicorp.com/products/terraform), another Terraform [supported backend](#supported-backends), or a custom location. + +## When to Use Remote Backends + +Consider using a remote backend when multiple individuals or teams need access to your infrastructure state data. + +[Remote state](/terraform/language/state/remote) makes it easier for teams to work together because all members have access to the latest state data in the remote store. It also allows you to share output values with other configurations, allowing groups to share infrastructure resources. For example, a core infrastructure team can handle building the core machines and then expose some information that other teams can use for their own infrastructure. + +## Define Remote Backends + +You can define a [JSON configuration for a remote backend](/terraform/language/syntax/json#terraform-blocks) +with a `TerraformBackend` subclass or a JSON configuration file. + +The following example uses the `TerraformBackend` subclass `CloudBackend`. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { + CloudBackend, + TerraformStack, + TerraformOutput, + NamedCloudWorkspace, + App, +} from "cdktf"; + +export class CloudBackendStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new CloudBackend(this, { + hostname: "app.terraform.io", + organization: "company", + workspaces: new NamedCloudWorkspace("my-app-prod"), + }); + + new TerraformOutput(this, "dns-server", { + value: "hello-world", + }); + } +} +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.CloudBackend; +import com.hashicorp.cdktf.CloudBackendConfig; +import com.hashicorp.cdktf.NamedCloudWorkspace; +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; + +public class MainRemoteBackendDefine extends TerraformStack { + + public MainRemoteBackendDefine(Construct scope, String id) { + super(scope, id); + + new CloudBackend(this, CloudBackendConfig.builder() + .hostname("app.terraform.io") + .organization("company") + .workspaces(new NamedCloudWorkspace("my-app-prod")) + .build() + ); + + new TerraformOutput(this, "dns-server", TerraformOutputConfig.builder() + .value("hello-world") + .build() + ); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, CloudBackend, NamedCloudWorkspace, TerraformStack, TerraformOutput +class RemoteBackendStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + CloudBackend(self, + hostname = "app.terraform.io", + organization = "company", + workspaces = NamedCloudWorkspace("my-app-prod") + ) + + TerraformOutput(self, "dns-server", + value = "hello-world" + ) + +app = App() +RemoteBackendStack(app, "hello-terraform") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; + +namespace Examples +{ + class CloudBackendStack : TerraformStack + { + public CloudBackendStack(Construct scope, string name) : base(scope, name) + { + new CloudBackend(this, new CloudBackendConfig + { + Hostname = "app.terraform.io", + Organization = "company", + Workspaces = new NamedCloudWorkspace("my-app-prod") + }); + + new TerraformOutput(this, "dns-server", new TerraformOutputConfig + { + Value = "hello-world" + }); + } + } +} +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +func NewCloudBackendStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cdktf.NewCloudBackend(stack, &cdktf.CloudBackendConfig{ + Hostname: jsii.String("app.terraform.io"), + Organization: jsii.String("company"), + Workspaces: cdktf.NewNamedCloudWorkspace(jsii.String("my-app-prod"), nil), + }) + + cdktf.NewTerraformOutput(stack, jsii.String("dns-server"), &cdktf.TerraformOutputConfig{ + Value: "hello-world", + }) + + return stack +} + +``` + + + +When you call `cdktf synth`, CDKTF stores the backend metadata like the organization name and workspace name in the `cdk.tf.json` file within the `cdktf.out` stack sub-directory containing the synthesized CDKTF code. For example, CDKTF creates the output for a stack called `hello-terraform` in `cdktf.out/stacks/hello-terraform`. + +The following example shows the stack output directory. + +```bash +tree . +. +└── cdk.tf.json +``` + +The following example shows a relevant snippet of the generated `cdk.tf.json` file. + +```json +{ + "//": { + "metadata": { + "backend": "cloud", + "cloud": "tfc", + "stackName": "hello-terraform", + "version": "0.20.11" + } + }, + "terraform": { + "cloud": { + "hostname": "app.terraform.io", + "organization": "company", + "workspaces": { + "name": "hello-terraform" + } + } + } +} +``` + +## Initialize Remote Backends + +All `cdktf` operations perform an automatic `terraform init`, but you can also initialize manually. + +To manually initialize a remote backend, go to the corresponding stack output directory in the `cdktf.out` folder and run `terraform init`. + +```shell +$ cd cdkf.out/stacks/hello-terraform +$ terraform init +``` + +## Migrate Local State Storage to Remote + +After you define your remote backend, you can migrate existing local state files to the designated remote location. This requires moving Terraform state files to the CDKTF output directory. + +Consider an example project called `hello-terraform` that is using local storage to store the Terraform state. To migrate the local stage files to the remote backend: + +1. Navigate into the main project directory. + +2. Use `CloudBackend` to add a new remote backend. + + + + + + + + + +```ts +class LocalBackendStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new TerraformOutput(this, "dns-server", { + value: "local", + }); + } +} + +const app = new App(); +const stack = new LocalBackendStack(app, "local-to-cloud-backend"); +new CloudBackend(stack, { + hostname: "app.terraform.io", + organization: "company", + workspaces: new NamedCloudWorkspace("my-app-prod"), +}); +``` + +```java +public class MainRemoteBackend extends TerraformStack { + + public MainRemoteBackend(Construct scope, String id) { + super(scope, id); + + new TerraformOutput(this, "dns-server", TerraformOutputConfig.builder() + .value("local") + .build() + ); + } + + public static void main(String[] args) { + final App app = new App(); + MainRemoteBackend stack = new MainRemoteBackend(app, "local-to-cloud-backend"); + new CloudBackend(stack, CloudBackendConfig.builder() + .hostname("app.terraform.io") + .organization("company") + .workspaces(new NamedCloudWorkspace("my-app-prod")) + .build() + ); + app.synth(); + } +} +``` + +```python +stack = Stack(App(), "hi-terraform") + CloudBackend(self, + hostname = "app.terraform.io", + organization = "company", + workspaces = NamedCloudWorkspace("my-app-prod") + ) +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; + +namespace Examples +{ + class LocalBackendStack : TerraformStack + { + public LocalBackendStack(Construct scope, string name) : base(scope, name) + { + new TerraformOutput(this, "dns-server", new TerraformOutputConfig + { + Value = "local" + }); + } + } +} + +App app = new App(); +LocalBackendStack stack = new LocalBackendStack(app, "local-to-cloud-backend"); +new CloudBackend(stack, new CloudBackendConfig { + Hostname = "app.terraform.io", + Organization = "company", + Workspaces = new NamedCloudWorkspace("my-app-prod") +}); + +app.Synth(); +``` + +```go + +func NewLocalBackendStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cdktf.NewTerraformOutput(stack, jsii.String("dns-server"), &cdktf.TerraformOutputConfig{ + Value: "local", + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + stack := NewLocalBackendStack(app, "hello-terraform") + cdktf.NewCloudBackend(stack, &cdktf.CloudBackendConfig{ + Hostname: jsii.String("app.terraform.io"), + Organization: jsii.String("company"), + Workspaces: cdktf.NewNamedCloudWorkspace(jsii.String("my-app-prod"), nil), + }) + + app.Synth() +} + +``` + + + +3. Run `cdktf diff --migrate-state` to migrate the state into HCP Terraform or Terraform Enterprise. + + ```bash + Initializing Terraform Cloud... + Migrating from backend "local" to Terraform Cloud. + Do you wish to proceed? + As part of migrating to Terraform Cloud, Terraform can optionally copy your + current workspace state to the configured Terraform Cloud workspace. + + Answer "yes" to copy the latest state snapshot to the configured + Terraform Cloud workspace. + + Answer "no" to ignore the existing state and just activate the configured + Terraform Cloud workspace with its existing state, if any. + + Should Terraform migrate your existing state? + + Enter a value: + yes + Initializing provider plugins... + - Reusing previous version of hashicorp/random from the dependency lock file + - Using previously-installed hashicorp/random v3.4.3 + Terraform Cloud has been successfully initialized! + ``` + +# Supported Backends + +In addition to HCP Terraform, Terraform and CDKTF support the following backends. + +- [local](/terraform/language/settings/backends/local) + ```typescript + new LocalBackend(stack, {...}); + ``` +- [azurerm](/terraform/language/settings/backends/azurerm) + ```typescript + new AzurermBackend(stack, {...}); + ``` +- [consul](/terraform/language/settings/backends/consul) + ```typescript + new ConsulBackend(stack, {...}); + ``` +- [cos](/terraform/language/settings/backends/cos) + ```typescript + new CosBackend(stack, {...}); + ``` +- [gcs](/terraform/language/settings/backends/gcs) + ```typescript + new GcsBackend(stack, {...}); + ``` +- [http](/terraform/language/settings/backends/http) + ```typescript + new HttpBackend(stack, {...}); + ``` +- [oss](/terraform/language/settings/backends/oss) + ```typescript + new OssBackend(stack, {...}); + ``` +- [pg](/terraform/language/settings/backends/pg) + ```typescript + new PgBackend(stack, {...}); + ``` +- [s3](/terraform/language/settings/backends/s3) + ```typescript + new S3Backend(stack, {...}); + ``` + +-> **Note**: CDK for Terraform v0.14 deprecated the artifactory, etcd, etcdv3, manta, and swift backends, and removed them in v0.20. Terraform removed these backends in v1.3. For migration paths from these removed backends, refer to [Upgrading to Terraform v1.3](/terraform/language/v1.3.x/upgrade-guides). + +## Escape Hatches + +Escape hatches can add to or override existing resources, and you can use them for backends or backend constructs that CDKTF does not natively support. Escape hatch methods have an `Override` suffix (e.g., `addOverride`). + +The following example uses an escape hatch to add an unsupported remote backend on a `Stack` object. + + + + + + + + + +```ts +stack.addOverride("terraform.backend", { + atlas: { + name: "example_corp/networking-prod", + address: "https://app.terraform.io", + }, +}); +``` + +```java +stack.addOverride("terraform.backend", new HashMap() { + { + put("atlas", new HashMap() { + { + put("name", "example_corp/networking-prod"); + put("address", "https://app.terraform.io"); + } + }); + } +}); +``` + +```python +stack.add_override("terraform.backend",{ + "atlas": { + "name": "example_corp/networking-prod", + "address": "https://app.terraform.io" + } +}) +``` + +```csharp +stack.AddOverride("terraform.backend", new Dictionary { + { "atlas", new Dictionary { + { "name", "example_corp/networking-prod" }, + { "address", "https://app.terraform.io" } + } +}); +``` + +```go +stack.AddOverride(jsii.String("terraform.backend"), &map[string]map[string]string{ + "atlas": { + "name": "example_corp/networking-prod", + "address": "https://app.terraform.io", + }, +}) +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/resources.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/resources.mdx new file mode 100644 index 0000000000..f962011d88 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/resources.mdx @@ -0,0 +1,1178 @@ +--- +page_title: Resources - CDK for Terraform +description: >- + Resources describe one or more infrastructure objects, like virtual networks, compute instances, and DNS records. Define resources in a CDK for Terraform application. +--- + +# Resources + +Resources are the most important element when defining infrastructure in CDKTF applications. Each resource describes one or more infrastructure objects, such as virtual networks, compute instances, or higher-level components such as DNS records. + +In your CDK for Terraform (CDKTF) application, you will use your preferred programming language to define the resources you want Terraform to manage on one or more [providers](/terraform/cdktf/concepts/providers). This page explains how to use resources in your application and how to use [escape hatches](#escape-hatch) to change resource behavior when necessary. + +## Define Resources + +Resource definitions and properties vary depending on the type of resource and the provider. Consult your provider's documentation for a full list of available resources and their configuration options. + +The following example defines a [DynamoDB table](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/dynamodb_table) resource on the AWS provider. + + + + + + + + + +```ts +export class ResourcesStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "eu-central-1", + }); + + const region = new DataAwsRegion(this, "region"); + + new DynamodbTable(this, "first-table", { + name: `my-first-table-${region.name}`, + hashKey: "temp", + attribute: [{ name: "id", type: "S" }], + billingMode: "PAY_PER_REQUEST", + }); + } +} +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import imports.aws.dynamodb_table.DynamodbTable; +import imports.aws.dynamodb_table.DynamodbTableAttribute; +import imports.aws.dynamodb_table.DynamodbTableConfig; + + +import java.util.Arrays; + +public class MainResourcesDefine extends TerraformStack { + + public MainResourcesDefine(Construct scope, String id){ + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region("us-east-1") + .build() + ); + + DataAwsRegion region = new DataAwsRegion(this, "region"); + + new DynamodbTable(this, "hello", DynamodbTableConfig.builder() + .name("my-first-table-"+region.getName()) + .hashKey("temp") + .attribute(Arrays.asList( + DynamodbTableAttribute.builder() + .name("id") + .type("S") + .build() + ) + ) + .billingMode("PAY_PER_REQUEST") + .build() + ); + } +} +``` + +```python +from constructs import Construct +from cdktf import TerraformStack + +class ResourceStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region="us-east-1" + ) + + region = DataAwsRegion(self, "region") + + DynamodbTable(self, "Hello", + name="my-first-table-{}".format(region.name), + hash_key="temp", + attribute=[{"name": "id", "type": "S"}], + billing_mode="PAY_PER_REQUEST" + ) +``` + +```csharp + DataAwsRegion region = new DataAwsRegion(this, "region"); + + new DynamodbTable(this, "first-table", new DynamodbTableConfig + { + Name = $"my-first-table-{region.Name}", + HashKey = "temp", + Attribute = new DynamodbTableAttribute[] { + new DynamodbTableAttribute { + Name = "id", + Type = "S" + } + }, + BillingMode = "PAY_PER_REQUEST" + }); +``` + +```go +import ( + "fmt" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/dataawsregion" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/dynamodbtable" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + +) + +func NewResourcesStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("eu-central-1"), + }) + + region := dataawsregion.NewDataAwsRegion(stack, jsii.String("region"), &dataawsregion.DataAwsRegionConfig{}) + + dynamodbtable.NewDynamodbTable(stack, jsii.String("first-table"), &dynamodbtable.DynamodbTableConfig{ + Name: jsii.String(fmt.Sprintf("my-first-table-%s", *region.Name())), + HashKey: jsii.String("id"), + Attribute: []map[string]string{ + {"name": "id", "type": "S"}, + }, + BillingMode: jsii.String("PAY_PER_REQUEST"), + }) + + + return stack +} + +``` + + + +The [examples page](/terraform/cdktf/examples-and-guides/examples) contains multiple example projects for every supported programming language. + +## Scope + +You can instantiate the same resource multiple times throughout your infrastructure. For example, you may want to create multiple S3 Buckets with different configurations. Instances that share the same parent element are considered to be part of the same scope. You must set a different `name` property for each instance to avoid naming conflicts. + +Refer to the [constructs documentation](/terraform/cdktf/concepts/constructs#scope) for more details and an example. + +## References + +You can reference resource properties throughout your configuration. For example, you may want to use the name of a parent resource when assigning names to related child resources. Refer to your provider's documentation for a full list of available properties for each resource type. + +To create references, call `myResource.` on the resource instance. For example, you could use `myResource.name` to retrieve the `name` property from `myResource`. Terraform does not support passing an entire block (e.g. `exampleNamespace.metadata`) into a resource or data source, so you must create a reference for each individual property. + +References are also useful when you need to track logical dependencies. For example, Kubernetes resources live in a namespace, so a namespace must exist before Terraform can provision the associated resources. The following example uses a reference for the namespace property in the the deployment. This reference tells Terraform that it needs to create the namespace before creating the resources. + + + + + + + + + +```ts +const exampleNamespace = new Namespace(this, "tf-cdk-example", { + metadata: { + name: "tf-cdk-example", + }, +}); + +new Deployment(this, "nginx-deployment", { + metadata: { + name: "nginx", + namespace: exampleNamespace.metadata.name, // Reference the namespace name propery + labels: { + app: "my-app", + }, + }, + spec: { + // ... + }, +}); +``` + +```java +import imports.kubernetes.namespace.Namespace; +import imports.kubernetes.namespace.NamespaceConfig; +import imports.kubernetes.namespace.NamespaceMetadata; + Namespace exampleNamespace = new Namespace(this, "tf-cdk-example", NamespaceConfig.builder() + .metadata(NamespaceMetadata.builder() + .name("tf-cdk-example") + .build()) + .build()); + + new Deployment(this, "nginx-deployment", DeploymentConfig.builder() + .metadata(DeploymentMetadata.builder() + .name("nginx") + .namespace(exampleNamespace.getMetadata().getName()) // Reference the name property + .labels(new HashMap() { + { + put("app", app.toString()); + } + }) + .build()) + .spec(DeploymentSpec.builder() + .selector(DeploymentSpecSelector.builder() + .matchLabels(new HashMap(){{ + put("app", app.toString()); + }}) + .build() + ) + .replicas("1") + .template(DeploymentSpecTemplate.builder() + .metadata(DeploymentSpecTemplateMetadata.builder() + .labels(new HashMap(){{ + put("app", app.toString()); + }}) + .build() + ) + .spec(DeploymentSpecTemplateSpec.builder() + .container(Arrays.asList(DeploymentSpecTemplateSpecContainer.builder() + .image("nginx:1.7.9") + .name("nginx") + .build() + ) + ) + .build() + ) + .build() + ) + .build() + ) + .build()); +``` + +```python + + exampleNamespace = Namespace(self, "tf-cdk-example", + metadata=NamespaceMetadata(name="tf-cdk-example") + ) + + Deployment(self, "nginx-deployment", + metadata=DeploymentMetadata( + name="nginx", + namespace=exampleNamespace.metadata.name, # Reference the name property + labels={"app": app} + ), + spec=DeploymentSpec( + selector=DeploymentSpecSelector( + match_labels={"app": app} + ), + replicas="1", + template=DeploymentSpecTemplate( + metadata=DeploymentSpecTemplateMetadata( + labels={"app": app} + ), + spec=DeploymentSpecTemplateSpec( + container=[ + DeploymentSpecTemplateSpecContainer( + image="nginx:1.7.9", name="nginx") + ] + ) + ) + ) + ) +``` + +```csharp + Namespace exampleNamespace = new Namespace(this, "tf-cdk-example", new NamespaceConfig + { + Metadata = new NamespaceMetadata + { + Name = "tf-cdk-example" + } + }); + + new Deployment(this, "nginx-deployment", new DeploymentConfig + { + Metadata = new DeploymentMetadata + { + Name = "nginx", + Namespace = exampleNamespace.Metadata.Name, // Reference the name property + Labels = new Dictionary { + { "app", "my-app" } + } + }, + Spec = new DeploymentSpec + { + Template = new DeploymentSpecTemplate + { + Metadata = new DeploymentSpecTemplateMetadata + { + Labels = new Dictionary { + { "app", "my-app" } + } + }, + Spec = new DeploymentSpecTemplateSpec + { + Container = new DeploymentSpecTemplateSpecContainer[] { + new DeploymentSpecTemplateSpecContainer { + Name = "nginx", + Image = "nginx:1.7.9" + } + } + } + } + } + }); +``` + +```go +exampleNamespace := namespace.NewNamespace(stack, jsii.String("tf-cdk-example"), &namespace.NamespaceConfig{ + Metadata: &namespace.NamespaceMetadata{ + Name: jsii.String("tf-cdk-example"), + }, +}) + +deployment.NewDeployment(stack, jsii.String("nginx-deployment"), &deployment.DeploymentConfig{ + Metadata: &deployment.DeploymentMetadata{ + Name: jsii.String("nginx"), + Namespace: exampleNamespace.Metadata().Name(), // Reference the name property + Labels: &map[string]*string{ + "app": jsii.String("my-app"), + }, + }, + Spec: &deployment.DeploymentSpec{ + Template: &deployment.DeploymentSpecTemplate{ + Metadata: &deployment.DeploymentSpecTemplateMetadata{ + Labels: &map[string]*string{ + "app": jsii.String("my-app"), + }, + }, + Spec: &deployment.DeploymentSpecTemplateSpec{ + Container: []deployment.DeploymentSpecTemplateSpecContainer{ + { + Name: jsii.String("nginx"), + Image: jsii.String("nginx:1.7.9"), + }, + }, + }, + }, + }, +}) +``` + + + +## Refactoring & Renaming Resources + +When working with your infrastructure definitions and the need arises to refactor or rename resources without destroying and recreating them, you can leverage the `moveTo` function like so: + +```ts +new S3Bucket(this, "test-bucket-move-to", { + bucket: "move-bucket-name", +}).addMoveTarget("move-s3"); + +new S3Bucket(this, "test-bucket-move-from", { + bucket: "move-bucket-name", +}).moveTo("move-s3"); +``` + +Refer to our [Refactoring Guide](/terraform/cdktf/examples-and-guides/refactoring#moving-renaming-resources-within-a-stack) for more information + +## Provisioners + +Provisioners can be used to model specific actions on the local machine or on a remote machine in order to prepare servers or other infrastructure objects for service. You can find more information on the concept of provisioners in the [Terraform docs](/terraform/language/resources/provisioners/syntax). You can pass the `provisioners` key to define a list of provisioners, connections can be configured with the `connection` key. A working example can be found at [examples/typescript/provisioner](https://github.com/hashicorp/terraform-cdk/blob/main/examples/typescript/provisioner/main.ts). + +If you need to use the special [`self` object](/terraform/language/resources/provisioners/syntax#the-self-object) that can only be used in `provisioner` and `connection` blocks to refer to the parent resource you can use the `TerraformSelf` class like this: `TerraformSelf.getString("public_ip")`. + +## Custom Condition Checks + +If you need to ensure a condition is met either before or after a resource was created you can specify [conditions](/terraform/language/expressions/custom-conditions#preconditions-and-postconditions). +To add one configure the `lifecycle` key on your resource with an object containing a `precondition` and / or a `postcondition`. These keys take a list of conditions with a `condition` key containing a Terraform Expression to be evaluated and an `errorMessage` key containing a string to be displayed if the condition is not met. + +## Importing Resources + +If you have existing resources that you want to manage with CDKTF, you can import them into your CDKTF application. The best way to do this is using the [`import` block feature](/terraform/language/import) of Terraform >= 1.5. You can do this in CDKTF either with a specified configuration or without. + +### How To Import + +To import a resource, first instantiate an instance of the resource type you wish to import – in our case we'll be using an S3Bucket. No configuration is explicitly needed. You then call the `importFrom` method on the resource object. This method takes the ID of the resource to be imported as the first argument and the provider as an optional second. The provider is only required if you have multiple providers of the same type in your configuration. + +```typescript +new S3Bucket(this, "bucket", {}).importFrom(bucketId); +``` + +When running plan / apply you will get the information that your resource is going to be imported. Once you have ran apply, you can remove the `importFrom` call and the resource will become managed by CDKTF. + +Please note that Terraform is going to update existing fields on the imported resource to match your configuration as it puts it under management. In our case we did not define any specific properties on the `S3Bucket` which causes Terraform e.g. to remove the tags currently defined on the resource (as can be seen on the plan below). If you want to keep existing settings, you can run a plan first, add everything that Terraform would change to your resource config, and only then apply the changes. + +Your output might look as follows: + +``` +ts-import Initializing the backend... +ts-import Initializing provider plugins... +ts-import - Reusing previous version of hashicorp/aws from the dependency lock file +ts-import - Using previously-installed hashicorp/aws v5.5.0 +ts-import Terraform has been successfully initialized! + + You may now begin working with Terraform. Try running "terraform plan" to see + any changes that are required for your infrastructure. All Terraform commands + should now work. + + If you ever set or change modules or backend configuration for Terraform, + rerun this command to reinitialize your working directory. If you forget, other + commands will detect it and remind you to do so if necessary. +ts-import aws_s3_bucket.bucket (bucket): Preparing import... [id=best-bucket-in-the-world] +ts-import aws_s3_bucket.bucket (bucket): Refreshing state... [id=best-bucket-in-the-world] +ts-import Terraform used the selected providers to generate the following execution + plan. Resource actions are indicated with the following symbols: + ~ update in-place + + Terraform will perform the following actions: +ts-import # aws_s3_bucket.bucket (bucket) will be updated in-place + # (imported from "best-bucket-in-the-world") + ~ resource "aws_s3_bucket" "bucket" { + arn = "arn:aws:s3:::best-bucket-in-the-world" + bucket = "best-bucket-in-the-world" + bucket_domain_name = "best-bucket-in-the-world.s3.amazonaws.com" + bucket_regional_domain_name = "best-bucket-in-the-world.s3.us-east-1.amazonaws.com" + + force_destroy = false + hosted_zone_id = "XXXXXXXXXXXXX" + id = "best-bucket-in-the-world" + object_lock_enabled = false + region = "us-east-1" + request_payer = "BucketOwner" + ~ tags = { + - "foo" = "bar" -> null + } + ~ tags_all = { + - "foo" = "bar" + } -> (known after apply) + + grant { + id = "XXXXXXXXXXXXX" + permissions = [ + "FULL_CONTROL", + ] + type = "CanonicalUser" + } + + server_side_encryption_configuration { + rule { + bucket_key_enabled = true + + apply_server_side_encryption_by_default { + sse_algorithm = "AES256" + } + } + } + + versioning { + enabled = true + mfa_delete = false + } + } + + Plan: 1 to import, 0 to add, 1 to change, 0 to destroy. + + ───────────────────────────────────────────────────────────────────────────── + + Saved the plan to: plan + + To perform exactly these actions, run the following command to apply: + terraform apply "plan" +``` + +### Generate Configuration For Import + +If you don't want to specify the configuration of your imported resource yourself you can use the static method `generateConfigForImport` on the class of the resource you want to import. This method takes the scope as the first argument, the construct id of the resource to import to (as will be given in the generated config returned), the resource id of the resource to be imported, and the provider as an optional fourth. The provider is only required if you have multiple providers of the same type in your configuration. + +```typescript +S3Bucket.generateConfigForImport(this, "bucket", bucketId); +``` + +When running `cdktf plan ` Terraform will generate code for the resource you are importing and CDKTF will convert it to the language you are using. + +Your output might look as follows: + +``` +ts-import-with-configuration Initializing the backend... +ts-import-with-configuration Initializing provider plugins... + - Reusing previous version of hashicorp/aws from the dependency lock file +ts-import-with-configuration - Using previously-installed hashicorp/aws v5.18.1 + + Terraform has been successfully initialized! +ts-import-with-configuration + You may now begin working with Terraform. Try running "terraform plan" to see + any changes that are required for your infrastructure. All Terraform commands + should now work. + + If you ever set or change modules or backend configuration for Terraform, + rerun this command to reinitialize your working directory. If you forget, other + commands will detect it and remind you to do so if necessary. +ts-import-with-configuration aws_s3_bucket.bucket: Preparing import... [id=best-bucket-in-the-world] +ts-import-with-configuration aws_s3_bucket.bucket: Refreshing state... [id=best-bucket-in-the-world] +ts-import-with-configuration Terraform will perform the following actions: +ts-import-with-configuration # aws_s3_bucket.bucket will be imported + # (config will be generated) + resource "aws_s3_bucket" "bucket" { + arn = "arn:aws:s3:::best-bucket-in-the-world" + bucket = "best-bucket-in-the-world" + bucket_domain_name = "best-bucket-in-the-world.s3.amazonaws.com" + bucket_regional_domain_name = "best-bucket-in-the-world.s3.us-east-1.amazonaws.com" + hosted_zone_id = "Z3AQBSTGFYJSTF" + id = "best-bucket-in-the-world" + object_lock_enabled = false + region = "us-east-1" + request_payer = "BucketOwner" + tags = {} + tags_all = {} + + grant { + id = "554912fda2704333d162d216be50aefb05562e0bf1709997f1d9417cf46087d5" + permissions = [ + "FULL_CONTROL", + ] + type = "CanonicalUser" + } + + server_side_encryption_configuration { + rule { + bucket_key_enabled = true + + apply_server_side_encryption_by_default { + sse_algorithm = "AES256" + } + } + } + + versioning { + enabled = false + mfa_delete = false + } + } + + Plan: 1 to import, 0 to add, 0 to change, 0 to destroy. + ╷ + │ Warning: Config generation is experimental + │ + │ Generating configuration during import is currently experimental, and the + │ generated configuration format may change in future versions. + ╵ + + ───────────────────────────────────────────────────────────────────────────── + + Terraform has generated configuration and written it to + generated_resources.tf. Please review the configuration and edit it as + necessary before adding it to version control. + + Saved the plan to: plan + + To perform exactly these actions, run the following command to apply: + terraform apply "plan" +ts-import-with-configuration Import without configuration detected. Terraform has created configuration for it: + # __generated__ by Terraform + # Please review these resources and move them into your main configuration files. + + # __generated__ by Terraform from "best-bucket-in-the-world" + resource "aws_s3_bucket" "bucket" { + bucket = "best-bucket-in-the-world" + bucket_prefix = null + force_destroy = null + object_lock_enabled = false + tags = {} + tags_all = {} + } + + + CDKTF has translated the code to the following: + + import { Construct } from "constructs"; + /* + * Provider bindings are generated by running `cdktf get`. + * See https://cdk.tf/provider-generation for more details. + */ + import { S3Bucket } from "./.gen/providers/aws/s3-bucket"; + class MyConvertedCode extends Construct { + constructor(scope: Construct, name: string) { + super(scope, name); + new S3Bucket(this, "bucket", { + bucket: "best-bucket-in-the-world", + bucketPrefix: [null], + forceDestroy: [null], + objectLockEnabled: false, + tags: {}, + tagsAll: {}, + }); + } + } + + + Please review the code and make any necessary changes before adding it to your codebase. + Make sure to only copy the code within the construct's constructor. + + NOTE: Your resource has not yet become managed by CDKTF. + To finish the import remove the call "generateConfigForImport", add the above code within the construct's constructor, and then append the call importFrom() to the generated code: + + new SomeResource(...).importFrom("some_id") +``` + +Though at this point, your resource has not been imported. To import, first add the new generated configuration to your project, then remove the initial call of `generateConfigForImport`. Finally, follow the steps outlined in the section "How To Import" above. On apply, your resource will be imported, then becoming managed by CDKTF. + +## Escape Hatch + +Terraform provides [meta-arguments](/terraform/language/resources/syntax#meta-arguments) to change resource behavior. For example, the `for_each` meta-argument creates multiple resource instances according to a map, or set of strings. The escape hatch allows you to use these meta-arguments to your CDKTF application and to override attributes that CDKTF cannot yet fully express. + +The following example defines a provisioner for a resource using the `addOverride` method. + + + + + + + + + +```ts +const tableName = "my-second-table"; + +const table = new DynamodbTable(this, "second-table", { + name: tableName, + hashKey: "id", + attribute: [{ name: "id", type: "S" }], +}); + +table.addOverride("provisioner", [ + { + "local-exec": { + command: `aws dynamodb create-backup --table-name ${tableName} --backup-name ${tableName}-backup`, + }, + }, +]); +``` + +```java +import com.hashicorp.cdktf.TerraformVariable; +import com.hashicorp.cdktf.TerraformVariableConfig; +import imports.aws.dynamodb_table.DynamodbTable; +import imports.aws.dynamodb_table.DynamodbTableAttribute; +import imports.aws.dynamodb_table.DynamodbTableConfig; + String tableName = "my-table"; + + DynamodbTable table = new DynamodbTable(this, "Hello", DynamodbTableConfig.builder() + .name(tableName) + .hashKey("id") + .attribute(Arrays.asList( + DynamodbTableAttribute.builder() + .name("id") + .type("S") + .build())) + .build()); + + table.addOverride("provisioner", Arrays.asList( + new HashMap() { + { + put("local-exec", new HashMap() { + { + put("command", "aws dynamodb create-backup --table-name " + + tableName + " --backup-name " + + tableName + "-backup"); + } + }); + } + })); +``` + +```python + + tableName = "my-table" + + table = DynamodbTable(self, "Hello", + name=tableName, + hash_key="id", + attribute=[{"name": "id", "type": "S"}] + ) + + table.add_override("provisioner", [ + { + "local-exec": { + "command": f"aws dynamodb create-backup --table-name {tableName} --backup-name {tableName}-backup" + } + } + ]) +``` + +```csharp + String tableName = "my-second-table"; + DynamodbTable table = new DynamodbTable(this, "second-table", new DynamodbTableConfig + { + Name = tableName, + HashKey = "id", + Attribute = new DynamodbTableAttribute[] { + new DynamodbTableAttribute { + Name = "id", + Type = "S" + } + } + }); + + table.AddOverride("provisioner", new Dictionary[] { + new Dictionary { + { "local-exec", new Dictionary { + { "command", $"aws dynamodb create-backup --table-name {tableName} --backup-name {tableName}-backup" } + } } + } + }); + +``` + +```go +tableName := "my-second-table" +table := dynamodbtable.NewDynamodbTable(stack, jsii.String("second-table"), &dynamodbtable.DynamodbTableConfig{ + Name: &tableName, + HashKey: jsii.String("id"), + Attribute: []map[string]string{ + {"name": "id", "type": "S"}, + }, +}) +table.AddOverride(jsii.String("provisioner"), []map[string]map[string]string{ + {"local-exec": { + "command": fmt.Sprintf( + "aws dynamodb create-backup --table-name %s --backup-name %s-backup", + tableName, + tableName, + ), + }}, +}) +``` + + + +When you run `cdktf synth`, CDKTF generates a Terraform configuration with the [provisioner added to the JSON object](/terraform/language/syntax/json#nested-block-mapping). + +```json +{ + "resource": { + "aws_dynamodb_table": { + "helloterraHello69872235": { + "hash_key": "temp", + "name": "my-table", + "attribute": [ + { + "name": "id", + "type": "S" + } + ], + "provisioner": [ + { + "local-exec": { + "command": "aws dynamodb create-backup --table-name my-table --backup-name my-table-backup" + } + } + ] + } + } + } +} +``` + +To override an attribute, include the resource attribute key in `addOverride`. The attribute in the escape hatch is in snake case because the Terraform JSON configuration uses snake case instead of camel case. + + + + + + + + + +```ts +const topic = new SnsTopic(this, "Topic", { + displayName: "will-be-overwritten", +}); +topic.addOverride("display_name", "my-topic"); +``` + +```java +new SnsTopic(this, "Topic", SnsTopicConfig.builder() + .displayName("will-be-overwritten") + .build()).addOverride("display_name", "my-topic"); +``` + +```python + + topic = SnsTopic(self, "Topic", + display_name="will-be-overwritten" + ) + + topic.add_override("display_name", "my-topic") +``` + +```csharp +SnsTopic topic = new SnsTopic(this, "Topic", new SnsTopicConfig +{ + DisplayName = "will-be-overwritten" +}); +topic.AddOverride("display_name", "my-topic"); +``` + +```go +topic := snstopic.NewSnsTopic(stack, jsii.String("Topic"), &snstopic.SnsTopicConfig{ + DisplayName: jsii.String("will-be-overwritten"), +}) +topic.AddOverride(jsii.String("display_name"), jsii.String("my-topic")) +``` + + + +When you run `cdktf synth`, CDKTF generates a Terraform configuration with the value overwritten. + +```json +{ + "resource": { + "aws_sns_topic": { + "helloterraTopic6609C1D4": { + "display_name": "my-topic" + } + } + } +} +``` + +Use a dot notation to access elements in arrays: `resource.addOverride("configurations.0.https", true)`. + +### Escape Hatch for Dynamic Blocks + +Terraform configurations sometimes use [`dynamic` blocks](/terraform/language/expressions/dynamic-blocks) to create related resources based on dynamic data, or data that is only known after Terraform provisions the infrastructure. For example, you could create a series of nested blocks for a series of Virtual Private Cloud (VPC) ingress ports. A `dynamic` block loops over a complex value and generates a nested resource block for each element of that complex value. + +In CDKTF applications, you must use an escape hatch when you want to loop through a dynamic value like a `TerraformVariable` or a resource output. + +To use an escape hatch to loop over dynamic data, you must: + +- Set the first argument of `addOverride` to be `dynamic.`. +- Create a `for_each` value for the second argument and set it to the list you want to iterate over. +- Take the attribute as base for the reference when you reference values from the list. For example, use `"${.value.nested_value}"`. + +The following example adds ingress values by looping through the ports passed as `TerraformVariable`. + + + + + + + + + +```ts +const portsList = new TerraformVariable(this, "ports", { + type: "list", + default: [22, 80, 443, 5432], +}); + +const sg = new SecurityGroup(this, "security1", { + name: "security1", + vpcId: "vpcs", + egress: [ + { + fromPort: 0, + toPort: 0, + cidrBlocks: ["0.0.0.0/0"], + protocol: "-1", + }, + ], +}); +sg.addOverride("dynamic.ingress", { + for_each: portsList.listValue, + content: { + from_port: "${ingress.value}", + to_port: "${ingress.value}", + cidr_blocks: ["0.0.0.0/0"], + protocol: "-1", + }, +}); +``` + +```java +import com.hashicorp.cdktf.TerraformVariable; +import com.hashicorp.cdktf.TerraformVariableConfig; +import imports.aws.security_group.*; + TerraformVariable ports = new TerraformVariable(this, "ports", TerraformVariableConfig.builder() + .type("list") + .defaultValue(Arrays.asList(22, 80, 443, 5432)) + .build()); + + SecurityGroup sq = new SecurityGroup(this, "sec1grp", SecurityGroupConfig.builder() + .name("security1") + .vpcId("vpcs") + .egress(Arrays.asList( + SecurityGroupEgress.builder() + .fromPort(0) + .toPort(0) + .cidrBlocks(Arrays.asList("0.0.0.0/0")) + .protocol("-1") + .build())) + .build()); + + sq.addOverride("dynamic.ingress", new HashMap() { + { + put("for_each", ports.getListValue()); + put("content", new HashMap() { + { + put("from_port", "${ingress.value}"); + put("to_port", "${ingress.value}"); + put("cidr_blocks", Arrays.asList("0.0.0.0/0")); + put("protocol", "-1"); + } + }); + } + }); +``` + +```python + + ports = TerraformVariable(self, "ports", + type="list", + default=[22, 80, 443, 5432] + ) + + sq = SecurityGroup(self, "sec1grp", + name="security1", + vpc_id="vpcs", + egress=[ + { + "from_port": 0, + "to_port": 0, + "cidr_blocks": ["0.0.0.0/0"], + "protocol": "-1" + } + ] + ) + + sq.add_override("dynamic.ingress", { + "for_each": ports.list_value, + "content": { + "from_port": "${ingress.value}", + "to_port": "${ingress.value}", + "cidr_blocks": ["0.0.0.0/0"], + "protocol": "-1" + } + }) +``` + +```csharp +TerraformVariable portsList = new TerraformVariable(this, "ports", new TerraformVariableConfig +{ + Type = "list", +}); +SecurityGroup sg = new SecurityGroup(this, "security1", new SecurityGroupConfig +{ + Name = "security1", + VpcId = "vpcs", + Egress = new SecurityGroupEgress[] { + new SecurityGroupEgress { + FromPort = 0, + ToPort = 0, + CidrBlocks = new string[] { "0.0.0.0/0" }, + Protocol = "-1" + } + } +}); +sg.AddOverride("dynamic.ingress", new Dictionary { + { "for_each", portsList.ListValue }, + { "content", new Dictionary { + { "from_port", "${ingress.value}" }, + { "to_port", "${ingress.value}" }, + { "cidr_blocks", new string[] { "0.0.0.0/0" } }, + { "protocol", "-1" } + }} +}); +``` + +```go +portsList := cdktf.NewTerraformVariable(stack, jsii.String("ports"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("list"), + Default: []int{22, 80, 443, 5432}, +}) +sg := securitygroup.NewSecurityGroup(stack, jsii.String("security1"), &securitygroup.SecurityGroupConfig{ + Name: jsii.String("security1"), + VpcId: jsii.String("vpcs"), + Egress: &[]securitygroup.SecurityGroupEgress{ + { + FromPort: jsii.Number(0), + ToPort: jsii.Number(0), + CidrBlocks: &[]*string{jsii.String("0.0.0.0/0")}, + Protocol: jsii.String("-1"), + }, + }, +}) +sg.AddOverride(jsii.String("dynamic.ingress"), &map[string]interface{}{ + "for_each": portsList.ListValue(), + "content": &map[string]interface{}{ + "from_port": "${ingress.value}", + "to_port": "${ingress.value}", + "cidr_blocks": []string{"0.0.0.0/0"}, + "protocol": "-1", + }, +}) +``` + + + +You should only use escape hatches when you need to work with dynamic values that are unknown until after Terraform provisions your infrastructure. If you are working with static values, we recommend using the functionality available in your preferred programming language to iterate through the array. + +The following example loops through the ports without using an escape hatch. + + + + + + + + + +```ts +const ports = [22, 80, 443, 5432]; + +new SecurityGroup(this, "security2", { + name: "security2", + vpcId: "vpcs", + egress: [ + { + fromPort: 0, + toPort: 0, + cidrBlocks: ["0.0.0.0/0"], + protocol: "-1", + }, + ], + ingress: ports.map((port) => ({ + fromPort: port, + toPort: port, + cidrBlocks: ["0.0.0.0/0"], + protocol: "-1", + })), +}); +``` + +```java + List myPorts = Arrays.asList(22, 80, 443, 5432); + List ingress = new ArrayList(); + myPorts.forEach(port -> ingress.add( + SecurityGroupIngress.builder() + .toPort(port) + .fromPort(port) + .cidrBlocks(Arrays.asList("0.0.0.0/0")) + .protocol("-1") + .build())); + + new SecurityGroup(this, "sec2grp", SecurityGroupConfig.builder() + .name("security1") + .vpcId("vpcs") + .egress(Arrays.asList( + SecurityGroupEgress.builder() + .fromPort(0) + .toPort(0) + .cidrBlocks(Arrays.asList("0.0.0.0/0")) + .protocol("-1") + .build())) + .ingress(ingress) + .build()); +``` + +```python + ports = [22, 80, 443, 5432] + + SecurityGroup(self, "sec1grp", + name="security1", + vpc_id="vpcs", + egress=[ + { + "fromPort": 0, + "toPort": 0, + "ciderBlocks": ["0.0.0.0/0"], + "protocol": "-1" + } + ], + ingress=[ + SecurityGroupIngress( + from_port=port, + to_port=port, + protocol="-1", + cidr_blocks=["0.0.0.0/0"] + ) for port in ports + ] + ) +``` + +```csharp +int[] ports = new int[] { 22, 80, 443, 5432 }; +new SecurityGroup(this, "security2", new SecurityGroupConfig +{ + Name = "security2", + VpcId = "vpcs", + Egress = new SecurityGroupEgress[] { + new SecurityGroupEgress { + FromPort = 0, + ToPort = 0, + CidrBlocks = new string[] { "0.0.0.0/0" }, + Protocol = "-1" + } + }, + Ingress = ports.Select(port => new SecurityGroupIngress + { + FromPort = port, + ToPort = port, + CidrBlocks = new string[] { "0.0.0.0/0" }, + Protocol = "-1" + }).ToArray() +}); +``` + +```go +ports := []float64{22, 80, 443, 5432} +ingress := make([]securitygroup.SecurityGroupIngress, 0) +for _, port := range ports { + ingress = append(ingress, securitygroup.SecurityGroupIngress{ + FromPort: jsii.Number(port), + ToPort: jsii.Number(port), + CidrBlocks: &[]*string{jsii.String("0.0.0.0/0")}, + Protocol: jsii.String("-1"), + }) +} + +securitygroup.NewSecurityGroup(stack, jsii.String("security2"), &securitygroup.SecurityGroupConfig{ + Name: jsii.String("security2"), + VpcId: jsii.String("vpcs"), + Egress: &[]securitygroup.SecurityGroupEgress{ + { + FromPort: jsii.Number(0), + ToPort: jsii.Number(0), + CidrBlocks: &[]*string{jsii.String("0.0.0.0/0")}, + Protocol: jsii.String("-1"), + }, + }, + Ingress: &ingress, +}) +``` + + + +## Special Cases + +### Built-in `terraform_data` resource + +The [`terraform_data`](/terraform/language/resources/terraform-data) resource implements the standard resource lifecycle but does not directly perform any other actions. In CDKTF, the resource is exposed as the `TerraformData` class and you can import it directly from the `cdktf` package. + +### Large Resource Configurations + +A few individual Terraform Resources have very deeply nested schemas with a lot of attributes. This blows up the config classes and slows down the code generation for languages besides Typescript. To work around this we sometimes limit the depth of the config classes and use `any` on deeper level, some attributes we directly expose as `any` on the top level config class. + +- `aws` Provider: + - `aws_quicksight_template.definition`, `aws_quicksight_dashboard.definition`, and `aws_quicksight_analysis.definition` are set to `any` + - `wafv2` related resources have a lot of deeply nested attributes that might be skipped diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/stacks.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/stacks.mdx new file mode 100644 index 0000000000..4c04c2bb88 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/stacks.mdx @@ -0,0 +1,1074 @@ +--- +page_title: Stacks - CDK for Terraform +description: >- + Use stacks to specify separate collections of infrastructure for different + environments, like test and production. +--- + +# Stacks + +A stack represents a collection of infrastructure that CDK for Terraform (CDKTF) synthesizes as a dedicated Terraform configuration. Stacks allow you to separate the state management for multiple environments within an application. + +> **Note**: Stacks in CDKTF are different from the Terraform stacks concept announced at HashiConf 2023. Terraform stacks are a configuration layer that simplifies provisioning and managing resources at scale by controlling cross-configuration dependencies between Terraform modules. Refer to [Terraform stacks, explained](https://www.hashicorp.com/blog/terraform-stacks-explained) in the HashiCorp blog for additional information. +> **Hands-on:** Try the [Deploy Applications with CDK for Terraform](/terraform/tutorials/cdktf/cdktf-applications?utm_source=WEBSITE&utm_medium=WEB_IO&utm_offer=ARTICLE_PAGE&utm_content=DOCS) tutorial. + +## Scope + +You can instantiate the same resource multiple times throughout your infrastructure. For example, you may want to create multiple S3 Buckets with different configurations. Instances that share the same `stack` parent element are considered to be part of the same scope. You must set a different `name` property for each instance to avoid naming conflicts. + +Refer to the [constructs documentation](/terraform/cdktf/concepts/constructs#scope) for more details and an example. + +## Single Stack + +The following example generates a single Terraform configuration in the configured output folder. When you run `cdktf synth`, the synthesized Terraform configuration will be in the folder `cdktf.out/stacks/a-single-stack` + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { Instance } from "@cdktf/provider-aws/lib/instance"; + +class MySingleStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + new Instance(this, "Hello", { + ami: "ami-2757f631", + instanceType: "t2.micro", + }); + } +} + +const singleStackApp = new App(); +new MySingleStack(singleStackApp, "a-single-stack"); +singleStackApp.synth(); +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformStack; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; +import imports.aws.instance.Instance; +import imports.aws.instance.InstanceConfig; + +public class MainSingleStack extends TerraformStack { + + public MainSingleStack(Construct scope, String id) { + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region("us-east-1") + .build()); + + new Instance(this, "Hello", InstanceConfig.builder() + .ami("ami-2757f631") + .instanceType("t2.micro") + .build()); + } + + public static void main(String[] args) { + final App app = new App(); + new MainSingleStack(app, "a-single-stack"); + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack +from imports.aws.instance import Instance +from imports.aws.provider import AwsProvider + +class MySingleStack(TerraformStack): + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region = "us-east-1" + ) + + Instance(self, "Hello", + ami = "ami-2757f631", + instance_type = "t2.micro" + ) + +app = App() +MySingleStack(app, "a-single-stack") +app.synth +``` + +```csharp + class MySingleStack : TerraformStack + { + public MySingleStack(Construct scope, string name) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = "eu-central-1" + }); + + new Instance(this, "instance", new InstanceConfig + { + Ami = "ami-2757f631", + InstanceType = "t2.micro", + }); + } + public static void Main(string[] args) + { + App app = new App(); + new MySingleStack(app, "a-single-stack"); + + app.Synth(); + Console.WriteLine("App synth complete"); + } + } +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/instance" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +func NewSingleStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + + instance.NewInstance(stack, jsii.String("Hello"), &instance.InstanceConfig{ + Ami: jsii.String("ami-2757f631"), + InstanceType: jsii.String("t2.micro"), + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + stack := NewSingleStack(app, "a-single-stack") + + + app.Synth() +} + +``` + + + +## Multiple Stacks + +> **Hands-on:** Try the [Deploy Multiple Lambda Functions with TypeScript](/terraform/tutorials/cdktf/cdktf-assets-stacks-lambda) tutorial. This tutorial guides you through a multi-stack application. + +You can specify multiple stacks in your application. For example, you may want a separate configuration for development, testing, and production environments. + +The following example synthesizes multiple Terraform configurations in the configured output folder. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { Instance } from "@cdktf/provider-aws/lib/instance"; + +interface MyMultiStackConfig { + environment: string; + region?: string; +} + +class MyMultiStack extends TerraformStack { + constructor(scope: Construct, id: string, config: MyMultiStackConfig) { + super(scope, id); + + const { region = "us-east-1" } = config; + + new AwsProvider(this, "aws", { + region, + }); + + new Instance(this, "Hello", { + ami: "ami-2757f631", + instanceType: "t2.micro", + tags: { + environment: config.environment, + }, + }); + } +} + +const multiStackApp = new App(); +new MyMultiStack(multiStackApp, "multiple-stacks-dev", { + environment: "dev", +}); +new MyMultiStack(multiStackApp, "multiple-stacks-staging", { + environment: "staging", +}); +new MyMultiStack(multiStackApp, "multiple-stacks-production-us", { + environment: "production", + region: "us-east-1", +}); +new MyMultiStack(multiStackApp, "multiple-stacks-production-eu", { + environment: "production", + region: "eu-central-1", +}); +multiStackApp.synth(); +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformStack; +import imports.aws.instance.Instance; +import imports.aws.instance.InstanceConfig; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; + +public class MainMultipleStacks extends TerraformStack { + + public MainMultipleStacks(Construct scope, String id, MultipleStacksConfig config) { + super(scope, id); + + String region = config.region != null ? config.region : "us-east-1"; + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region(region) + .build()); + + new Instance(this, "Hello", InstanceConfig.builder() + .ami("ami-2757f631") + .instanceType("t2.micro") + .tags(new HashMap() { + { + put("environment", config.myEnvironment); + } + }) + .build()); + } + + public static class MultipleStacksConfig { + + public String myEnvironment; + public String region; + + public MultipleStacksConfig setEnvironment(String environment) { + Objects.requireNonNull(environment, "environment must be non-null"); + this.myEnvironment = environment; + return this; + } + + public MultipleStacksConfig setRegion(String region) { + this.region = region; + return this; + } + } + + public static void main(String[] args) { + final App app = new App(); + new MainMultipleStacks(app, "multiple-stacks-dev", + new MainMultipleStacks.MultipleStacksConfig().setEnvironment("dev")); + new MainMultipleStacks(app, "multiple-stacks-staging", + new MainMultipleStacks.MultipleStacksConfig().setEnvironment("staging")); + new MainMultipleStacks(app, "multiple-stacks-production-us", + new MainMultipleStacks.MultipleStacksConfig().setEnvironment("staging").setRegion("eu-central-1")); + + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack +from imports.aws.instance import Instance +from imports.aws.provider import AwsProvider + +class MyMultipleStacksConfig: + environment: str + region: str = None + def __init__(self, environment: str, region: str = None): + self.environment = environment + self.region = region + + +class MyMultipleStacks(TerraformStack): + def __init__(self, scope: Construct, id: str, config: MyMultipleStacksConfig): + super().__init__(scope, id) + + region = "us-east-1" if config.region == None else config.region + + AwsProvider(self, "aws", + region = region + ) + + Instance(self, "Hello", + ami = "ami-2757f631", + instance_type = "t2.micro", + tags = { + "environment": config.environment, + } + ) + +multi_stack_app = App() +MyMultipleStacks(multi_stack_app, "multiple-stacks-dev", MyMultipleStacksConfig(environment = "dev")) +MyMultipleStacks(multi_stack_app, "multiple-stacks-staging", MyMultipleStacksConfig(environment = "staging")) +MyMultipleStacks(multi_stack_app, "multiple-stacks-production-us", MyMultipleStacksConfig(environment = "staging", region = "eu-central-1")) + +multi_stack_app.synth +``` + +```csharp + public interface IMyMultiStackConfig + { + string Environment { get; set; } + string Region { get; set; } + } + + public class MyMultiStackConfig : IMyMultiStackConfig + { + public string Environment { get; set; } + public string Region { get; set; } = "us-east-1"; + } + + class MyMultiStack : TerraformStack + { + public MyMultiStack(Construct scope, string name, IMyMultiStackConfig config) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = config.Region, + }); + + new Instance(this, "instance", new InstanceConfig + { + Ami = "ami-2757f631", + InstanceType = "t2.micro", + Tags = new Dictionary { + { "environment", config.Environment } + } + }); + } + public static void Main(string[] args) + { + App app = new App(); + new MyMultiStack(app, "multiple-stacks-dev", new MyMultiStackConfig { + Environment = "dev", + }); + new MyMultiStack(app, "multiple-stacks-staging", new MyMultiStackConfig { + Environment = "staging", + }); + + new MyMultiStack(app, "multiple-stacks-production-us", new MyMultiStackConfig { + Environment = "production", + Region = "us-east-1", + }); + + new MyMultiStack(app, "multiple-stacks-production-eu", new MyMultiStackConfig { + Environment = "production", + Region = "eu-central-1", + }); + + app.Synth(); + Console.WriteLine("App synth complete"); + } + } +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/instance" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +type MultiStackConfig struct { + Environment string + Region *string +} + +func NewMultiStack(scope constructs.Construct, name string, config MultiStackConfig) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + region := config.Region + if region == nil { + region = jsii.String("us-east-1") + } + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: region, + }) + + instance.NewInstance(stack, jsii.String("Hello"), &instance.InstanceConfig{ + Ami: jsii.String("ami-2757f631"), + InstanceType: jsii.String("t2.micro"), + Tags: &map[string]*string{ + "environment": &config.Environment, + }, + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewMultiStack(app, "multiple-stacks-dev", MultiStackConfig{ + Environment: "dev", + }) + NewMultiStack(app, "multiple-stacks-staging", MultiStackConfig{ + Environment: "staging", + }) + NewMultiStack(app, "multiple-stacks-production-us", MultiStackConfig{ + Environment: "production", + Region: jsii.String("us-east-1"), + }) + NewMultiStack(app, "multiple-stacks-production-eu", MultiStackConfig{ + Environment: "production", + Region: jsii.String("eu-central-1"), + }) + + app.Synth() +} + +``` + + + +Running `cdktf synth` produces the following synthesized stacks. + +``` +$ cdktf list + +Stack name Path +multiple-stacks-dev cdktf.out/stacks/multiple-stacks-dev +multiple-stacks-staging cdktf.out/stacks/multiple-stacks-staging +multiple-stacks-production-us cdktf.out/stacks/multiple-stacks-production-us +multiple-stacks-production-eu cdktf.out/stacks/multiple-stacks-production-eu +``` + +To deploy and destroy multiple stacks at once, either specify multiple stacks in the `cdktf deploy` and `cdktf destroy` command or use a wild card glob (e.g., `cdktf deploy '*-production'`). + +Refer to [Best Practices](/terraform/cdktf/create-and-deploy/best-practices#separate-business-units-with-stacks) for more details about when to create multiple stacks and how to structure them. + +### Cross-Stack References + +When you reference resources from one stack in another stack, you can do so by exposing the resource in the source stack and referencing it in the target stack. + + + + + + + + + +```ts +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/aws-provider"; +import { Instance } from "@cdktf/provider-aws/lib/instance"; +import { Vpc } from "./constructs/vpc"; +import { DockerBackend } from "./constructs/docker-backend"; + +class VPCStack extends TerraformStack { + public vpc: Vpc; + constructor( + scope: Construct, + id: string, + public region = "us-east-1", + ) { + super(scope, id); + + new AwsProvider(this, "aws", { + region, + }); + + this.vpc = new Vpc(this, "vpc", {}); + } +} + +interface BackendStackConfig { + region: string; + vpcId: string; + dockerImage: string; +} + +class BackendStack extends TerraformStack { + constructor(scope: Construct, id: string, config: BackendStackConfig) { + super(scope, id); + + const { region, vpcId, dockerImage } = config; + + new AwsProvider(this, "aws", { + region, + }); + + new DockerBackend(this, "docker-backend", { + vpcId, + dockerImage, + }); + } +} + +const crossStackReferenceApp = new App(); +const origin = new VPCStack(crossStackReferenceApp, "origin-stack"); +new BackendStack(crossStackReferenceApp, "target-stack", { + region: origin.region, + vpcId: origin.vpc.id, + dockerImage: "org/my-image:latest", +}); + +crossStackReferenceApp.synth(); +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformStack; +import imports.aws.provider.AwsProvider; +import imports.aws.provider.AwsProviderConfig; +import com.mycompany.app.myconstructs.DockerBackend; +import com.mycompany.app.myconstructs.DockerBackendConfig; +import com.mycompany.app.myconstructs.Vpc; + +public class MainCrossStackReferences extends TerraformStack { + + public MainCrossStackReferences(Construct scope, String id){ + super(scope, id); + } + + public static class VPCStack extends TerraformStack{ + public Vpc vpc; + public String region = "us-east-1"; + public VPCStack(Construct scope, String id){ + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region(this.region) + .build() + ); + + this.vpc = new Vpc(this, "vpc"); + } + } + + public static class BackendStackConfig{ + + public String region; + public String vpcId; + public String dockerImage; + + public BackendStackConfig setRegion(String region){ + this.region = region; + return this; + } + + public BackendStackConfig setVpcId(String vpcId){ + this.vpcId = vpcId; + return this; + } + + public BackendStackConfig setDockerImage(String dockerImage){ + this.dockerImage = dockerImage; + return this; + } + } + + public static class BackendStack extends TerraformStack{ + + public BackendStack(Construct scope, String id, BackendStackConfig config){ + super(scope, id); + + new AwsProvider(this, "aws", AwsProviderConfig.builder() + .region(config.region) + .build() + ); + + new DockerBackend(this, "docker-backend", DockerBackendConfig.builder() + .vpcId(config.vpcId) + .dockerImage(config.dockerImage) + .build() + ); + } + } + public static void main(String[] args) { + final App app = new App(); + VPCStack origin = new VPCStack(app, "origin-stack"); + new BackendStack(app, "target-stack", new BackendStackConfig() + .setRegion(origin.region) + .setVpcId(origin.vpc.getId()) + .setDockerImage("org/my-image:latest") + ); + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack, Token +from imports.aws.instance import Instance +from imports.aws.provider import AwsProvider +from imports.vpc import Vpc +from my_constructs import DockerBackend + +class VPCStack(TerraformStack): + vpc: Vpc + region = "us-east-1" + def __init__(self, scope: Construct, id: str): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region = self.region + ) + + self.vpc = Vpc(self, "vpc") + +class BackendStackConfig: + region: str + vpc_id: str + docker_image: str + def __init__(self, region: str, vpc_id: str, docker_image: str): + self.region = region + self.vpc_id = vpc_id + self.docker_image = docker_image + +class BackendStack(TerraformStack): + def __init__(self, scope: Construct, id: str, config: BackendStackConfig): + super().__init__(scope, id) + + AwsProvider(self, "aws", + region = config.region + ) + + DockerBackend(self, "docker-backend", + vpc_id = config.vpc_id, + docker_image = config.docker_image + ) + +cross_stack_app = App() +origin = VPCStack(cross_stack_app, "origin-stack") +BackendStack(cross_stack_app, "target-stack", + BackendStackConfig( + region = origin.region, + vpc_id = origin.vpc.vpc_id_output, + docker_image = "org/my-image:latest" + ) +) + +cross_stack_app.synth() +``` + +```csharp + + public interface IVpcStackConfig + { + string Region { get; set; } + } + + public class VpcStackConfig : IVpcStackConfig + { + public string Region { get; set; } = "us-east-1"; + } + + class VpcStack : TerraformStack + { + public VpcStack(Construct scope, string name, IVpcStackConfig config) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = config.Region, + }); + + Vpc = new MyVpc(this, "vpc", new Dictionary { }); + } + + public MyVpc Vpc { get; } + } + + public interface IBackendStackConfig + { + string DockerImage { get; set; } + string Region { get; set; } + string VpcId { get; set; } + } + + public class BackendStackConfig : IBackendStackConfig + { + public string DockerImage { get; set; } + public string Region { get; set; } = "us-east-1"; + public string VpcId { get; set; } + } + + class BackendStack : TerraformStack + { + public BackendStack(Construct scope, string name, IBackendStackConfig config) : base(scope, name) + { + + new AwsProvider(this, "aws", new AwsProviderConfig + { + Region = config.Region, + }); + + new DockerBackend(this, "docker-backend", new Dictionary { + { "vpc_id", config.VpcId }, + { "docker_image", config.DockerImage }, + }); + } + public static void Main(string[] args) + { + App app = new App(); + + VpcStack origin = new VpcStack(app, "origin-stack", new VpcStackConfig { + Region = "us-east-1", + }); + new BackendStack(app, "target-stack", new BackendStackConfig { + Region = origin.Region, + VpcId = origin.Id, + DockerImage = "org/my-image:latest", + }); + + app.Synth(); + Console.WriteLine("App synth complete"); + } + } +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/myconstructs" +) + +type VPCStack struct { + Region *string + VPC *myconstructs.VPC +} + +func NewVPCStack(scope constructs.Construct, name string, region *string) *VPCStack { + stack := cdktf.NewTerraformStack(scope, &name) + + if region == nil { + region = jsii.String("us-east-1") + } + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: region, + }) + + vpc := myconstructs.NewVPC(stack, *jsii.String("vpc")) + + return &VPCStack{ + VPC: vpc, + Region: region, + } +} + +type BackendStackConfig struct { + Region string + VPCId string + DockerImage string +} + +func NewBackendStack(scope constructs.Construct, name string, config BackendStackConfig) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: &config.Region, + }) + + myconstructs.NewDockerBackend(stack, *jsii.String("docker-backend"), myconstructs.DockerBackendConfig{ + VPCId: config.VPCId, + DockerImage: config.DockerImage, + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + origin := NewVPCStack(app, "origin-stack", nil) + NewBackendStack(app, "target-stack", BackendStackConfig{ + Region: *origin.Region, + VPCId: origin.VPC.Id, + DockerImage: "org/my-image:latest", + }) + + app.Synth() +} + +``` + + + +From a usage perspective it looks like we are accessing the `id` value of `vpc` from the `origin-stack` instance of `VpcStack` and then referencing it in the `target-stack` instance of `BackendStack`. +Accessing a value from a different stack causes the value to be exported as `TerraformOutput` in the origin stack. +The value is then accessed through a `TerraformRemoteState` in the target stack. +Both are automatically added to the respective stacks to make the process seemless. + +When you are using HCP Terraform, each stack must be its own workspace. +This means that you need to create a separate workspace for each stack and you need to [set the permissions to allow access between the stacks](/terraform/cloud-docs/workspaces/state#remote-state-access-controls). + +### Stack Dependencies + +We add the stack dependencies in the `cdktf.out/manifest.json` file for each stack under `dependencies`. +By default a stack is dependant on another stack when the data used origins in that stack. +If you e.g. write `this.allResources = Fn.concat([resourceFromStackA.items, resourceFromStackB.items])` in Stack C and use `stackC.allResources` in Stack D, Stack D will be dependant on Stack A and B, but not C since that is not the origin of the data. + +To make the dependency explicit, run`stackD.addDependency(stackC)`. + +If you want to keep the result of the function attached to one stack and save its state, create a [Terraform Local value](/terraform/cdktf/concepts/variables-and-outputs#local-values) and expose it. The following example creates a `TerraformLocal`. + + + + + + + + + +```ts +this.allResources = new TerraformLocal(this, "merged_items", [ + sourceStackA.instance.id, + sourceStackB.instance.id, +]); +``` + +```java +this.allResources = new TerraformLocal(this, "merge_items", + Fn.concat(Arrays.asList(resourceFromStackA.items, resourceFromStackB.items))); +``` + +```python +self.allResources = TerraformLocal(self, "merge_items", Fn.concat([resources_from_stack_a, resources_from_stack_b])) +``` + +```csharp +this.allResources = new TerraformLocal(this, "merge_items", + Fn.Concat(new object[]{resourcesFromStackA, resourcesFromStackB})); +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/instance" + aws "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/aws/provider" +) + +type SourceStack struct { + Instance instance.Instance +} + +func NewSourceStack(scope constructs.Construct, name string) SourceStack { + stack := cdktf.NewTerraformStack(scope, &name) + + aws.NewAwsProvider(stack, jsii.String("aws"), &aws.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + + instance := instance.NewInstance(stack, jsii.String("Hello"), &instance.InstanceConfig{ + Ami: jsii.String("ami-abcde123"), + InstanceType: jsii.String("t2.micro"), + }) + + return SourceStack{ + Instance: instance, + } +} + +type DependencyStack struct { + AllResources *[]*string +} + +func NewDependencyStack(scope constructs.Construct, name string, dependencies []*SourceStack) DependencyStack { + stack := cdktf.NewTerraformStack(scope, &name) + + ids := make([]*string, 0) + for _, dep := range dependencies { + ids = append(ids, dep.Instance.Id()) + } + + allResources := cdktf.NewTerraformLocal(stack, jsii.String("merged_items"), ids) + + return DependencyStack{ + AllResources: allResources.AsList(), + } +} + +func NewNestedDependencyStack(scope constructs.Construct, name string, allResources []*string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cdktf.NewTerraformOutput(stack, jsii.String("all_resources"), &cdktf.TerraformOutputConfig{ + Value: allResources, + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + stackA := NewSourceStack(app, "stack-a") + stackB := NewSourceStack(app, "stack-b") + + stackC := NewDependencyStack(app, "stack-c", []*SourceStack{&stackA, &stackB}) + + NewNestedDependencyStack(app, "stack-d", *stackC.AllResources) + + app.Synth() +} + +``` + + + +The CLI will error if you deploy your application without first deploying the dependencies. It will also error if you try to destroy infrastructure without destroying the dependent stacks first. To remove these safeguards, add the `--ignore-missing-stack-dependencies` to the `deploy` and `destroy` commands. + +### Migration from `<= 0.2` + +Until version `0.2`, CDKTF only supported a single stack. For local state handling, CDKTF used a `terraform.tfstate` in the project root folder. With version `>= 0.3`, the local state file reflects the stack name it belongs to in its file name. When a `terraform.tfstate` file is still present in the project root folder, it has to be renamed to match the schema `terraform..tfstate` manually. + +## Escape Hatch + +For anything on the top-level `terraform` block that is not natively implemented, use the **stack escape hatch** to define a configuration. For example, define remote backend using the `addOverride` method in TypeScript. + +~> **Important**: Escape hatches **must not** have empty arguments or objects, because CDKTF removes them from the synthesized JSON configuration. + +The following example synthesizes a Terraform configuration with the `remote` backend included in the `terraform` block. + + + + + + + + + +```ts +stack.addOverride("terraform.backend", { + local: null, // delete the default local backend + remote: { + organization: "test", + workspaces: { + name: "test", + }, + }, +}); +``` + +```java +stack.addOverride("terraform.backend", new HashMap>() { + { + put("local", null); // delete the default local backend + put("remote", new HashMap() { + { + put("organization", "test"); + put("workspaces", new HashMap() { + { + put("name", "test"); + } + }); + } + }); + } +}); +``` + +```python +stack.add_override("terraform.backend", { + "local": Token.null_value(), # delete the default local backend + "remote": { + "organization": "test", + "workspaces": { + "name": "test" + } + } +}) +``` + +```csharp +stack.AddOverride("terraform.backend", new Dictionary { + {"local", null}, // delete the default local backend + {"remote", new Dictionary { + {"organization", "test"}, + {"workspaces", new Dictionary { + {"name", "test"} + }} + }} +}); +``` + +```go +stack.AddOverride(jsii.String("terraform.backend"), map[string]interface{}{ + "local": cdktf.Token_NullValue(), // delete the default local backend + "remote": map[string]interface{}{ + "organization": "test", + "workspaces": map[string]string{ + "name": "test", + }, + }, +}) +``` + + + +The following configuration snippet shows the `remote` backend configuration. + +```json +{ + "terraform": { + "required_providers": { + "aws": "~> 2.0" + }, + "backend": { + "remote": { + "organization": "test", + "workspaces": { + "name": "test" + } + } + } + } +} +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/tokens.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/tokens.mdx new file mode 100644 index 0000000000..9625b45373 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/tokens.mdx @@ -0,0 +1,215 @@ +--- +page_title: Tokens - CDK for Terraform +description: >- + Tokens allow CDK for Terraform to resolve programming language types to + Terraform language syntax. +--- + +# Tokens + +Tokens represent values that are unknown until Terraform applies your configuration. For example, names of cloud resources are only assigned upon creation. + +Some attributes specified using CDK for Terraform (CDKTF) may not directly map to the values required for Terraform configurations. You can use [Tokens](https://docs.aws.amazon.com/cdk/latest/guide/tokens.html) to cast these attributes to the correct Terraform language syntax. + +## Use Tokens + +You may need to use Tokens for: + +- [Module outputs](/terraform/cdktf/concepts/modules) for boolean, string, lists, maps, and other complex types. +- Resource attributes (such as `id`). +- Terraform outputs based on resource attributes. +- Using Terraforms `null` type. + +### Example + +An EKS module requires a _list_ of subnet ids in order to create a cluster. The VPC module outputs a list of subnets. + +To pass the subnet id list to the EKS module, you can use `publicSubnetsOutput` to retrieve the list from the VPC. However, the `subnets` attribute +requires a list of strings. Use `Token.asList(vpc.publicSubnetsOutput)` to cast the interpolated module +output as a list of strings. + + + + + + + + + +```ts +import { TerraformStack, TerraformVariable, Token } from "cdktf"; +import { Construct } from "constructs"; +import { Vpc } from "./.gen/modules/terraform-aws-modules/aws/vpc"; +import { Eks } from "./.gen/modules/terraform-aws-modules/aws/eks"; + +export class TokensStack extends TerraformStack { + constructor(scope: Construct, id: string, vpcName: string) { + super(scope, id); + + const logRetention = new TerraformVariable(this, "logRetentionInDays", { + type: "number", + }); + + const vpc = new Vpc(this, vpcName, { + name: vpcName, + publicSubnets: ["10.0.1.0/24", "10.0.2.0/24"], + }); + + new Eks(this, "EksModule", { + clusterName: "my-kubernetes-cluster", + subnetIds: Token.asList(vpc.publicSubnetsOutput), + cloudwatchLogGroupRetentionInDays: logRetention.numberValue, + }); + } +} +``` + +```java + TerraformVariable logRetention = new TerraformVariable(this, "logRetentionInDays", TerraformVariableConfig.builder() + .type("number") + .build() + ); + + Vpc vpc = new Vpc(this, "vpcName", VpcConfig.builder() + .name("vpcName") + .publicSubnets(Arrays.asList("10.0.1.0/24", "10.0.2.0/24")) + .build() + ); + + new Eks(this, "EksModules", EksConfig.builder() + .vpcId(vpc.getVpcIdOutput()) + .clusterName("my-kubernetes-cluster") + .subnetIds(Token.asList(vpc.getPublicSubnetsOutput())) + .cloudwatchLogGroupRetentionInDays(logRetention.getNumberValue()) + .build() + ); +``` + +```python + log_retention = TerraformVariable(self, "logRetentionInDays", + type = "number" + ) + + vpc = Vpc(self, "vpcName", + name = "vpcName", + public_subnets = ["10.0.1.0/24", "10.0.2.0/24"] + ) + + Eks(self, "EksModules", + vpc_id = vpc.vpc_id_output, + cluster_name = "my-kubernetes-cluster", + subnet_ids = Token.as_list(vpc.public_subnets_output), + cloudwatch_log_group_retention_in_days = log_retention.number_value + ) +``` + +```csharp + // Add this to your project's .csproj file: + // + // + // + // + // + // + TerraformVariable cloudwatchLogGroupRetentionInDays = new TerraformVariable(this, "cloudwatchLogGroupRetentionInDays", new TerraformVariableConfig + { + Type = "number" + }); + + Vpc vpc = new Vpc(this, "vpc", new VpcConfig + { + Name = "vpc", + PublicSubnets = new string[] { "10.0.1.0/24", "10.0.2.0/24" } + }); + + new Eks(this, "eks", new EksConfig + { + ClusterName = "my-kubernetes-cluster", + SubnetIds = Token.AsList(vpc.PublicSubnetsOutput), + VpcId = vpc.VpcIdOutput, + CloudwatchLogGroupRetentionInDays = cloudwatchLogGroupRetentionInDays.NumberValue + }); +``` + +```go +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/terraform-aws-modules/aws/eks" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/terraform-aws-modules/aws/vpc" +) + +func NewTokensStack(scope constructs.Construct, name string, vpcName string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + logRetention := cdktf.NewTerraformVariable(stack, jsii.String("logRetentionInDays"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("number"), + }) + + vpc := vpc.NewVpc(stack, &vpcName, &vpc.VpcConfig{ + Name: &vpcName, + PublicSubnets: &[]*string{jsii.String("10.0.1.0/24"), jsii.String("10.0.2.0/24")}, + }) + + eks.NewEks(stack, jsii.String("EksModule"), &eks.EksConfig{ + ClusterName: jsii.String("my-kubernetes-cluster"), + SubnetIds: cdktf.Token_AsList(vpc.PublicSubnetsOutput(), nil), + CloudwatchLogGroupRetentionInDays: logRetention.NumberValue(), + }) + + return stack +} + +``` + + + +Initially, CDKTF will resolve `Token.asList(vpc.publicSubnetsOutput)` to `["#{TOKEN[TOKEN.9]}"]` and `logRetention.numberValue` to a big negative number like `-123828381238238`. +Later in synthesis, CDKTF will resolve the token to `${module..public_subnets}` and `${var.logRetentionInDays}`. + +```json +{ + "module": { + "helloterraEksModule5DDB67AE": { + "cluster_name": "my-kubernetes-cluster", + "subnets": "${module.helloterraMyVpc62D94C17.public_subnets}" + } + } +} +``` + +Refer to the [AWS CDK documentation](https://docs.aws.amazon.com/cdk/latest/guide/tokens.html) for more detailed information about tokens. + +### Using Terraform's `null` value + +Some edge cases require passing the Terraform `null` value to for example an attribute of a resource. + + + +```typescript +import { Token } from "cdktf"; +Token.nullValue(); +``` + +```python +from cdktf import Token +Token.null_value() +``` + +```java +import com.hashicorp.cdktf.Token; +Token.nullValue() +``` + +```csharp +using HashiCorp.Cdktf; +Token.NullValue() +``` + +```go +import "github.com/hashicorp/terraform-cdk-go/cdktf" +cdktf.Token_NullValue() +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx new file mode 100644 index 0000000000..d4b956e095 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx @@ -0,0 +1,954 @@ +--- +page_title: Variables and Outputs - CDK for Terraform +description: >- + Input variables, local values, and output values allow you to request and + publish named values. +--- + +# Variables and Outputs + +Terraform can understand configurations written in either HashiCorp Configuration Language (HCL) syntax or JSON. Because neither of these is a programming language, Terraform has developed ways to enable users to request and publish named values. These are: + +- [**Input Variables:**](#input-variables) These are like function arguments. +- [**Local Values**](#local-values): These are like a function's temporary local variables. +- [**Output Values**](#output-values): These are like function return values. + +You may need to occasionally use these elements in your CDK for Terraform (CDKTF) application instead of passing data through the conventions available in your preferred programming language. + +## Input Variables + +You can define [Terraform variables](/terraform/language/values/variables) as input parameters to customize [stacks](/terraform/cdktf/concepts/stacks) and [modules](/terraform/cdktf/concepts/modules). For example, rather than hardcoding the number and type of AWS EC2 instances to provision, you can define a variable that lets users change these parameters based on their needs. + +### When to use Input Variables + +Variables are useful when you plan to synthesize your CDKTF application into a JSON configuration file for Terraform. For example, when you are planning to store configurations and run Terraform inside [HCP Terraform](https://cloud.hashicorp.com/products/terraform). + +If you plan to use CDKTF to manage your infrastructure, we recommend using your language's APIs to consume the data you would normally pass through Terraform variables. You can read from disk (synchronously) or from the environment variables, just as you would in any normal program. + +~> **Important**: The synthesized Terraform configuration will contain any values that you pass directly to CDKTF constructs. This includes credentials and any other sensitive data provided as input for the `cdktf` application. If you plan to commit the generated `cdk.tf.json` to version control, use [input variables](/terraform/cdktf/concepts/variables-and-outputs#input-variables) for secrets instead. + +### Define Input Variables + +You must specify values in exactly the same way as you would in an HCL configuration file. Refer to the [Terraform variables documentation](/terraform/language/values/variables#variables-on-the-command-line) for details. The CDKTF CLI currently also supports configuration via [environment variables](/terraform/language/values/variables#environment-variables). + +The following example uses `TerraformVariable` to provide inputs to resources. + + + + + + + + + +```ts +const imageId = new TerraformVariable(this, "imageId", { + type: "string", + default: "ami-abcde123", + description: "What AMI to use to create an instance", +}); +new Instance(this, "hello", { + ami: imageId.value, + instanceType: "t2.micro", +}); +``` + +```java + TerraformVariable imageId = new TerraformVariable(this, "imageId", TerraformVariableConfig.builder() + .type("string") + .defaultValue("ami-abcde123") + .description("What AMI to use to create an instance") + .build() + ); + + new Instance(this, "hello", InstanceConfig.builder() + .ami(imageId.getStringValue()) + .instanceType("t2.micro") + .build() + ); +``` + +```python +imageId = TerraformVariable(self, "imageId", + type = "string", + default = "ami-abcde123", + description = "What AMI to use to create an instance" +) +Instance(self, "hello", + ami = imageId.string_value, + instance_type = "t2.micro" +) +``` + +```csharp + TerraformVariable imageId = new TerraformVariable(this, "imageId", new TerraformVariableConfig + { + Type = "string", + Default = "ami-abcde123", + Description = "What AMI to use to create an instance", + }); + + new Instance(this, "hello", new InstanceConfig + { + Ami = imageId.StringValue, + InstanceType = "t2.micro", + }); +``` + +```go +imageId := cdktf.NewTerraformVariable(stack, jsii.String("imageId"), &cdktf.TerraformVariableConfig{ + Type: jsii.String("string"), + Default: jsii.String("ami-abcde123"), + Description: jsii.String("What AMI to use to create an instance"), +}) +instance.NewInstance(stack, jsii.String("hello"), &instance.InstanceConfig{ + Ami: imageId.StringValue(), + InstanceType: jsii.String("t2.micro"), +}) +``` + + + +### Define Complex Input Variables + + + + + +```typescript +const nodeGroupConfig = new TerraformVariable(this, "node-group-config", { + type: VariableType.object({ + node_group_name: VariableType.STRING, + instance_types: VariableType.list(VariableType.STRING), + min_size: VariableType.NUMBER, + desired_size: VariableType.NUMBER, + max_size: VariableType.NUMBER, + }), + nullable: false, + description: "Node group configuration", +}); + +new TerraformResource(this, "resource", { + nodeGroupConfig: nodeGroupConfig.value, +}); +``` + +```go +nodeGroupConfig := cdktf.NewTerraformVariable(stack, jsii.String("node-group-config"), &cdktf.TerraformVariableConfig{ + Type: cdktf.VariableType_Object(&map[string]*string{ + "node_group_name": cdktf.VariableType_STRING(), + "instance_types": cdktf.VariableType_List(cdktf.VariableType_STRING()), + "min_size": cdktf.VariableType_NUMBER(), + "desired_size": cdktf.VariableType_NUMBER(), + "max_size": cdktf.VariableType_NUMBER(), + }), + Nullable: jsii.Bool(false), + Description: jsii.String("Node group configuration"), +}) + +eksnodegroup.NewEksNodeGroup(stack, jsii.String("node-group"), &eksnodegroup.EksNodeGroupConfig{ + ClusterName: jsii.String("my-cluster"), + NodeRoleArn: jsii.String("arn:::::dummy"), + SubnetIds: jsii.Strings("id-1234"), + NodeGroupName: jsii.String(fmt.Sprintf("${%s.node_group_name}", *nodeGroupConfig.Fqn())), + InstanceTypes: cdktf.Token_AsList(fmt.Sprintf("${%s.instance_types}", *nodeGroupConfig.Fqn()), &cdktf.EncodingOptions{}), + ScalingConfig: &eksnodegroup.EksNodeGroupScalingConfig{ + DesiredSize: cdktf.Token_AsNumber(fmt.Sprintf("${%s.desired_size}", *nodeGroupConfig.Fqn())), + MinSize: cdktf.Token_AsNumber(fmt.Sprintf("${%s.min_size}", *nodeGroupConfig.Fqn())), + MaxSize: cdktf.Token_AsNumber(fmt.Sprintf("${%s.max_size}", *nodeGroupConfig.Fqn())), + }, +}) +``` + + + +### Passing Input Variables to CDKTF + +You can pass input variables to `cdktf diff`, `cdktf deploy`, and `cdktf destroy` in the following ways: + +- Environment variable: `TF_VAR_imageId=ami-abcde123` +- `--var` CLI option: `cdktf deploy --var='imageId=ami-abcde123'` +- `--var-file` CLI option: `cdktf deploy --var-file=/path/to/variables.tfvars` +- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/docs/configuration/variables#variable-definitions-tfvars-files) for details. + +## Local Values + +A [Terraform local](/terraform/language/values/locals) assigns a name to an expression to allow repeated usage. They are similar to a local variables in a programming language. + +### When to Use Local Values + +Use local values when you need use [Terraform functions](/terraform/cdktf/concepts/functions) to transform data that is only available when Terraform applies a configuration. For example, instance IDs that cloud providers assign upon creation. + +When values are available before [synthesizing your code](/terraform/cdktf/cli-reference/commands#synth), we recommend using native programming language features to modify values instead. + +### Define Local Values + +The following example uses `TerraformLocal` to create a local value. + + + + + + + + + +```ts +const commonTags = new TerraformLocal(this, "common_tags", { + Service: "service_name", + Owner: "owner", +}); + +new Instance(this, "example", { + ami: "ami-abcde123", + instanceType: "t2.micro", + tags: commonTags.expression, +}); +``` + +```java + TerraformLocal commonTags = new TerraformLocal(this, "common_tags", new HashMap(){{ + put("service", "service_name"); + put("owner", "owner"); + }}); + + new Instance(this, "example", InstanceConfig.builder() + .tags((Map) commonTags.getExpression()) + .build() + ); +``` + +```python + commonTags = TerraformLocal(self, "common_tags", { + "service": "service_name", + "owner": "owner" + }) + + Instance(self, "example", + tags = commonTags.as_string_map + ) +``` + +```csharp +TerraformLocal commonTags = new TerraformLocal(this, "common_tags", new Dictionary { + { "Service", "service_name" }, + { "Owner", "owner" }, +}); +new Instance(this, "example", new InstanceConfig +{ + Ami = "ami-abcde123", + InstanceType = "t2.micro", + Tags = Token.AsStringMap(commonTags.Expression), +}); +``` + +```go +commonTags := cdktf.NewTerraformLocal(stack, jsii.String("common_tags"), map[string]string{ + "Service": "service_name", + "Owner": "owner", +}) +instance.NewInstance(stack, jsii.String("example"), &instance.InstanceConfig{ + Ami: jsii.String("ami-abcde123"), + InstanceType: jsii.String("t2.micro"), + Tags: commonTags.AsStringMap(), +}) +``` + + + +When you run `cdktf synth` the `TerraformLocal` synthesizes to the following JSON. + +```json +"locals": { + "common_tags": { + "Service": "service_name", + "Owner": "owner" + } +} +... +"resource": { + "aws_instance": { + "example": { + "tags": "${local.common_tags}" + } + } +} +``` + +## Output Values + +You can define [Terraform outputs](/terraform/language/values/outputs) to export structured data about your resources. Terraform prints the output value for the user after it applies infrastructure changes, and you can use this information as a data source for other [Terraform workspaces](/terraform/language/state/workspaces). + +### When to use Output Values + +Use outputs to make data from [Terraform resources](/terraform/cdktf/concepts/resources) and [data sources](/terraform/cdktf/concepts/data-sources) available for further consumption or to share data between [stacks](/terraform/cdktf/concepts/stacks). Outputs are particularly useful when you need to access data that is only known after Terraform applies the configuration. For example, you may want to get the URL of a newly provisioned server. + +When values are available before [synthesizing your code](/terraform/cdktf/cli-reference/commands#synth), we recommend using the functionality in your preferred programming language to supply this data as direct inputs. + +The following example uses a `TerraformOutput` to create an output. + + + + + + + + + +```ts +import { TerraformLocal, TerraformStack, TerraformVariable } from "cdktf"; +import { Construct } from "constructs"; +import { App, TerraformOutput } from "cdktf"; +interface OutputVariableStackConfig { + readonly myDomain: string; +} + +class OutputVariableStack extends TerraformStack { + constructor( + scope: Construct, + name: string, + config: OutputVariableStackConfig, + ) { + super(scope, name); + + const { myDomain } = config; + + new TerraformOutput(this, "my-domain", { + value: myDomain, + }); + } +} + +const app = new App(); +new OutputVariableStack(app, "cdktf-producer", { + myDomain: "example.com", +}); +app.synth(); +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; + +public class VariablesAndOutputsValues extends TerraformStack { + + public VariablesAndOutputsValues(Construct scope, String id, VariablesAndOutputsValuesProps props){ + super(scope, id); + + new TerraformOutput(this, "my-domain", TerraformOutputConfig.builder() + .value(props.myDomain) + .build() + ); + } + + public static class VariablesAndOutputsValuesProps { + public String myDomain; + public VariablesAndOutputsValuesProps(String myDomain){ + this.myDomain = myDomain; + } + } + + public static void main(String[] args) { + final App app = new App(); + new VariablesAndOutputsValues(app, "cdktf-producer", new VariablesAndOutputsValuesProps("example.com")); + app.synth(); + } +} +``` + +```python +from constructs import Construct +from cdktf import App, TerraformStack, TerraformOutput + +class OutputValuesProps: + myDomain: str + def __init__(self, myDomain: str): + self.myDomain = myDomain + +class OutputValuesStack(TerraformStack): + def __init__(self, scope: Construct, name: str, props: OutputValuesProps): + super().__init__(scope, name) + + TerraformOutput(self, "my-domain", + value = props.myDomain + ) + +app = App() +OutputValuesStack(app, "cdktf-producer", OutputValuesProps(myDomain = "example.com")) +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using aws.Provider; +using aws.Instance; + +namespace Examples +{ + class OutputVariableStackConfig + { + public OutputVariableStackConfig(string myDomain) + { + this.MyDomain = myDomain; + } + + public string MyDomain { get; set; } + } + + class OutputVariableStack : TerraformStack + { + public OutputVariableStack(Construct scope, string name, OutputVariableStackConfig config) : base(scope, name) + { + new TerraformOutput(this, "my-domain", new TerraformOutputConfig + { + Value = config.MyDomain, + }); + } + public static void Main(string[] args) + { + App app = new App(); + new OutputVariableStack(app, "cdktf-producer", new OutputVariableStackConfig("example.com")); + app.Synth(); + } + } + +} +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +type OutputsStackConfig struct { + MyDomain string +} + +func NewOutputsStack(scope constructs.Construct, name string, config OutputsStackConfig) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cdktf.NewTerraformOutput(stack, jsii.String("my-domain"), &cdktf.TerraformOutputConfig{ + Value: &config.MyDomain, + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewOutputsStack(app, "outputs", OutputsStackConfig{ + MyDomain: "example.com", + }) + + app.Synth() +} + +``` + + + +### Define Output Values + +To access outputs, use the `_output` suffix for Python and the `Output` suffix for other languages. + +Outputs return an HCL expression representing the underlying Terraform resource, so the return type must always be `string`. When `TerraformOutput` is any other type than string, you must add a typecast to compile the application (e.g. `mod.numberOutput as number`). If a module returns a list, you must use an escape hatch to access items or loop over it. Refer to the [Resources page](/terraform/cdktf/concepts/resources) for more information about how to use escape hatches. + +The following Typescript example uses `TerraformOutput` to create an output for a Random provider resource. + + + + + + + + + +```ts +import { TerraformLocal, TerraformStack, TerraformVariable } from "cdktf"; +import { Construct } from "constructs"; +import { App, TerraformOutput } from "cdktf"; +import { RandomProvider } from "@cdktf/provider-random/lib/provider"; +import { Pet } from "@cdktf/provider-random/lib/pet"; +class OutputsUsageStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new RandomProvider(this, "random", {}); + const pet = new Pet(this, "pet", {}); + + new TerraformOutput(this, "random-pet", { + value: pet.id, + }); + } +} + +const app = new App(); +new OutputsUsageStack(app, "outputs-usage"); +app.synth(); +``` + +```java +import software.constructs.Construct; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; +import imports.random.pet.Pet; +import imports.random.provider.RandomProvider; + +public class VariablesAndOutputsDefineValues extends TerraformStack { + + public VariablesAndOutputsDefineValues(Construct scope, String id) { + super(scope, id); + + new RandomProvider(this, "random"); + + Pet pet = new Pet(this, "pet"); + + new TerraformOutput(this, "random-pet", TerraformOutputConfig.builder() + .value(pet.getId()) + .build()); + + public static void main(String[] args) { + final App app = new App(); + new VariablesAndOutputsDefineValues(app, "cdktf-demo"); + app.synth(); + } +} +``` + +```python +from imports.random.provider import RandomProvider + +from constructs import Construct +from cdktf import App, TerraformStack, TerraformOutput + +class DefineOutputStack(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + + RandomProvider(self, "random") + pet = random.pet.Pet(self, "pet") + + TerraformOutput(self, "random-pet", + value = pet.id + ) + +app = App() +DefineOutputStack(app, "cdktf-demo") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using random.Provider; +using random.Pet; + +namespace Examples +{ + class OutputsUsageStack : TerraformStack + { + public OutputsUsageStack(Construct scope, string name) : base(scope, name) + { + new RandomProvider(this, "random", new RandomProviderConfig()); + var pet = new Pet(this, "pet", new PetConfig()); + new TerraformOutput(this, "random-pet", new TerraformOutputConfig + { + Value = pet.Id, + }); + } + public static void Main(string[] args) + { + App app = new App(); + new OutputsUsageStack(app, "outputs-usage"); + app.Synth(); + } + } + +} +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/random/pet" + random "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/random/provider" +) + +func NewOutputsUsageStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + random.NewRandomProvider(stack, jsii.String("random"), &random.RandomProviderConfig{}) + + pet := pet.NewPet(stack, jsii.String("pet"), &pet.PetConfig{}) + cdktf.NewTerraformOutput(stack, jsii.String("random-pet"), &cdktf.TerraformOutputConfig{ + Value: pet.Id(), + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewOutputsUsageStack(app, "outputs-usage") + + app.Synth() +} + +``` + + + +When you run `cdktf synth`, CDKTF synthesizes the code to the following JSON configuration. + +```json +"output": { + "random-pet": { + "value": "${random_pet.pet.id}" + } +} +``` + +When you run `cdktf deploy`, CDKTF displays the following output. + +``` +Deploying Stack: cdktf-demo +Resources + ✔ RANDOM_PET pet random_pet.pet + +Summary: 1 created, 0 updated, 0 destroyed. + +Output: random-pet = choice-haddock +``` + +### Define & Reference Outputs via Remote State + +The following example uses outputs to share data between stacks, each of which has a [remote backend](/terraform/cdktf/concepts/remote-backends) to store the Terraform state files remotely. + + + + + + + + + +```ts +import { TerraformLocal, TerraformStack, TerraformVariable } from "cdktf"; +import { Construct } from "constructs"; +import { App, TerraformOutput } from "cdktf"; +import { + CloudBackend, + DataTerraformRemoteState, + NamedCloudWorkspace, +} from "cdktf"; + +class Producer extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new CloudBackend(this, { + organization: "hashicorp", + workspaces: new NamedCloudWorkspace("producer"), + }); + + new RandomProvider(this, "random", {}); + const pet = new Pet(this, "pet", {}); + + new TerraformOutput(this, "random-pet", { + value: pet.id, + }); + } +} + +class Consumer extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new CloudBackend(this, { + organization: "hashicorp", + workspaces: new NamedCloudWorkspace("consumer"), + }); + + const remoteState = new DataTerraformRemoteState(this, "remote-pet", { + organization: "hashicorp", + workspaces: { + name: "producer", + }, + }); + + new TerraformOutput(this, "random-remote-pet", { + value: remoteState.getString("random-pet"), + }); + } +} + +const app = new App(); +new Producer(app, "cdktf-producer"); +new Consumer(app, "cdktf-consumer"); +app.synth(); +``` + +```java +import imports.random.provider.RandomProvider; +import imports.random.pet.Pet; + +import software.constructs.Construct; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.TerraformOutput; +import com.hashicorp.cdktf.TerraformOutputConfig; +import com.hashicorp.cdktf.CloudBackend; +import com.hashicorp.cdktf.CloudBackendConfig; +import com.hashicorp.cdktf.NamedCloudWorkspace; +import com.hashicorp.cdktf.NamedRemoteWorkspace; +import com.hashicorp.cdktf.DataTerraformRemoteState; +import com.hashicorp.cdktf.DataTerraformRemoteStateRemoteConfig; + +public class VariablesAndOutputsRemoteState { + + public static class Producer extends TerraformStack{ + + public Producer(Construct scope, String id){ + super(scope, id); + + new CloudBackend(this, CloudBackendConfig.builder() + .organization("hashicorp") + .workspaces(new NamedCloudWorkspace("producer")) + .build() + ); + + new RandomProvider(this, "random"); + Pet pet = new Pet(this, "pet"); + + new TerraformOutput(this, "random-pet", TerraformOutputConfig.builder() + .value(pet.getId()) + .build() + ); + } + } + + public static class Consumer extends TerraformStack{ + + public Consumer(Construct scope, String id){ + super(scope, id); + + new CloudBackend(this, CloudBackendConfig.builder() + .organization("hashicorp") + .workspaces(new NamedCloudWorkspace("consumer")) + .build() + ); + + DataTerraformRemoteState remoteState = new DataTerraformRemoteState(this, "remote-pet", DataTerraformRemoteStateRemoteConfig.builder() + .organization("hashicorp") + .workspaces(new NamedRemoteWorkspace("producer")) + .build() + ); + } + } + + public static void main(String[] args) { + final App app = new App(); + new Producer(app, "cdktf-producer"); + new Consumer(app, "cdktf-consumer"); + app.synth(); + } +} +``` + +```python +import imports.random as random + +from constructs import Construct +from cdktf import App, TerraformStack, TerraformOutput, CloudBackend, NamedRemoteWorkspace, DataTerraformRemoteState + +class Producer(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + + CloudBackend(self, + organization = "hashicorp", + workspaces = NamedCloudWorkspace("producer") + ) + + random.provider.RandomProvider(self, "random") + pet = random.pet.Pet(self, "pet") + + TerraformOutput(self, "random-pet", + value = pet.id + ) + +class Consumer(TerraformStack): + def __init__(self, scope: Construct, name: str): + super().__init__(scope, name) + + CloudBackend(self, + organization = "hashicorp", + workspaces = NamedCloudWorkspace("consumer") + ) + + remoteState = DataTerraformRemoteState(self, "remote-pet", + organization = "hashicorp", + workspaces = NamedRemoteWorkspace(name = "producer") + ) + + TerraformOutput(self, "random-remote-pet", + value = remoteState.get_string("random-pet") + ) + +app = App() +Producer(app, "cdktf-producer") +Consumer(app, "cdktf-consumer") +app.synth() +``` + +```csharp +using System; +using System.IO; +using System.Collections.Generic; +using System.Linq; +using Constructs; +using HashiCorp.Cdktf; +using random.Provider; +using random.Pet; + +namespace Examples +{ + class Producer : TerraformStack + { + public Producer(Construct scope, string name) : base(scope, name) + { + new CloudBackend(this, new CloudBackendConfig + { + Organization = "hashicorp", + Workspaces = new NamedCloudWorkspace("producer"), + }); + + new RandomProvider(this, "random", new RandomProviderConfig()); + var pet = new Pet(this, "pet", new PetConfig()); + + new TerraformOutput(this, "random-pet", new TerraformOutputConfig + { + Value = pet.Id, + }); + } + } + + class Consumer : TerraformStack + { + public Consumer(Construct scope, string name) : base(scope, name) + { + new CloudBackend(this, new CloudBackendConfig + { + Organization = "hashicorp", + Workspaces = new NamedCloudWorkspace("consumer"), + }); + + DataTerraformRemoteState remoteState = new DataTerraformRemoteState(this, "remote-state", new DataTerraformRemoteStateRemoteConfig + { + Organization = "hashicorp", + Workspaces = new NamedRemoteWorkspace("producer"), + }); + + new TerraformOutput(this, "random-remote-pet", new TerraformOutputConfig + { + Value = remoteState.GetString("random-pet"), + }); + } + } + + class Main + { + public static void Main(string[] args) + { + App app = new App(); + new Producer(app, "cdktf-producer"); + new Consumer(app, "cdktf-consumer"); + app.Synth(); + } + } + +} +``` + +```go + +import ( + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/random/pet" + random "github.com/hashicorp/terraform-cdk/examples/go/documentation/generated/hashicorp/random/provider" +) + +func NewProducerStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cdktf.NewCloudBackend(stack, &cdktf.CloudBackendConfig{ + Organization: jsii.String("hashicorp"), + Workspaces: cdktf.NewNamedCloudWorkspace(jsii.String("producer"), nil), + }) + + random.NewRandomProvider(stack, jsii.String("random"), &random.RandomProviderConfig{}) + + pet := pet.NewPet(stack, jsii.String("pet"), &pet.PetConfig{}) + cdktf.NewTerraformOutput(stack, jsii.String("random-pet"), &cdktf.TerraformOutputConfig{ + Value: pet.Id(), + }) + + return stack +} + +func NewConsumerStack(scope constructs.Construct, name string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &name) + + cdktf.NewCloudBackend(stack, &cdktf.CloudBackendConfig{ + Organization: jsii.String("hashicorp"), + Workspaces: cdktf.NewNamedCloudWorkspace(jsii.String("consumer"), nil), + }) + + remoteState := cdktf.NewDataTerraformRemoteState(stack, jsii.String("remote-pet"), &cdktf.DataTerraformRemoteStateRemoteConfig{ + Organization: jsii.String("hashicorp"), + Workspaces: cdktf.NewNamedCloudWorkspace(jsii.String("producer"), nil), + }) + + cdktf.NewTerraformOutput(stack, jsii.String("random-remote-pet"), &cdktf.TerraformOutputConfig{ + Value: remoteState.GetString(jsii.String("random-pet")), + }) + + return stack +} + +func main() { + app := cdktf.NewApp(nil) + + NewProducerStack(app, "cdktf-producer") + NewConsumerStack(app, "cdktf-consumer") + + app.Synth() +} + +``` + + diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/aws-adapter.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/aws-adapter.mdx new file mode 100644 index 0000000000..4b85c3b402 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/aws-adapter.mdx @@ -0,0 +1,378 @@ +--- +page_title: "[technical preview] AWS Adapter - CDK for Terraform" +description: "[technical preview] Use AWS CDK (v2) constructs in CDK for Terraform projects." +--- + +# \[technical preview] AWS Adapter + +-> **Note:** The AWS Adapter is a technical preview and not ready for production usage. Its API is not stable and things might break unexpectedly. + +The `AwsTerraformAdapter` is included in the [`@cdktf/aws-cdk`](https://github.com/hashicorp/cdktf-aws-cdk) package and allows you to use Amazon Web Services Cloud Development Kit (AWS CDK) constructs in your CDK for Terraform (CDKTF) projects. + +The `AwsTerraformAdapter` uses the [`aws_cloudcontrolapi_resource`](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudcontrolapi_resource) Terraform resource to communicate with the [AWS Cloud Control API](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/what-is-cloudcontrolapi.html). Reference this [list of supported resources](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/supported-resources.html) for the Cloud Control API. + +You need to [manually map](#write-manual-mappings) resources that the AWS Cloud Control API does not yet support to specific Terraform resources because attribute names and resource types differ between CloudFormation and Terraform. Some manual mappings are [included in the adapter](https://github.com/hashicorp/cdktf-aws-cdk/tree/main/src/mapping/aws), and we are happy to accept PRs that add manual mappings for currently unsupported resources! + +## Requirements + +The `AwsTerraformAdapter` currently only supports TypeScript projects: + +- `aws-cdk-lib` >= 2.0.0 (requires `constructs` version 10) +- `cdktf` >= 0.7.0 +- `@cdktf/aws-cdk` >= 0.1 (contains the adapter) + +## Install the Adapter + +To install the `AwsTerraformAdapter`: + +1. Set up a CDKTF TypeScript project. Refer to [Project Setup](/terraform/cdktf/create-and-deploy/project-setup) for details. + +1. Install the required packages via yarn or npm. + + ``` + yarn add aws-cdk-lib@^2.0.0-rc.17 @cdktf/aws-cdk + // or + npm install aws-cdk-lib@^2.0.0-rc.17 @cdktf/aws-cdk + ``` + +## Use the Adapter + +Import the `AwsTerraformAdapter` from `@cdktf/aws-cdk` and initialize it the same way you would initialize any other construct. + +```typescript +import { AwsTerraformAdapter, AwsProvider } from "@cdktf/aws-cdk"; + +export class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { region: "us-west-2" }); + + const awsAdapter = new AwsTerraformAdapter(this, "adapter"); + } +} +``` + +Pass AWS CDK constructs `awsAdapter` as the `scope` argument instead of `this` (referring to `MyStack`). + +```typescript +import { + Duration, + aws_lambda, + aws_events, + aws_events_targets, +} from "aws-cdk-lib"; +import { AwsTerraformAdapter, AwsProvider } from "@cdktf/aws-cdk"; + +export class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { region: "us-west-2" }); + + const awsAdapter = new AwsTerraformAdapter(this, "adapter"); + + const lambdaFn = new aws_lambda.Function(awsAdapter, "lambda", { + code: new aws_lambda.InlineCode( + `def main(event, context): + print("I'm running!")`, + ), + handler: "index.main", + timeout: Duration.seconds(300), + runtime: aws_lambda.Runtime.PYTHON_3_6, + }); + + const rule = new aws_events.Rule(awsAdapter, "rule", { + schedule: aws_events.Schedule.expression("cron(0 18 ? * MON-FRI *)"), + }); + + rule.addTarget(new aws_events_targets.LambdaFunction(lambdaFn)); + } +} +``` + +The `AwsTerraformAdapter` adds an Aspect to `MyStack` that is invoked when the stack is synthesized. That Aspect then iterates over all AWS CDK constructs that have been added to the adapter, converts them to CDK for Terraform constructs, and adds them to the stack. It does not add the AWS CDK constructs themselves. + +The [full example code](https://github.com/hashicorp/cdktf-aws-cdk/tree/main/examples/typescript-cron-lambda) is available in the cdktf-aws-cdk repository. + +## Write Manual Mappings + +While some mappings are already included, you need to manually map most resources that the AWS Cloud Control API does not yet support ([supported resources](https://docs.aws.amazon.com/cloudcontrolapi/latest/userguide/supported-resources.html)). + +The following example shows how to write and register a mapping for an `AWS::DynamoDB::Table` CloudFormation resource. + +Consider the following code: + +```typescript +// ... +import { aws_dynamodb } from "aws-cdk-lib"; + +export class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new AwsProvider(this, "aws", { region: "us-west-2" }); + + const awsAdapter = new AwsTerraformAdapter(this, "adapter"); + + new aws_dynamodb.Table(awsAdapter, "table", { + tableName: "MyTestTable", + partitionKey: { name: "key", type: aws_dynamodb.AttributeType.STRING }, + }); + } +} +// ... +``` + +The adapter will throw an error explaining that there is currently no mapping in place for a DynamoDB table resource. + +``` +Error: Unsupported resource Type AWS::DynamoDB::Table. There is no custom mapping registered for AWS::DynamoDB::Table and the AWS CloudControl API does not seem to support it yet. If you think this is an error or you need support for this resource, file an issue at: https://github.com/hashicorp/cdktf-aws-cdk/issues/new?title=Unsupported%20Resource%20Type%20%60AWS::DynamoDB::Table%60 and mention the AWS CDK constructs you want to use +``` + +To write a custom mapping, add the following code right below the imports and above the stack `MyStack`. + +### Register the Mapping + +The example code imports the `registerMapping` function and invokes it with arguments for registering an `AWS::DynamoDB::Table` resource. The second argument to the function is an object with two parts: `resource` and `attributes`. The `resource` is a function that is called for each instance of the registered CloudFormation type. The example logs the `props` and returns `null`, so AWS doesn't create any resources. + +```typescript +import { registerMapping } from "@cdktf/aws-cdk/lib/mapping"; + +registerMapping("AWS::DynamoDB::Table", { + resource: (_scope: Construct, _id: string, props: any) => { + console.log(props); + return null; + }, + attributes: {}, +}); +``` + +The example DynamoDB resource results in CDKTF outputting the following `props`. + +```js +{ + KeySchema: [ { AttributeName: 'key', KeyType: 'HASH' } ], + AttributeDefinitions: [ { AttributeName: 'key', AttributeType: 'S' } ], + BillingMode: undefined, + ContributorInsightsSpecification: undefined, + GlobalSecondaryIndexes: undefined, + KinesisStreamSpecification: undefined, + LocalSecondaryIndexes: undefined, + PointInTimeRecoverySpecification: undefined, + ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 }, + SSESpecification: undefined, + StreamSpecification: undefined, + TableName: 'MyTestTable', + Tags: undefined, + TimeToLiveSpecification: undefined +} +``` + +These attributes are the properties you would find in the rendered CloudFormation schema of that resource. You can also find the same attributes in the [CloudFormation docs for an `AWS::DynamoDB::Table` resource](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html). + +### Create Mappings + +Write code that maps all attributes to a format that matches the Terraform resource for an AWS DynamoDBTable. For the target schema, you can either look at the [docs on the Terraform Registry](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/dynamodb_table) or at the code of the `DynamoDB.DynamodbTableConfig` you will supply to the resource upon creation. + +The logged `props` show that you need to support at least setting these attributes and that you need to make sure they appear in the resulting CDKTF resources. + +```js +{ + KeySchema: [ { AttributeName: 'key', KeyType: 'HASH' } ], + TableName: 'MyTestTable', + AttributeDefinitions: [ { AttributeName: 'key', AttributeType: 'S' } ], + ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 }, +} +``` + +Synthesizing the code with this initial mapping function fails with an error listing properties that may not be properly mapped. CDKTF checks whether there are any object properties left on the `props` object (that are not `undefined`) after the mapping function returned. This is a safeguard of the mapping implementation to block mappings that do not support all properties at the time they were written. + +``` +Error: cannot map some properties of AWS::DynamoDB::Table: { + "KeySchema": [ + { + "AttributeName": "key", + "KeyType": "HASH" + } + ], + "AttributeDefinitions": [ + { + "AttributeName": "key", + "AttributeType": "S" + } + ], + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + }, + "TableName": "MyTestTable" +} +``` + +The following example adds mapping for missing values in the error message. First, it maps the `AttributeDefinitions` array to make sure it fits the schema of the Terraform resource. It also looks up the `hashKey` in the `KeySchema array`. Finally, it deletes the properties that have been handled and returns a new `DynamodbTable` resource. + +```typescript +import { DynamoDB } from "@cdktf/aws-cdk"; +import { registerMapping } from "@cdktf/aws-cdk/lib/mapping"; + +registerMapping("AWS::DynamoDB::Table", { + resource: (scope: Construct, id: string, props: any) => { + // e.g. props = { + // KeySchema: [ { AttributeName: 'key', KeyType: 'HASH' } ], + // TableName: 'MyTestTable', + // AttributeDefinitions: [ { AttributeName: 'key', AttributeType: 'S' } ], + // ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 }, + // } + + const mappedProps: DynamoDB.DynamodbTableConfig = { + name: props.TableName, + attribute: props.AttributeDefinitions.map((att: any) => ({ + name: att.AttributeName, + type: att.AttributeType, + })), + hashKey: props.KeySchema.find((ks: any) => ks.KeyType === "HASH") + .AttributeName, + }; + // delete props we successfully mapped to mark them as handled + delete props.TableName; + delete props.KeySchema; + delete props.AttributeDefinitions; + + return new DynamoDB.DynamodbTable(scope, id, mappedProps); + }, + attributes: {}, +}); +``` + +Synthesizing again using this mapping still produces an error. + +``` +Error: cannot map some properties of AWS::DynamoDB::Table: { + "ProvisionedThroughput": { + "ReadCapacityUnits": 5, + "WriteCapacityUnits": 5 + } +} +``` + +The error indicates that the `ProvisionedThroughput` property has not yet been mapped or deleted. The following example shows a complete mapping for the DynamoDB table. + +```typescript +import { DynamoDB } from "@cdktf/aws-cdk"; +import { registerMapping } from "@cdktf/aws-cdk/lib/mapping"; + +registerMapping("AWS::DynamoDB::Table", { + resource: (scope: Construct, id: string, props: any) => { + // e.g. props = { + // KeySchema: [ { AttributeName: 'key', KeyType: 'HASH' } ], + // TableName: 'MyTestTable', + // AttributeDefinitions: [ { AttributeName: 'key', AttributeType: 'S' } ], + // ProvisionedThroughput: { ReadCapacityUnits: 5, WriteCapacityUnits: 5 }, + // } + + const mappedProps: DynamoDB.DynamodbTableConfig = { + name: props.TableName, + attribute: props.AttributeDefinitions.map((att: any) => ({ + name: att.AttributeName, + type: att.AttributeType, + })), + hashKey: props.KeySchema.find((ks: any) => ks.KeyType === "HASH") + .AttributeName, + readCapacity: props.ProvisionedThroughput.ReadCapacityUnits, // new + writeCapacity: props.ProvisionedThroughput.WriteCapacityUnits, // new + }; + // delete props we successfully mapped to mark them as handled + delete props.TableName; + delete props.KeySchema; + delete props.AttributeDefinitions; + delete props.ProvisionedThroughput; // new + + return new DynamoDB.DynamodbTable(scope, id, mappedProps); + }, + attributes: {}, +}); +``` + +This code synthesizes without error and produces the following `aws_dynamodb_table` resource in the `cdk.tf.json` output file (available in `./cdktf.out/stacks/`). + +```json +"resource": { + "aws_dynamodb_table": { + "typescriptmanualmapping_adapter_table8235A42E_DED1AA77": { + "hash_key": "key", + "name": "MyTestTable", + "read_capacity": 5, + "write_capacity": 5, + "attribute": [ + { + "name": "key", + "type": "S" + } + ], + "//": { + "metadata": { + "path": "typescript-manual-mapping/adapter/table8235A42E", + "uniqueId": "typescriptmanualmapping_adapter_table8235A42E_DED1AA77" + } + } + } + } + } +``` + +### Map the Attributes Argument + +You should also map the `attributes` argument. When AWS CDK constructs reference each other's properties, they do so via the CloudFormation property name of the resource. + +The follwing example maps the `Arn` CloudFormation property to the `.arn` of the Terraform resource. While this example might look like something that could be handled automatically, there are cases where this cannot map directly. For example, there are some resources that do not have a direct representation in Terraform but do in CloudFormation (and vice versa). + +```typescript +import { aws_dynamodb, CfnOutput } from "aws-cdk-lib"; +// ... + +const table = new aws_dynamodb.Table(awsAdapter, "table", { + tableName: "MyTestTable", + partitionKey: { name: "key", type: aws_dynamodb.AttributeType.STRING }, +}); + +new CfnOutput(awsAdapter, "arn", { value: table.tableArn }); +``` + +Synthesizing this code produces the following error. + +``` +Error: Resolution error: no "Arn" attribute mapping for resource of type AWS::DynamoDB::Table. +``` + +To fix the resolution error, the following example adds an `Arn` property to the empty `attributes` object in the mapping. + +```typescript +registerMapping("AWS::DynamoDB::Table", { + resource: (scope: Construct, id: string, props: any) => { + /* ... */ + }, + attributes: { + Arn: (table: DynamoDB.DynamodbTable) => table.arn, + }, +}); +``` + +## Examples + +For additional examples, reference the [adapters repository](https://github.com/hashicorp/cdktf-aws-cdk/tree/main/examples). + +## Known limitations + +The adapter is an early preview of interoperability with AWS CDK constructs, and it has the following limitations: + +- Limited interoperability between CDKTF and AWS CDK tokens. For example, passing Terraform functions as arguments into AWS CDK constructs might unexpectedly fail. +- AWS CDK App, Stack, and nested Stack constructs are not supported. +- These CloudFormation features are not yet supported: Transforms, Parameters, Mappings, and Includes. +- These AWS CDK features are not yet supported: Assets, Aspects, and Annotations. + +Refer to the [issues in the adapters repository](https://github.com/hashicorp/cdktf-aws-cdk/issues) for more detail. + +## Roadmap + +Refer to the [cdktf-aws-cdk](https://github.com/hashicorp/cdktf-aws-cdk) repository on Github for the [AWS adapter roadmap](https://github.com/hashicorp/cdktf-aws-cdk/issues/10). diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/best-practices.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/best-practices.mdx new file mode 100644 index 0000000000..84aeea7ad3 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/best-practices.mdx @@ -0,0 +1,143 @@ +--- +page_title: Best Practices - CDK for Terraform +description: Build robust applications for production use cases. How to manage secrets, build constructs, design stacks, and more. +--- + +# CDK for Terraform Best Practices + +There are many ways to structure your CDK for Terraform (CDKTF) application. The structure you choose depends largely on the best practices for your chosen programming language and your use case. However, we recommend using the following principles to build robust, production-ready applications. + +## Read Secrets with Terraform Variables + +Secrets appear in your synthesized CDKTF code when you read them directly from environment variables or from files with normal system access. This introduces risk, especially if you are checking the synthesized configuration into a version control system. To mitigate this, [use the `TerraformVariable` construct](/terraform/cdktf/concepts/variables-and-outputs#input-variables) to read secrets. Terraform uses the values in `TerraformVariable` directly at execution time, so CDKTF does not write them to the synthesized `cdktf.json` file. + +The following example uses a Terraform variable to read the sensitive admin password instead of reading it directly from an environment variable. + +```typescript +const adminPassword = new TerraformVariable(this, "adminPassword", { + type: "string", + description: "Admin password for the instance", + sensitive: true, +}); + +new MyResource(this, "hello", { + adminPassword: adminPassword.value, // use this instead of process.env.ADMIN_PASSWORD +}); +``` + +To pass a [Terraform variable through environment variables](/terraform/cli/config/environment-variables#tf_var_name), name the environment variable `TF_VAR_NAME`. For example, set `TF_VAR_adminPassword=''` in the execution environment. + +If you use HCP Terraform with [remote execution](/terraform/cloud-docs/run/remote-operations#remote-operations), you can store your secrets in HCP Terraform. Refer to the HCP Terraform documentation about [workspace variables](/terraform/cloud-docs/workspaces/variables/managing-variables#workspace-specific-variables) for more details. + +We recommend using `TerraformVariable` only at the Stack level. Nesting them in custom constructs makes the interface unclear because some information may be passed into the constructor of the construct, while other data may be passed through a `TerraformVariable`. Nesting also changes the logical ID and makes it difficult to understand which `TerraformVariable` instances you must configure for the CDKTF program to run. + +## Providers + +A provider is a Terraform plugin that allows users to manage an external API. Provider plugins act as a translation layer that allows Terraform to communicate with many different cloud providers, databases, and services. + +Use [pre-built providers](/terraform/cdktf/concepts/providers#install-pre-built-providers) when possible. It can take several minutes to generate the code bindings for providers with very large schemas, so we offer several popular providers as pre-built packages. Pre-built providers are a performance optimization that reduces the time it takes to synthesize and run your application. You can also use pre-built providers as a peer dependency if you use open-source custom constructs. + +Refer to the [CDKTF Provider GitHub repositories](https://github.com/orgs/cdktf/repositories?q=cdktf-provider-) for a complete list of pre-built providers. + +## Application Architecture + +We recommend the following best practices when structuring your CDKTF application. + +### Separate Business Units with Stacks + +A [stack](/terraform/cdktf/concepts/stacks) represents a collection of infrastructure that CDKTF synthesizes as a dedicated Terraform configuration. Stacks allow you to separate the state management for multiple environments within an application. We recommend creating separate stacks for the following use cases: + +- Deployment stages (development / staging / production) +- Business purposes (e-commerce / blog / data warehouse) +- Regions (eu-west-1 / us-east-1) if they deploy similar infrastructure, e.g. for high availability +- Software components (network / db / compute) +- Deployment cycles (databases and domain names / applications) + +You do not always need to create a new class for each stack. For some use cases, it is more efficient to create a single stack class to define similar infrastructure and then pass arguments into the stack that customize the deployment. For example, you might create a class that creates AWS EC2 instances and then pass different regions and other configuration details based on the team or production stage that requires the infrastructure. + +The following example customizes the same base stack for different business purposes and staging environments. + +```typescript +const devNetworking = new NetworkingStack(this, "networking-development", { + // ... +}); + +// A single region is enough to create a development environment for each product. +new Ecommerce(this, "ecommerce-development", { + vpcId: devNetworking.vpcId, + subnets: devNetworking.subnets, + region: "us-west-1", +}); +new Blog(this, "ecommerce-development", { + vpcId: devNetworking.vpcId, + subnets: devNetworking.subnets, + region: "us-west-1", +}); + +// Staging environments require two ecommerce stacks in different regions +// to test the high availability features of the infrastructure. +const stageNetworking = new NetworkingStack(this, "networking-staging", { + // ... +}); +const ecommerceStaging = new Ecommerce(this, "ecommerce-staging-us", { + vpcId: stageNetworking.vpcId, + subnets: stageNetworking.subnets, + region: "us-west-1", +}); +new Ecommerce(this, "ecommerce-staging-eu", { + vpcId: stageNetworking.vpcId, + subnets: stageNetworking.subnets, + region: "eu-central-1", + databaseReplicationMaster: ecommerceStaging.databaseReplicationMaster, +}); +new Blog(this, "ecommerce-staging", { + vpcId: stageNetworking.vpcId, + subnets: stageNetworking.subnets, + region: "us-west-1", +}); +``` + +### Create Extensible Constructs + +[Constructs](/terraform/cdktf/concepts/constructs) let you abstract common behavior into reusable classes. If you have no reason to limit the extensibility of a construct, you should default to making it as easy as possible to overwrite custom behavior, while still providing good standard defaults. + +In some cases, you can use interfaces from the generated provider bindings to allow users to customize the configuration. In very complex constructs, we recommend using methods to encapsulate behavior. For example, you can create a method that derives default values for the configuration. This lets users extend the base class and overwrite the behavior in a central location. + +The following example exposes configuration options for the S3 bucket resource within the construct. It also creates a second construct class that overwrites the default naming behavior. + +```typescript +import { Construct } from "constructs"; +import { S3Bucket, S3BucketConfig } from "@cdktf/provider-aws/lib/s3bucket"; + +class MyS3Bucket extends Construct { + constructor( + protected scope: Construct, + protected id: string, + protected s3Options: S3BucketConfig, + ) { + super(scope, id); + new S3Bucket(this, "MyBucket", { + ...s3Options, + bucketName: this.getBucketName(), + versioned: true, + }); + } + + public getBucketName() { + return this.s3Options.bucketName || `${this.id}-bucket`; + } +} + +class SimpleS3Bucket extends MyS3Bucket { + // New behaviour was patched in by overwriting + public getBucketName() { + return this.id; + } +} +``` + +### Use Projen to Distribute Constructs + +If your code is hosted on Github and you want to distribute it as a CDKTF construct, you can use [projen](https://github.com/projen/projen) to create a repository with all required tooling set up for you. You can run `npx projen new cdktf-construct` in a new folder, and the created project will be ready to use. Projen has built-in options to [publish constructs to all registries](https://github.com/projen/projen/blob/main/src/cdk/jsii-project.ts#L48). + +If you want to deploy your CDKTF construct as a Terraform module, we recommend [`projen-cdktf-hybrid-construct`](https://github.com/DanielMSchmidt/projen-cdktf-hybrid-construct). diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/configuration-file.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/configuration-file.mdx new file mode 100644 index 0000000000..601a19697c --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/configuration-file.mdx @@ -0,0 +1,203 @@ +--- +page_title: Configuration - CDK for Terraform +description: >- + Use the cdktf.json file to customize configuration settings and define the + providers and modules to use with your application. +--- + +# Configuration File + +The `cdktf.json` file is where you can supply custom configuration settings for your application and define the [providers](/terraform/cdktf/concepts/providers) and [modules](/terraform/cdktf/concepts/modules) that you want to use. When you initialize a new CDK for Terraform project with a [built-in template](/terraform/cdktf/create-and-deploy/project-setup), the template generates a basic `cdktf.json` file in your root directory that you can customize for your application. Refer to the [Project Setup documentation](/terraform/cdktf/create-and-deploy/project-setup) for more information about initializing a new project. + +## Specification + +```typescript +export enum Language { + TYPESCRIPT = "typescript", + PYTHON = "python", + CSHARP = "csharp", + JAVA = "java", + GO = "go", +} + +export interface TerraformDependencyConstraint { + readonly name: string; // name of the module / provider + readonly source?: string; // path / url / registry identifier for the module / provider + readonly version?: string; // version constraint (https://www.terraform.io/docs/language/providers/requirements.html#version-constraints) +} +type RequirementDefinition = string | TerraformDependencyConstraint; + +export interface Config { + readonly app?: string; // The command to run in order to synthesize the code to Terraform compatible JSON + readonly language?: Language; // Target language for building provider or module bindings. Currently supported: `typescript`, `python`, `java`, `csharp`, and `go` + readonly output: string; // Default: 'cdktf.out'. Where the synthesized JSON should go. Also will be the working directory for Terraform operations + readonly codeMakerOutput: string; // Default: '.gen'. Path where generated provider bindings will be rendered to. + readonly projectId: string; // Default: generated UUID. Unique identifier for the project used to differentiate projects + readonly sendCrashReports: boolean; // Default: false. Whether to send crash reports to the CDKTF team + readonly terraformProviders?: RequirementDefinition[]; // Terraform Providers to build + readonly terraformModules?: RequirementDefinition[]; // Terraform Modules to build +} +``` + +## Minimal Configuration + +The most basic configuration only defines `app`. This is useful when you plan to use [pre-built providers](/terraform/cdktf/concepts/providers#install-pre-built-providers) and you don't need to generate any provider or module bindings. + +```json +{ + "app": "npm run --silent compile && node main.js" +} +``` + +## Declare Providers and Modules + +You must declare all of the providers and modules that require code bindings in your `cdktf.json` file. CDKTF generates these code bindings from `cdktf.json` when you run `cdktf get`. We have a selection of pre-built [providers](/terraform/cdktf/concepts/providers#install-pre-built-providers) available, but you may occasionally want to re-generate the code bindings for those providers yourself. For example, you may need a different version of that provider than the pre-built package. We do not provide pre-built modules, so you must always declare them in your `cdktf.json` file. + +The [schema](/terraform/language/providers/requirements#source-addresses) for both providers and modules in CDK for Terraform consists of a name, a [source](/terraform/language/providers/requirements#source-addresses), and a [version constraint](/terraform/language/providers/requirements#version-constraints). + +You can declare providers and modules using either JSON or a string with the format `source@ ~> version`. + +### Provider Source + +- **HashiCorp providers**: You can specify official HashiCorp [maintained providers](https://registry.terraform.io/browse/providers?tier=official) by their name on the Terraform Registry. For example, you can use `aws` to declare the official [AWS provider](https://registry.terraform.io/providers/hashicorp/aws/latest): `aws@ ~> 2.0` + +- **Community providers**: You must provide the fully-qualified name. The fully-qualified name is available on the provider's registry page. For example, to define the [DataDog provider](https://registry.terraform.io/providers/DataDog/datadog/latest): `DataDog/datadog@ ~> 3.4.0` + +### Module Source + +- For modules on the Terraform Registry, provide the the full registry namespace. For example, to define the [AWS VPC module](https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest): `terraform-aws-modules/vpc/aws@ ~> 3.2.0`. + +- For local modules, please use the object format to ensure that CDKTF can properly name the generated classes. + + ```jsonc + { + // ... + "terraformModules": [ + { + "name": "myLocalModule", + "source": "../my-modules/local-module", + }, + ], + } + ``` + +### Version Constraint + +When you declare providers and modules in the string format, add the [version constraint](/terraform/language/expressions/version-constraints#version-constraint-syntax) after the provider or module name separated by an `@`. For example, so `provider|module@ ~> version`. The version constraint is optional; when you omit the version constraint, CDK for Terraform will download and use the latest version. + +When you declare providers in JSON, add the constraint in the `version` property. + +```jsonc +{ + //... + "terraformProviders": [ + { + "name": "aws", + "source": "hashicorp/aws", + "version": "~> 3.22", + }, + ], +} +``` + +## Configure Files to Watch + +When using `cdktf watch`, CDKTF inspects the `cdktf.json`s `watchPattern` property to determine which files to watch. If you do not specify a `watchPattern` property, CDKTF adds the default watch pattern for your language on the first run. The `watchPattern` expects an array of glob patterns, e.g. `["main.ts", "../constructs/**/*.ts", "lib/*.ts"]`. + +## Configuration Examples + +### Change the Output Directory + +Defining `output` changes the directory where `cdktf` stores your generated Terraform configuration file. Terraform performs all operations within this directory. + +The following example synthesizes the JSON Terraform configuration into `my-workdir`: + +```json +{ + "app": "npm run --silent compile && node main.js", + "output": "my-workdir" +} +``` + +### Build Providers + +With the following `terraformProviders` configuration, a `cdktf get` builds the latest AWS provider within the 2.X version range. CDKTF saves the generated code in in `.gen` by default. You can adjust this behavior with `codeMakerOutput`. Refer to the other examples on this page. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformProviders": ["aws@~> 2.0"] +} +``` + +### Build Modules + +With the following `terraformModules` configuration, a `cdktf get` builds the latest `terraform-aws-modules/vpc/aws` module from the Terraform Registry. The generated code will be saved into `.gen` by default. You can adjust this behavior with `codeMakerOutput`. Refer to the other examples on this page. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformModules": ["terraform-aws-modules/vpc/aws"] +} +``` + +### Build Providers & Modules + +With the following example configuration, a `cdktf get` builds both the AWS provider and the latest `terraform-aws-modules/vpc/aws` module from the Terraform Registry. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformModules": ["terraform-aws-modules/vpc/aws"], + "terraformProviders": ["aws@~> 2.0"] +} +``` + +### Build Multiple Providers + +You can also build multiple providers or modules. The following example builds multiple providers. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "terraformProviders": [ + "null", + "aws", + "google", + "azurerm", + "kubernetes", + "consul", + "vault", + "nomad" + ] +} +``` + +### Build Providers in Custom Directory + +The following configuration generates the `aws` provider bindings in the folder `./imports`. The Python template uses this method to make it easier to reference the generated classes. + +```json +{ + "language": "python", + "app": "pipenv run ./main.py", + "terraformProviders": ["aws@~> 2.0"], + "codeMakerOutput": "imports" +} +``` + +### Enable Crash Reporting for the CLI + +You can enable or disable crash reporting by setting the `sendCrashReports` property to `true` or `false`. Sending crash reports helps our team improve the CLI faster. Refer to [Telemetry](/terraform/cdktf/telemetry#crash-reporting) for more information about what we track. + +```json +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "sendCrashReports": true +} +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/deployment-patterns.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/deployment-patterns.mdx new file mode 100644 index 0000000000..dc8d8b51fd --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/deployment-patterns.mdx @@ -0,0 +1,167 @@ +--- +page_title: Deployment Patterns - CDK for Terraform +description: >- + Continuously deploy your applications with CDKTF. +--- + +# Deployment Patterns + +You can configure your Continuous Integration/Continuous Deployment (CI/CD) environment to automatically deploy your CDKTF applications. This page explains different types of deployment patterns to help you choose the methods that are most appropriate for your use case. + +## Deployment Methods + +You can provision your infrastructure using either CDKTF CLI commands (e.g., `cdktf deploy`) or by synthesizing your application into a Terraform configuration file and using Terraform directly. Both approaches allow you to use HCP Terraform and integrate with a CI/CD pipeline. + +### Run CDKTF CLI Commands + +We recommend using [CDKTF CLI commands](/terraform/cdktf/cli-reference/commands) in the following use cases: + +- **Your application performs additional tasks** For example, your application may build a Docker image or start a build pipeline locally through synchronous APIs. You might also be using the null provider to execute these actions when a resource is created (e.g., after the Docker registry has been created). Running `cdktf deploy` triggers all of these actions at runtime in addition to using Terraform to provision your infrastructure. + +- **Your application contains stacks with complex dependencies.** Each [stack](/terraform/cdktf/concepts/stacks) in a CDKTF application is like a separate Terraform working directory. Terraform respects complex dependencies within the same configuration, but it is not designed to manage complex dependencies between multiple working directories. For example, if you define a stack A that depends on data from stack B and stack C, Terraform runs will fail. This is because Terraform will not understand that it must wait to build stack A until both stack B and stack C are completed. + +### Run `cdktf synth` and Use Terraform Directly + +We recommend synthesizing your CDKTF application and using Terraform directly when you need to integrate into existing Terraform workflows. Your organization may already use HCP Terraform or have integrated Terraform into CI pipelines. In these cases, you may want to run `cdktf synth` and set the output folder to a particular directory that you can reference in your existing workflows. + +## Using HCP Terraform + +HCP Terraform lets you review the current state of your infrastructure and run progress in the HCP Terraform UI. You can also use HCP Terraform as the source of secrets. + +Refer to [Set Up CDKTF With HCP Terraform](/terraform/cdktf/create-and-deploy/hcp-terraform#set-up-cdktf-with-hcp-terraform) for details. Refer to [Example Workflows](#example-workflows) for several examples of connecting your CDKTF application to HCP Terraform and using HCP Terraform in a Continuous Integration pipeline. + +## Managing Secrets and Sensitive Data + +You should [read secrets with Terraform Variables](/terraform/cdktf/create-and-deploy/best-practices#read-secrets-with-terraform-variables) so that they do not appear in your synthesized CDKTF code. + +## Example Workflows + +The following examples demonstrate common deployment workflows for your CDKTF application. + +### Deploy with Terraform and HCP Terraform + +Connect your synthesized CDKTF configuration to a HCP Terraform workspace with the following steps: + +1. Add a pre-commit step in your CDKTF application that runs `cdktf synth`. This creates Terraform configuration files in the `cdktf.out/stacks/` directory. +2. [Configure the VCS integration](/terraform/cloud-docs/workspaces/settings/vcs) for a HCP Terraform workspace to point to the directory with the synthesized configuration files. To deploy multiple independent stacks, configure one HCP Terraform workspace to point to the output directory for each stack. + +Refer to [Automatic Run Triggering](/terraform/cloud-docs/workspaces/settings/vcs#automatic-run-triggering) in the HCP Terraform documentation for details about how to trigger Terraform runs from merges and commits. + +### Terraform CDK GitHub Action + +You can use the [Terraform CDK GitHub Action](https://github.com/marketplace/actions/terraform-cdk-action) if you are using GitHub Actions and you want a default review / deployment workflow. The Terraform CDK GitHub Action runs the CDKTF CLI under the hood, it comments Terraform plans on your pull requests and provides a default review workflow. If you need more customization, refer to [GitHub Actions CI and HCP Terraform](#github-actions-ci-and-hcp-terraform). + +### GitHub Actions CI and HCP Terraform + +Set the `TERRAFORM_CLOUD_TOKEN` environment variable to the [HCP Terraform API token](/terraform/cloud-docs/users-teams-organizations/api-tokens). This allows the CDKTF stacks `CloudBackend` to connect to HCP Terraform. + +You must create a job like this for every stack so that you can pass the stack name into `cdktf diff `. None of the stacks can depend on each other because Terraform cannot reason about which stacks must be launched first to respect these dependencies. + +The following example shows a GitHub Actions configuration where the CDKTF application is deployed from the `main` branch and uses HCP Terraform. You could store this file in `.github/workflows/cdktf-deploy.yml`. + +```yaml +name: CDKTF Deployment + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Use Node.js 18.x + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: "npm" + - name: Install CDKTF CLI + run: npm install -g cdktf-cli + - name: Install Terraform + uses: hashicorp/setup-terraform@v2 + with: + terraform_version: 1.1.7 + - name: Install dependencies + run: npm ci + # If you use providers or modules that are not pre-built, you can install them here + - name: Generate bindings for providers and modules + run: cdktf get + - name: Run Tests + run: npm test + - name: Deploy + run: cdktf deploy --auto-approve '*' # Deploys all stacks + env: + TERRAFORM_CLOUD_TOKEN: ${{ secrets.TF_API_TOKEN }} +``` + +To get the plan output posted as a comment on your pull request, add the following to your `.github/workflows/cdktf-diff.yml` file: + +```yaml +name: CDKTF Diff + +on: [pull_request] + +jobs: + diff: + name: "Terraform CDK Diff" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Terraform + uses: hashicorp/setup-terraform@v1 + with: + terraform_version: 1.1.7 + cli_config_credentials_token: ${{ secrets.TF_CLOUD_TOKEN }} + + - uses: actions/setup-node@v1 + with: + node-version: "14" + + - run: yarn install + + # CDKTF runs the plan here, so you need to fill in the name of your stack. + - name: plan + run: cdktf plan + env: + TERRAFORM_CLOUD_TOKEN: ${{ secrets.TF_API_TOKEN }} + continue-on-error: true # We want to see the plan output even if the plan fails + + # Replace this step with any workflow you like, e.g. posting a message in a slack channel. + - uses: actions/github-script@0.9.0 + if: github.event_name == 'pull_request' + env: + PLAN: "terraform\n${{ steps.plan.outputs.stdout }}" # CDKTF gets the output from the last step + with: + github-token: ${{ secrets.GH_COMMENT_TOKEN }} # Create a secret with a GitHub token that can comment on PRs + script: | + const output = `#### Terraform Plan 📖\`${{ steps.plan.outcome }}\` +
Show Plan + \`\`\`${process.env.PLAN}\`\`\` +
+ *Pusher: @${{ github.actor }}, Action: \`${{ github.event_name }}\`, Working Directory: \`${{ env.tf_actions_working_dir }}\`, Workflow: \`${{ github.workflow }}\`*`; + github.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }) +``` + +### Running the CDKTF CLI on a General Purpose CI + +If you have a general purpose CI like GitHub Actions or CircleCI configured, use the `cdktf deploy --auto-approve ` command to trigger a deployment. This deploys your stacks in the right order and in parallel. To set up this workflow, you must install the following software: + +- Node in version 14.0+ +- The `cdktf-cli` CLI +- Terraform v1.0+ +- Any other languages you use for your CDKTF application + +~> **Warning:** Auto-approved deployments skip the option to review planned changes to your infrastructure before Terraform applies them. Minimize risk of unpredictable infrastructure changes and configuration drift by making sure that no one can change your infrastructure outside of your automated build pipeline. Refer to [Non-Interactive Workflows](/terraform/cloud-docs/run/cli#non-interactive-workflows) for details. + +### Contribute Additional Examples + +To share another solution, please [open a GitHub issue](https://github.com/hashicorp/terraform-cdk/issues/new?assignees=&labels=enhancement%2C+new&template=feature-request.md&title=) or submit a pull request for this documentation page. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/environment-variables.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/environment-variables.mdx new file mode 100644 index 0000000000..47a7997543 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/environment-variables.mdx @@ -0,0 +1,25 @@ +--- +page_title: Environment Variables - CDK for Terraform +description: >- + There are some environment variables that can be used to configure the + behavior of CDKTF. +--- + +# Environment Variables + +Use these environment variables to configure CDK for Terraform (CDKTF) behavior. + +| Variable Name | Description | Default | +| ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | +| CDKTF_DISABLE_PLUGIN_CACHE_ENV | If set to `true` or `1`, CDKTF disables the [plugin cache](/terraform/cli/config/config-file#provider-plugin-cache). Otherwise, CDKTF creates the plugin cache directory in `~/.terraform.d/plugin-cache` if it is not already present. | | +| GITHUB_API_TOKEN_CDKTF | If set, the `provider add` and `provider update` command will use this token for authenticated requests to Github when looking for pre-built provider packages for Go. | | +| CDKTF_HOME | Where CDKTF should store cache and configuration files. | `~/.cdktf` | +| CDKTF_LOG_FILE_DIRECTORY | The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at the level specified in `CDKTF_LOG_LEVEL`. | standard out | +| CDKTF_LOG_LEVEL | Controls how much log information CDKTF prints to the console. You can set it to one of the following values: `all`, `debug`, `info`, `warn`, `error`, `fatal`, `off`. | `warn` | +| CHECKPOINT_DISABLE | If set to any value, CDKTF will not send [telemetry](/terraform/cdktf/telemetry) data. | | +| DISABLE_VERSION_CHECK | If set to `true` or `1`, CDKTF will not perform a version check. If it is not set, CDKTF verifies that your installed library version matches the CLI version. If they do not match, CDKTF displays a warning. | | +| FORCE_COLOR | If set to `0`, CDKTF disables colored CLI output. Refer to [`chalk` documentation](https://github.com/chalk/chalk#supportscolor) for other supported values. | | +| HTTP_PROXY or http_proxy | The proxy that CDKTF should use for all HTTP requests. | | +| TERRAFORM_BINARY_NAME | The Terraform binary that CDKTF should use. | The Terraform binary in path | +| TF_TOKEN_app_terraform_io | The token CDKTF should use to authenticate with Terrafrom Cloud. Must be set to a valid [HCP Terraform API token](/terraform/cloud-docs/users-teams-organizations/api-tokens). In case of TFE app_terraform_io would be your hostname. | | +| CI | If set to `true` or `1`, CDKTF will run in a non-interactive CI mode. | | diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/hcp-terraform.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/hcp-terraform.mdx new file mode 100644 index 0000000000..a0eddb34f9 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/hcp-terraform.mdx @@ -0,0 +1,185 @@ +--- +page_title: Connect to HCP Terraform / Terraform Enterprise - CDK for Terraform +description: >- + Use HCP Terraform with CDKTF to store Terraform state remotely, manage secrets, apply policies, and more. +--- + +# Connect to HCP Terraform / Terraform Enterprise + +This page explains how to connect HCP Terraform / Terraform Enterprise to your CDK for Terraform (CDKTF) application and the benefits of using these products together. + +> **Hands On:** Try our [Get Started - HCP Terraform](/terraform/tutorials/cloud-get-started) tutorials. + +## What are HCP Terraform and Terraform Enterprise? + +CDKTF supports [HCP Terraform](https://cloud.hashicorp.com/products/terraform) and [Terraform Enterprise](/terraform/enterprise). + +HCP Terraform is a SaaS application that runs Terraform in a stable, remote environment and securely stores state and secrets. It includes a user interface that helps you better understand your Terraform operations and resources, allows you to define role-based access controls, and offers a private registry for sharing [modules](/terraform/cdktf/concepts/modules) and [providers](/terraform/cdktf/concepts/providers). HCP Terraform also integrates with the Terraform CLI and connects to common version control systems (VCS) like GitHub, GitLab, and Bitbucket. When you connect a HCP Terraform workspace to a VCS repository, new commits and changes can automatically trigger Terraform plans. HCP Terraform also offers an API, allowing you to integrate it into existing workflows. + +Terraform Enterprise lets you set up a self-hosted distribution of HCP Terraform and is ideal for organizations with strict security and compliance requirements. + +## When to use HCP Terraform or Terraform Enterprise? + +Terraform uses persisted state data to keep track of the real-world resources it manages. By default, Terraform writes state to a local file. We recommend integrating with HCP Terraform to store state remotely. This prevents accidental loss of locally stored state and lets multiple people access the state data so they can work together on that collection of infrastructure resources. + +Other benefits of HCP Terraform and Terraform Enterprise include the ability to run Terraform remotely, [manage variables and secrets](#managing-variables-and-secrets), and enforce [policies for sets of infrastructure](#policy-enforcement). + +## Set up CDKTF with HCP Terraform / Terraform Enterprise + +After you sign up for a [HCP Terraform Account](https://app.terraform.io/public/signup/account) / create an account in your Terraform Enterprise instance, you must connect your CDKTF project to one or more [workspaces](/terraform/cloud-docs/workspaces). + +Workspaces function like working directories for distinct Terraform configurations and are associated with a Terraform configuration and its state file. They can also contain variables that you can use to manage credentials. + +Workspaces can have one of three workflows that determine how HCP Terraform / Enterprise interacts with your CDKTF application: CLI-driven, Version control, or API-driven (a more advanced option). + +### CLI-driven Workflow + +You can configure the HCP Terraform [CLI-driven workflow](/terraform/cloud-docs/run/cli) for both new and existing CDKTF projects. This workflow lets you run CDKTF CLI commands to deploy your application and run Terraform operations remotely on HCP Terraform / Enterprise. + +#### Connect New CDKTF Projects + +First use `cdktf login` to log into HCP Terraform or your Terraform Enterprise instance: + + + + + This command will take you through an interactive session to log in. + + ```shell-session + $ cdktf login + ``` + + If you already have a HCP Terraform API token, you can pass it into stdin: + + ```shell-session + cat my-token.txt | cdktf login + ``` + + + + + + This command will take you through an interactive session to log in. + + ```shell-session + $ cdktf login --tfe-hostname tfe.my-company.com + ``` + + If you already have a Terraform Enterprise API token, you can pass it into stdin: + + ```shell-session + cat my-token.txt | cdktf login --tfe-hostname tfe.my-company.com + ``` + + + + +1. Run `cdktf init` without passing the `--local` flag. This creates a new template CDKTF project for your chosen programming language. It will be the basis for a new application with the necessary file structure for you to start defining infrastructure. If you're using Terraform Enterprise, you must also pass the `--tfe-hostname` flag with the hostname of your enterprise instance. +2. Choose a project language and provide a project name and description. +3. Select a HCP Terraform organization and a name for your workspace. CDKTF will create a [CloudBackend](/terraform/cli/cloud/settings#the-cloud-block) in your project. +4. You can choose whether to send crash reports to the CDKTF team and select the providers you want to use. + +CDKTF creates both a scaffolded project in your chosen language and a new HCP Terraform workspace on first apply. Your project is connected to the workspace and you can begin using CDKTF and HCP Terraform together. +By default, the workspace is set to Remote execution mode, which means Terraform runs remotely on HCP Terraform / Enterprise. If you want Terraform to run locally, you need to set the workspace to [Local Execution mode](/terraform/cloud-docs/workspaces/settings#execution-mode). + +#### Connect Existing CDKTF Projects + +For existing projects, do the following: + +1. Create a HCP Terraform workspace with the CLI-driven workflow. +2. Add the `RemoteBackend` to your CDKTF application. The following example connects the application to a HCP Terraform / Enterprise workspace called `my-app-prod`. + + ```typescript + import { Construct } from "constructs"; + import { App, TerraformStack, RemoteBackend } from "cdktf"; + + class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + // Remote Backend - /docs/backends/types/remote.html + new RemoteBackend(this, { + // Only required for self-hosted Terraform Enterprise instances. + // Defaults to "app.terraform.io". + hostname: "app.terraform.io", + organization: "company", + + workspaces: { + name: "my-app-prod", + }, + }); + + // define resources here + } + } + + const app = new App(); + const myStack = new MyStack(app, "my-stack"); + // You can also define the backend outside of the stack. + // new RemoteBackend(myStack, { + // hostname: "app.terraform.io", + // organization: "company", + + // workspaces: { + // name: "my-app-prod", + // }, + // }); + // You must configure the RemoteBackend before the app.synth() call + app.synth(); + ``` + +3. Run `cdktf login` / `cdktf login --tfe-hostname=tfe.my-company.com` and log in to HCP Terraform / Enterprise. + +Your CDKTF application is connected to the HCP Terraform / Enterprise workspace you specified in the `RemoteBackend`. You must set the workspace to [Remote Execution mode](/terraform/cloud-docs/workspaces/settings#execution-mode) if you want to store state and run Terraform operations remotely. + +### VCS-driven Workflow + +Check your synthesized code into version control and connect your HCP Terraform / Terraform Enterprise workspace to that repository with the VCS-driven workflow. You can configure the workspace to trigger Terraform runs based on merges and commits to the repository. Refer to [Deployment Patterns](/terraform/cdktf/create-and-deploy/deployment-patterns#deploy-with-terraform-and-hcp-terraform) for more details about how to use CDKTF with the VCS-driven workflow. + +## Managing Variables and Secrets + +HCP Terraform / Terraform Enterprise [variables](/terraform/cloud-docs/workspaces/variables) let you define the variables and secrets that Terraform uses during remote operations. You can set variables specifically for each workspace or you can create variable sets to reuse the same variables across multiple workspaces. For example, you could define a variable set of provider credentials and automatically apply it to all of the workspaces using that provider. + +To use variables, set your workspace to [Remote Execution Mode](/terraform/cloud-docs/workspaces/settings#execution-mode). Terraform can only access workspace variables when executing remotely on HCP Terraform / Enterprise. + +2. Use the `TerraformVariable` construct to declare variables in your CDKTF application. This creates an undefined [Terraform input variable](/terraform/language/values/variables). The following example demonstrates how to create a `TerraformVariable` called `my-var`. + + ```typescript + import { Construct } from "constructs"; + import { App, TerraformStack, TerraformVariable } from "cdktf"; + + class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + // You can define 'my-var' in HCP Terraform and use the value in your application. + const value = new TerraformVariable(this, "my-var", { + default: "The default value to use", + description: "", + nullable: false, // if passing no + sensitive: true, + type: "string", + }); + + // define resources here + } + } + ``` + +3. Add variables that you declared in your CDKTF application to your HCP Terraform / Enterprise workspace. Refer to [Add a Variable](/terraform/cloud-docs/workspaces/variables/managing-variables#add-a-variable) for details. This lets Terraform access the value during operations. + +### Variable Return Values + +The return value for `TerraformVariable` is an object with various representations of the value as attributes. You can pass this object as a string with `value.stringValue`, as a number with `value.numberValue`, or as a list with `value.listValue`. + +This means that there is no actual value in the variable field when CDKTF synthesizes your application. Instead, CDKTF uses a [Token](/terraform/cdktf/concepts/tokens), which represents a value that is unknown until Terraform applies your configuration. You cannot use tokens in dynamic checks during runtime. For example, `if (value.listValue.length > 42) {` always returns `false` because tokenized lists have a static length of one item. + +## Continuous Integration + +To run HCP Terraform / Terraform Enterprise in a CI workflow, you can either use [HCP Terraform / Enterprise's VCS-driven workflow](/terraform/cdktf/create-and-deploy/deployment-patterns#deploy-with-terraform-and-hcp-terraform) or use a [general-purpose CI to trigger the run in HCP Terraform / Enterprise](/terraform/cdktf/create-and-deploy/deployment-patterns#github-actions-ci-and-hcp-terraform). + +## Policy Enforcement + ++-> **Note:** Refer to [HCP Terraform pricing](https://www.hashicorp.com/products/terraform/pricing) for more information about Sentinel policies and run tasks. + +You can define [Sentinel policies](/terraform/cloud-docs/policy-enforcement) for one or multiple HCP Terraform workspaces to ensure that your infrastructure follows company-wide security standards and best practices. You can use Sentinel policies with CDKTF if HCP Terraform is configured as a [Remote Backend](/terraform/cdktf/concepts/remote-backends). + +You can also use [Run Tasks](/terraform/cloud-docs/workspaces/settings/run-tasks) to directly integrate third-party tools and services at certain stages in the HCP Terraform run lifecycle. HCP Terraform uses the status response from the third-party tool to determine if a run should proceed. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/performance.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/performance.mdx new file mode 100644 index 0000000000..068366c05b --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/performance.mdx @@ -0,0 +1,31 @@ +--- +page_title: Performance - CDK for Terraform +description: The faster you can synthesize your CDKTF code, the faster you can deploy it. Learn how to optimize your CDK for Terraform performance. +--- + +# Synthesization Performance + +The faster you can synthesize your CDKTF code, the faster you can deploy it. +This page focuses on how to optimize your CDK for Terraform performance. + +## TypeScript + +In TypeScript, the main bottleneck for synthesization performance is the time it takes `ts-node` or `tsc` to compile your code. +The easiest way to improve this is using explicit resource imports like `import { MyResource } from '@cdktf/provider-my-provider/lib/my-resource'` instead of star imports like `import * as myProvider from '@cdktf/provider-my-provider'`. +Another option is to use a bundler without typechecking like [`tsx`](https://github.com/esbuild-kit/tsx) or [`swc`](https://swc.rs/) to compile your code. These are typically a lot faster than `tsc` or `ts-node`, but you will get no typechecking. + +## Python + +Python is out of the box optimized for synthesization performance. There are no known steps to improve the synthesization performance. + +## Java + +To improve the synthesization performance of Java, we recommend using [Gradle](https://gradle.org/) over [Maven](https://maven.apache.org/). In an example using the AWS provider, we observed an improvement from 3m 30s to 30s after the initial compilation. To migrate to Gradle, we recommend creating a new CDKTF project and copying the code over. + +## C# + +C# is out of the box optimized for synthesization performance. There are no known steps to improve the synthesization performance. + +## Go + +Go is out of the box optimized for synthesization performance. There are no known steps to improve the synthesization performance. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/project-setup.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/project-setup.mdx new file mode 100644 index 0000000000..e2fa4c5557 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/project-setup.mdx @@ -0,0 +1,193 @@ +--- +page_title: Project Setup - CDK for Terraform +description: >- + Build a CDKTF application from a template or existing HCL project, and + configure storage for Terraform state. +--- + +# Project Setup + +There are several ways to create a new CDK for Terraform (CDKTF) project. You can create a new application from a pre-built or a custom template, and you can also convert an existing HCL project. When you create a new project, you can store Terraform state locally or use a [remote backend](/terraform/cdktf/concepts/remote-backends). This page discusses these setup options in more detail. + +> **Hands On**: Try the [CDK for Terraform Quick Start Demo](/terraform/tutorials/cdktf/cdktf-install) and language-specific [Get Started tutorials](/terraform/tutorials/cdktf). + +## Initialize Project from a Template + +Use `init` with a project template to automatically create and scaffold a new CDKTF project for your chosen programming language. +Templates generate a new application with the necessary file structure for you to start defining infrastructure. + +You can use a `cdktf-cli` pre-built template or a custom-built [remote template](/terraform/cdktf/create-and-deploy/remote-templates) when you initialize a new project. + +```bash +$ cdktf init --template="templateName" +``` + +Use these template names for the available pre-built templates: + +- `typescript` +- `python` +- `c#` +- `java` +- `go` + +Note: Even though the CDKTF Java template sets up the Gradle build system for performance reasons, you can still use Maven to build your project. For more information refer to the Java examples which also include Maven examples: [Java Examples](/terraform/cdktf/examples-and-guides/examples#java). + +### Use a Local Backend + +Add the `--local` flag to created a scaffolded project that is pre-configured to use a [local backend](/terraform/language/settings/backends/local). This means that your application stores [Terraform state](/terraform/language/state) on your local machine and all Terraform operations run locally. + +``` +$ cdktf init --template="typescript" --local +``` + +### Use HCP Terraform as a Remote Backend + +When you run `cdktf init` without the `--local` flag, CDKTF defaults to using HCP Terraform as a remote backend. This lets you store state and run Terraform operations remotely in HCP Terraform. Refer to [Set Up CDKTF With HCP Terraform](/terraform/cdktf/create-and-deploy/hcp-terraform#set-up-cdktf-with-hcp-terraform) for details. + +## Project Configuration + +Initializing your project with a template generates a basic project in your preferred programming language that you can customize for your use case. You can manage global configuration for your project by customizing the `cdktf.json` configuration file or the application context. + +### `cdktf.json` Configuration File + +The `cdktf.json` configuration file is where you can define the [providers](/terraform/cdktf/concepts/providers) and [modules](/terraform/cdktf/concepts/modules) that should be added to the project and supply custom configuration settings for the application. Refer to the [cdktf.json documentation](/terraform/cdktf/create-and-deploy/configuration-file) for more detail. + +### Application Context + +All of the classes in your application can access the application `context`, so it is an ideal place to store project configuration. Context becomes available to any construct in your application after you run `cdktf synth`. + +You can configure context as a static value in `cdktf.json` by setting the `context` property. + +```jsonc +{ + // ... + "context": { + "myConfig": "value" + } +``` + +You can also provide context when instantiating the `App` class. + +```typescript +const app = new App({ context: { myConfig: "value" } }); +``` + +The following example uses `App` context to provide a custom tag value to an AWS EC2 instance. + +```typescript +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "./.gen/providers/aws/provider"; +import { Instance } from "./.gen/providers/aws/instance"; + +class MyStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + new Instance(this, "Hello", { + ami: "ami-2757f631", + instanceType: "t2.micro", + tags: { + myConfig: this.node.getContext("myConfig"), + }, + }); + } +} + +const app = new App({ context: { myConfig: "value" } }); +new MyStack(app, "hello-cdktf"); +app.synth(); +``` + +## Generate Terraform Configuration + +Run [`cdktf synth`](/terraform/cdktf/cli-reference/commands#synth) to synthesize your application into JSON configuration files that Terraform can use to manage infrastructure. You can then either use the JSON file with Terraform directly or provision your infrastructure using CDKTF CLI commands. + +Refer to [Deployment Patterns](/terraform/cdktf/create-and-deploy/deployment-patterns#example-workflows) for example workflows, including connecting your CDKTF application to a Continuous Integration pipeline. + +## Convert an HCL Project to a CDKTF TypeScript Project + +You can initialize a new CDKTF TypeScript project from an existing project written in HashiCorp Configuration Language (HCL). This option is currently limited to the `typescript` template. + +To convert an existing HCL project, add `--from-terraform-project` to the `init` command with the TypeScript template. + +``` +$ cdktf init --template=typescript --from-terraform-project /path/to/my/tf-hcl-project +``` + +### Usage Example + +The following HCL configuration defines the `random` provider. + +```hcl +# File: /tmp/demo/main.tf + +terraform { + required_providers { + random = { + source = "hashicorp/random" + version = "3.1.0" + } + } +} + +provider "random" { +} + +resource "random_pet" "server" { +} +``` + +Run the command to convert the HCL project in a new folder. + +```sh +cdktf init --template=typescript --from-terraform-project /tmp/demo --local +``` + +CDKTF bootstraps a Typescript project and generates the equivalent configuration in JSON. + +```jsonc +// File: /tmp/cdktf-demo/cdktf.json + +{ + "language": "typescript", + "app": "npm run --silent compile && node main.js", + "projectId": "83684893-0e58-4a71-989a-ecb7c593a690", + "terraformProviders": ["hashicorp/random@3.1.0"], + "terraformModules": [], + "context": {}, +} +``` + +```typescript +// File: /tmp/cdktf-demo/main.ts + +/*Provider bindings are generated by running cdktf get. +Refer to https://www.terraform.io/cdktf/concepts/providers#providers for more details.*/ +import { RandomProvider } from "./.gen/providers/random/provider"; +import { Pet } from "./.gen/providers/random/provider"; + +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; + +class MyStack extends TerraformStack { + constructor(scope: Construct, name: string) { + super(scope, name); + + new RandomProvider(this, "random", {}); + new Pet(this, "server", {}); + } +} + +const app = new App(); +new MyStack(app, "cdktf-demo"); +app.synth(); +``` + +## Convert HCL Files to CDKTF Format + +Use the `cdktf convert` command to convert individual HCL files to CDKTF-compatible files in your preferred programming language. Refer to the [`cdktf convert` command documentation](/terraform/cdktf/cli-reference/commands#convert) for more information. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx new file mode 100644 index 0000000000..58499ac5be --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx @@ -0,0 +1,85 @@ +--- +page_title: Remote Templates - CDK for Terraform +description: >- + Templates allow you to scaffold a new CDK for Terraform Project. Learn to + create your own template. +--- + +# Remote Templates + +When you set up a new project via `cdktf init`, you can supply one of the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/%40cdktf/cli-core/templates) (e.g. `typescript` or `python`) or use a custom-built remote template. Templates scaffold a new CDK for Terraform (CDKTF) project, creating the necessary directories and files. + +## Create Remote Templates + +A template is a directory that contains at least a `cdktf.json` file, which is required for the `cdktf` CLI. When users run `cdktf init`, CDKTF downloads and and extracts a zip archive containing the files for the specified template. To create the project, it then searches all directories and extracts the directory containing the `cdktf.json` file. This allows you to create content (e.g. a `README.md`) in the root directory of your remote template that won't appear in the generated project directory. + +You can use the library [`sscaff`](https://github.com/awslabs/node-sscaff) to scaffold a new project. The `sscaff` library copies all files into the new project directory while allowing for substitutions and hooks. + +### Substitutions + +A template can use substitutions for filenames and file content. To specify your own variables, use [Hooks](#pre-and-post-hooks). In addition to the [built-in substitutions of](https://github.com/awslabs/node-sscaff#built-in-substitutions) `sccaff`, CDKTF supplies variables that you can use in templates. + +#### User Input + +These variables hold user input. For example, you can use them in project files like `package.json`. CDKTF collects the required data from users when they run `cdktf init` with the template. + +The following example specifies that `Name` and `Description` are mandatory, but `OrganizationName` and `WorkspaceName` will only be required for projects that are set up to use a HCP Terraform [remote backend](/terraform/cdktf/concepts/remote-backends). + +```typescript +Name: string; +Description: string; +OrganizationName?: string; +WorkspaceName?: string; +``` + +There is no way to collect custom user input for templates at the moment. + +#### Versions + +These variables contain correct versions of the packages that are depending on the CDKTF CLI. The package names are provided in the correct format for the given platform. We recommend using these variables as they are provided without adding any custom logic, since the package name and their version schema follow specific conventions. + +Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/cdktf-cli/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. + +```typescript +cdktf_version: string; +constructs_version: string; +npm_cdktf: string; +npm_cdktf_cli: string; +pypi_cdktf: string; +mvn_cdktf: string; +nuget_cdktf: string; +``` + +### `pre` and `post` Hooks + +[Hooks](https://github.com/awslabs/node-sscaff#hooks) allow you to run additional logic before and after the generation of the output. + +### Debug Remote Templates + +Add `console.log()` statements to your hook functions. CDK for Terraform displays this log output when a user initializes a project from your template. + +You can also set the environment variable `CDKTF_LOG_LEVEL` to `debug` before invoking `cdktf init` to see more debugging output. The debugging output will be printed on stdout. + +## Distribute Remote Templates + +You can host your remote template anywhere, as long as it is formatted as a zip archive. GitHub allows users to fetch the repository contents as zip archive, so you do not have to create one manually. You can only specify urls to zip archives, so only url-based authentication mechanisms are supported. If you need support for private packages, please [file an issue](https://github.com/hashicorp/terraform-cdk/issues/new?labels=enhancement%2C+new&template=feature-request.md). + +The following example shows the URL for the `main` branch for a remote template GitHub repository. + +`https://github.com///archive/refs/heads/main.zip` + +The following example shows a URL that uses a Git tag. + +`https://github.com///archive/refs/tags/v0.0.1.zip` + +## Use Remote Templates + +The CDKTF community maintains the following remote templates that you can use to set up your project. + +- [python-poetry](https://github.com/johnfraney/cdktf-remote-template-python-poetry) (by [@johnfraney](https://github.com/johnfraney)) + +The following example initializes a new CDKTF project with a remote template. + +``` +$ cdktf init --template https://github.com///archive/refs/tags/v0.0.1.zip +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/construct-design.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/construct-design.mdx new file mode 100644 index 0000000000..51a31e43bb --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/construct-design.mdx @@ -0,0 +1,153 @@ +--- +page_title: Construct Design | CDK for Terraform +description: |- + Write highly configurable construct classes that provide guidance for a wide range of use cases. +--- + +# Construct Design + +Custom construct classes are reusable infrastructure configurations written in a programming language. + +Similar to [Terraform modules](/terraform/language/modules), constructs let you reuse configurations, enforce infrastructure best practices, and abstract configuration details away from users. For example, you might create a construct that configures a Kubernetes deployment. + +Constructs can also use programming functionality to provide more customization and guidance than a Terraform module. Users only customize modules through inputs, so complex modules can expose hundreds of options. Even if the module provides valid defaults, users must determine which inputs are relevant to their use case and how to configure them. Constructs are much more flexible. For example, a construct can dynamically build defaults from non-input values and let users override methods that create infrastructure objects. + +## Choosing a Language + +You can write a custom construct in any language CDKTF supports. + +### Creating Constructs for a Single Language + +You can write `Construct` classes and store them locally, either within your CDKTF application or in a separate, shared directory. We recommend storing constructs in a separate directory when you have multiple CDKTF applications in a monorepo setup. + +When you write constructs in the same language as your CDKTF application, you can use the same importing mechanisms you use with other applications. Refer to [Constructs](/terraform/cdktf/concepts/constructs) in the CDKTF Concepts documentation for more details about using constructs. + +### Creating Constructs for Multiple Languages + +You have two options for writing constructs for users to consume in multiple programming languages. + +The first option is writing your construct in Typescript and using [`jsii`](https://aws.github.io/jsii/) to translate it to other languages. This approach requires some setup and configuration. Refer to the [JSII getting started guide](https://aws.github.io/jsii/user-guides/lib-author/quick-start/set-up/) for details. You can also use the `cdktf-construct` projen template to get started more quickly. Refer to [Publish Constructs with Projen](/terraform/cdktf/develop-custom-constructs/publishing-and-distribution#publish-constructs-with-projen) for details. + +The second option is using Terraform Modules as an intermediate layer. You can use the [cdktf-tf-module-stack](https://github.com/cdktf/cdktf-tf-module-stack) to transform your code into a Terraform module, import the module into any CDKTF application, and let CDKTF [generate the local code bindings](/terraform/cdktf/concepts/modules#add-module-to-cdktf-json) required to use it. This approach lets you write your construct in any language and requires less setup than using `jsii`. However, you are limited to the structure and functionality available in a Terraform module. For example, you cannot use programming functionality like enums or methods to provide advanced configuration options. + +## Design Best Practices + +Use the following best practices to guide construct development. + +### Make Your Construct Highly Configurable + +Let users overwrite attributes when possible. This prevents users from having to overwrite or modify your construct’s outputs if they need to change your defaults. + +You can also consider organizing logic into methods that users can overwrite through inheritance. This approach is similar to the template method pattern popular in Object-Oriented Programming (OOP) languages. For example, you might create methods for tasks like getting a secret from a source or accessing all available regions. + +The following example shows how template methods can let users customize which secrets their application retrieves for a docker container. + +```typescript +class LocalDockerDeployment extends Construct { + constructor(scope: Construct, name: string, options: Options) { + // … + + new DockerContainer(this, "container", { + image: options.image, + environment: this.getSecrets(options.secrets), + }); + } + + /* + * Load my secrets from Terraform variables + */ + getSecrets(secrets: string[]) { + return secrets.map( + (secret) => + new TerraformVariable(this, secret, { sensitive: true }).stringValue, + ); + } +} + +class ProductionDockerDeployment extends LocalDockerDeployment { + /* + * Load production secrets from Vault + */ + getSecrets(secrets: string[]) { + return secrets.map( + (secret) => + new DataVaultGenericSecret(this, secret, { path: secret }).data, + ); + } +} +``` + +### Encourage Correct Configuration + +Provide good defaults when possible. Also consider adding sets of defaults for multiple use cases. This helps users gain the necessary context for working with the construct. + +The following example contains a static function that provides an alternative way to use and configure the construct. + +```typescript +class MyVpc extends Construct { + constructor(scope: Construct, name: string, options: Options) { + const optionsToUse = { + ...myDefaultOptions, + ...options, + }; + // … + + function createSecuredVpc( + scope: Construct, + name: string, + options: Options, + ): MyVpc { + return new MyVpc(scope, name, { + ...mySecureDefaultOptions, + ...options, + }); + } + } +} +``` + +You should also include enums to help users understand which configuration options are available for each attribute. Using methods to build functionality can also provide additional guidance. For example, creating a method called `addAIComputingNode` helps the user understand the code's function much more than requiring the user to configure a single key in an array for AI workloads. + +The following example shows how you can use these principles to help users add a node to a Kubernetes cluster. In the first section, the user must configure the node without any guidance about valid values or how to configure the node for their use case. The second section uses methods and interfaces to surface the difference between node architecture and sizes. + +```typescript +// Hard to get right +interface NodeOptions { + nodeSize: string; + nodeArchitecture: string; + nodeId: string; +} +interface Options { + name: string, + vpcId: string, + nodes: NodeOptions[]; +} +class ConfigurationBasedKubernetesCluster extends Construct { + constructor(scope: Construct, name: string, options: Options) { + // … + } +} + +// Easy to get right +enum IntelNodeSize { + Normal = "t3.medium", + Large = "t3.2xlarge", +} +enum AmdNodeSize { + Normal = "t3a.medium" + Large = "t3a.2xlarge" +} +interface Options { + name: string, + vpcId: string, +} + +class MethodBasedKubernetesCluster extends Construct { + constructor(scope: Construct, name: string, options: Options) { + // … + } + + addIntelNode(name: string, size: IntelNodeSize) {} + addAmdNode(name: string, size: AmdlNodeSize) {} +} +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/publishing-and-distribution.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/publishing-and-distribution.mdx new file mode 100644 index 0000000000..ba90c211b9 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/develop-custom-constructs/publishing-and-distribution.mdx @@ -0,0 +1,149 @@ +--- +page_title: Distributing and Consuming Constructs | CDK for Terraform +description: |- + Translate custom constructs to multiple languages. Use the projen project to quickly package and distribute constructs to public or private registries. +--- + +# Construct Publishing and Distribution + +Custom construct classes are reusable infrastructure configurations written in a programming language. After you [write a custom construct](/terraform/cdktf/develop-custom-constructs/construct-design), you can translate it to multiple languages and publish it for others to import and use in CDK for Terraform (CDKTF) applications. + +## Translate Constructs to Terraform Modules + +You can write a CDKTF construct class and then synthesize the code into an HCL [Terraform module](/terraform/language/modules). When you use this approach, you are limited to the structure and functionality available in a Terraform module. For example, you cannot use enums or methods to provide advanced configuration options. + +Use the [cdktf-tf-module-stack](https://github.com/cdktf/cdktf-tf-module-stack) to transform your code into a Terraform module. This library exposes `TFModuleStack`, `TFModuleVariable`, `TFModuleOutput` constructs that you can use as replacements for `TerraformStack`, `TerraformVariable`, `TerraformOutput`. + +The library also offers a `ProviderRequirement` construct that replaces the provider construct you typically use in CDKTF applications. Typical provider constructs pin a specific provider version, but the `ProviderRequirement `construct lets you select a version range. This behavior more closely matches how many modules specify provider versions. + +The following example shows a CDKTF program written using the `cdktf-tf-module-stack` library. CDKTF could then [synthesize](/terraform/cdktf/cli-reference/commands#synth) this code into a `cdktf.tf.json` file to use with Terraform. If you want to use this module, you need to list the full path to the folder containing the synthesized file, such as `../my-cdktf-application/cdktf.out/stacks/my-awesome-module`. + +```typescript +import { App } from "cdktf"; +import { + TFModuleStack, + TFModuleVariable, + TFModuleOutput, + ProviderRequirement, +} from "cdktf-tf-module-stack"; +import { Resource } from "@cdktf/provider-null"; + +class MyAwesomeModule extends TFModuleStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new ProviderRequirement(this, "null", "~> 2.0"); + const resource = new Resource(this, "resource"); + + new TFModuleVariable(this, "my_var", { + type: "string", + description: "A variable", + default: "default", + }); + + new TFModuleOutput(this, "my_output", { + value: resource.id, + }); + } +} + +const app = new App(); +new MyAwesomeModule(app, "my-awesome-module"); +app.synth(); +``` + +### Publish Translated HCL Modules + +Follow the [Terraform module publishing requirements and instructions](/terraform/registry/modules/publish). You can use the [projen-cdktf-hybrid-construct](https://github.com/cdktf/projen-cdktf-hybrid-construct) to make this workflow easier. Refer to the [CDK Day 2022 talk](https://cdk.tf/cdk-day-2022-hybrid-modules) on this topic for more details. + +## Publish Constructs with Projen + +We recommend using the [`cdktf-construct` projen template](https://github.com/projen/projen/blob/main/src/cdktf/cdktf-construct.ts) to package and publish your constructs to either public or private registries. [Projen](https://github.com/projen/projen) synthesizes files and directories into different target languages based on a Javascript or Typescript file. The process is similar to how CDKTF synthesizes code into JSON configuration files for Terraform. + +The projen deployment mechanism uses GitHub Actions, so `cdktf-construct` expects GitHub to host the Git repository for your construct package. If you prefer to use a different CI provider, you can use projen to bootstrap the project, run `yarn run eject` to opt out of projen, and then customize the CI implementation. + +Use the following steps to publish your constructs with the `cdktf-construct` projen template. + +### Initialize Construct Package + +Navigate into your construct directory and run `npx projen new cdktf-construct` to initialize a new construct package. The script creates a new project that you can configure and then deploy to private or public registries. + +### Configure the Construct Project + +Projen manages all non-code files, like the package.json or JSII configuration, so must modify the `.projenrc.js` configuration to include your construct's code files. + +The following example shows how to configure your `.projenrc.js` file to publish your project to public or private registries. + +```typescript +const { cdktf } = require("projen"); +const project = new cdktf.ConstructLibraryCdktf({ + author: "Your Name", + authorAddress: "your-name@company.com", + cdktfVersion: "0.13.0", + defaultReleaseBranch: "main", + name: "your-project-name", + repositoryUrl: "https://github.com/your-org/your-project-name.git", + prettier: true, // optional, but convenient + + // Release Configuration + + // Requires "NPM_TOKEN" secret to be set in the secrets of the Github repository + releaseToNpm: true, + npmRegistryUrl: "https://npm.pkg.your-company.com", // When omitted it will release to the public NPM registry + + // Requires "TWINE_USERNAME" & "TWINE_PASSWORD" secret to be set in the repository + publishToPypi: { + distName: "your-project-name", + module: "your_project_name", + twineRegistryUrl: "https://pypi.your-company.com", // When omitted it will release to the public PyPi registry + }, + + // Requires "MAVEN_GPG_PRIVATE_KEY", "MAVEN_GPG_PRIVATE_KEY_PASSPHRASE", "MAVEN_PASSWORD", + // "MAVEN_USERNAME", and "MAVEN_STAGING_PROFILE_ID" to be set. + publishToMaven: { + javaPackage: "com.your-org.your-project-name ", + mavenGroupId: "com.your-org", + mavenArtifactId: "your-project-name", + mavenRepositoryUrl: + "https://maven.your-company.com/repository/your-project", // When omitted, the project releases to Maven Central + }, + + // Requires "NUGET_API_KEY" to be set. + publishToNuget: { + dotNetNamespace: "YourOrg.YourProjectName", + packageId: "YourOrg.YourProjectName", + nugetServer: "https://nuget.your-company.com", // When omitted it will release to the public Nuget registry + }, +}); + +// You should use pre-built providers as peer dependencies so your +// package manager can warn you if you have incompatible versions +project.addPeerDeps( + "@cdktf/provider-aws@10.x", // You want to pin the major version to stay + "@cdktf/provider-pagerduty@3.x", // compatible with the current cdktf version + "@cdktf/provider-datadog@3.x", +); + +project.synth(); +``` + +Run `npm run projen` to generate the setup and workflow files for your project You must do this every time you change the `.projenrc.js` file. + +### Set GitHub Actions Secrets + +The GitHub Action requires the following environment variables for credentials. + +- `NPM_TOKEN`: An [npm API token](https://docs.npmjs.com/cli/v7/commands/npm-token) or a token for the registry of your choice +- `TWINE_USERNAME`: The username to use for PyPi, if using a token it should be "**token**" +- `TWINE_PASSWORD`: [The PyPi API token](https://pypi.org/manage/account/token/) to authenticate against PyPi or the registry of your choice +- `NUGET_API_KEY`: The API key to authenticate against NuGet + +The following environment variables are for Maven credentials: + +- `MAVEN_GPG_PRIVATE_KEY` +- `MAVEN_GPG_PRIVATE_KEY_PASSPHRASE` +- `MAVEN_PASSWORD` +- `MAVEN_USERNAME` +- `MAVEN_STAGING_PROFILE_ID` + +This configuration creates new releases when you push a new commit to the repository. The version numbers follow [semantic versioning specifications](https://semver.org/). diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx new file mode 100644 index 0000000000..585f9f8b15 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx @@ -0,0 +1,139 @@ +--- +page_title: Examples and Guides - CDK for Terraform +description: >- + Resources to help you learn CDK for Terraform, including example projects in + Typescript, Java, Python, C#, and Go. +--- + +# Examples + +This page contains links to tutorials, example projects in every supported language, explanatory videos, and other resources to help you learn to create and manage CDK for Terraform (CDKTF) applications. + +## Tutorials + +Follow these hands-on tutorials: + +| Tutorial | Description | +| ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| [Install CDKTF and Run a Quick Start Demo](/terraform/tutorials/cdktf/cdktf-install) | Write TypeScript code that will provision an NGINX server using Docker on Mac, Windows, or Linux. | +| [Build AWS Infrastructure with TypeScript, Python, Java, C#, or Go](/terraform/tutorials/cdktf/cdktf-build) | Provision an EC2 instance on AWS using TypeScript. | +| [Deploy Multiple Lambda Functions with TypeScript](/terraform/tutorials/cdktf/cdktf-assets-stacks-lambda) | Deploy a CDKTF application made up of two stacks, each containing a simple AWS Lambda function written in TypeScript. | +| [Deploy Applications with CDK for Terraform](/terraform/tutorials/cdktf/cdktf-applications) | Use CDKTF to deploy an application on Kubernetes. | + +## Example Projects + +-> **Note**: The [Terraform Registry](https://registry.terraform.io/) has more information about all of the providers in following examples. + +### Typescript + +| Example | Description | Complexity | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------- | +| [aws-ecs-docker-and-static-frontend](https://github.com/hashicorp/docker-on-aws-ecs-with-terraform-cdk-using-typescript) | Uses a backend service in a Docker container with a static frontend running in Amazon Web Services (AWS). Walk through AWS setup and configuring the backend to run against a Postgres Database. | High | +| [aws-lambda-end-to-end](https://github.com/hashicorp/cdktf-integration-serverless-example) | An end-to-end example for a serverless web application hosted on AWS. | High | +| [aws-prebuilt](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/aws-prebuilt) | Provisions a DynamoDB table on the prebuilt AWS provider. | Low | +| [aws-multiple-stacks](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/aws-multiple-stacks) | Uses Stacks to pass different settings into the development, staging, and production environments. | Low | +| [aws-cloudfront-proxy](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/aws-cloudfront-proxy) | Uses AWS Cloudfront as a SSL proxy server for any existing domain. | Low | +| [azure](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/azure) | Provisions a Virtual Network on Microsoft Azure. | Low | +| [azure-app-service](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/azure-app-service) | Uses the Azure App Service to deploy a Docker image. | Low | +| [docker](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/docker) | Starts a Docker container with an NGINX server. | Low | +| [ecs-microservices-cdktf](https://github.com/jcolemorrison/ecs-microservices-cdktf) | Creates a microservice architecture on AWS ECS Fargate with Datadog monitoring using the CDK for Terraform | High | +| [google](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/google) | Creates a simple Compute Instance with the Google Cloud Platform Provider. | Low | +| [google-cloudrun](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/google-cloudrun) | Defines a Google Cloud Run service with a hello world container. | Low | +| [kubernetes](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/kubernetes) | Sets up a Kubernetes Deployment with a NGINX container. | Low | +| [ucloud](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/ucloud) | Provisions a Linux base image on UCloud. | Low | +| [vault](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/vault) | Creates a Mount in Vault. | Low | + +#### Backends + +Each CDK for Terraform project can specify a [backend](/terraform/language/settings/backends/configuration) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. + +| Example | Description | Complexity | +| ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| [azurerm](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/backends/azurerm) | Specifies Azure Resource Manager ([azurerm](/terraform/language/settings/backends/azurerm)) as the backend. | Low | +| [gcs](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/backends/gcs) | Specifies Google Cloud Storage ([gcs](/terraform/language/settings/backends/gcs)) as the backend. | Low | +| [remote](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/backends/remote) | Specifies a [remote](/terraform/language/settings/backends/remote) backend. You can use remote backends to run operations in HCP Terraform. | Low | +| [s3](https://github.com/hashicorp/terraform-cdk/tree/main/examples/typescript/backends/s3) | Specifies Amazon S3 ([s3](/terraform/language/settings/backends/s3)) as the backend. | Low | + +### Python + +| Example | Description | Complexity | +| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------- | +| [aws-lambda-end-to-end](https://github.com/hashicorp/cdktf-integration-serverless-python-example) | An end-to-end example for a serverless web application hosted on AWS. | High | +| [aws](https://github.com/hashicorp/terraform-cdk/tree/main/examples/python/aws) | Provisions an AWS Virtual Private Cloud (VPC). | Low | +| [aws-eks](https://github.com/hashicorp/terraform-cdk/tree/main/examples/python/aws-eks) | Provisions an EKS cluster on an AWS Virtual Private Cloud. | Low | +| [google-end-to-end](https://github.com/hashicorp/cdktf-integration-serverless-python-gcp-example) | An end-to-end example for a serverless web application hosted on the Google Cloud Provider. | High | +| [azure](https://github.com/hashicorp/terraform-cdk/tree/main/examples/python/azure) | Provisions a Virtual Network on Microsoft Azure. | Low | +| [docker](https://github.com/hashicorp/terraform-cdk/tree/main/examples/python/docker) | Starts a Docker container with an NGINX server. | Low | +| [kubernetes](https://github.com/hashicorp/terraform-cdk/tree/main/examples/python/kubernetes) | Schedules and exposes a NGINX deployment on a Kubernetes cluster. | Low | +| [ucloud](https://github.com/hashicorp/terraform-cdk/tree/main/examples/python/ucloud) | Provisions a Linux base image on UCloud. | Low | + +### Java + +#### Gradle + +| Example | Description | Complexity | +| --------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| [aws-gradle](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/aws-gradle) | Provisions a DynamoDB table on the AWS provider. | Low | +| [azure-gradle](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/azure-gradle) | Provisions a Virtual Network on Microsoft Azure. | Low | +| [google-gradle](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/google-gradle) | Creates a simple Compute Instance with the Google Cloud Platform Provider. | Low | +| [gradle-shared-module](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/gradle-shared-module) | Uses gradle to build and share two AWS modules. [Modules](/terraform/cdktf/concepts/modules) are distinct configurations that you can package and reuse across projects and teams. | Low | +| [kubernetes-gradle](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/kubernetes-gradle) | Schedules and exposes a NGINX deployment on a Kubernetes cluster. | Low | +| [ucloud-gradle](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/ucloud-gradle) | Provisions a Linux base image on UCloud. | Low | + +#### Maven + +| Example | Description | Complexity | +| ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ---------- | +| [aws-lambda-end-to-end](https://github.com/hashicorp/cdktf-integration-serverless-java-example) | An end-to-end example for a serverless web application hosted on AWS. | High | +| [aws](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/aws) | Provisions a DynamoDB table on the AWS provider. | Low | +| [azure](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/azure) | Provisions a Virtual Network on Microsoft Azure. | Low | +| [google-end-to-end](https://github.com/hashicorp/cdktf-integration-serverless-java-gcp-example) | An end-to-end example for a serverless web application hosted on the Google Cloud Provider. | High | +| [google](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/google) | Creates a simple Compute Instance with the Google Cloud Platform Provider. | Low | +| [kubernetes](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/kubernetes) | Schedules and exposes a NGINX deployment on a Kubernetes cluster. | Low | +| [ucloud](https://github.com/hashicorp/terraform-cdk/tree/main/examples/java/ucloud) | Provisions a Linux base image on UCloud. | Low | + +### C Sharp + +| Example | Description | Complexity | +| ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ---------- | +| [aws](https://github.com/hashicorp/terraform-cdk/tree/main/examples/csharp/aws) | Provisions a DynamoDB table on the AWS provider. | Low | +| [azure](https://github.com/hashicorp/terraform-cdk/tree/main/examples/csharp/azure) | Provisions a Virtual Network on Microsoft Azure. | Low | +| [google](https://github.com/hashicorp/terraform-cdk/tree/main/examples/csharp/google) | Creates a simple Compute Instance with the Google Cloud Platform Provider. | Low | +| [ucloud](https://github.com/hashicorp/terraform-cdk/tree/main/examples/csharp/ucloud) | Provisions a Linux base image on UCloud. | Low | + +### Go + +| Example | Description | Complexity | +| ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | +| [docker](https://github.com/hashicorp/terraform-cdk/tree/main/examples/go/docker) | Starts a Docker container with an NGINX server. | Low | +| [aws](https://github.com/hashicorp/terraform-cdk/tree/main/examples/go/aws) | Provisions an EKS cluster on an AWS Virtual Private Cloud. **High memory usage:** The provider generation currently needs \~6 GB of memory, so the maximum for Node.js is [currently set to 8GB](https://github.com/hashicorp/terraform-cdk/blob/11d2e783d1fe94e50abd116ba73689c02590a391/packages/cdktf-cli/lib/get/constructs-maker.ts#L279). | Low | +| [google cloud kubernetes engine + kubernetes](https://github.com/hashicorp/terraform-cdk/tree/main/examples/go/google) | Creates a simple Compute Instance with the Google Cloud Platform Provider. | Low | +| [ucloud](https://github.com/hashicorp/terraform-cdk/tree/main/examples/go/ucloud) | Provisions a Linux base image on UCloud. | Low | + +## Youtube Playlist + +- [Our official playlist](https://www.youtube.com/watch?v=nNr8JrN-9HE&list=PL81sUbsFNc5ZWUfivG9-KAtLhMbJ4aUmV) contains a set of videos from community office hours to deep dives into technical topics +- [CDK Day 2022 - Hybrid Constructs](https://www.youtube.com/watch?v=s8tO-ymVQPg&t=10260s): How to build CDKTF abstractions that cooperate with your HCL +- The CDKTF engineering team builds a simple end to end serverless application in an [end to end livestream](https://www.youtube.com/watch?v=Ey0SW0c6p8c) +- [Getting Started with CDK for Terraform and Python](https://www.youtube.com/watch?v=Ee2qh-pEC5k&t=258s), by Charles McLaughlin of ShopStyle +- [Extending constructs of the CDK for Terraform](https://www.youtube.com/watch?v=cfU-WOGdNqA) + +### Release demos + +- **0.4:** [Go support, Asset construct, Terraform Cloud (now HCP Terraform) integration](https://www.youtube.com/watch?v=TTfFAIeSqgo). This includes a [Google Kubernetes Engine demo](https://youtu.be/TTfFAIeSqgo?t=1573). + +- **0.5:** [Convert and watch command demos](https://www.youtube.com/watch?v=4caW8WJM4h4&t=1s) + + If you are interested in extending the `cdktf convert` command, you may also be interested in the [convert deep dive](https://www.youtube.com/watch?v=rSn4-Ki5nho). You do not need to watch this video to use the `convert` command successfully. + +- **0.6:** [Snapshot testing](https://www.youtube.com/watch?v=9Is4QJT2664) + +## Pocket public codebase + +Mozilla Pocket is a widely used application for managing reading lists that is built into the Firefox browser. Like many Mozilla projects, Pocket is open source, and the CDK for Terraform codebase that Pocket uses to manage infrastructure for the recommendation API is also public and open source. Pocket's codebase provides a great example of how to lay out a CDK for Terraform project. + +In order to re-use components, Pocket's codebase is separated out into a [set of reusable modules](https://github.com/Pocket/terraform-modules/tree/main/src/pocket). These are then used from CDK for Terraform code in the [recommendation-api codebase](https://github.com/Pocket/recommendation-api/tree/main/.aws). The recommended reading order is to: + +1. Read [`Pocket/recommendation-api/.aws/src/main.ts`](https://github.com/Pocket/recommendation-api/blob/main/.aws/src/main.ts). +1. Look at the constructs used that are defined in the [`Pocket/terraform-modules`](https://github.com/Pocket/terraform-modules/tree/main/src/pocket) repository, such as [`PocketALBApplication`](https://github.com/Pocket/terraform-modules/blob/main/src/pocket/PocketALBApplication.ts). +1. Look at the ["base" constructs](https://github.com/Pocket/terraform-modules/tree/main/src/base), which are are used in the higher-level constructs in the previous step. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/refactoring.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/refactoring.mdx new file mode 100644 index 0000000000..5567df234c --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/refactoring.mdx @@ -0,0 +1,353 @@ +--- +page_title: Refactoring - CDK for Terraform +description: >- + Refactor stacks as your CDKTF application grows in size and complexity. +--- + +# Refactoring + +You may need to move resources between stacks as your CDK for Terraform (CDKTF) application grows in size and complexity. This guide demonstrates how to refactor your stacks. In general you can change the names of stacks freely without an effect on the synthesized code. If you change the name of a resource this might lead to a re-creation of the resource, especially if you move the resource from one stack to another. + +## Moving & Renaming Resources Within a Stack + +You may want to rename a deployed resource in a stack, like the `S3Bucket` in the following example. + +```typescript +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/provider"; +import { S3Bucket } from "@cdktf/provider-aws/lib/s3-bucket"; + +class MyStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + // old S3Bucket definition + // new S3Bucket(this, "my-bucket", { + // bucketprefix: "my-bucket", + // }); + + // new S3Bucket definition + new S3Bucket(this, "new-bucket", { + bucketprefix: "my-bucket", + }); + } +} + +const app = new App(); +new MyStack(app, "refactoring-example"); +app.synth(); +``` + +When you run a `cdktf plan`, the CLI may display the following output: + +```shell-session +refactoring-example # aws_s3_bucket.my-bucket will be destroyed + # (because aws_s3_bucket.my-bucket is not in configuration) + - resource "aws_s3_bucket" "my-bucket" { +... +refactoring-example # aws_s3_bucket.new-bucket (new-bucket) will be created + + resource "aws_s3_bucket" "new-bucket" { +``` + +Terraform plans to destroy the old bucket and create a new one to replace it. The replacement can be harmful if there is already state in the resource, such as files in the bucket or data in the database. + +To avoid this recreation behavior, use one of the move instance functions (`moveTo`, `moveToId`, `moveFromId`) available on the resource. + +```typescript +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/provider"; +import { S3Bucket } from "@cdktf/provider-aws/lib/s3-bucket"; + +class MyStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + // old S3Bucket definition + new S3Bucket(this, "my-bucket", { + bucketprefix: "my-bucket", + }).moveTo("new-s3-bucket"); + + // new S3Bucket definition + new S3Bucket(this, "new-bucket", { + bucketprefix: "my-bucket", + }).addMoveTarget("new-s3-bucket"); + } +} +``` + +### Performing Resource Moves + +The `moveTo` function is available on all resources and is used for relocating a resource to the location specified by the string target `moveTarget`. To set a resource's `moveTarget`, use the `addMoveTarget` function that is present on the resource to move to. You can specify an arbitrary string for the `moveTarget`, but it must be unique within your stack. + +```ts +new S3Bucket(this, "test-bucket-move-to", { + bucket: "move-bucket-name", +}).addMoveTarget("move-s3"); + +new S3Bucket(this, "test-bucket-move-from", { + bucket: "move-bucket-name", +}).moveTo("move-s3"); +``` + +After deployment, both the resource being moved and the move target on the destination resource can be removed. + +#### Move Targets + +A `moveTarget` is accessible anywhere within the context of the stack where it is created, including the root of the stack and within a nested construct. This workflow does not support moving resources to a different stack. + +```ts +new S3Bucket(this, "test-bucket-1", { + bucket: "test-move-bucket-name-1", +}).moveTo("move"); + +// Contains resource with moveTarget "move" +new NestedConstructToMoveTo(this, "construct-to-move-to"); +``` + +### Enabling `foreach` on a Resource + +To incorporate a deployed resource into a `foreach` composition without destroying the resource, specify an index as a second argument in the `moveTo` function. The index should correspond to the key in the `TerraformIterator` named `iterator`. + +```ts +const iterator = TerraformIterator.fromMap({ + "website-static-files": { + name: "website-static-files", + tags: { app: "website" }, + }, + images: { name: "images", tags: { app: "image-converter" } }, +}); + +new S3Bucket(this, "iterator-bucket", { + forEach: iterator, + bucket: iterator.getString("name"), + tags: iterator.getStringMap("tags"), +}).addMoveTarget("resourceWithIterator"); + +new S3Bucket(this, "moved-bucket", { + bucket: "website-static-files", + tags: { app: "website" }, +}).moveTo("resourceWithIterator", "website-static-files"); +``` + +This allows you to efficiently integrate existing resources into a `foreach` composition without destroying the existing deployed resource. + +### Move By Resource Address + +In instances where the move target workflow does not easily fit your use case, resource moves can be performed by directly specifying the full resource address to be moved to/from. + +#### Move To + +```typescript +new S3Bucket(this, "bucket-moved", { + bucket: "move-bucket", +}).moveToId("aws_s3_bucket.bucket-new"); + +new S3Bucket(this, "bucket-new", { + bucket: "move-bucket", +}); +``` + +#### Move From + +```typescript +// Old resource +// new S3Bucket(this, "bucket-moved", { +// bucket: "move-bucket", +// }); + +new S3Bucket(this, "bucket-new", { + bucket: "move-bucket", +}).moveFromId("aws_s3_bucket.bucket-moved"); +``` + +Note that in moving from a specified resource address, the original resource being moved from must be removed. + +#### Nested Constructs + +Resource addresses in the context of nested constructs will not simply be the specified id given to the resource. When dealing with moving resources by their address to/from nested constructs, run `cdktf synth` and refer to `cdktf.out/stacks/'your stack name'` to find the exact address to move to/from. + +```typescript +new S3Bucket(this, "bucket-moved", { + bucket: "bucket-moved", +}).moveToId("aws_s3_bucket.nested-construct_bucket-new_5A0C9225"); // moving to S3Bucket "bucket-new" in NestedConstruct "nested-construct" + +new NestedConstruct(this, "nested-construct", {}); +``` + +## Moving or renaming modules + +To change the id of a module without losing its state use the `terraform state mv` command. This command needs to be run in the output directory of the stack that contains the module. Commonly this is `cdktf.out/stacks/`. The command takes two arguments, the first is the current id of the module, the second is the new id of the module. + +```shell-session +$ cd cdktf.out/stacks/refactoring-example +$ terraform state mv module.my-module module.my-new-module +``` + +For further details on the `terraform state mv` command refer to the [Terraform documentation](/terraform/cli/commands/state/mv). + +## Moving Resources From One Stack To Another + +You may want to move a resource from one stack to another, like the following example aws `S3Bucket` resource. + +```typescript +import { Construct } from "constructs"; +import { App, TerraformStack } from "cdktf"; +import { AwsProvider } from "@cdktf/provider-aws/lib/provider"; +import { S3Bucket } from "@cdktf/provider-aws/lib/s3-bucket"; + +class MyFirstStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + // Old Definition + // new S3Bucket(this, "my-bucket", { + // bucketPrefix: "my-bucket", + // }); + } +} + +class MySecondStack extends TerraformStack { + constructor(scope: Construct, id: string) { + super(scope, id); + + new AwsProvider(this, "aws", { + region: "us-east-1", + }); + + // New Definition + new S3Bucket(this, "my-other-bucket", { + bucketPrefix: "my-bucket", + }); + } +} + +const app = new App(); +new MyFirstStack(app, "refactoring-example-stack-move-1"); +new MySecondStack(app, "refactoring-example-stack-move-2"); +app.synth(); +``` + +When you run a `cdktf deploy '*'`, the CLI displays the following output. + +```shell-session +... +refactoring-example-stack-move-1 # aws_s3_bucket.my-bucket will be destroyed + # (because aws_s3_bucket.my-bucket is not in configuration) + - resource "aws_s3_bucket" "my-bucket" { +... +refactoring-example-stack-move-2 # aws_s3_bucket.my-other-bucket (my-other-bucket) will be created +... +``` + +To preserve the state of the resource, you must move it from one stack to another. You can use [`terraform import`](/terraform/cli/commands/import) and [`terraform state rm`](/terraform/cli/commands/state/rm) to move the resource's state. First we need to find the Terraform name of the Resource in the old stack. + +```shell-session +$ cat cdktf.out/stacks/refactoring-example-stack-move-1/cdk.tf.json | jq '.resource.aws_s3_bucket' +{ + "my-bucket": { + "//": { + "metadata": { + "path": "refactoring-example-stack-move-1/my-bucket", + "uniqueId": "my-bucket" + } + }, + "bucket_prefix": "my-bucket" + } +} +``` + +Now we need to find the name of the resource in the new stack to understand where to move the resource to. + +```shell-session +$ cdktf synth # To ensure our synthesized stack is up to date +$ cat cdktf.out/stacks/refactoring-example-stack-move-2/cdk.tf.json | jq '.resource.aws_s3_bucket' +{ + "my-other-bucket": { + "//": { + "metadata": { + "path": "refactoring-example-stack-move-2/my-other-bucket", + "uniqueId": "my-other-bucket" + } + }, + "bucket_prefix": "my-other-bucket" + } +} +``` + +We need to find the id of the resource, we can use the `terraform state show` command to find it. The id is depenendent on the resource being imported, see [the import docs](/terraform/cli/commands/import#usage) for more details. We need to run these commands in the directory of the stack we are importing the resource from. + +```shell-session +$ cd cdktf.out/stacks/refactoring-example-stack-move-1/ +$ terraform init +$ terraform state show aws_s3_bucket.my-bucket +# aws_s3_bucket.my-bucket: +resource "aws_s3_bucket" "my-bucket" { + arn = "arn:aws:s3:::my-bucket20221208141249058600000001" + bucket = "my-bucket20221208141249058600000001" + bucket_domain_name = "my-bucket20221208141249058600000001.s3.amazonaws.com" + bucket_prefix = "my-bucket" + bucket_regional_domain_name = "my-bucket20221208141249058600000001.s3.amazonaws.com" + force_destroy = false + hosted_zone_id = "Z3AQBSTGFYJSTF" + id = "my-bucket20221208141249058600000001" + object_lock_enabled = false + region = "us-east-1" + request_payer = "BucketOwner" + tags_all = {} + + grant { + id = "554912fda2704333d162d216be50aefb05562e0bf1709997f1d9417cf46087d5" + permissions = [ + "FULL_CONTROL", + ] + type = "CanonicalUser" + } + + versioning { + enabled = false + mfa_delete = false + } +} +``` + +Now that we have the id (`"my-bucket20221208141249058600000001"`) we can import it. This command needs to be run in the directory of the stack we are importing the resource to. + +```shell-session +$ cd ../refactoring-example-stack-move-2 +$ terraform import aws_s3_bucket.my-other-bucket my-bucket20221208141249058600000001 +``` + +We have imported the resource in the new stack, but we still need to remove it from the old stack. This command needs to be run in the directory of the stack we are removing the resource from. + +```shell-session +$ cd ../refactoring-example-stack-move-1 +$ terraform state rm aws_s3_bucket.my-bucket +``` + +We can verify everything worked as expected by running a `cdktf deploy '*'` again. We should now see no changes. + +```shell-session +$ cd ../../.. # Back to the root of the project +# The next deploy should show no changes +$ cdktf deploy '*' +``` + +### Why Do I Need To Find The Terraform Name Of The Resource? + +If you use Constructs to organize your code, you might have a level between the generated provider constructs and the `TerraformStack` construct to organize your code. + +This extra level adds a prefix to the name of the resource to ensure uniqueness. Refer to [Constructs](/terraform/cdktf/concepts/constructs#scope) for more details. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/index.mdx new file mode 100644 index 0000000000..1de09e99c5 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/index.mdx @@ -0,0 +1,48 @@ +--- +page_title: CDK for Terraform +description: >- + Cloud Development Kit for Terraform (CDKTF) lets you use familiar programming languages to define and + provision infrastructure. +--- + +# CDK for Terraform + +Cloud Development Kit for Terraform (CDKTF) allows you to use familiar programming languages to define and provision infrastructure. This gives you access to the entire Terraform ecosystem without learning HashiCorp Configuration Language (HCL) and lets you leverage the power of your existing toolchain for testing, dependency management, etc. + +We support TypeScript, Python, Java, C#, and Go. + +![terraform platform](/img/terraform-platform.png) + +## How does CDK for Terraform work? + +CDK for Terraform leverages concepts and libraries from the [AWS Cloud Development Kit](https://aws.amazon.com/cdk/) to translate your code into infrastructure configuration files for Terraform. + +At a high level, you will: + +1. **Create an Application:** Use either a built-in or a custom template to scaffold a project in your chosen language. +1. **Define Infrastructure:** Use your chosen language to define the infrastructure you want to provision on one or more providers. CDKTF automatically extracts the schema from Terraform providers and modules to generate the necessary classes for your application. +1. **Deploy**: Use `cdktf` CLI commands to provision infrastructure with Terraform or synthesize your code into a JSON configuration file that others can use with Terraform directly. + +You can use every Terraform provider and module available on the [Terraform Registry](https://registry.terraform.io/), and you can use CDKTF with [HCP Terraform](https://cloud.hashicorp.com/products/terraform), [Terraform Enterprise](/terraform/enterprise), and HashiCorp's policy as code framework, [Sentinel](https://www.hashicorp.com/sentinel). + +## When to use CDK for Terraform + +CDKTF offers many benefits, but it is not the right choice for every project. You should consider using CDKTF when: + +- You have a strong preference or need to use a procedural language to define infrastructure. +- You need to create abstractions to help manage complexity. For example, you want to create constructs to model a reusable infrastructure pattern composed of multiple resources and convenience methods. +- You are comfortable living on the cutting edge; CDKTF may still have breaking changes before our 1.0 release. + +You can make this choice for each team and project because CDK for Terraform [interoperates with existing Terraform providers and modules](/terraform/cdktf/concepts/hcl-interoperability). + +## Choosing a Language for your Project + +Consider which of the supported languages you are most familiar with and which language best fits your organization's current tooling. We work towards providing feature parity and a good user experience across all supported languages, but there may be instances when new experimental features will not be available for all languages. + +If you plan to create and package your own constructs, we recommend choosing TypeScript. Using TypeScript allows you to use the [cdktf constructs](https://github.com/projen/projen#getting-started) package generator to build and publish your constructs in multiple languages. + +## Get Started + +- [Install CDKTF](/terraform/tutorials/cdktf/cdktf-install) and set up your first project. +- Learn about [CDKTF application architecture](/terraform/cdktf/concepts/cdktf-architecture). +- Learn how to use key CDKTF concepts like [providers](/terraform/cdktf/concepts/providers), [modules](/terraform/cdktf/concepts/modules), and [resources](/terraform/cdktf/concepts/resources) to define infrastructure. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/index.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/index.mdx new file mode 100644 index 0000000000..d259b6c53c --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/index.mdx @@ -0,0 +1,24 @@ +--- +page_title: Releases +description: >- + We release CDK for Terraform regularly. Find a link to the changelog and upgrade guides. Use feature flags to enable new behaviors. +--- + +# Releases + +We release CDK for Terraform (CDKTF) regularly. The [CHANGELOG on Github](https://github.com/hashicorp/terraform-cdk/blob/main/CHANGELOG.md) contains details about bug fixes, new features, and deprecations. + +## Upgrade Guides + +CDKTF includes upgrade guides for releases that have breaking changes. + +- [Upgrading to v0.19](/terraform/cdktf/release/upgrade-guide-v0-19) +- [Upgrading to v0.17](/terraform/cdktf/release/upgrade-guide-v0-17) +- [Upgrading to v0.15](/terraform/cdktf/release/upgrade-guide-v0-15) +- [Upgrading to v0.13](/terraform/cdktf/release/upgrade-guide-v0-13) +- [Upgrading to v0.12](/terraform/cdktf/release/upgrade-guide-v0-12) +- [Upgrading to v0.11](/terraform/cdktf/release/upgrade-guide-v0-11) +- [Upgrading to v0.10](/terraform/cdktf/release/upgrade-guide-v0-10) +- [Upgrading to v0.9](/terraform/cdktf/release/upgrade-guide-v0-9) +- [Upgrading to v0.7](/terraform/cdktf/release/upgrade-guide-v0-7) +- [Upgrading to v0.6](/terraform/cdktf/release/upgrade-guide-v0-6) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-10.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-10.mdx new file mode 100644 index 0000000000..0131620303 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-10.mdx @@ -0,0 +1,103 @@ +--- +page_title: Upgrading to CDKTF Version 0.10 +description: >- + We changed how lists of computed attributes work to allow referencing the whole list +--- + +# Upgrading to CDK for Terraform Version 0.10 + +0.10 includes improvements to the provider code bindings, to allow referencing lists of computed attributes as a whole list instead of just individual items of that list. +We also shipped a lot of CLI improvements in 0.10, including support for multiple stacks in `cdktf deploy`, `cdktf output`, and `cdktf destroy`. + +### Remove `cdktf synth --json` Option + +PR: [#1640](https://github.com/hashicorp/terraform-cdk/pull/1640) + +If you are using `cdktf synth --json ` to get the synthesized JSON configuration for your Stack, you will now need to run `cdktf synth && cat ./cdktf.out/stacks//cdk.tf.json` instead. The `./cdktf.out` part is your output directory (set by `cdktf.json` or via the `--output` flag). + +### Model ComplexComputedLists as ComplexLists and ComputedObjects + +PR: [#1499](https://github.com/hashicorp/terraform-cdk/pull/1499) + +In an effort to streamline the interfaces of resources, computed attributes of the type list and set are now modeled as a separate `ComplexList` type instead of being a method that directly takes an index and returns an item. This change also did change the type of the index from `string` to `number`. + +#### Typescript + +```typescript +// previously +const firstItemId = resource.listAttribute("0").id; + +// new +const firstItemId = resource.listAttribute.get(0).id; +const firstItem = resource.listAttribute.get(0); // now possible +``` + +#### Python + +```python +# previously +first_item_id = resource.list_attribute("0").id; + +# new +first_item_id = resource.list_attribute.get(0).id; +first_item = resource.list_attribute.get(0); # now possible +``` + +#### CSharp + +```csharp +// previously +string firstItemId = resource.ListAttribute("0").Id; + +// new +string firstItemId = resource.ListAttribute.Get(0).Id; +ListAttributeItem firstItem = resource.ListAttribute.Get(0); // now possible +``` + +#### Java + +```java +// previously +String firstItemId = resource.listAttribute("0").getId(); + +// new +String firstItemId = resource.getListAttribute().get(0).getId(); +ListAttributeItem firstItem = resource.getListAttribute().get(0); // now possible +``` + +#### Go + +```golang +// previously +firstItemId := resource.ListAttribute(jsii.String("0")).Id(); + +// new +firstItemId := resource.ListAttribute().Get(jsii.Number(0)).Id(); +firstItem := resource.ListAttribute().Get(jsii.Number(0)); // now possible +``` + +### Referencing computed string map entries via function call + +PR: [#1630](https://github.com/hashicorp/terraform-cdk/pull/1630) + +In preparation for a similar change as to the computed lists, string map entries can now be accessed via a function call instead of using `Fn.lookup`. Accessing the whole map at once now requires a different function call in the meantime. + +#### Example + +```typescript +const bucket = new s3.S3Bucket(this, "bucket"); + +// previously +const firstRuleStage = Fn.lookup( + bucket.lifecycleRule("0").tags, + "stage", + "no-stage", +); +const firstRuleTags = bucket.lifecycleRule("0").tags; + +// new +const firstRuleStage = bucket.lifecycleRule.get(0).tags("stage"); // tags is now a function +const firstRuleTags = bucket.lifecycleRule + .get(0) + .interpolationForAttribute("tags"); // will be improved in a future iteration +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-11.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-11.mdx new file mode 100644 index 0000000000..5c16aa0ab2 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-11.mdx @@ -0,0 +1,111 @@ +--- +page_title: Upgrading to CDKTF Version 0.11 +description: >- + We changed how assignable list and map properties are accessed after resource construction +--- + +# Upgrading to CDK for Terraform Version 0.11 + +0.11 includes improvements to the provider code bindings, to allow referencing maps of computed attributes as a whole map instead of just individual items of that map. +Both lists and maps now allow accessing all computed attributes of an assignable property. More control over logging was also added. + +### `TF_VAR_` prefixed environment variables can no longer be accessed at synth time + +These environment variables will now be filtered out in the synth phase since they are only intended to be used during diff (plan) and deploy (apply) phases to supply values for [`TerraformVariable`s](/terraform/cdktf/concepts/variables-and-outputs#input-variables). This inhibits accidentally inlining those values into the generated `cdk.tf.json` config. + +### Environment variable and CLI option changes + +- `DEBUG` is replaced by setting `CDKTF_LOG_LEVEL=debug`, setting the `CDKTF_LOG_LEVEL` to debug will now also behave like `DEBUG=1` and include logs from the provider generation +- `CDKTF_DISABLE_LOGGING=false` is replaced by setting `CDKTF_LOG_FILE_DIRECTORY=/path/to/logs/directory`. If left empty no logs will be written. +- `--disable-logging` was removed, instead use the environment variable `CDKTF_LOG_LEVEL=off` +- `DISABLE_VERSION_CHECK`, `CDKTF_DISABLE_PLUGIN_CACHE_ENV` need to be set to `true` or `1`, before anything worked. + +### Stack ids can no longer contain whitespaces + +A `TerraformStack` may no longer contain whitespace characters, since we rely on paths being whitespace free. If you have a stack with an id containing a whitespace, please replace it with a hyphen. If the stack was already deployed with the default `LocalBackend` you might need to rename your statefile to match the new stack id. + +### Computed Map References are referenced through getter + +For computed maps, the reference is now through a getter. + +To access `{ property = "value" }`, instead of `resource.mapAttribute("property")` you can now use `resource.mapAttribute.lookup("property")`. + +#### Example + +```typescript +const bucket = new s3.S3Bucket(this, "bucket"); + +// previously +const firstRuleStage = bucket.lifecycleRule.get(0).tags("stage"); +const firstRuleTags = bucket.get(0).interpolationForAttribute("tags"); + +// new +const firstRuleStage = bucket.lifecycleRule.get(0).tags.lookup("stage"); +const firstRuleTags = bucket.lifecycleRule.get(0).tags; +``` + +### Use ComplexLists and ComplexMaps for complex assignable properties + +PR: [#1725](https://github.com/hashicorp/terraform-cdk/pull/1725) + +Assignable properties of the form `Object[]` or `{ [key: string]: Object }` no longer have setters; they instead have `putX` methods. The getter return type is also changed to be a derivative of either `ComplexList` or `ComplexMap`. + +#### Typescript + +```typescript +// previously +list.req = ["value"]; +Fn.lookup(Fn.element(list.req, 0), "reqstr", "default"); + +// new +list.putReq(["value"]); +list.req.get(0).reqstr; +``` + +#### Python + +```python +# previously +list.req = ["value"] +Token().as_string(Fn.lookup(Fn.element(list.req, 0), "reqstr", "default")) + +# new +list.put_req(["value"]) +list.req.get(0).reqstr +``` + +#### CSharp + +```csharp +// previously +list.Req = new [] {"value"} +Token.AsString(Fn.Lookup(Fn.Element(list.Req, 0), "reqstr", "default")) + +// new +list.PutReq(new [] {"value"}) +list.Req.Get(0).Reqstr +``` + +#### Java + +```java +// previously +list.setReq(new string[] {"value"}) +Token.asString(Fn.lookup(Fn.element(list.getReq(), 0), "reqstr", "default")) + +// new +list.putReq(new string[] {"value"}) +list.getReq().get(0).getReqstr() +``` + +#### Go + +```golang +// previously +list.Req(&[]*string{jsii.String("value"})) +cdktf.Token_AsString(cdktf.Fn_Lookup(cdktf.Fn_Element(list.Req(), jsii.Number(0)), jsii.String("reqstr"), jsii.String("default"))) + +// new +list.PutReq(&[]*string{jsii.String("value"})) +list.Req().Get(jsii.Number(0)).Reqstr() +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-12.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-12.mdx new file mode 100644 index 0000000000..f9dab1d272 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-12.mdx @@ -0,0 +1,35 @@ +--- +page_title: Upgrading to CDKTF Version 0.12 +description: >- + We simplified recursive attribute types to have shorter names +--- + +# Upgrading to CDK for Terraform Version 0.12 + +0.12 includes improvements to the provider code bindings, allowing for shorter +attribute names for recursive attributes. + +### Simplified interfaces of recursive attributes + +The generated provider bindings are based on the Terraform schema which does not +support recursion and hence uses a large, explicit structure instead. Previously +this resulted in long names such as e.g. +`Wafv2WebAclRuleStatementAndStatementStatementOrStatementStatementLabelMatchStatement`. +In 0.12 we implemented a first rough detection for this underlying recursion +which drastically reduced the amount of generated interfaces as they now are +converted to recursive data structures themselves. If you are currently using +those types e.g. in a language like Java, you will need to change them to the +new shorter names. + +### `cdktf get` exits with 0 exit code when no provider / module specifications are found in the `cdktf.json` + +Previously we would throw an error and exit with 1 if there were no provider or +module specifications in the `cdktf.json` file. This can be inconvenient if +`cdktf get` is part of a workflow. + +### `Fn.merge` is split into `Fn.mergeLists` and `Fn.mergeMaps` + +The Terraform `merge` function can merge both lists and maps, but this can cause +[issues](https://github.com/hashicorp/terraform-cdk/issues/1653) when using the +result in a typed language. Therefore we split it into `Fn.mergeLists` and +`Fn.mergeMaps`, this means you need to change your cdktf programs code. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-13.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-13.mdx new file mode 100644 index 0000000000..aba8030581 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-13.mdx @@ -0,0 +1,261 @@ +--- +page_title: Upgrading to CDKTF Version 0.13 +description: >- + Introducing namespaces for generated providers +--- + +# Upgrading to CDK for Terraform Version 0.13 + +0.13 includes performance improvements to generated providers. Instead of exporting a flat list of exports +including all supported resources and data sources, we now export each construct and it's associated structures in their own namespace. +Due to this, the way you import constructs from your CDKTF application will change. +For more information regarding this release, and some of the reasonings behind the changes, please check out the [version 0.13 release post.](https://cdk.tf/0.13) + +### CDKTF get and compatibility with non-namespaced providers + +CDKTF 0.13 is backwards compatible and supports 0.12 generated (and pre-built) non-namespaced providers without +any modifications. However, it will only generate namespaced providers. This means that if you were to generate +a new provider using version 0.13, it will be namespaced. In order to migrate gradually, you may want to check in +the generated provider bindings from version 0.12 to your codebase until you're ready to migrate them. +The next major versions of our pre-built providers after the release of version 0.13 will also become namespaced. +Same rules apply there: as long as you don't upgrade your pre-built providers beyond their current major version, +no changes will be required on your part. + +### New way to import constructs + +Below is a comparison of pre 0.13 imports vs namespaced based imports introduced in version 0.13, +per supported language: + +#### Typescript + +Before version 0.13: + +```typescript +import { Container, Image, DockerProvider } from "@ckdtf/provider-docker"; +``` + +Version 0.13: + +```typescript +import { Image } from "@cdktf/provider-docker/lib/image"; +import { DockerProvider } from "@cdktf/provider-docker/lib/provider"; +import { Container } from "@cdktf/provider-docker/lib/container"; +``` + +#### Go + +> **Note:** For Go projects, another important thing to note is that we've also moved our pre-built providers to the `cdktf` Github Organization. You can find more about that change [here](https://github.com/hashicorp/terraform-cdk/issues/2146). + +Before version 0.13: + +```go +import ( + // ... other imports + "github.com/cdktf/cdktf-provider-azurerm-go/azurerm" +) + +func NewMyStack(/* ... */) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(/* ... */) + + azurerm.NewAzurermProvider(/* ... */) + azurerm.NewNetworkInterface(/* ... */) +} +``` + +Version 0.13: + +```go +import ( + // ... other imports + azurermprovider "github.com/cdktf/cdktf-provider-azurerm-go/azurerm/provider" + "github.com/cdktf/cdktf-provider-azurerm-go/azurerm/networkinterface" +) + +func NewMyStack(/* ... */) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(/* ... */) + + azurermprovider.NewAzurermProvider(/* ... */) + networkinterface.NewNetworkInterface(/* ... */) +} +``` + +#### Python + +Before version 0.13: + +```python +from cdktf_cdktf_provider_kubernetes import Namespace, Service, Deployment, KubernetesProvider +``` + +Version 0.13: + +```python +from cdktf_cdktf_provider_kubernetes.provider import KubernetesProvider +from cdktf_cdktf_provider_kubernetes.namespace import Namespace +from cdktf_cdktf_provider_kubernetes.deployment import Deployment +from cdktf_cdktf_provider_kubernetes.service import Service +``` + +#### Java + +Before version 0.13: + +```java +import com.hashicorp.cdktf.providers.google.ComputeInstance; +import com.hashicorp.cdktf.providers.google.GoogleProvider; +``` + +Version 0.13: + +```java +import com.hashicorp.cdktf.providers.google.compute_instance.ComputeInstance; +import com.hashicorp.cdktf.providers.google.provider.GoogleProvider; +``` + +#### C\# + +Before version 0.13: + +```csharp +using azurerm; +``` + +Version 0.13: + +```csharp +using azurerm.Provider; +using azurerm.VirtualNetwork; +``` + +### New way to import constructs for the AWS provider + +If you've used our AWS provider, you might have noticed that it's already namespaced. However, before +version 0.13, the AWS provider was a special case that we were namespacing by hand. With the release of +version 0.13, we're no longer going to be doing that. + +#### Typescript + +Before version 0.13: + +```typescript +import { AwsProvider, cloudfront, acm } from "@cdktf/provider-aws"; + +class MyStack extends TerraformStack { + constructor(/* ... */) { + super(/* ... */); + + new AwsProvider(/* ... */); + new cloudfront.CloudfrontDistribution(/* ... */); + new acm.AcmCertificate(/* ... */); + } +} +``` + +Version 0.13: + +```typescript +import { AwsProvider } from "@cdktf/provider-aws/lib/provider"; +import { CloudfrontDistribution } from "@cdktf/provider-aws/lib/cloudfront-distribution"; +import { AcmCertificate } from "@cdktf/provider-aws/lib/acm-certificate"; + +class MyStack extends TerraformStack { + constructor(/* ... */) { + super(/* ... */); + + new AwsProvider(/* ... */); + new CloudfrontDistribution(/* ... */); + new AcmCertificate(/* ... */); + } +} +``` + +#### Go + +Before version 0.13: + +```go +import ( + // ... other imports + "github.com/cdktf/cdktf-provider-aws-go/aws" +) + +func NewMyStack(/* ... */) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(/* ... */) + + aws.NewAwsProvider(/* ... */) + aws.NewCloudfrontDistribution(/* ... */) + aws.NewAcmCertificate(/* ... */) +} +``` + +Version 0.13: + +```go +import ( + // ... other imports + "github.com/cdktf/cdktf-provider-aws-go/aws/cloudfrontdistribution" + "github.com/cdktf/cdktf-provider-aws-go/aws/provider" + "github.com/cdktf/cdktf-provider-aws-go/aws/acmcertificate" + +) + +func NewMyStack(/* ... */) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(/* ... */) + + provider.NewAwsProvider(/* ... */) + cloudfrontdistribution.NewCloudfrontDistribution(/* ... */) + acmcertificate.NewAcmCertificate(/* ... */) +} +``` + +#### Python + +Before version 0.13: + +```python +from cdktf_cdktf_provider_aws import AwsProvider, cloudfront, acm +``` + +Version 0.13: + +```python +from cdktf_cdktf_provider_aws.provider import AwsProvider +from cdktf_cdktf_provider_aws.cloudfront_distribution import CloudfrontDistribution +from cdktf_cdktf_provider_aws.acm_certificate import AcmCertificate +``` + +#### Java + +Before version 0.13: + +```java +import com.hashicorp.cdktf.providers.aws.AwsProvider; +import com.hashicorp.cdktf.providers.aws.cloudfront.CloudfrontDistribution; +import com.hashicorp.cdktf.providers.aws.acm.AcmCertificate; +``` + +Version 0.13: + +```java +import com.hashicorp.cdktf.providers.aws.provider.AwsProvider; +import com.hashicorp.cdktf.providers.aws.cloudfront_distribution.CloudfrontDistribution; +import com.hashicorp.cdktf.providers.aws.acm_certificate.AcmCertificate; +``` + +#### C\# + +Before version 0.13: + +```csharp +using HashiCorp.Cdktf.Providers.Aws; +using HashiCorp.Cdktf.Providers.Aws.Cloudfront; +using HashiCorp.Cdktf.Providers.Aws.Acm; +``` + +Version 0.13: + +```csharp +using HashiCorp.Cdktf.Providers.Aws.Provider; +using HashiCorp.Cdktf.Providers.Aws.CloudfrontDistribution; +using HashiCorp.Cdktf.Providers.Aws.AcmCertificate; +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-15.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-15.mdx new file mode 100644 index 0000000000..e5291061ec --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-15.mdx @@ -0,0 +1,106 @@ +--- +page_title: Upgrading to CDKTF Version 0.15 +description: >- + Minimum version of Terraform increased to 1.2, some interfaces / classes renamed for C#, Java, and Go +--- + +# Upgrading to CDK for Terraform Version 0.15 + +0.15 is primarily focused around CLI improvements targeted at a better HCP Terraform integration. +Because of this, there are only smaller breaking changes in this release. The most notable one is a renaming of some interfaces / classes in our core library. +Some configuration classes were suffixed inconsistently with `Config`, `Props` or `Options` and were renamed to `Config` for consistency. These classes need to be used in C#, Java, and Go, therefore we have a breaking change in these languages. + +## Minimum version of Terraform increased to 1.2 + +CDKTF is bumping the minimum supported version of Terraform from 1.0 to 1.2 starting from CDKTF version 0.15. This change is necessary as CDKTF 0.15 uses the Terraform CLI for planning and applying changes for HCP Terraform and Terraform Enterprise instead of [the API](/terraform/cloud-docs/api-docs) used in version 0.14. + +[Terraform promises compatibility](/terraform/language/v1-compatibility-promises) between all v1.x releases, so there shouldn't be any issues with this change. The only changes between these versions are bug fixes, and new feature additions. + +Please open an issue if you encounter any issues or bugs with this change. + +## Renaming of `*Options` and `*Props` to `*Config` + +We had several exports where the configuration passed to constructs or functions was using a class with a different suffix than `Config`. If you are using a language like C#, Java, or Go you might have needed to specify these classes in your CDKTF application. To simplify the usage we changed every suffix to be `Config`, so if you currently use one of the others please rename them to use the `Config` suffix. No options were changed in the process, only the names were aligned. + +### C# + +```diff +using vpc; // a local module +class MyStack : TerraformStack + { + public MyStack(Construct scope, string name) : base(scope, name) + { +- Vpc vpc = new Vpc(this, "vpc", new VpcOptions { ++ Vpc vpc = new Vpc(this, "vpc", new VpcConfig { + Name = "vpc", + PublicSubnets = new string[] {"10.0.1.0/24", "10.0.2.0/24"} + }); + } + } + +``` + +### Java + +```diff +import software.constructs.Construct; +import com.hashicorp.cdktf.App; +import com.hashicorp.cdktf.TerraformStack; +import com.hashicorp.cdktf.CloudBackend; +-import com.hashicorp.cdktf.CloudBackendProps; ++import com.hashicorp.cdktf.CloudBackendConfig; +import com.hashicorp.cdktf.NamedCloudWorkspace; + + public static class Demo extends TerraformStack{ + + public Demo(Construct scope, String id){ + super(scope, id); +- new CloudBackend(this, CloudBackendProps.builder() ++ new CloudBackend(this, CloudBackendConfig.builder() + .organization("hashicorp") + .workspaces(new NamedCloudWorkspace("demo")) + .build() + ); +``` + +### Go + +```diff +package main +import ( + "github.com/hashicorp/terraform-cdk/examples/go/aws/generated/eks" + "github.com/hashicorp/terraform-cdk/examples/go/aws/generated/hashicorp/aws/awsprovider" + "github.com/hashicorp/terraform-cdk/examples/go/aws/generated/hashicorp/aws/ec2" + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) +func NewExampleCdktfGoAwsStack(scope constructs.Construct, id string) cdktf.TerraformStack { + stack := cdktf.NewTerraformStack(scope, &id) + awsprovider.NewAwsProvider(stack, jsii.String("aws"), &awsprovider.AwsProviderConfig{ + Region: jsii.String("us-east-1"), + }) + +- eks.NewEks(stack, jsii.String("EKS"), &eks.EksOptions{ ++ eks.NewEks(stack, jsii.String("EKS"), &eks.EksConfig{ + ClusterName: jsii.String("my-eks"), + Subnets: jsii.Strings("a", "b"), + VpcId: jsii.String("id"), + ClusterVersion: jsii.String("1.17"), + }) + return stack +} +``` + +### Deprecation: We deprecate the feature flags that go into the `context` field of the `cdktf.json` file + +CDKTF used to use feature flags to enable potentially breaking behaviors in a release. These are no longer needed since most of the changes we introduce from here can not be hidden behind feature flags. When the feature flags are removed, the behavior will be the same as this configuration: + +```json +{ + "context": { + "excludeStackIdFromLogicalIds": "true", + "allowSepCharsInLogicalIds": "true" + } +} +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-17.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-17.mdx new file mode 100644 index 0000000000..73b5ff0ea3 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-17.mdx @@ -0,0 +1,34 @@ +--- +page_title: Upgrading to CDKTF Version 0.17 +description: >- + Breaking changes to AWS Quicksight resources and removal of deprecated feature flags +--- + +# Upgrading to CDK for Terraform Version 0.17 + +0.17 is focused around fixing issues with the [AWS Quicksight](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/quicksight_template) resources. We also removed the deprecated feature flags that were used to enable potentially breaking changes in previous releases. + +If you encounter breaking changes from the removal of these feature flags, use the `MigrateIds` `Aspect` at the root of your affected stacks to migrate resources to use the current form of id generation without their recreation. + +## AWS Quicksight + +A few individual Terraform Resources have very deeply nested schemas with a lot of attributes. This blows up the config classes and slows down the code generation for languages besides TypeScript. To work around this we sometimes limit the depth of the config classes and use `any` on deeper levels, and we directly expose some attributes as `any` on the top level config class. + +- `aws_quicksight_template.definition`, `aws_quicksight_dashboard.definition`, and `aws_quicksight_analysis.definition` are set to `any` + +This means when configuring these attributes you need to pass in the configuration as objects and with snake case keys. Alternatively you can also use the [escape hatch](/terraform/cdktf/concepts/resources#escape-hatch). + +### Removal: The feature flags that go into the `context` field of the `cdktf.json` file were removed + +CDKTF used to use feature flags to enable potentially breaking behaviors in a release. These are no longer needed since most of the changes we introduce from here can not be hidden behind feature flags. The behavior for 0.17 is the same as in 0.16 with this configuration: + +```json +{ + "context": { + "excludeStackIdFromLogicalIds": "true", + "allowSepCharsInLogicalIds": "true" + } +} +``` + +You can remove these keys from your `context` field in your `cdktf.json` file. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-18.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-18.mdx new file mode 100644 index 0000000000..767f010702 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-18.mdx @@ -0,0 +1,70 @@ +--- +page_title: Upgrading to CDKTF Version 0.18 +description: >- + Python performance improvements disable root-level provider imports +--- + +# Upgrading to CDK for Terraform Version 0.18 + +0.18 brings performance improvements to CDKTF along with improvements to the `convert` command. + +### Python performance improvements disable root-level provider imports + +When using a Provider in python one could previously import the resource and data source namespaces on the root level. This is no longer possible and the namespaces must be imported through specifying the path in the import. The syntax was supported before as well, so you can change your code within `0.17.x` and then upgrade to `0.18.x`. + +Before: + +```python +from constructs import Construct +from cdktf import App, TerraformStack +from imports.aws import provider, sns_topic, lambda_function, iam_role + +class MyStack(TerraformStack): + def __init__(self, scope: Construct, ns: str): + super().__init__(scope, ns) + + provider.AwsProvider(self, 'Aws', region='eu-central-1') + + sns_topic.SnsTopic(self, 'Topic', display_name='my-first-sns-topic') + role = iam_role.IamRole(self, 'Role', name='lambda-role', + assume_role_policy='{}') + lambda_function.LambdaFunction(self, 'Lambda', function_name='my-first-lambda-function', + role=role.arn, handler='index.handler', runtime='python3.6') + +app = App() +MyStack(app, "before-change") +app.synth() +``` + +After: + +```python +from constructs import Construct +from cdktf import App, TerraformStack +# This syntax was supported before as well +from imports.aws.provider import AwsProvider +from imports.aws.sns_topic import SnsTopic +from imports.aws.lambda_function import LambdaFunction +from imports.aws.iam_role import IamRole + +class MyStack(TerraformStack): + def __init__(self, scope: Construct, ns: str): + super().__init__(scope, ns) + + AwsProvider(self, 'Aws', region='eu-central-1') + + SnsTopic(self, 'Topic', display_name='my-first-sns-topic') + role = IamRole(self, 'Role', name='lambda-role', + assume_role_policy='{}') + LambdaFunction(self, 'Lambda', function_name='my-first-lambda-function', + role=role.arn, handler='index.handler', runtime='python3.6') + + +app = App() +MyStack(app, "after-change") +app.synth() +``` + +## Further support + +If you encounter anything that is missing from this guide or not working as expected, please don't hesitate to file a [bug](https://cdk.tf/bug) so we can improve this guide. You can also post your question to HashiCorp [Discuss](https://discuss.hashicorp.com/) using the [terraform-cdk](https://discuss.hashicorp.com/c/terraform-core/cdk-for-terraform/) category. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-19.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-19.mdx new file mode 100644 index 0000000000..80aa3f59b3 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-19.mdx @@ -0,0 +1,23 @@ +--- +page_title: Upgrading to CDKTF Version 0.19 +description: >- + Potential provider naming collision with new instance function `moveTo` +--- + +# Upgrading to CDK for Terraform Version 0.19 + +0.19 brings new workflows to import existing resources from cloud providers and refactor exisiting resources in your CDKTF project. + +### Minimum required Node.js version updated to 18.12 + +Since the long-term support for Node.js 16 ended on 2023-09-11, we updated our minimum compatible Node.js version to 18.12. + +## Potential provider naming collision with instance function `moveTo` on `TerraformResource` + +We have added support for resource refactoring and renaming with the addition of the instance function `moveTo` on `TerraformResource`. We forsee the potential for naming collision with providers using `moveTo` as an attribute. In instances where provider bindings fail to compile due to the collision, regenerate your provider bindings and replace the provider related usage of `moveTo` to `moveToAttribute` in your configuration if applicable. + +### Java: `codeMakerOutput` needs to be set to a company identifier + +We did not honor the `codeMakerOutput` setting in the `cdktf.json` previously, this is fixed now. +To have no changes in the generated code you can set `codeMakerOutput: "imports"`. +If you like, you can now set it to your company name, e.g. `codeMakerOutput: "com.hashicorp"` so that the provider is generated under the `com.hashicorp.aws` namespace for example. Omitting the `codeMakerOutput` will lead to the default value `.gen` being used and results in an error. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-6.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-6.mdx new file mode 100644 index 0000000000..e8be185cb6 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-6.mdx @@ -0,0 +1,184 @@ +--- +page_title: Upgrading to CDKTF Version 0.6 +description: >- + Version 0.6 uses constructs version 10. Understand the API changes and learn how to migrate your projects. +--- + +# Upgrading to CDK for Terraform Version 0.6 + +CDK for Terraform version 0.6 uses [`constructs`](https://github.com/aws/constructs) version 10. If you are using more advanced APIs from the `constructs` library, refer to the [Constructs API Changes](#constructs-api-changes) section. + +## Background + +Since version 0.6 the `cdktf` package depends on `constructs` v10 (formerly was v3). While that jump might look big, v10 is actually going to be the next major version after v3. We made this change because the `constructs` lib v10 is supposed to stay around for a while and is supposed to offer a very stable API. + +To achieve this stability in the core functionality a lot has been removed from v10. For further background information you can read into the [PR for v10](https://github.com/aws/constructs/pull/263) or the AWS CDK RFC [Removal of Construct Compatibility Layer](https://github.com/aws/aws-cdk-rfcs/blob/master/text/0192-remove-constructs-compat.md). + +While using the v0.6 `cdktf-cli` to deploy stacks that are using an older version of `cdktf` and `constructs` should still work, we recommend upgrading the `cdktf` and `constructs` packages. + +## Pre-built providers + +All upcoming releases of the [pre-built providers](https://cdk.tf/prebuilt-providers) will depend on `constructs` v10. So we recommend to upgrade your project. +If you cannot upgrade the `cdktf` version, you can switch to [generating provider bindings](/terraform/cdktf/concepts/providers#import-providers) via `cdktf get`. + +## Upgrading a TypeScript / JavaScript CDKTF project + +To upgrade a TypeScript or JavaScript CDKTF project, adjust the versions in the `package.json` file of your project. + +```jsonc +{ + // ... + "dependencies": { + "cdktf": "^0.6.0", + "constructs": "^10.0.5", + }, +} +``` + +Afterwards run `npm install` to update the depedencies and `cdktf get` to re-generate the provider bindings if you don't only use pre-built providers. + +## Upgrading a Python CDKTF project + +### `pipenv` (`python`-template) + +To upgrade a Python CDKTF project using `pipenv`, adjust the versions in the `Pipfile` of your project. + +```toml +[packages] +cdktf = "~=0.6.0" +``` + +Afterwards run `pipenv install` to update the depedencies and `cdktf get` to re-generate the provider bindings if you don't only use pre-built providers. + +### Pip3 (`python-pip`-template) + +To upgrade a Python CDKTF project using `pip3`, adjust the versions in the `requirements.txt` of your project. + +``` +cdktf~=0.6.0 +``` + +Afterwards run `pip3 install -r requirements.txt` to update the depedencies and `cdktf get` to re-generate the provider bindings if you don't only use pre-built providers. + +## Upgrading a Java CDKTF project + +To upgrade a Java CDKTF project, adjust the versions in the `pom.xml` file of your project. + +```xml + + + + com.hashicorp + cdktf + 0.6.0 + + + software.constructs + constructs + 10.0.5 + + + + +``` + +Afterwards run `mvn install` to update the depedencies and `cdktf get` to re-generate the provider bindings if you don't only use pre-built providers. + +## Upgrading a CSharp CDKTF project + +To upgrade a C# CDKTF project, adjust the versions in the `*.csproj` file of your project. + +```xml + + + + + + +``` + +Afterwards run `dotnet restore` to update the depedencies and `cdktf get` to re-generate the provider bindings if you don't only use pre-built providers. + +## Upgrading a Golang CDKTF project + +To upgrade a Golang CDKTF project, adjust the versions in the `go.mod` file of your project. + +``` +require github.com/aws/constructs-go/constructs/v10 v10.0.5 +require github.com/hashicorp/terraform-cdk-go/cdktf v0.6.0 +``` + +Afterwards run `go get` to update the depedencies and `cdktf get` to re-generate the provider bindings if you don't only use pre-built providers. + +You also need to adjust all imports to refer to `constructs/v10` instead of `constructs/v3`. + +``` +import ( + "github.com/aws/constructs-go/constructs/v10" +) +``` + +## Constructs API Changes + +### `Aspects` moved to `cdktf` + +`Aspects` are now part of `cdktf` as they've been removed from `constructs`. If you use them, you need to change your import statement to import them from the `cdktf` package. The API also has changed a bit: + +```typescript +// to register Aspects, use +import { Aspects } from "cdktf"; // new +Aspects.of(construct).add(aspect); + +// instead of +construct.node.applyAspect(aspect); // old +``` + +### `construct.node.addInfo()` / `addWarning()` / `addError()` moved to `Annotations` + +The aforementioned methods are now available via the `Annotations` API: + +```typescript +// use +import { Annotations } from "cdktf"; // new +Annotations.of(construct).addInfo("hello"); + +// instead of +construct.node.addInfo("hello"); // old +``` + +Annotations will also be printed by the `cdktf-cli` after your stack was synthesized. One ore more `error` annotations will make the `synth` fail. + +### `onPrepare()` and `prepare()` have been removed + +```typescript +// use +import { Aspects } from "cdktf"; +class MyConstruct extends Construct { + constructor(scope: IConstruct, id: string) { + super(scope, id); + + Aspects.of(this).add({ + visit: (node: IConstruct) => { + // visit will also be called on any childs of this construct + if (node === this) console.log("some work"); + }, + }); + } +} + +// instead of +class MyConstruct extends Construct { + onPrepare() { + console.log("some work"); + } +} +``` + +### `onSynthesize` has been removed + +Should you need support for this, please file a [new issue](https://cdk.tf/feature) on this repo and describe your use-case. + +## Further support + +If you encounter anything that is missing from this guide or not working as expected, please don't hesitate to file a [bug](https://cdk.tf/bug) so we can improve this guide. You can also post your question to HashiCorp [Discuss](https://discuss.hashicorp.com/) using the [terraform-cdk](https://discuss.hashicorp.com/c/terraform-core/cdk-for-terraform/) category. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-7.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-7.mdx new file mode 100644 index 0000000000..55509e8eda --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-7.mdx @@ -0,0 +1,164 @@ +--- +page_title: Upgrading to CDKTF Version 0.7 +description: >- + Update your import statements for the AWS provider and learn to migrate your projects. +--- + +# Upgrading to CDK for Terraform Version 0.7 + +Update your import statements for the AWS provider and learn to migrate your projects. + +## AWS Provider has namespaced resources + +The AWS Provider has a size that makes it hard to navigate in editors, especially in languages that compile it to a single file like Python. We implemented namespaces that hold Resources and Data Sources the same category together, and the categories are available on the [AWS Provider page](https://registry.terraform.io/providers/hashicorp/aws/latest/docs). +If you don't use the AWS provider no action is needed. If you do use the AWS provider, you need to adjust your import statements to match the namespaces. + +### Typescript + +For Typescript you need to change the imports and reference the namespace + +```typescript +// Before +import { CloudFrontDistribution, AwsProvider, Route53Record, AcmCertificateValidation } from "./.gen/providers/aws"; + +// After +import { CloudFront, AwsProvider, Route53, ACM } from "./.gen/providers/aws"; + +// Before +new Route53Record(this, "CertValidationRecord", ...) + +// After +new Route53.Route53Record(this, "CertValidationRecord", ...) +``` + +Alternatively you can deconstruct the namespace: + +```typescript +// Before +import { + CloudFrontDistribution, + AwsProvider, + Route53Record, + AcmCertificateValidation, +} from "./.gen/providers/aws"; + +// After +import { CloudFront, AwsProvider, Route53, ACM } from "./.gen/providers/aws"; +const { CloudFrontDistribution } = CloudFront; +const { Route53Record } = Route53; +const { AcmCertificateValidation } = ACM; +``` + +### Python + +For Python only the imports need to be changed: + +```py +# Before +from imports.aws import AwsProvider, SnsTopic +# After +from imports.aws import AwsProvider +from imports.aws.sns import SnsTopic +``` + +### C + +For C# only the imports need to be changed: + +```csharp +// Before +using aws; + +// After +using aws; +using aws.sns; +``` + +### Java + +For Java only the imports need to be changed: + +```java +// Before +import imports.aws.AwsProvider; +import imports.aws.SnsTopic; + +// After +import imports.aws.AwsProvider; +import imports.aws.sns.SnsTopic; +``` + +### Go + +For Go only the imports need to be changed: + +```go + +// Before + +import ( + "github.com/hashicorp/terraform-cdk/examples/go/aws/generated/hashicorp/aws" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + + +// After +import ( + "github.com/hashicorp/terraform-cdk/examples/go/aws/generated/hashicorp/aws" + "github.com/hashicorp/terraform-cdk/examples/go/aws/generated/hashicorp/aws/ec2" + + "github.com/aws/constructs-go/constructs/v10" + "github.com/aws/jsii-runtime-go" + "github.com/hashicorp/terraform-cdk-go/cdktf" +) + +``` + +### Simplify Provider API Surface + +When generating the provider bindings we previously translated any block to an array of a certain type, both in configuration and as properties on the resource / data source instances. For blocks that can only appear once at most this is making the API harder to use. From this version on these blocks are going to be just the type instead of an array of a certain type. + +To migrate you need to update the `cdktf` and `cdktf-cli` version you are using to 0.7 and run `cdktf get` in your project. The new bindings might use fewer arrays in the configuration than before, depending on the schema of the providers you use. The typesystem and `cdktf synth` will guide your migration. + +The benefit of this change is that object properties can be accessed directly, e.g. + +```typescript +// Before +const development = new Namespace(this, "development", { + metadata: [ + { + name: "development", + }, + ], +}); +const deploy = new Deployment(this, "nginx", { + metadata: [ + { + namespace: "setViaOverride", + name: "nginx", + }, + ], + // ... +}); +deploy.addOverride( + "metadata.0.namespace", + `\${${development.fqn}.metadata.0.name}`, +); + +// After +const development = new Namespace(this, "development", { + metadata: { + name: "development", + }, +}); +new Deployment(this, "nginx", { + metadata: { + namespace: development.metadata.namespace, + name: "nginx", + }, + // ... +}); +``` diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-9.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-9.mdx new file mode 100644 index 0000000000..0f25b1f4b7 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/release/upgrade-guide-v0-9.mdx @@ -0,0 +1,44 @@ +--- +page_title: Upgrading to CDKTF Version 0.9 +description: >- + We changed some provider bindings to work better across all languages. +--- + +# Upgrading to CDK for Terraform Version 0.9 + +0.9 includes improvements to some of our provider code bindings, to improve usage across all languages. + +### Standardize IResolvable Usage + +PR: [#1299](https://github.com/hashicorp/terraform-cdk/pull/1299) + +This is an effort to make sure attributes can be freely passed between resources for all different types. + +There is a minor breaking change: + +- `count` on resources and data sources has gone from `number | cdktf.IResolvable` to `number`. If code was previously passing an `IResolvable`, it will now need to wrap the `IResolvable` using `Token.asNumber()` on Typescript and Java , `Token.AsNumer()` on C#, `cdktf.Token_AsNumber()` on Go, and `Token().as_string()` on Python. + +### Map Tokens + +PR: [#1411](https://github.com/hashicorp/terraform-cdk/pull/1411) + +As part of an effort to use more native types, there are now tokens for maps of primitive values. + +As a result, there is a minor breaking change: + +- Map attributes have gone from `{ [key: string]: TYPE } | cdktf.IResolvable` to `{ [key: string]:TYPE }` when `TYPE` is `string, number, or boolean`. + - The most common impact is maps created by using Terraform functions (`Fn.(...)`) will now need to be passed to `Token.asMap()` before assigning to a resource attribute. The naming is a bit different per language, on C# it's `Token.AsMap()`, on Go it's `cdktf.Token_AsMap()`, and on Python it's `Token().as__map()`. + +### Number[] Tokens + +PR: [#1471](https://github.com/hashicorp/terraform-cdk/pull/1471) + +As part of an effort to use more native types, there are now tokens for `number[]`. +This is mostly an internal change, but there is now `Token.asNumberList()` (on C# it's `Token.AsNumberList()`, on Go it's `cdktf.Token_AsNumberList`, on Python it's `Token().as_number_list()`) which can be used to convert other values into `number[]`. + +As a result of some standardization, there is a minor breaking change: + +- Boolean[] attributes have gone from `boolean[]` to `Array | IResolvable`. + - This is done because neither `boolean` or `boolean[]` is representable by a token. + - This should make it easier to pass around `boolean[]` between resources and fuctions. + - For jsii languages (especially Java and C#), these types will end up as `List`. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/telemetry.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/telemetry.mdx new file mode 100644 index 0000000000..da3d2c4eff --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/telemetry.mdx @@ -0,0 +1,27 @@ +--- +page_title: Telemetry - CDK for Terraform +description: >- + CDK for Terraform uses a HashiCorp service called Checkpoint to report project + metrics. Using Checkpoint is optional. +--- + +# Telemetry + +The [CDK for Terraform CLI](/terraform/cdktf/cli-reference/cli-configuration) interacts with a HashiCorp service called [Checkpoint](https://checkpoint.hashicorp.com) to report project metrics such as cdktf version, project language, provider name, platform name, and other details that help guide the project maintainers with feature and roadmap decisions. All HashiCorp projects, including Terraform Core, use Checkpoint. Read more about project metrics [in this issue](https://github.com/hashicorp/terraform-cdk/issues/325). + +Starting with CDK for Terraform 0.6, this information includes a random UUID that uniquely identifies the machine, and new projects will have a project-specific UUID added to the `cdktf.json` file. The purpose of these UUIDs is to help team understand how the tool is used in order to help us prioritize features. The [code that interacts with Checkpoint](https://github.com/hashicorp/terraform-cdk/blob/main/packages/%40cdktf/commons/src/checkpoint.ts) is part of CDK for Terraform CLI. + +CDK for Terraform fingerprints the type of CI used and includes that in telemetry instead of the UUID when CDK for Terraform runs in a Continuous Integration tool, such as GitHub Actions, Jenkins, or GitLab. The only information submitted is the type of CI system, and no unique information about accounts, paths, workspaces, environment variables, or other potentially private information is shared. This data helps the team plan where to focus future efforts, because running infrastructure as code tools in CI is a key workflow we seek to improve. + +The information that is sent to Checkpoint is anonymous and cannot be used to identify the user or host. The use of Checkpoint is completely optional and it can be disabled at any time by setting the `CHECKPOINT_DISABLE` environment variable to a non-empty value. + +## Crash Reporting + +To improve the stability of the [CDK for Terraform CLI](/terraform/cdktf/cli-reference/cli-configuration) we also use [Sentry](https://sentry.io/) for error reporting. + +The error reports sent include a stack trace and log events that happened before the error. This information only gets sent if there is an error. If no error happens a session is tracked, so that we can calculate the percentage of crash free sessions as a metric. + +The error reporting is scoped to the CLI and no environment variables are tracked, limiting the risk of sending secret information by accident. + +We won't track any errors as long as the [`sendCrashReports`](/terraform/cdktf/create-and-deploy/configuration-file#enable-crash-reporting-for-the-cli) property in the `cdktf.json` file is not set or is set to `false`. If it is not set we will ask you if you want to enable crash reporting and persist the answer in your `cdktf.json` file. +If you change your mind, change the [`sendCrashReports`](/terraform/cdktf/create-and-deploy/configuration-file#enable-crash-reporting-for-the-cli) property in your `cdktf.json` file to false to disable error reporting. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/test/debugging.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/test/debugging.mdx new file mode 100644 index 0000000000..755bf90f70 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/test/debugging.mdx @@ -0,0 +1,57 @@ +--- +page_title: Debugging - CDK for Terraform +description: >- + Turn on logging and troubleshoot problems in your CDKTF application. +--- + +# Debugging + +To debug your CDKTF application, we recommend first turning on logging. Then, determine whether the issue occurs when your configuration is synthesized or when Terraform attempts to provision your infrastructure. + +## Logging + +Set the `CDKTF_LOG_LEVEL` environment variable to `debug`. This produces more detailed information about each execution step. If you want to create a bug report or share the result, set `CDKTF_LOG_FILE_DIRECTORY` to the file path where you want CDKTF to write the `cdktf.log` file. + +## Synth-Time Issues + +When you run `cdktf synth`, CDKTF translates your CDKTF application code into a JSON Terraform configuration file. Your application has a synth-time issue if `cdktf synth` fails. Otherwise, assume the issue occurs at execution time. + +When you encounter a synth issue, you must identify the construct causing the error. Check the error message for information about which construct is affected. If you cannot determine this from the error message, you must search the synthesized configuration. + +We recommend repeatedly running `cdktf synth` with different sections of the application file commented out until you find the error. If possible, focus your search on changes since the last time you successfully synthesized the application. + +Once you find the problem, you must isolate it. If you use variables in your constructs configuration, try to temporarily replace them with static values to ensure the problem is with the construct itself. If the problem persists, examine the type to identify missing or mistyped fields. We also recommend consulting each infrastructure provider's documentation to ensure that you included all required attributes, adhered to formatting requirements, etc. + +## Execution-Time Issues + +Execution-time issues happen when Terraform cannot successfully provision infrastructure with the synthesized configuration file. They can occur when you misconfigure Terraform resources in your CDKTF application, resulting in a misconfigured or incomplete Terraform configuration. They can also occur because of issues with the infrastructure provider itself. + +When you encounter an execution-time issue, we recommend first examining the synthesized code. Review the Terraform documentation for the resource to see if there are misconfigured values. Remember that CDKTF renames resources and fields in most languages must be camel case, whereas Terraform uses snake case. You can also search for the resource name, Terraform, and the error to find similar issues in user forums and search the provider's Github repository for related issues. + +## Common Problems + +### CDKTF CLI and Library on Different Versions + +We recommend keeping CDKTF CLI and the CDKTF library on the same version. A newer library version might expect the CLI to pass additional or different data to your CDKTF application. A newer CLI version might generate provider bindings in `cdktf get` that rely on functionality that the older library does not support. + +To check whether the versions align, run `cdktf debug`. The following example output shows a case where the `cdktf-cli` version (0.11.0) is newer than the `cdktf` version (0.10.0). + +``` +language: typescript +cdktf-cli: 0.11.0 +node: v16.13.1 +cdktf: 0.10.0 +constructs: 10.0.63 +jsii: null +terraform: 1.1.8 +arch: x64 +os: darwin 21.4.0 +``` + +## Get Support + +The following resources can help you debug your CDKTF application: + +- Ask questions in [HashiCorp Discuss](https://discuss.hashicorp.com/) or in the `#terraform-cdk` channel + in [the cdk.dev Slack](https://cdk.dev/) . +- Open an issue in the [hashicorp/terraform-cdk](https://github.com/hashicorp/terraform-cdk/issues/new?assignees=&labels=bug%2C+new&template=bug-report.md&title=) repository. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/test/unit-tests.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/test/unit-tests.mdx new file mode 100644 index 0000000000..380c26b127 --- /dev/null +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/test/unit-tests.mdx @@ -0,0 +1,332 @@ +--- +page_title: Unit Tests - CDK for Terraform +description: Write assertions and snapshot tests for your CDK for Terraform application. +--- + +# Unit Tests + +Testing your application can give you faster feedback cycles and guard you against unwanted changes. Testing is currently supported in Typescript with jest and compatible with any testing framework that supports assertions for all other languages. + +We generate all files necessary to start testing when you run `cdktf init` so that you can start writing tests right away. + +## Add Testing to Your Application + +If you would like to add testing to an existing project, refer the following resources according to your chosen language: + +- **TypeScript:** Follow TypeScript's [Getting Started guide](https://jestjs.io/docs/getting-started) for testing with Jest. Then, add these lines in a [setup file](https://jestjs.io/docs/configuration#setupfiles-array): + + ```js + const cdktf = require("cdktf"); + cdktf.Testing.setupJest(); + ``` + +- **Python:** Follow the [Get Started guide](https://docs.pytest.org/en/7.1.x/getting-started.html) for pytest. The assertions for CDKTF are available in the `cdktf` package under `Testing`. +- **Java:** Follow the [Using JUnit documentation](https://docs.gradle.org/current/userguide/java_testing.html). The assertions for CDKTF specific are available in the `cdktf` package under `Testing`. +- **C#:** Follow the [Getting Started with xUnit.net guide](https://xunit.net/docs/getting-started/netcore/cmdline). The assertions for CDKTF are available in the `cdktf` package under `Testing`. +- **Go:** Follow the [Add a Test guide](https://go.dev/doc/tutorial/add-a-test) in the Go documentation. The assertions for CDKTF specific are available in the `cdktf` package under `Testing`. + +### Write Assertions + +The following Typescript example uses `Testing.synth` to test a part of the application. Given the desired scope to test, a JSON string representing the synthesized HCL-JSON is returned. Then the custom assertions under `Testing` in the cdktf package can be used to verify the code acts as intended. `Testing.synth` can test the `Stack` that extends the `TerraformStack`. + +The other examples use `Testing.synthScope` to test a part of the application. This creates a scope to test a subset of the application and returns a JSON string representing the synthesized HCL-JSON. Then it uses custom matchers to verify the code acts as intended. `Testing.synthScope` can test the `Constructs` that extends the `IConstruct`. + +-> **Note**: CDK for Terraform v0.20 introduces support for a `Testing.synthHcl` function. However, that is not compatible with other assertions, like `toHaveResourceWithProperties` etc. and should not be used. + +Examples in + +- `toHaveResource`: Checks if a certain resource exists +- `toHaveResourceWithProperties`: Checks if a certain resource exists with all properties passed +- `toHaveDataSource`: Checks if a certain data source exists +- `toHaveDataSourceWithProperties`: Checks if a certain data source exists with all properties passed +- `toHaveProvider`: Checks if a certain provider exists +- `toHaveProviderWithProperties`: Checks if a certain provider exists with all properties passed + + + +```ts +import { Testing } from "cdktf"; +import { Image } from "../.gen/providers/docker/image"; +import { Container } from "../.gen/providers/docker/container"; +import MyApplicationsAbstraction from "../app"; // Could be a class extending from Construct + +describe("Unit testing using assertions", () => { + it("should contain a container", () => { + const app = Testing.app(); + const stack = new MyApplicationsAbstraction(app, "my-app", {}); + const synthesized = Testing.synth(stack); + + expect(synthesized).toHaveResource(Container); + }); + + it("should use an ubuntu image", () => { + const app = Testing.app(); + const stack = new MyApplicationsAbstraction(app, "my-app", {}); + const synthesized = Testing.synth(stack); + + expect(synthesized).toHaveResourceWithProperties(Image, { + name: "ubuntu:latest", + }); + }); +}); +``` + +```python +import pytest +from cdktf import Testing +from imports.docker.image import Image +from imports.docker.container import Container +from app import MyApplicationsAbstraction # Could be a class extending from Construct + +class TestApplication: + + stack = TerraformStack(Testing.app(), "stack") + app_abstraction = MyApplicationsAbstraction(stack, "app-abstraction") + synthesized = Testing.synth(stack) + + def test_should_contain_container(self): + assert Testing.to_have_resource(self.synthesized, Container.TF_RESOURCE_TYPE) + + def test_should_use_an_ubuntu_image(self): + assert Testing.to_have_resource_with_properties(self.synthesized, Image.TF_RESOURCE_TYPE, { + "name": "ubuntu:latest", + }) +``` + +```java +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; +import com.hashicorp.cdktf.Testing; +import imports.docker.Container; +import imports.docker.Image; +import com.hashicorp.cdktf.MyApplicationsAbstraction; // Could be a class extending from Construct + +public class TestApplication { + + private final TerraformStack stack = new TerraformStack(Testing.app(), "stack"); + private final MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "resource"); + private final String synthesized = Testing.synth(stack); + + @Test + void shouldContainContainer() { + assertTrue(Testing.toHaveResource(synthesized, Container.TF_RESOURCE_TYPE) ); + } + + @Test + void shouldUseUbuntuImage() { + assertTrue(Testing.toHaveResourceWithProperties(synthesized, Image.TF_RESOURCE_TYPE, new HashMap() { + { + put("name", "ubuntu:latest"); + } + }) ); + } +} +``` + +```csharp +using Xunit; +using HashiCorp.Cdktf; // MyApplicationsAbstraction - Could be a class extending from Construct +using MyCompany.MyApp; +using System; +using System.Collections.Generic; +using docker.Image; +using docker.Container; + +namespace MyCompany.MyApp{ + public class TestApplication{ + + private static TerraformStack stack = new TerraformStack(Testing.app(), "stack"); + private static MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "resource"); + private static string synthesized = Testing.synth(stack); + + [Fact] + public void ShouldContainContainer(){ + Assert.True(Testing.ToHaveResource(synthesized, Container.TfResourceType) ); + } + + [Fact] + public void shouldUseUbuntuImage(){ + Assert.True(Testing.ToHaveResourceWithProperties(synthesized, Image.TfResourceType, new Dictionary() { + {"name", "ubuntu:latest"} + }) ); + } + } +} +``` + +```go +package main + +import ( + "testing" + "cdk.tf/go/stack/generated/kreuzwerker/docker/image" + "cdk.tf/go/stack/generated/kreuzwerker/docker/container" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/aws/jsii-runtime-go" +) + +var stack = NewMyApplicationsAbstraction(cdktf.Testing_App(nil), "stack") +var synth = cdktf.Testing_Synth(stack) + +func TestShouldContainContainer(t *testing.T){ + assertion := cdktf.Testing_ToHaveResource(synth, container.Container_TfResourceType()) + + if !*assertion { + t.Error("Assertion Failed") + } +} + +func TestShouldUseUbuntuImage(t *testing.T){ + properties := map[string]interface{}{ + "name": "ubuntu:latest", + } + assertion := cdktf.Testing_ToHaveResourceWithProperties(synth, image.Image_TfResourceType(), &properties) + + if !*assertion { + t.Error("Assertion Failed") + } +} +``` + + + +### Snapshot Testing + +Snapshot tests are useful when you want to make sure your infrastructure does not change unexpectedly. Snapshot Testing is only supported in Typescript with Jest. Refer to the [Jest docs](https://jestjs.io/docs/snapshot-testing) for details. + +```typescript +import { Testing } from "cdktf"; +import { Image } from "../.gen/providers/docker/image"; +import { Container } from "../.gen/providers/docker/container"; +import MyApplicationsAbstraction from "../app"; // Could be a class extending from Construct + +describe("Unit testing using snapshots", () => { + it("Tests a custom abstraction", () => { + expect( + Testing.synthScope((stack) => { + const app = new MyApplicationsAbstraction(scope, "my-app", {}); + app.addEndpoint("127.0.0.1"); // This could be a method your class exposes + }), + ).toMatchInlineSnapshot(); // There is also .toMatchSnapshot() to write the snapshot to a file + }); +}); +``` + +### Integration with Terraform + +You can produce invalid Terraform configuration if you are using escape hatches in your CDK for Terraform application. You may use an escape hatch when setting up a [remote backend](/terraform/cdktf/concepts/remote-backends) or when [overriding resource attributes](/terraform/cdktf/concepts/resources#escape-hatch) + +To test this, you can assert that [`terraform validate`](/terraform/cli/commands/validate) or [`terraform plan`](/terraform/cli/commands/plan) run successfully on all or part of your application before running `cdktf plan` or `cdktf deploy`. + +Currently only Typescript is capable of testing for successful plans, while all languages are capable of testing for validity of the Terraform produced. + + + +```ts +import { Testing } from "cdktf"; + +describe("Checking validity", () => { + it("check if the produced terraform configuration is valid", () => { + const app = Testing.app(); + const stack = new TerraformStack(app, "test"); + + const myAbstraction = new MyApplicationsAbstraction(stack, "my-app", {}); + myAbstraction.addEndpoint("127.0.0.1"); // This could be a method your class exposes + + // We need to do a full synth to validate the terraform configuration + expect(Testing.fullSynth(stack)).toBeValidTerraform(); + }); + + it("check if this can be planned", () => { + const app = Testing.app(); + const stack = new TerraformStack(app, "test"); + + const myAbstraction = new MyApplicationsAbstraction(stack, "my-app", {}); + myAbstraction.addEndpoint("127.0.0.1"); // This could be a method your class exposes + + // We need to do a full synth to plan the terraform configuration + expect(Testing.fullSynth(stack)).toPlanSuccessfully(); + }); +}); +``` + +```python +import pytest +from cdktf import Testing +from app import MyApplicationsAbstraction # Could be a class extending from Construct + +class TestApplication: + + stack = TerraformStack(Testing.app(), "stack") + app_abstraction = MyApplicationsAbstraction(stack, "app-abstraction") + + def test_check_validity(self): + # We need to do a full synth to validate the terraform configuration + assert Testing.to_be_valid_terraform(Testing.full_synth(stack)) +``` + +```java +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertTrue; +import com.hashicorp.cdktf.MyApplicationsAbstraction; // Could be a class extending from Construct + +public class TestApplication { + + private final TerraformStack stack = new TerraformStack(Testing.app(), "stack"); + private final MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "resource"); + + @Test + void checkValidity() { + // We need to do a full synth to validate the terraform configuration + assertTrue(Testing.toBeValidTerraform(Testing.fullSynth(stack)) ); + } +} +``` + +```csharp +using Xunit; +using HashiCorp.Cdktf; // MyApplicationsAbstraction - Could be a class extending from Construct +using MyCompany.MyApp; +using System; + +namespace MyCompany.MyApp{ + public class TestApplication{ + + private static TerraformStack stack = new TerraformStack(Testing.app(), "stack"); + private static MyApplicationsAbstraction appAbstraction = new MyApplicationsAbstraction(stack, "construct"); + + [Fact] + public void CheckValidity(){ + // We need to do a full synth to validate the terraform configuration + Assert.True(Testing.ToBeValidTerraform(Testing.FullSynth(stack)) ); + } + } +} +``` + +```go +package main + +import ( + "testing" + "github.com/hashicorp/terraform-cdk-go/cdktf" + "github.com/aws/jsii-runtime-go" +) + +var stack = cdktf.NewTerraformStack(cdktf.Testing_App(nil), "stack") + +func TestCheckValidity(t *testing.T){ + // We need to do a full synth to validate the terraform configuration + assertion := cdktf.Testing_ToBeValidTerraform(cdktf.Testing_FullSynth(stack)) + + if !*assertion { + t.Error("Assertion Failed") + } +} +``` + + + +## Integration Testing + +CDK for Terraform does not currently offer many helpers for integration testing, but you can create them for your use cases. Here is a recent example: [CDK Day 2021](https://github.com/ansgarm/talk-cdkday-2021/tree/master/test). diff --git a/content/terraform-cdk/v0.21.x/img/cdktf-app-architecture.png b/content/terraform-cdk/v0.21.x/img/cdktf-app-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..42ae599b18793477ed0d5ca6ce44976b8503c768 GIT binary patch literal 585677 zcmeFacUY6z);1nOKqI0IC@L0k1aXw2(nKK%RuBO@(oqDYBM3-K2)1zq#0E+Wjs;OE zg7lKuK%|6`UV~CX4-g=ve>-#DIb$AtKgRPrzrQ}bE+kjV&fcrsYpr{&=i&Nc(*u%= zg%DezE&wNM=V+Th!04TFgsaM`oxu+g493Wt5XoLt-;VX#fN9PI6- zjZ`*$Jbl{U{$ur)Ul#cU9R2mzh@a{ucJ=$eTR3 z#SsduEVYj>zec^k!k~1%RNcZq78f+qA$MqMQ`i=zoE@tS`66Fm_k{m0EiPWROu?$4 z_%ZDLC@gE=Z(&jJENWQufYh|O)Gp*(6#S%&bkE|m6j+wnZ4GI>)7Da0mf!8@_jR|L z4+k5Bm6zMB*Gzf5>ByURSHgUa7AU1IS5j!zB_?NW($Igj_svf$52h|k3akj)xoE%m z{;P`@CvUy>j29xhCMM#{nuV{DB9uuZlX*{yQ&GXAu&xTvVz_T7g(q(v_&=!m}i z@+|!Q?|bt_R}x<>OIfwrpt-$m)yh*TTs~hn0gt!2ga1OC;`4D{d_JGHU0l4+YVqO) zr6RDlyQi-&iT?uR2Xl8kW#nXH0^1B8FN7gPc&nG1j|%vO^ft8cg~4Q%1V181 zM-|6lFbvFSufg$)BEub4{%vJh;`YDl*u;z^R@sxkR-IkivzV#ZTd_qa{%b=yF8JQ= zE#6;8KB`8ucH-sEMZ0(HNjlna<#g>rDFsXzOazXYe=skEc}tl0f_X2P_kwvZnD>Ht zFPQg&c`umvf_X2P_kwvZnD>HtFPQg&c`umvf_X2P_kwvZnD>HtFPQg&c`umvf_X2P z_kwvZnD>JJKfM5>jDKNDzkgMDP9Y?lbZx0TkI@~=r&pu9Zv3MWh9uK2w7I!CpK$?A zjTN?Al05td+JEFHp@9f|#Uc*7`yQ8kHlyZ>@Jrv>QFrO^*s#k|1g1vWbg{(q!2l6AOLHtX;dtFCv~mOeTb;u13X zP8|6y@iH54!bn#ZS=-oz`a9peiQY8;eMA0A5iyur-;u(fgmc8Lq4;-SYSn!5+9X@Z zXZY^r-LIx}ndT04#69MQ&_$pIT56gsJDEbLb{a9xA@C+SAt?E*C#teHu5q=ymO|Jg z?<4RqoqZwPqS@{SFRyJRv&FsjEkB~+;v$jylLYeG-jFga;oZ*8ZM>22 zoLV&FHdkfT?58mI7XAfZ-Kpu=%6(Qd1a5r%YH;W;XgCA%!BT}}7-@z5Vj0MZ%r-<{ z;ka0k2wcl9em*WFJ!+_E5lnMGZkBF@57G4&k=0K;Ggy$bCZ(Y{1ul{;>zgsY>@)dd zYj>$6YY#+_32A^#b!PWl?+_N!{ihh&Q5u8of8J<+vuD6kfmEua6)$&qHlgm2lhh{B z9T|JCat{9ku^7Rx-$*$ztjE5dYF<^cNaV3uv3{s5JLBYw+|bR7x61d?19!z@U(LMU ztH72M-i3m95>QnF)z`N{_>}fpaHB(pyLU@3|4a;KluotSWl+!&=0Cq1h&lf5Z~2xS0xFHA&P_iLF+6)qAd^Ewf%$U6FL=kmjZ~W5wLQ-BJ@Zy~ zmIOD+a+TlM7j@*0w>P`|ZqRW~mSsL+Fzpu1u|Oh~o+{7UhmZ;4eOEjaV-I9IuE$wU zyPd}+?pnL6gchN^pGcuuwTGezODlV`MkpN}`tSSAUz}(|bJIhGH-rHW1$N44$=@#g zg10u@2$fGHdKoSJ1u;e^qj50_(W{Mqe^Xsuy(ip2b&`BB_w|P}e@y$Pm%Wg}ggy`doQ*QGwz$I=4-BO3*^ZzOUwqXh7``E_0`SC+kmU{0?_s1#(5SfIsd0Xv@C#ikh}&l~Z8NO03_3TB@wn_X60@z_NXM?8(8=NJ0@^-FDI(q8@4hcKlYz$O8q3~+ref
  • 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%0D17|qPY1mrrnz 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%0AFl<>n?&3eF3J7tfcnUu?U^naN~_r}`+>k(zTdgB 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

    W6z-Qgvpt0S?=z4`5k^tqm!uls&$~6d9Ra+jb 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 z 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

  • -!z&Ol&Wy^*4Ai?RtsWM-9+Zqra z^c%3^QAAJ8l5WIJCk)RM+u8#z+LP1#j`tBx-UtL@2JqJ52K8=b%sgn-g-7(b1HDRf z(b0HOxXN$zETp|XOYEE1Fy@0(HNJ5dF!4}7I`zoeql`Ad(KXO91mk`6ur29lfKZT6 zdZRb#vEt@U!Isd&=*ZeR7-IHUGaw{}q4fz}^79Nl9GSxTzjn(foJYq450_lq$V$fq zC9I?Cug@3b0h+;hFW77^I6#o7g19ABy;{4~Gt>B0JgO;yrJramQuMz5fm=j;lU=;h z?u>7@%qU|%ssywOdh_OIxmh7Js{Z8ofDhqiV1<^0&YtFCFaWUv(CwF0^V@Q};HX9g zPb(Ta&sWfy)^BFem6^M5;jQh%P4r`=X|N0wQL~meG2T&e2PnrP{27kUwK+k*06QEj z(p!j=ci}Xb74}n+{qd=!mqTGtGT%=mZ*9;X+mM02)8YKs7Z8ZHj!8H`?iO9=$Xkd7 z<_c%hIg5e1Ey??i&HCQ3%{D=mh9p)}br+Mo zUEH{x-OAGynR_SyG=&(2sh#-O% zS}nHh=&b=`QK=Kq$%Sv{Rg}xTvA$*oV)FXC^XG%U6;@Js>^p{&b28WMxUn6BJ=JmN zAFNz&d;<4*R1mB>y8J8rf`@<83?_t*7uu+?YV26&ntw&Cjy&+9(?|-Remjs|rW6s! zkMTPi^hoBYP!jFNrZ*#?zE1ZE24x zk}3k=L2Q~i7I*`!>E(d3_x=@sfThoOaCzUuy{Db8(=QuS3O4MY5AIS9kiCj>F3RNS z!w#-kY}^5*p^kAY2w{=`)Pk$mmzx1Q;jGN-9l41+c&u%3!^^t5lsJn@Y}x?AIynv+ zi|?G^EM$fHD##ypBzn&sv@O*`p<{b>dXE!mHg_cM5F4Ky^v6la$%Rb8o~7BaA_M$$ zm(55F{r%&cE;L+wci5A38aCsK80%K1b;y!iUys#72tnFE($kIu4WmW<*>Hem6J)_{ zrvr$wo>xvk6xr?^jLVw;U-s=zF(m*$&k#Q|_NYMD^grC}|Iml@aMD6L5KjqXt(<6# zDVhT5K|G0deiDh?fz80u7j$^F13M7b1blA&Javd%MEs__c~5(U1)mVKyv62jCx26% zb!MwBmuR$9Zk68S2LD|=|6j~@_&60bn%_hNs`1g24V>%xIT})Tf+*U!V&&WOX-4v? zv-I58HUyfcYA4L%g&v3J4e@6KwB%sOz#FTGP!Xtpj)Qb=6|ym%eMs_m<>u#Dw^n!X zY=u=I4E=jvkO-6SxD~`F-KNm3ZmRn;G>wkiV^#+}nl_VV!vaY;&yh~fdmuER`!cXz zBmKiF@^MZ=csMOZ1@~=gOVfyamSDz1ek(a=gzac6?&9+dleGBDr7qsNGwS!ik3~j0 zuKS=F@I>9?mf9!-UI?Ai(`G>kOJCV=vw>1ITi;!s-yc8!yi`D@alP^GiJpt>t*<&t zPJJI8=4<)5o6$4XaQ3jaoax{n6S=+H#=>5p4|x50e2FeBLHl3Rkkih^_e@c)oC*Px zx3pC@Til9eBU1(WxC6BUdh!eKNsX1};$>Q6`DOcRIqm8B*`qb9shd*#$c}gVxvqKa z(j{^CZPykluFtfOK$oz`{B&tY?_zE5%wNov@vrcohSuKX)4X&~#KrlveTEeIDfUCu*;074eIChqt|ua>bKe079ZLosDI-5+8%KJ- zZhJVuN+~%cqp;Pm)qbn8qX|bZQ_tS)ei>}nC$*(VOGz6^h?`e>ThAal29kDeflYTy z&xUN(J-;%wKB^|sofiCwH*nrArQqEl?1&aA`Lt+6Z7E6!DUduPSU!h9)$sd#)**T+ z2h?;|FPz`qmH|Xj&HC?ocNmL0lDP3H)envK6-U=(1Brui)&Jka@mkQyceTnv_D%Nx ze*Zc(2{yh6x8TZ^(zXVV(C#9yMzSW0=OaMR#UOKTUd*Ha^a5xLKnGm~pscgPRvL)x z&CTy2g3`H=ei?PhE}$F+3n|cHpynEeS*$R8BYjL6uq{d}c&AbIEqBPkeeD>D$7=QF zcPqQklS0R}&?665!9&Cc)tBC-A!M&@IfpO+oEjj~r?fjew^Snvs>IdRO%Svug)0*Y z;;2{g@x(or`6TuyS&~JXYgYma{QXNF0^`=N55C|1FzGOT^|`r}2s%QFSZHC29CrRQ zf%IB>Ub1lHQVyYSd!MU|9Yi@HsVi|IsnjWWtpo%(*O7-5pmgYLO`nz|QW3P1I0|YK zo6oHgUCBg~epEeQ*ZkRGtDQy29>2Nr))Bc`-f&ypv0!(DkzQ8<918Jesb!|*g)K;STAS zHwaTyk(UK=cYapbNs>{lDGTWS40=(ShO4#XavNAI^u_^8nPA4=XTEP@yGK^!jxB_u z>CWlhiIS?S=G(`8U%u`3-N#A*PZRI)IF}^97bA5C^P=J+HpipIAM`0(q-^a< zOQ!^^Y`Wp=3UBLK_2)fq@vTz*u7S4B9|jLR#Y_s9rFBjvRcfzKX4`)yrVQ_2fdgJKf8Fpmmkq_Nq z-D91fja=_WmUcw((d>maZjov6Yulq{e6P$|6&t|X>wm%bIzrfWarYYxFO2_{{-C;C zt}aFP*H155fsBWyA;;UHfCrSzkfUkviv>fEV%>Eb!+zJf0iBiK`{8op&l`n|$lVoP zC~kfoo67+VJOSS#B9h8bAwq6XZ!%59Zv^a09KCHI?}=b+FU(e7{IMOUBpR zjuvjr-wTl^_M;8mydo{KozWWYL96)|Pbj%oolue&TkBu2PC4$r03FKja$bl~Pdu>C z?o`Q=VQ~r#1_Mhg4v@Z|ZjM}sIf7(c-837%1VcXHfT7ZkXERQk8N?auN~@}>ih-P2 zNqDYn_s=H@C9l9A3$6a78?HXDVXuX_oE%M`95n+91#CbNAJEoV)Mv1EE7x-oLkrVS z4v8UYUw(JF23GG48=CQe$Q_D6LSvQ|apsH?g~i16r<=|}5_=cj!uNHV$amfg5-_Ae zLORdYY$3oQgmbdC7TseOvE#hk-!pUT5ODE1p^&_n&(VRtEMx-yA8GPv_t{?`5aA8L zzmEw%zm<75fYB4$5;7Ho?09I$M2vRjGj8^bL(+g08B4I5CF?5` zL_~FDO|NqFHqS0jw?riWo8blSiq(pRik{aZrA)X`(_0dbOtATo3CG$EEPk|;d2C5< zX97^cNH_^*`RFU8qf5B6_Z742bVo_VyTW!e4kr9x4b3~p87{5xMR`{@#=repS>nr| z>s{DyrCw$+oV7Y1C_h$h_q?iXSoMgmZu=cs!Ty8N&MHj4ooJM%@xt8RyiU4kGOjaC zb(!o5i-97hwx&d=t+=TOCqPUspZDbv1Q{dUXN1cdS!)T4vw{CnCYU}*PZ%${(sc#& zwR1~KX-kUXbkoT@oiKw|T9P;pQ}t4=BU<>k0`pUy)8XDmiP_07R-N1Lam06@_W=h1 zMTU`)g&X2yp}u$2o7x*V5BJkg_Qwt$tNrZm`KEtJsvxQF&e($|D>nVjiM#xMM``Z-D*V&Gp{gOLkA$3Z1 zAdpB!_Z#UPvX{x<(s6;*md}Y6C4a(njuel^$I^CA=8`)2BhAA^*y-9K2&9u6M~5Sb z>Bh|Jpty09sne>GfHV z%F5qCnv2ZmtjI*ldG*7DYuMJ$uu9+Gsv^mI=9JIL6ny|aOxpdjnf$XN&X<4snTp3_ z?6#c~vrh4)^&-%A^$u)HA{V87R4myLgHeQKI*LUwg4g;b+2#P){+|W3hmUrQZowUq zW-{w($Dr4`^PHY)2WMw))m4`CdTUOMcbKoWhW@l2Zqac* z$eW~{pzY5jesl(&gc_|xu6%qMqmss(v*PzG|tPDeRy zdzB8)FZnbx7EUno5GeZ!a;?FJ;?wFFkGShSI;Et^>dJm(&9|?XIGGPlkzy^?s}@Gr z%j93{i->Lfiw^&93U>3WfDp7?@c-4c{|%^AHL~EHSgq1^4u>L{>%_8;)DIbIEesC- zVtG$viXI_+wbR_^;%bG_T?RmogOYkR%(w0r>JdTpFLTr40x8ht4~05%Q9+E*r&Tf9 zc&FCIjc>VWTp?G@fThh1)oa?`=nIPKt?XVt8|O{T+yuF6K7fw^E@v&3BGA9sQLN{= z*<`>yL&uEJo3p$*>%BA~t)-+TEA*F)y2DDAC@tMdch-2*=u~0V?8g8e#c!#f zg2nSyEUqV!6t;BGYbNR^x!qkRruQ=(A{LhZnl>`jKYZV$UFlzMrmyv4iG=Drsy{_jzH}hV z0VyIz{lD;rzE>OFBwMX|1G^#Mv_yN01<#xt~Egyy}q425bQ?qBSl>bB8cgM52 zu>Bjc4mGMZD#R$N6s1ON)mF7utF5YC6h)0tGiDuCyVML)w5nC3Hj!AhiM?vph*?Bz zk>Bk+&w0){J?DAf&-?lP<0H9~JNJFv*B;+%x!Na7!=yi)@XF)e_Ff7D;q>U@r)x@8 z@0peYOIS*S;4~89m(44mGwHc_PEXa7PP`qkyo<&7ApmRV@zkH6T|2wv-H&ilsso5= za^(YvQcs`%Snp(FZA7WEviOA%O$Yx&+684_@%D?k>n6as=IqqvPFHqwzs+0uM@_&M z;)nzOuxgaP=0|bgXLuW)cr*9j>jJ5&8_3M1fE{?j$v_7da5<=(y#$?$@LWzTOegt# zM@EWfFgL%{>R@n)?X}0IUB{N^}T18{5y31(PQK5qUzjEZ&boVjst$DR9Gf@XwOhP$B8-uJy$DE4jJu$ixue5{)agUZHqt0#cn z%7jy)xd^?Q#TBM&KB>_-b1ga`?d$-j-)1hi0K`mQ=vBuIH+oS=_a(nS4$71DX-&Rg z?@-H5+ray4>Fm==y^ft~K&zDTF}GZwO`|0KmL;v=9>4r+l%j4wICg20%NgY=@75ps zi7I-J5T1}N9X2O_4c566`2!{qJ@Tn{d=Y1zQ?j8(>gqSKz1aeRxV=8B%Q!v( zWTdj4mrBfD2in59&8&TGm&j=`PH8nL_^VD8Es^c+xO&u5HXSvG7g%LWM7>UQ4;+ zt&ubm;OJCs0NwG?AxEpqJFx?Nw`q8-BovzH*e^>wblZ#PenJW+Hc^{8t@A1s3JcP6 zCBSdo80J6hQobxJrm}%ay+ji-k~U+cytpEerSPEP^8WA_!%`mavBv0_%UDvYm=R_%|L%i( zA2r9N=Z=w0{-HeGhOj)|>$FvoHfx>^l^i z?>gBtO_nh$i)Zc({0exnIrNVS^d8hB9Wc{-zm`Y3L+w$y14iN}xW`@cdiKIAP82?N+Nab9yupOu5Az|t%nZoaJBXvGy#u82 zL_m?;R-uiz5oY5N0+F@|g1ng22Co9Qa zHHlMpFBYB>HoBH#tRR~Abn}36_AC{oI~Po^N?g)oYPnhY(oR&=ZJa*QVP?}E|H067 z?1F;C-mC^fA+@_v#;s-Mj&V1Ap6#VCR9oKLUD*@9fab_&3R*N_Y<54B`?yzL_I;H4 z!K;$;#&Pi5t-1Y zgtlk4k>%!fdnljU%gWt+Z@MAY5G9tPI(^aYvH2;3>JijOrPMk0emVKF)W%MmjX;*v zw%IWlj3>;OW~mE)7fTTJbHI69nsJFFsc2Du`7o?}^r~ROuyDr!!U-;gNf4dJb`x0T zN8?lamBlubrWG#l{;T=A`z&a2pa~X=0~)Qm&roo36=&uw`0Y~dggNXm`v%w6{qP7( zn2_e0W4Ds4(FI1`Wxxxp?*XL1)Q@sIntLfK<}2Gii_;=BG^6(%m1PmkT=#gwSY|9S z4IM0QcD-muUu~Y90e1<@&qoDvkbQnD$DxsKyW+#vrep1z&QFwB{CCwIX@wv32h`sD z{YvNheP`^)GT&o;O;5VTc`Xo+FkCf5;my^TGc6b%Z9#c6LdM3m!a{sb29$BgDhI`BhUs2h4wELSL(|mFC=#9(+4Pu1dI|{8?E_(~HNb zQ_;G(yCT|LG-GirvybT-rtLFoYWYRXg-mabO#Gtg9?%{jSz9`6_N#A3ThhH6y%2o8 z4^Ovsk6sTjBDvcdE@U*Z6|C(&LYuWOqf~c`+e;|M0bh6FkZoC)sMUyDT_1NoK_CLI z-{cj65*|0ztHB+@6#~oqM`!IJJq3hlSW}kpG~*v-bwUf5AeP}DRDU3SzM)!j2 zc$!DkxAVm+Y(}V=bb+^pGjW;ykVrprd!R06;WGcmP<$2GI^GIWjEff$z9#>2#Wnco zVW;@nTgKBmX|AzNpVSzS=+Vn_pEMBc^D{XY0w^Y@j1E3Zq1!H*2bU)q9{O&oqh-?@ zliP+*gjqU_%yhn|^zsV5eY1SaV=Fn`HNurzG|=01`I+aBaVR0_@Do*c=b{egOM$q; z1VT-?M*`R)IJvjRlU{L$Pk}}mMq?_+wfHSJ!{_M?(8k46y_6LpelCxldmIQA8~J?8 zJD(7nB~+HoM}V!@@RY6TZ2+E-vE?}|PlKtwDctm1if=TJvcke?#*GX*N8^!*w=}E@ zMzP}JU3%yTpVF@pHMk`efT~^3VUZNgv|+{oe6BTa(?)TBV#`DY-lG2MB*D~qnEeGp zilbq&X5O?Dug~^wa=rq-X~k7U1)$y)7Xd~Os0!c?bkMJIvC2e3zXlH+tHk#0n(4A1 zP$y$Q=|;N?C({jvwp+>)zai{?JpIi$IbH`Xez~@FgRt~qu1pC?Qoab>Y$&&Ic!*sf zCRb3WS0!CiEa#i zU66z&91)6Z&sDEzQ=yDhXDI^;CK_|0z33M!!{!0-nVz>AA-K*<3tYQxl!mZgM>STo zown=y_}#T{atlx3YBl!k`@Q#ffijvV6iXoA3biO`J@_r%;l0i0*LZKL81kjER3Z!E zd)4|Y4GPyqx2Uo+VwHWW#~a{mY9V}@UP67^g+g!XHR3o78|AP)su;dT22{=>*wz{s zV~X!@&0`UY>lTg7NUQfg;pn%li!!sl9J}L{8My+ok#VR0OM@0Q z#rB-N<{vTeAD#%m3%S5FWC1$n(wTCKsCj5~?VyJC=sX3&RDQFjEQ$arOV$YaEO zq(ro*>&Fb`YZoCnRYq6v#3Zm{X69aslxwht=O^lJRYah?qTA{1P{>j9*cSZf+9BRHW#S*}8J^Z`0R`NRg7FeHw2Ab7&8G` z4F@Z9eX_n`<=WN@2THx!s(wJbkycC>Q4cC8a`Y3W?=2GqqMT z&kV`F683fD9mb2C%xnXEl&iFR;whiBStI+iG?qT<`G0R*G;6pUZ6bRKUwarm z4mKNoQEzHA?0D0uv$>0&49_ou7ftdY_tl4J)uss=E&&}#MY5pCZ$QE`8V*|N%lCNm zK0ALm-!HXW9a(|`F;(%Q`7FM>6VTCIMqqCi5fw>MNu6V&}&D!8< z?q|EFuU9Vtg?8>k=^g4-8*SXj!8zp#oR_p_U(#O3WQ6S7_$6}==;AuB|CoB!>gADP zWXue=DL4A4`#AIpcFr36%4_v%sXT;>&%| zZF5_KY@<*8(Ci1@ScV@(ByNp0S+ka`PFiV!>gCB`Z-XHk|EAY$=jjobI#3#TpWdY? zX^`pfK)Mo(Mhos|mS0|-DmaJj~ z9J{!F$~Fu1U+Td@K*ql(`j7ULKbhuf3e7sz&RqyjVnbJdQh1-L1 zZRc#=A8MzA4W4BiDA|iL-r~nK%Jbf!_H)Ua123iQ^yu1aDCq#XaOnB`z|GA%osx5><#>~L{twJ>)ZSyJW)P3Cc&UwMU*}Ekfs&dAfYn(Qt9F8$cR)#Ozks?e$)4^nWkV*I_0RQ7TTS|f}unf@D z#nl|$#b~ei+}IK7(ahLHIq8Nxja|KZ6l#k#DWNGdwC?X-Z5Szb?EE|#ofhS}1PovW z2fE%8?yn-a5OkU=iyb=qriMDIWD5-G@fYKZA@Bmm108Nc)J@x)O9@d7gnM2>5mUXU z%cqyb9NdPBVq?T#bfqwQb%0+vCx_QF+#uv{%cJLmvVD8M7P;#|EiYZ3W9-a2Qqd&~%a)l_TxLOZ?vQ)VY>djt%MJoI*jJr(`uFzdPn8!%8| z!4`Kc{+|TxpN!MLrNBWgFgv9%+qE6$)x+)%Epq+H1}%1d;yV|o*=&fM#||fdUlrQ6 zNjsV9mtS*zw)KW<7kc*KV~m1)gR6U*0$D-OSLsAS#uu(*9ppi+IEVY_gT_2b-H;6y z%lRq^n?rtPP1Si@%11w7KV}`>705ArJx>^w#KryhsO*mFArP;vL7_EV#7#7E&f&%w zAIhcR=w!TLb6d>`=ngtmh%aQZ$M~HBliHsRK3C$_HZG?{(9?1RpfB9O?cvW6S2EOa z=ce2na#gnTE>A{Tc7Jv7xR^N1Zm@Lqfb7zh(1FG!Vnww3hgp%>KRqN=m!Y*?mH!$Yvzyc-7wvgG^~*= z%qCwEEvS5)1K2dK;RWZlv>iRJjzUIr@hdcW{p{?6&~$;LW=wg6fGUqT;QRGrO1aGZ zQtp^>%yiTOXw~*J0G1t?kuVopa=hqJvC&vjxS-WrGaIc)t@k5^2589~1<*LVDy6!& zO|81%vu(~+x5iv%c#*ZaPKA1lG#X4K>^pXEVhoeHJ3d^mz`tj$LH+YKtii2l4=eM}E`bmr1UE`@6tyiek@c6=>J} zIA3Y&;pZoKK2EI#Ey6W=-=;MWU(W{7@Ng&rec~M*L&MKcQVT_So7_qkfL|x<2IRnE zJYs8OEK1IfeO3Yrx-3D9dJgr#IvT6Rsnz=pAx@6OCley?h8G=tMn=qTBZc#A;Kk`Y z$lWC=zHM7&ZJK%J!$)?7f-%(_&OG%bn zGD@c5Oh-0RI=SDCbFzWq>b`gOOir^M+e2&C!4*|u`9I=X#wOQSX<|?5E<8BYZYT9g z5c@`kzXT9ZCZ81sC7udgS@Io0zHxvzBNlo{-(Po60V%SPk{#!>KlHwtr%OIqcXy_{ z1dG0R^IL4M|EZMC4~+2UEeZe4h-^~B_0bJ`EQN~XNk?HFoxfe9#z*spE*{1GZ4Y1Z z1rd)Az=X}8%++720!UgD+7lce_N$_X&Ho%uo_zk4W?=m2$$U6tm~6Bg0xO^EYBuZA z(iWvLU4bF4&Ez-tMmL_r-H3L~(1OlF$u6jdK^a3SXcWD3Prdy|12Qeab-yppTJrfBRHe_=JHoLO`?m#1o&6sr zdIyZEnj;&ZuZ_tpoY5U{7frt%<|A}AR6ZrF#dV8;7~WW3)%ey6CSo>wGgG!vbRVUp z{?SxQ^?i3`CovgA&*Hs=H zkvsw_HXP++M0H@_xBH}IJTX8*(;_tP z**jdTZOrKUbm<+X&(~;V2^W>^W4@y70vgPMp=X?bq>)wy>FZfBI}DvEV|P@16p~-Z zKARtXH3yF@vU)>f4iYrJ9g|Oju3Ym={xs-}Y42cnu30O0#rjuN zsbvtjmr%8WTc;*lUy7rpcSQW;&gkrvgnk|xh3;^0k33#* zPK_s5OZOT0479aPU>nhxRu>l|z}F%t0!XSenE3q#d$qC1S1!$Ky50yfD3_bkT&bqn z?%d1;?52sC*Gn+vJ8RF(ReZOCYgQxY=>=dyjgf6xKX>Q*g_WN73LDXSP6E?d_^!O; z$IK9+4CsT`U1hR!FJpwj@`71;kqW;JbRW`k>=N>dZ|xrVBquz38xVOvtRBkRztXGa zFpoIC#p&VFm1ycBBIuZVXkWm{yRX`8iP%TOX{5%`Y{>Dx5e^CChj_Nkpv zGok+R?N-roZj~`xSHPY2EVAW?Oie`GQrXy^DWkr!-q^Ru6 zR@vg?vK<@qCbswm3xPBd*|Xmml}mFLo#)9Y%g>-k4IHnv6&!qaB7LZCpX#3t8g#e)9w46!`GT=)iH8-uV16>*0s(V zPiz^%YvR5nJOJt*4w`jdIaW~~4r;Rl4=XZC-siSeSySRJJ-~ zj3$}7v?oV#$qyFDyKT&Sh=OwvuBukv+I+>NkdeQv7O{$-WiQM+dK+Ymidf)+h5L@3 zQT6vt+#e{}P~4_m-5Jsle zp2pN((B$-py{?R}b&51fz3g5n zP#}y;ST(OMTxa@B1>pS6bS`vg0sthlS8@wJpWA2=S+5JCY_v>ZM`m`gz#WX-km02v&lg7qZdrW zV5TPM^$}Nm?ogI;`4yUY?$cNoBE7Z75 zWY)Bf?m8JbM7~2WUIM0PXQ7uOPQYSn^>)wqK!#0VT|Inz##klfDuAr@tCbx06P30Z z-h;EMcFmW+y(KPQWc+plhul-OaPdGdkPfazt&87_fyu(Vy~mU0KpsNK6;Y>?k$B|W z@q96_AS!N0as9%bIJaMuE^3H-WYxQ-|M<$@;)yL2#ckLV>*Go)9i+1PF3igDSn}FY z5^|PhcIzS{4_ySpEEA6x7q|QQjpQM8eYWP$oob&3 zQpL3)wtGmHaVf*BxT*)7+qXu=7PU5!*hUuTlLY0NpwBPW2;!3}`{D0An)(8cNln5@ zXpRFQo^;T9r&;KH{kX$`W#kvyCTh#|qVN%;=BPq8%;ArkS$gbHr4f4x=g1kx=n~

    KgqcKIo^~W;?)4M0`vXE!R9qp4RcA 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�j$GQX@;V#G?oh}2|*h>jQ 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 z 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%0D@}zCk;a%^x0S^_vWOQdG-WC{z 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 rsj=m=1)A%#n`yngr(HEdf7 literal 0 HcmV?d00001 diff --git a/content/terraform-cdk/v0.21.x/img/cdktf-terraform-workflow.png b/content/terraform-cdk/v0.21.x/img/cdktf-terraform-workflow.png new file mode 100644 index 0000000000000000000000000000000000000000..52a6c9d532ce502583aba5801ff20ca4269f464a GIT binary patch literal 822929 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

    Ys@zIXS8w~;^ZsGfJI=!?h$UDmGguQT0a zS%4u+YCix!YhEG68ugK8A<-6zLgn!_<0F@xjSrr&N0^zL^A_brbfr{l407Cuem6lq zls@(Do!R`v+{+tp%IUkx^u|kS^DH1lAD=%2Oqw_6a~;N(qzy-Sl-0|osL{RII?O%Z zj=6OMvLD56@+Y#+lxr1`>0ClO(xMoCs)&6^+@VaqmEoX)7l4y;Gr5c2EaIMATYFG- z-FoN7YW1VAH};zR)NfR-OQQEWIE881mnUvFk4Y;OlBO`!ydS1}ix_V&<8 zkisUwNt@9N)l7s3Cd}bS3O2P@jp!io9k44>^6v9`Jls2v`(vEqrQ7G<)0%nj1+FAj zSBRF>5+{s~%JDX{Q&WY~-fq#AV{W8%WM0Z1w5WJ(9f&iw8}Ly=&rX)8{QtiZ93SG%fmD*^ZLV*#rscZW$-C zTPZST((G04tCeAk+VCFhoC1o}Y{asCWZJB9HfXZ%gDeaJNrzRu5b`oAbue_lDBg=iw@>Rq=p6N-w( zgN_d^#`x}>O(+<+y8AV7#-0CBLRILTN|T% zP;e~Ya5OTa=OjxR3SRO!Nw{!aJUO4%SWXR!C0@d7!4UrPDjlB0k?fkXy~cKoevVz4 z8xV>dooG0Wb%}o=vAT8Wb!wWT{7~8Gj;)>g)3?V%$mx%lFJF3Qh2ORnKX>O?`CM1~ zfkS=%ojNp{*Rvf$vgPBz7u-yL?C1Ki2JhcH?%wPjW_Z`MY~zjw9+ zt!nN7a_oD*xn(m%PcdkRve}^{6#1hy|Vt)uZdCP9F6^hDGJgWPnE3J65 zKW>iOjFqrgn{AUyiK<7P{D9XQLu@_V=6!7P)W(x6DBVk`GMPlxcQL*v{lS33QP&Mi zHC(-+0&zvX3%cL&Nd0^C4)q0WCVdj0YZj}LLD6sPItuFVnRj^ZC-&sy9>)CcjyQ}3 zT<-#Qi)Sa0JGqN@POj{ToPs?U`+Aw@x@YDndg2+NUgz;ECI`uHH^n4Ejts9UO>ZyXZeZ%xj~q%I+-_Kf*Q21$2x z($4t-NcW|(;@768mS=4v9n;ksDI1E8j*e0~7l7l>!Pe7>x2LJagTw+es}NpIdfBY6 zjus#79?znK^e7EEj|)CHAhEp?cFx1F>3AYRxcyRk?3;Mn8~>wf=68Ya_=-Vr`xCBvt?Qo?R6`?tiAM8~ zalw<8pzEJYBGI5((^)54*J)SeYUw;E(t(iya;3-fR^sTzqI1mEYrjBOAfMAeeV~}qRi1DLHU#RGC0TfD3 z()^X2qYzb!0tix!+6?h=6*jhb?-8ca2~xv$;TA4%O{G`_UB7^e?yyxAIz^Z0X+oxM z?(w?O*<<4O1%;EEA#QE>>+?$nqVmi z`ZY1z{9s3{f%<%Wbi8J#`ORKJ$V!0Xdiidw!J3)CWNHldIr~HSAKMEKV({+*xB#-k z?TOEEicn}Z63H>|Q<3?wgjkipOX=%#ZF4&n4n9Lv*0gj}(X5J+R(lhKBTH)w@A9`P zkVN}>La)l4TJfr1*$ zR2sjgIxNz5j4sN&9P?29;@isnK5_I{+nKAH#pi6HVnip-z*mKO%_bW$l$TNF{ z=eJb|1gJ!f-tF!ZU!XaYBHEQ?X;kYCKbdla^sC%R>x-NRIp8156Xk(J@KrAb0Vf|Z zUP!7@p?imPet_62I35wgm~BF3i6Xt={78DlB5V8ZUErUs*gN46{7OYh@&mGYX3|Y9 z+31B~=8oUf7i)@)Lvx2k!o%OT?Md7)O!O9Z+1H}JkCzs^?kl@rJ)*OAE;)8xS~679O@(_FVDd8SzP@{m?y5 zaNxc&_*lt}gZA=n>18g9oPW@cnoIP73CAcTE`|*_U+JWmHYjSVV23C)c&fE*`P=8B zLTih3CV0oGmT`ZQBF}`_>$^~g)zN2+FRc-9yu-k`Nm`JsO8I)-3 zI$8Jecva%$VZFPx5XV8z(@Y7|cwAd%=7b{*CbGV<5m`6tkr69nj@N2dP$X#WXzI2s z<=@@s%H)22-NAMF7!VA6$vxa=9Rwid{0io+t?x=b^o3$Wy6h@O127UM8w7Gt(}Izv z!?%H~Fht$P&5}d>F)>x3(8AnYiywgFT8&>?TdTBJ7?#}ZyW9;r&TI7B$fSSpsXT5) zjW=f@=UQYK!CJTpPxvjD8*sM*dOUY`p3_Brj?h6Csw}vFj8%GyN7UEh6G3T z>S$ImHZFlBBqHzM&;P6-Ojxw4c!Bh>uyW8DAnqbh?;_>a3r`MkA^Or&4?QJ*cQozV z@IUSE@YBIrmdfKO7~kphj1pI3BKQ5tbq(1`qvj1jIzzAH+Vx#jXBfI}lymkpe_QK+z)lBQE<NI~i1Q zb6f;AzyE2Q^?QT{nokWv_W9@u*{Cf?jX@v95T$rD0uTM}Fh%@S06mk{Q1aokIy%%l z)ieLYW|QYF0S~`n^-*OhI@jP%&ID-O=tKXMXU+7hHuDh6l;|LUl(vNQ1(I~O%L!pS z=GRpQj)zleFoP?9OGUumt2<>CE^U1CFrMVZ4E1B6l6MAk;%poOpBPviLxY12y&XWs=`t>^HAHd>wIl1qQ*34&CVI=@DTob2Y zKYMtQo91gFLPPvcSaBohkIGBJEK{x$$Ka~i2ugQZ+4^nHU2o+$!t|hpd59S-jfgxG zS`m~O&(xS}Uwhs|^dE71aetw|vCsit0Q%czGX9l$#z~vq)A0H#&#l&-nzl??nzR_l z2Hw~%FpG}^l=&qVBPMhCJ{3xSrJtS$K8B(u1R`=?YkDDnu?%xekygA97@WFr9l*td z_jRUeXXH~e^LA-1_o}+lmXmLs8Tkxd4zTCsB7wt?UuPbeKxFasgTEn4A7k5kvDfbd zGTqU z?+CUvPbr)tvQ=<3nU2J|K|KzZ)lBd<^k~qRa(H%rZ<&1H5Rv2CG~=~n=VhD+8+Hzl zu<0z6Dslck&&VhCC_p zxoObZbLnZEnR7(}emCr7ZL(D7eA5y3PCwJXc~guM{=O-b@7UOY8S@)k<)>k~@yN)? zn%BWX()J`R`3e3wLE9}?L^|JO$i-`eDJj3%lFhCjxWE|-`dFr(2`_(CKLM3e0;X>N zbY}Kif-I^X-W9cOka=nb4UqOAqT)9*@rstI*}z87%+NaREm$d%kXSey} zaOjJyDX&6)^#{nsHcaqt0dxA)GPjj9;vA$L)f{kL<_r-j(|@9sPDJv3z)WvVZFMd! z^!elQi|R@)?~x2+x@A-ES#F8F#s;sO#!Oqd^&lnx>@9}2ZF|Ds-ZY%(e?<2O4Z*4A@}|^ymmitO6i6t6->GZ9tt4#aUP&R=bveOzb|ac7AjEHXGve;!O4GvZzBQojK;U&@_b)PzPs^ zjEuChe3Ez;dYYBL9pb_zr(|w1_-l*v`C#5|S(46Wy}8`Xm=r+k{68fd{-66xbID&& z#>iPI2Iwz-kxa&$PMXg64q9`LG|Sn11dNR)x#`}!XL+Fw_c z7w5o7&JZ57V^6>TY!kKUZbYI&>Itpm=OG zb)XPYc`CLH9ESAs3l5gePK|9rdusPbFK`O&jhVkwwx=a|DlAjMhh;Ib+E!s6@Qmy; zlbUCprA1yn(sGtsKZ3Dda+BzF>=8FNe#GB+V#(xultuj9Xilf;>VaffJQaHa9`f}V zIrwY|XmC-PvCH6t-NU;Z@+N>5a!@DH&`6MoAqL#I(5SI+j_X+uzPCg?w!OrD*!eRR z(R))&KJl)9&;EM|oN@&@tCBe8{e0*&UYof!^&`M`k}w>An)V55c`}L-l-iJHYi;B3 zq{J}a0y{He`Db{&V(_w6pb#x~my?{8F|Hq=yPbMM$nCgN*{sR|1Xy<^dnU9m z47j2O`ufUCj`iN&9TAGkeQ_uoH~N0%4fVH8liO4yA2q&XaE+Cl0AX;mZt_1^Q;2T; zZrc>Esl1nlSo%mpbVg8``(LpUT)V?U5-~;E1vY{-CZ}{ZCT93`EvZ~qr0D)`i}a#E zZ=%nk83Kbz=2Pe!x!IV{-6(v(D)=SaBE$(p_aa0 zg|VJbv>PR(-B9-W(KTOtkncw~W?lVpz1x4vg6(XKfJn+xnOI2Je6V|^--Jo0%$y6^ zL-x{%>cT73DF^^JGYVA6X{ zRr(RYj#5)Ihw0xi>@@HXL5usmX)3jgzBr9P@65PKxBrn4m^Ls-GTS1+4D}$s4 z9=F3GhcQdr$9`GxAH5w9w)+uwIbu&kcTt2?GWL2yE% z=_!ZRc~0r~jT3#-a8}C}R?k1d^E<0sr1i*YP7MF6#M@?>G(0HdA<|Lv;@Ro$$%ojb zTSw!NEg3Vs;MOK}s+`hNHSb|IUV`giWLIhG-0BPorXDw@VIz;q3DhL+Ki)mo+_qoA z+;(fHPg1)T6W`1HZ};0bh-^! z|9CJC#Onljf|&J-@}w0Mwd=m@y|)hbMR9R;nZdfmWj6nmSR_ix3ffc^^qIdeIJ2J5x3xa1TF{$S?p{b*$fFuE!nZsL3{O z?th&}XW$2Y8Zv=%xMZ1PGj*4R^LY4cI|qW3A?|dwawZFDtic?mr!PmotG9)mv6J8qyo^sj2>4 zVm?>H)N6l*-POX~U{Buj4;>*e#W*_X)2hZso;8`lG`3YpkDeUhE?X7k9vxm5D7OfzD}?SGu@U>UCaK?9 zr~jtFc0MqGpnO4FsYY2Yft=A?P^fD`$Z=7Kb}vRb*2;Hqy}@??uw;wL2-)sC&3+B9 z^$xHptFX{xX7;>LVSA?pA?~oV(clIr%F`dCuuZ8Bc8iro#$aKq)bB0Z+dgUF!?h(< zBj~wUpVR@?=@5xN2rvJRs=zz=iG)Sdbt!ZNo*g=KaG*E&^7Hj<7*Ra zA4U@K=4t$Mnf}QBej-L=6}Xm5IbJw9Gy(+ql_;i}#~Z&3Tuae;(rptpf>i0b?-`bd z<3YDlx(x1P4E05q`Z_1?E%LGVz}6=XPoQUiu9_$PY`jDmlPQQ1l%w-g2-7*7(e>S! zX69hdymDA^LggPkIEYf;z@a|qQ{=Uzwm~uj%WAxBTsKBGv;4zQ%$1zNo7N>NL&3FR<(t4YGGgnp1e_fa^ss- zs<@RFGu*QZ4<&89nzqXeDL3ZP;MXRniHGK`P6R8KP7m&<#& zG^OK~aY}#uj)tv{H4c(h%i$|JaT7(kL7?2RpL0v9Cojf_kC!mNL;xGTBV6u@jOl7y3;RZWlbAND`iqfhv2aznj2RWK_wag(iX#&qGgCh(;?c!&Z)_Y~=q8)# zsDEwozCPUx`<7{=Mj;P(AI}ccoInH7%MB{1&(G?>0@9m+bOEU$ zbR~3=E+qoeM0&5GqqK;$P(w#*Aan@H_wIYoz31Hf-M#numnQ^x@~*Y!9COSu$BK3u zHBncKjPxzdm%MzM{bekhc}L{5P(tqduKy#(fi~z<#)#6-FZa9=s4k81sDd z_<^sS=4agycxRKAcVaI?5Y89)TVF6f~pV+kXvweJJ$f|ezzYFDq#QyM5 z2ITm|8USO^MII{t($e5&q?f*4(gD|(xX!GtCH~=ondal?zYYigP{IU-)=BkB%5V&= ziVxD!CEv~cE-st2b3`f+0@FoZroraci_BZG z&nssx3!OY(tgkNSU&#REAx<`P-uGInwWn8&qnPE7UDv_=<9pK%J?|N$;`!GfMkjX7 zXcUKMiImq$tquJ${OWM6zyHAl(TfB15#6?uV_98uruu`oN0P{AFWnyOZ^`06IQQ2Q zF;uzz&dt!&@aZ5cvcO{*(5g7#Mj8+56i`yO*|k(nGtT+DIj-sVsE#&Dku5aPFpaw_ zD=P}$u`ONxY!;2w97T>scvyS|pg5kQ&&vfWc>Qg!%mjBRD$m=Tj z)_h0g0q^%0k5n#4*lM9RUlWBnuvc1;FRJRlzvyf%tzM|BY|deFY$lA4i79eowmcTq zQcsc}!Vnr1O*~gGEx#zT&b!UL=*Z+l>{GuUv2Ha)pZ-dZYAWS)t$dHUx}hd>z1XmG z5q1~B;W0pgqV2H_fdHcgV^(JA85!4xV1?T1X+~*|saG#ncezN8tkl1GhwoOmk%mwV3iSsu^{1F+-gvc}!5HH%JU%0e~5jtxqLH4A}1;`GTK2KNe zTJW(dnVOnvo7o#}g2_7X%C7jYZcOg&@sAz3F3!vTc?9{-fs%r|t>}vB%mea%WF>N`idSfRa^3f_w7%XT*A=4eC;^9i z-tcx;q0-5te7aHQX@4K9D{%UlH5-YJ^WO>p9Ty} zN`69d6tA_M{@&c(j*J#?o^HB*zL)vz?n&hHiy3@{S-z_`SAugzrd2ONi|0>DZ8-(R zQ1;)3ySgrp>cbzhIK7U=wJgb?ph2m=EC%|UyVg?WC?xsKv*Z@^ixNY8>1nU<{Zz#0 zD#0xq`Q;07eri5UYt)rs{^dlB@foalG_yB8^wxfXg z9!VOXA8gfhJtBVf_kn}H6=tyi3g^oB^g;T;^dUiHYyt{k%!U@FhTG!=vAhkz@0wd- z;r+N?w|)->67Lf92J~!W)=ta9ONgec$R`GK_+bR$#rwKz=P-MT=CkcaS5X>F z8Zr9!)P1*fIwJ8LLxk;jAjhjygBE4BEaOUv*FPehd^ZR{%o#mD#9Z|=9>I2=iz%?^ zml%g*u#KpE1AYP#*C)7$wWo_BZXgK`#!zEQKITZkey=k{{E&sP6SfAJJiB)Kp+$Op zFnjHLi-hwt3qZWEM@ihF+^sc;jq6$V>0*@8l14b*-5pY8>9WWyIl>aQvDpEc`6a`v zShXLk-+NdB7#$X;>)qE>SnnBg8(Ea8RyxiRKjT~ zQSt;2^2-rSVwbl6 z*1gf&1Gtr9XFcj-93cKHy%kg#-tsFo!vxRui8lQHy}{y9K07tiS^m9a`QW7)s>stT z+`w$JY_Z_l=98xMaOuQCLo?>xy+lI^aMs}Lrr>u+C+7_{1x47d9p8)|-5bQBnr8gf zNxFVXos-}e^rG)Q?{ne=w3NFsX2TyEqI6v(1)fgv5!A^a_wnFqMHjN@%iXhf-NR<= zxf7o2ZI)Z2?()ZjUYEpTWWnQSmSBqD$06e6A@b~GE$81l9*RrL+6|_Y*xc9BVUY4V z^7ZwIUEd@W+u*LYFPl=+yn1Pp=3CKlkRkkpV%{z%<;GgTkkOvY$m$+-0Vqo-c&t!O zhs{)F|Ea&%_NX4Uts4bR2^D4K(}xPLxb0XMii=;(V!~BL%2{G^a%Ic7Ko=IKX_Y_Y zM?CamRHI~Q*^TRj?ck$*J|#8TeydLuMG7NP1Q$|u!>s7BMB2e88xgH(H7|AbpsMJA zLa+N@C%xnjR!WMj;6Z$2z7AITm`+|Hc zH{`kmA#ogorgSu9t9t4KuVhXINMU{(j|<)7n!=9H`q<48;yxAokNn<>Z#KH8H6&8V zD9a;#J)F3*__{8U>fM*vFx(vyvE@+%1x`k=Md|Jf`2q8d7ecI&_6=B9MB-Xv~drHV%u+BK>3GnfUEwUkDh)@bYA3e{Hf;M_lCk zeU(e&!k(1LKLU@JK0REXStv^ANU8N4m|UNYfO3_dxe{LdINCmM9MU^xwuE`NGdbg# z%$+!crCP(nv!fn~sTqJ@e3yLnGf^0L&Z{b`oH3__>q z!RFt z8#S7=%xO;L7(Xi4V$ah5#{>F59$Ra?aw`a=r3bZ-26NsI15*uE{CYscMfHVUoay%M zt0XcD&-Lb2@DVAr7F%1wBrAmGT;&8~r3z*8-p~wMuL$jW@>E5<4ArUA|p>a=n zvG*DM{w4hx)yhg|p{|-eyRqJh$_ot`q}S5ro(m4!JZO+Vv0d1gY#qM)I!rhyl;Zgt zz@1RDY9^$e$n5kiv=5#JQNZvzg;ISwT@{`3J@&UHt%5w_B=>#9aGz~$jT)Y_qN27i zIgpmiLMztnd$6~o+BqiXa^o3vSGRLS-BDp~;4=1@uc%hF#q5A1bVQxAU2sM6nF}eS zw6}IzRc*tF#hY{aXUhRxq50RB*-j^;jl_!blVo)r`T6>9Or@HuAe;4q-%vG$1TxjS z%!Y@@uz>~7U1>dU%%8}oj&$8>bC@^lAw!X#Qjc4rl~ znTL3$TEYQG>WWh_zEhyM-|E5rK$sw!*B=Q?%o5&GP(5M=$E4osl0pZedX%?Mtf4`MxV#0e9VQF$z` zuDct%j5pQzY)r~(?rQ|*mzftveP+=Z36iS^uGu>`1T=et4bXFj@l`y^G^Cfy(D|2gd z*A=bQTpn^7_baC7S+Z$gsK`OL{z=Ub*`6-vy(OP+QGA-L=~+vyB>HVy80yLYAF%%U zWd4X~(h}gSpq-_v+$12jxvK|KZl;Nj>V1{JDrKri=d(Rwt61l=|9jWoa^VHJxB_4ECmq2oI&@oK$yr_~>@2~o_=W*F?t(n%`1rzf_bmDO_`NhSWpl7z{_G3AL331SYTKjCLJHqLzvv!GA(F#-L-8JzOl`hlvyC;p zCzT&?E@?5DxfhSh%M;LdLGC$w>@0RvQ|J_pzgS$%*%fFv3GIqixIgP~Ca{0>n&B7v z_v3>ZY|FD|w?!L|W=AZ3O>i_(I5pD0=j$E~j~1=aK{I=q|JT!<9If`+ml{lM;^$vQ z+ww%&uF1_9pQ7IHmQ%klcdFV5IzP*n8@lQK@VNe!YQU}Aw}I;=YVxN|q-wf45f0-m z1+!41x%x^yp(}d*{75!pmC9Rg!24O~dDoYeowudn2X{DB_XSTmtw?D`O#M&f;Y5m0 z_eCWQ9gP`al$rF?Rs~=k?}O3guQE{2E~P#Uaa(J2nNPo$vj#ePB22Q^o~u^v`gQ-D zRxNp)G&)odiPs^J^~A*urQE9h1|Ju5xh-fl_u9NsyStHy4% z`*ex%wwV*U-Cg%a(fZ3aX>FD+^|e|1y4)%z&A!Eka?;w|sx#l5D z@N2e00*iKQd^`7aZmG4xCqoCSt#O#lnZ~C-6CdWz78PYk)#?JO1d3gmHnSu_GsuC( z!syS_tnaoO^n3&a)?X?(?0(k9X8oSEaLym->Jk~UZpy(MwNIhrG1&3 z9JH)@ErK$@fb`CsAbNj5-z*#i%E{HBWc04FL_w>cgjXXun(RLQ&ouror(#E(ob@f& zZrblS4%M$AWR%^zKu7pyQ6Wd*ve?x0UK;-+lIPl)3QL+Et3K4rfa&Qy|HT!r7hs|z zBgf`!m7UHe#0$CqOKlV&n3$2fF;P(onEdgulo}m_=p$YR2J%;}_Iv3x{ecZuT5>eV zkUfSs+vR-7%3P|HvlA&HsDFq5a-zP%&%w((XNOyn?xbW(-R{kt-W*DKuzCN(&55}I zV9EnPDWsV}x~1vnG7lf>n($(TsqhGCpNi87l)oO6 z?dLhO$EfJNBhvJQN5Ohl|dA2NM5dXZ79t6)`qrXu zXxKSdE=cOd&1WLez8k45-^UqYw2YKOV0eqYom#RB6YHyBFbax+mEO zn{tcXuMc9G(5Efmd<}WTLCQqWRPsJ-tVhUtaOHv=%}c6IVITO5vqy3cHkdp|&i+Y}#OvDFFKIdDsn2lY$!=v_0)G4gY>#g@4 zM|_34xxy(#?x2*m1j+KR+*KsO?qa<~AJ#lv#AD)^s{fT4pAnXci+buus}l4A0FqP~}i2 zBu?(m`yx|}GSw`Xy?W*GgG-9kMg9CnHBHB_){biX*7@1qmufJ+;?Kgq%El(Cb?HaS zBgub`C$-eRwKJH>XN*mt@aX8+$dO~ODZTjB{G)k`Nmpn0K^I}Ui?~*bMt*AwCZ`<^Fw#p#N zCHF}Rrz%1H`73H>)Gyg6N;J|^+3DjFuA1 z5=jT$#t1s~b~N?1eECLpA{<16$xmPJ<9fF%4?hnJBkQZ{{i;+=YihG6_F3;M@#&u? z$=@s_{%6XZvJw*X3R~gSHx7Wlt!uwacfGI#m)oEVlJn4q@uneOhj`T|w=5O&^u)Op zTTMP+cmWC~E-o(ao;^77&X#Ax}&w%Lb(DiHZY#2q}kYe2hW=nU`*&kTa;!GE>4BU^9#GiIX zp`&m@ERz)7mb`Yb^CXE%6+{0{^Z-|iMALERkJ>BiPYtSsMBOqytBNpw4PmemCe!Yd)d{9GEcFseoid?w9rePD(5n!PA#)kAqG5fKfHaH7z zo;+0WUNgO9RskMx*9tlFD_leH8mgrVb>++D%`pT`B=V|g}eUaWNqSniCb32S|o;1iqFDZX!xvp~G!rF846F&7td&D81T3YGx)5rK17UA?j zArx@mu;!b(0Q8OAX-9_e{A!`4IHAnVdbgY_mnV_XeHpj^^}~ysuF@1~$)$H%%y5Ah zNFMG4h>8nkMHYM9wS05>Y7JV&vMj*6^&^uIN;!0ChC8z>U*wtKdfQ9+&mSHxr#yMI z1dR;WK<|BS>I}`S5Gp1^`Zl1$%t~4V`lR67^n$PVMsty&1;}GT81K1E-!~x>h`}sh z3-e-su`qXn?GMD<1aNi0aDMZe2ho!_Z%3up7T5-toe`SmR+a8c7^^47i(-x~@jFKLWA8TL%{~GFRs$H1#V!HD z4`JTeYiSdwcxvBQa(jvZ#!0Fd8=Eyn-GWAQ!6b7vwORS z97o-vPxI_-W#urAPqypxTduHinbj>MM@55yg_Ce`jP(>1dcP~{ugOgRIeSKGHvUf$ z$v=*pw;KiCg=;w8p(yDOT>qPag!_Bv-2pDuL#QXV;1bzbm#TN?tY3mHitL<0%w>f8 zLSi5YZpe~w4Zh$@6lZSiRPENC=Wqu|It>_zP|uXTmhsU1`0oz2t6A+_ScvXn0v1oH!fSdw2hh74@Y0RCSB-x@sD0f{OUS zVJ&f$%;Ey0YVXsnheJCZth5JM)RC1R$js=u(qxfd$yWd#8E`i`k|WX04yp&ryUUG7 z_Iy3lO{RL&yfD63(-06SPWln^P6l;dcGc?d-*3wDk*+d4C)EqB=NVEpi8X!=2~a*i z>VPcMwa$g2 zNvF@WNNGocd2Y1%?{|y}sZf*8RqLDaFLKkQ_O3s82ZW)va0;E59}lCVqhEA%C`RXX z`N-;2x_cb-XPO8x>+@ZY`Y$g4nkeg@!Q$%A{9NXp(G24`&O&zImRPtF6fBMJ92h(uD?^gDef*foQ-JS9vKYHj=mNQO;bJ4Ug#lwTR&1mX zJDbA9V7$ZLzh9^|2hU~r?-lp?nzC4KbapEF(MWo28-qb}=~$ApBW!7=&q}JjxjCzU zPLF>mc2A>WNrK!&yI#sJ~!BHYQ^>?7Swur)r!= z%>Y447xVS0T9;T1UIZlXZF-3@^vz2@vk|rEP5qJ9j z8bhyZ3E>$Hkz=meZFw)nF_iVt-+|-qHJOd7~1Xy1FXk; zoO*3I#l4M4bB~$Hhh`KeEH4^8w*+V`K9vR!Nn_YIU=g~sy)AGngyC~OgcWzkQsd*cq}~jD(v+kP21DuIg|IV_ptXxOGARkH&vHrW0m~Xw++iJt<|sl?wHrzW?(q8 z&(uVZ5faUDs&X7dm5%v#vXzYaf=K8TQw{CL=S9J62h$6$GfUsXu*|nr@9yrB zlgn!do-l&~J-?g_n6((U5dBPH$Ma!8Z|b1PPUzu+{bbTeKN2SfBL$gDZ4olCe)*Db z=H#o+yQ3L$&i9T2GR2;li-M22Lyw7*)ehF0t%(tVcWw$8!*|J8a$^TM=ZX7Pxc2cM zE~iGz>cTjK|HcqMgF!m3ZVtQf;eL~nYC{%zj8GZ zsGbYrtlLiacDA&N=M@bcQ_0DH#=gMbB=-gGCDW_%U&0?qGf(d9_##O;rTcexnU}xt zO%~3I$|@vkJrkOEN2qpN#!cyqxGPU;MOlGKHep1}TV2d~R()AN^@z$Gbc-AbVO8VOHbFI?MjMHRGXI z@2h^Jwg zV_!20-9vhD5O`SSVKUjDWr@SDwI)ZurBp@3oTZb;)0*SQy)U)hr^v+1YE7{o+S0lO zi|kB2RDUjxzz*ii9B{BDbu&*!ihd!Wg93(H=mWFMw|A@~F_UT^$VlaOoGiV)#YyX2 zCaZY2hX^~b9b>P4Zk0*FZL90RpcYz_BTlj-8NT};3&b!fKR9YlafJc-na^Nm#Q}MU zo(WHMkWA(L5X#r1m+y?uzt6iPGZ1uaFGwNB<4pz)HvhnK9_&8(MW1CYSD=OC?~1XV zV~T!LyVGN*vP*wF(v^E8E4-sh=hc)rwWJ%*Hg&3hXaO0}RP$2-;<1p+wF*n>6fv-U zeEo0L{fw}9)0DY`Hy`Jk3Y~A#S~Rhi3x3*PU(3}>e4<%REINE!PGjMH@8_dS4+~`E z(gJvky05oM(e$-M?Fl3AaqD}C2#n$iMuS)9wS2{EMz>|Q0}6RO+H1Jf>}&Fx-Pc6a z*jrl_Yx*ycx@fmS&+6Ek~k5YYQ z_gyw@1~sIT;OTlV@AGbQeYnejoN|kXRs;SRm**kl?5|bvy+Z9T!R6_-YSNLflO#FV z5h*F~#kRIKs?hP4nNfchmt?KdqcXB`pQH|-O3ai+Qcamwmf-Rji7m@2Oo>}^feN*#uOqlDrS#i@w5U&+qN8+Rpe z1s82HO&E0Y_l! z@>ekV?#7vJEJFYM===j!#3l!lfS3gX)BtiVQ=3#RX@r}T^{#dM#qcLAyJm1L2VpI6 z^GTd6kB@ZL;|FS_FgEQ5^(PP6q+vGZ<|gC~4yog(y0VIxuS`d|za>zir?Tl+zbjQQ zkA51h){QAky|?wlHD~CHA5On_4!rIT5C?fHLX5M zG1qfQw!zBvI=~6z-wbG#$EHqywj9&F8c#gf=T4b&n9dUx;&cc2ueBs3Ec|?H zqB4K71qQ8lUF;6*beTGl@{%jGU|D9pvudOgk-E|MbV%GIcMz>wMtX?WoT2dF*{NMV ze7Gdxs8XlN9B|yh@)hW!>UVT>jLtSgi^|K(#q+MyduPF7VpjxeEX6$J09bl}0i-9R z0r;MP&h=F=DCN_qPjri74lbcXaQq2#pFfZc@)*x>> zvu-S~!OS(G%Z>Yqm9{8NGOyQ3lv^KyD5zTgh)I6j$l3?c{LzP@^T)Sq7NGzw#g^xC z;FrH~%L6g7^Ka@V5d;FI@F;*av+ zCJOkYGaHs}m%nJX{bSEXh5&nxPF2bw7tFZ>r}z?BdFbj-DAnA7@4ie2+i1*Lus|zL z^)-JNPKX_~pBPG5FP|9D9US36DS5TQ z%G zuvhhP!N-pR^C>+YsGs2LkZ~`2ky{L&G1H_u+w<5o|z;}6xn!%=^M3@vaEnX-C!T#&+5GklYUxN&`S(i zC?OjU+_Se9fhoFU5~}#v$7!Pz^J+KZDgs213h?IRs~cm z(!)%YPVEiK%KVs-Xql@OEjviR6F2h3@9PK_r z>xdoBaNn~1@a}4i>*@YlOz9#6e6vsxHebJ*8R@xpY}s*PsoZmGaz`w5@0j86=#zQ( z*~k^M*$Qj5YM>2uCudw*syW%I_c%~ypJ~#wC6CeNw=MmvrS^AMhV+e2G;;)Pn2Q}b zS#aE}mtet%K-bUypl{> zHVJ&x;{Y4G$%sdWf94Q zAsp5giDCRiCU2gJI#1tPa0QRUH>bF8^2eyNgeT{B;$gKEMmuVgSIR~E<<9qq(Y3u7 z7=B+!kdu}+ZpP#KM&@?1<-MRw`Djf^D}DWV6tV<}6f^15om z{l80y{{klei>V8mfV?JFyL0G<-dRPN|gNNYC!+PlsyJGX@-HA+C-12B=X5? z679(QA@;G+(eF}{bvxayU6i_c-)mU#L!U>KPVD)Qy*q>F)prY>tV$KH2Np0qlTmon zS&t5aGY1KcSANsO9=T=svfb^`i>Yvx&CwkOVpdEQMf;jnPmJk9 zB%!VP2EhwQ`4Ts{GLV)JW1IS7Bvoo$PmKjijZ3S}lWRoA@HdwQ&q+CI z(G)k&G>h_W`^b6)Tz-p%1^ckC1f%A>S$VC|{{$ijN6dBXKf}|>y`V-5-=h&)vNyS4fUgl-My3aq1TCBNl9b)Xo5m+1+_A|)~QWpQx0|w*-wmM~XKzfQ0GjWws zJ{S>0SY6z@@p(LXsMM;nkDLhctW;GRcrV|Wreq=l0%1Ac@T7pS@jQ$YgQCG2m7VAP zk)EB~H)d?j!RwO4HLvyb@*O6wCulKb0?P5p7#ULAbybGE@2RUBG#>p83v%~^cw4%J z)Tw4^Zm=SX0+2I8sE+FK(BEm2^Ey@fwOdgdcKXeTeZWVxIoYHAx~QWX%eFrK6$uu< zctR?SBB0x4;l1h9Uv;E@CqRSl=^SQ zMd>y$l~krItU=Oy#~fZQp%Q2)80`3fWr#z;G4uq^jsW<*^+bKsaG3>7FrGKb(XVz` zV&O?={+AmS*r{4UJuX#N=+gH%s@|GjG6+xbxQOjwXJ*qO79*EoTXe+SfOFXZyv!h!2t0aIua>!j;$UyjcoYYLym5fYSNO8 z5<+)KEb2^lpP?T!gV$bG+Gy+qKDiW{h25U4=G(T=cRuj2^NNxwd#aM4!BAZh)^sNT zl_@hC!z5+7`Q7XLl}4Nk^Eka#`AsSGM+%>-l$5G4`m|g6^_PmS`p4Jw=QU4GY|H%h zf@eDZkp(NJ^f&&k)dq5>2zwy8o26y8@7Y$Z;+=?NMmC9s9zBX@cPzgb8`ZuCQ3uH= zY+WF`9(qiZg0bV;!(t?29A>4^Sbe;(izfJ*E_8I{F;3C2E>YH8ogA@C_0H% zwx?splfwE@{a*7_=8j6ovEOCRIC|inPmZBhmQ9m&u2u)_R|J*J&X(e}vb9(r^kCP> zqOn7^>hE_2r+r5XS<^>t!T0G!%E;2_1H4)0&y8G~ zY1@4UMe0Dyt&uW|*RHClsIXJw*jP#1UZTkv6%F=Xf2o7_mMB?*sk8;_m?hs96wAQ( zpG5JX73YG13Zk2t4%>3(jD9Cmbz#wFvYnZL2GNk-`aotyJzi%02a+JUUMH4z7!h&$ zr>fZhOq7uy|0n~jD;=u-y)*szvjho%McD!Do~IN#`Gh~#n?^{2^!w?(cS!?k>x8?c zPeps>wZmU0NJ4G|3R79sJe5X4(OpuT?hXfoi%pr?M(gr3PmC48TCAa`x~&_CXfg&u znc@yd~R`^SV0fIzxAmGHQH(C z)m444B%P^7di+qqr&~$%R8NFhTzY{Jj##KXez3@~+7#)X;V|(06503F3gibC(i1%( zsTC1!A8?_nLi~LIs-h;?r&}v?Rfd|x0w*(Tz38HBx+q&?ap53u5PnAC*e=0vp4zZ; z6)QC6+V4H+ZfCZ=;Zz{UO^LHg&(gTl7%wvtZRw8S(rR{M2Ac1Gkt56M{-a4>iyZsw&;1kM1cMgzs7X~jqy8X5 zXs00lZp9`F9~$h2^VVB~E|inv4!5QhcP6(pOt+t15AL-^z(hMgk+(zqDjMDvg?iKO zZUOxX1>;^RW5tAeZE8;rLcm&Xa=WQs6Jfx`pN90s0deyBLRVzDy*QsEN4mzm0BW3PJ>)apqx+U~Kq0*@g*nj# zB!*+=fiC6j62X?48(!xd8w=&&bqdzsvaSnC?~EKwo_(H#UwFj9KHdyH(gV1I(eK|Mqew@)n>J98 zFYL3^z=aKP3&>0MpI@5v!W-Bml{+KkY1(YhFAo>brfH3rlNdoD9Hg@DE9&Gnknijb zTx{x2NjOOb>q**qp_8^aC@;?G(7ANHfaAdOY=2m*sCL$uZ#_!;CX&4XOo41)y-l07#wi2CEL^k>+xNOf^=DpJ7yCTI%Yda||S~d=Mz=A^8-2<*k5Q zrBtzd0#ks5FYoM4k|N?W<&c~=i-i;{Qwi}B=?_CK^7&8)h6FOg$Fwq~={?LH3$)Htu1 zhiqmDJ+}HOT9NA3OX>s?;HrtLu%jPg()4QOwg7+Vs-8wz*GEQp70R7h+&ug!$51%S zysl~Vk%hsh%vPP7m6QZ@Y}6qI&S10PGm?TXJR-*Z4G4M%#MQSK{yM|{OI}qdNC{R2 ze}&gVtk}($d@Doe;zDmxlkl{^(6d$j646?T3CB@sv0qnBc;Z8T263o)+7#a&Fq@ls zMI$i$+K$rWr$(&O)?9X-dE`&+N!2H#2ev=izQt^Bl&jC!Xi|0+D%POKQYdIes`BX$uE+3C-sL z;KQg!&R}oW8r3?)$#Ubtxp2KJrRG2|*Ux17__gsJt~+hZeaRgvXjhqyIO`EC?*(Q% znt)2l2}Kj~&~|j_d4hq97K|#y7kWp`i9Ob4D^Nzd1L!)nUWS%kl(JLAxBi{>NfPp# zIDV+f^;w9j$^r+(>CB-uU1SW6P~d^L!+K*#VqaMH{RSF58-nfbyQ^Mng(# zp#I#B-@~FC*fN!0rt!V!_{Mb$q%h^_p`LZmNiD4c=zW*dq}f%z8*>(!|6REk3-Z@s zv5F=B8Yd?W)EbW6Iq43KrA`l#S=4Yg?ntI^e3S_vl{yhw{^dpWO{Dvm+$V}PhK-*n z_wLKV-r6^*J)Xo#k5^zTR66=2Lffh-1QR+7gbCM zz%BhSf0{b5$tKv_k87+ZGp(Y>QiB4^KLkReZ1J!!Od?qEoxhO!{6}8<847IqPx8AT z|4k%eE(DQB!^;wN^B{LCwAwuRuEQB1!tBo0${PS$)C2gPXqh9buZL1>{9I@dso}5I zR{4Z+N3Ioqsjh-e_nblA_5RhBy-eQ@5&bz8aXdhBh26>2t%Fnmmiakr5hHdtouclu zOhH<&Q&MVO@!d-`Jz5GA|K!W&eST0HU~;}28*p`3aAABnUn@+G?a*md4-Lmq70fqc z&YceyS%`I$0MA4oI59l-<=u#LGj6~6L^04m9(HB^49E%pp*t22M~TraiU`ES#Jm@D z0mgQM4XAzwx2Rg;voY*%iCu#JLt`&b`v7snegF=b475F%c1I~=UY}XAI9p0ll;ctU zhm~tWOw5k^XN+myF+u<C230tha-q5M4pJOk)t=RQuxac{-`*-Io{1dRtks%S+0{>dDN)LMf&5VtUi3^oh9u1*@rT-!8;V z1w6=1bQaZH=z!0!B}X%yC$irB<``?X=h&z;vCl(VwIgkP)QGL&LqO4Rd08FdAA8eQ zSFCO<(qP|K+{0KIv+rIH_Q8b-T9MVbX`0rf0BgQ@t%wtmSiP;3!yU$+8MIQyMA;SR zO$!Ao@=4*X@3679=D*qE1%FT-zPJAd^8GXH(6Nz(!pT{67zc&MCAq+H+T)?P281%^xm4P2nyaI-R z^nH7rPx&9Iq3beXDbhwK5-`yVl-jYUAm)UFJ2ax&UX!sE8&fe3VDVON@wUj;i|8)b zOB$`Hy0J|c^%w>_5v<7d4`Td{^cyzq96it1HD*UL=C0Z?)VReqJiod5T`0l);)IQ{ zgN@eY(~Q?*vpvkc?W??qfxnC2w*gT6IS#)17r^-$|@iTN6|fml$U^>Gb%B8 z%0iwsoYmdiyY4n4W0X}%>PjYP;aN&-R8%O)!_BQC2c96>@^ z$zdP; zd}f2TAdW+@d#0W)&UWrXFrE37J4)te&5(a-^WkLGYvwlTgI*->Nc`@+7xK&mFh9cT z0g##2|B~uviB{7EqiuI=yp}8lrd941*>y&7sZI5O z#y6QD{CEAQ&v8JmxE<~-@Xwg>uj}~#z5DVNnCk9IL?5rpvSEJc&J9=2v<0GO)u|Ut zxnTCtbOQu5oJk%7$*HI|EN@6Q%zINi(U>q5Ex0T~{u(mC{!LlEe@p`uWMd6=vH_bT z`1%*E$bX^IC1`@TQoS))JfJ05G)gM(%4=i%dfvhR-sWARx{b;<9+~SFjZ~P zWOU7|oPlAw!|9F{$4Jk^9f5GyXfF!?4_KM?!^nu^zp3c21piUdD~T99`8UC5>oi0@ z6mIU$z3?V9p7&U3|A)}HdhB~p_Q+LGpnQ$aQ#PUY;Tt!+d~Lap&ba1O_#?lkCbpNy zfk3>zd9vg|2bHN+{r#Em0xl=f)7;j#Ll`&@AiDLbylB9I_}w1<$`giIto`K)fN5RL zP?|b+x&$%@+R(jrh}_ZzAfj|xfYQ?410pG%LxY42 zJuty}IQ#5LbvB#-+21m#X{^u7zQY1(p4FS!G_TmiCd10dR{hUC|ZP$;&u_2hJz z<5%~cId%erl{8VS#~x#w1q?POSaD^K(;FlgukD9J#%sF7N7lL%c*HJVzI-`UQGP$0 zDh@nfjhv*f;yefd0P_L>oKppXf|*1w?q06?>?f_R2Ms-t8$g3Qb^w_eC7?J+9})5d zkFTGF)38T@C^MRmrW|(h$g}q^BJdjO>H-~S6Y2!1a6VSI+}JmQ?k=&R>=oaEA&r2c zoB}RebR9+rICc_Hs)K>&3Y1d;iG1#mlcbm2hsl8q`lrx`GU-R@XF2$T0Y z3RP^{&GgR_Z$hG*8o6JS1bdw>Nj9JKfl)!X`cTlV8+R%FlFHUrk}cu_!3S%)@RLvf zTl{)XzDlH1u3BBDB^4e-Pl9!ZPA!MSv_RaP{|fx5f(RW~C~KBm4jFVnT*6cF$| zHUo$~Z`03x*BA~Je6h}M00;t>Y4PH-c;4IoPagp7`3I0y^*=kr{)Z<)QInMacAwu5 zip>|CQHAJ@7hY0bCQGGh@{DER9E9&WyXj+MSFo*k_bs#Ynt_qrIl zHP=~az95N4z94HC|EqyIiRpdw7p00)wCxfOW8|!%N6+*>QfB}W1Q#vsC6%6~jlQ3h z*ifB(MvF_GYR65G1q72=LWAhQj}-5peG$oam{4jfHfVZu7T5LX_Cv@V0LqOT97|UI z{B!@M;0)q?9eh{yHTX(;QQ%C3z=brqfmgr@)iH^UTO;rUzCP;Dlr3{BkGkV%Dzdnp z8;jF3Aur=c=F;%L?lh#kUHw(|xGdpuCE6diZA6`MwcEH%){tqS0jHu-YZ(h$T9->-43 znL52&7X+MS`EgJMj>C^~{U(R+4NiIwWDuRe--H-F1tePQA*P!!D_P&Wn2JxQS9)v2DO;YRE3{eW#-?fG{4wPP%wmpk?lQkUyklht6)v->S4zjScuE&J_Eygz}ie_zPj z%X2_oR9C*#3IIb#0k}&LnRZW+Y(s^k0{RU2U#w`im2l!!3*v{sJTv}GVI%v3Lo^ijlak$b6 z^OiR01VxeJ!Z*O0d46UC{iuD5*mjE4fn?*+@|COvS+q1X#YCE+-&C2<) zXxl())it(i&4XL`L`$ZK@A{az4fa#e4&7^>&gG2iO;%$`)nz%KB~)y_;P~2YJ-&|L z;MvL2ax?k#(Xh3$L}GSEX=cZv-N_1?G3&kd>50cHnL^`o-mTUuyA}Nx^{S2cDkQdb z;1MU%PDvJ3&>gx7&h6CAqmOcle;)Cu;?KJ*^K@gxzgdkGEhsq+R4XDl>8-2;-7S<2nv+%z^nw_b3Mzak5`9XonJ{8Xp~EsylW_HnwY)$(9t*7Vl5(Z zk`DK+?Ffs-9tezom*4FFI*HXO56z6Q(f92uXJBAR*clvrAR!}j&C5QkZx8e2m>iRE z#l9UdsRGj<(~{D0?O*=%3z7vT zkyg(b5Wp1C`)B$k??%TSztnW`T*Aq9`CK(YdpSx04W5Zf&rCSYi6W z7ChG5&g9?Sb=NTyU``p;7-=~YXCv>vF z#tSjbN27)oMRT4@v6x#Mu@mp=xC^r~GBRj5hGN7AAZ(l$`ZJmj$4o}^vi+}p*iE+Z z_nNX#Z``R&h2+fA5rDZ@(>ErSscbCGESa3lPPg@o(CDc|+8eq#0 z%7FGL?5whY6&|l0lTFUldOVP=fHnZfiRd#1yQ8%68DdN{_`Jl|7*&fi z7TLRRbreR$#C`WdkigHgC-2_D%LQsj1&7C7dq2!yH7aJ6%2{?Vngt-iW zrDjf~c98_YjLe4Uh)R8q?L8;A_?P_A9bdR486_LL+hH~5=;&;o7qY}Fj zvOIfVXyz&F(O9+15@9mK-bDZ6qKg5y#@+s?g@|y-IEss zr*-KIgQmKAE@KE-mC&lk0)-~bH_ZJb;WQN!a)sd93(KCOR~4q&Qv2vlcFELnU& z8ah2fE3X4!3@&gw>stAkI~~IZI3x0)gX&~tWZN9shw@YT7Ta&V`mQTXEW=C?-u%sG zsg29YRW|9>KhXamvlfD%FP^Vsap%A6zdwB$R02^9jHXL}mkH_SxxT^-5v2^WMl4?A zHtzU_OiWA!GBehcd!w1%0KJhP6Ah2&XQ7Tt@CyYzrhS7?;pE;H>t^yASiH;@@E&Zy z;Ba%t**b|W)%^O`52J!1Kia*mt+@^OfkF8GFzjn}EbLY5#DvlL;k}3h(x%tErFor< z>{v>giQb1HP&{YH832eE0b0nb4d2t<+v5Nyx&azDcl?!I)?Jm30xA7+x%)5YaJxgr z7y>|ihKXjntLDUIFO-n8O9AGb!j9Q3vl2I6MT__BEM&~IPd{eLdKi@c_GmMlxXa?4 zgSPFxu7H0dMy*5u)GA*U&Q1nK0fDD=3^2VsnJxt1Rfghccl?=PVsmse!G6_|^CahW zWABSbxmdNB$Z0zT)R%5)0brEBCYyWnPYKn+;OI@Sxc6A~BiG`?H=glFywKo4OR}|0 zAhKv9gxwjQPR=tG?kyVkmq4?baf2otKa1GpZMJJ=ed+6DnDhq|;(0|dk^{PuQqQR; zn*Z*zpiRkX**n@)e^r&+Kx;@y(6F3q)rP0}1$m*i;P5K9?HdtWt~wwB>bV=hhMW)A z4krdt+Qv6nS--dzSIq8x_VOpAaaO1Mp{^LHv#2*k-YQ5sid^zfOAUUp2W4TQ96Fny zw+s_yae-T-Pi5%4tpFs?KqOC_PGQ(!o8B>=S(fnb@$lr&@t0^}+MP;XkYUwnm1=iC zj4ATl?NR7jrAFhxZWuf)C*b*W0n#|pu?o!w4d^oa!`m5=+S0{+9pPR_`vVH`O=`^_ z=MMb}%`)x1`>**X0>*KsYXUrrhmR-#oeR&I*$3O9z0mxz;4ImgIrIY%aZyCrCz{` zqMo+m#{~wRK5Y8cVJW4u7n&w|#d^h=mHE=?^112NBL>uEJ$M?n--;YB+&)$PADBSesKG+`*8}PGy~L>N8reK3IZ<$dRSy3qpPuavS6K=YDVXd`Rxi zt}5mI)7kPb4RlbKGH2(zh&D*#w?#?P7agB#ze!ksN4;&+R-FWw(L&*D1$Is|HDYrX z)i2DJ1j}VKEF&jyy{Y05@_7Kva+wp>?|26u?CR=L!S-jl7K^+k_vvUnH%lbQ7K)hG z&=o%8NwG1xGxb*46Uo8GR;aF_Q2-!nPnY~Db;OtxD22Jr2GOZ9-@`$;1ZpTl(-Wk){r%%?!EL6`(Q z*bFuW!bv+PEPyTwFG{9avESZx@3qT0<1D7*DkmXvbxFccuQ3pNJY-z#jQw z$3Dv|*Lu_AK9_*9=f+<^w^d9E;xw2A;)Et7Zr}b{?pcXG`YRpkZqe-DcnSz55b+OK z=J+3}Bd4^S)3_~)|`k~jZZTNsdd%PCp1SENo;zXL;(+W30ia#1H(!^|SJe6Qc zbFN;Ah<;{5s#~E6c05lI*`dCC`O$d+@IUwn4a=+mKtc8EGsVaqd1G=qB+&oeAVu16 zf=*fC>d(ijfjqU-Zh&*d%DCOQ32t*gHBj(_;!aEyOCdz{!RGbp#_M~FI~NYa!~!g& zb~>1SZYDPAfJpmUOuV(7PXRWm4X|!z_Ba{p5Y2j;lb2`t6{M_bl^$Y!rX3W++zepvoX|8PDWeYKIWR!t}{ETQ2-NDA`g<-FD{v9#OW>^rwRM8(`_M zFCvM)bjx;4wN8A>tL#(3_PgR8rN|1tMazvizao0~b`X@4wxinFYKh~+lSJ}5uE1u| z;&~M$+mcVF>I~M|5BgQ%ckYb)z=J%U6;}nr^t^uL0VRyyFCXgmA)`0hPZBvbnRH^C zDLZ-3d?EpHncxR=*W-YF(q10dW}li=HGigC?@|Dd_x5=z_)p``-*SfAaEgfk%mVnE zb!U_Y_`|~cy#l|%EXEKVc6Z6~3#Wmaln(%}&^gi4(i)yCrnp|Rv9V=5rUPxXz5;W! zN(!3kGqSe*aOV&E2ySz&wB5MFO7g6J@6?S}3E1H<1Z%@XS0UYQp4tLfOrQR5e z_t%*`4_t%Y&b?Eh%UA!CapS)K$U946mX4fB+=TK6Q_r=D&clZBtw#6pc?0N!8`4!i zd9#h)aB@yAr#)oSxBh3eurimd(ygVR1zUCUtF9)e)Sf5}1o;cb}m~MUybm*5_ zw*dLt^rdCUJMOOmCo9PX=ZQqy0McK8LZQ9_6;|H8mEU^&s-S@?!-G60zfBV^ph4<@FRBQ6|*G;K<(VdKSob;XNN9w&CO1?I!U#3Eor3BQw+`RQb@* zkfj{!*xOEY{<&8LWq^Vb;Rn{VZn=J?YlH7qhJ&2aCPSPoX?-^0<(+Nf6+RcmvdR5f zhHmLXFA8c|M0yk@{ex2LKMVDp8-Y@gASq>CKqaXuTf`k($^fw`o``En9Q`nvNT&je zGE8TjTjt*33cf+R5yJfL-A722YfDvq64=gm zP_OK~VCFp8Y~iIYRbKWF$ToVUl3;g|Oaf@gP?R;Vr^LPll#GhO9>5WTRei6n?(7}M z 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%0D1RNe@!{>unk`r}W0s~VfDAtH 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

    qp+3KSEb#iI*X&g$XD(tL<2Oh`U<^`wI;X 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 )B$YUZ1Gug$RWCwjXaCA#!4rsj7o(2Nj^ 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 !{ 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 literal 0 HcmV?d00001 diff --git a/content/terraform-cdk/v0.21.x/img/constructs-level.png b/content/terraform-cdk/v0.21.x/img/constructs-level.png new file mode 100644 index 0000000000000000000000000000000000000000..9363264a76cb4949ad32e8870eeb616f7dd113ab GIT binary patch literal 323636 zcmeFZdstIf+BOa-#bPbC^;D@~Yg-QpSQRKBpkrHGsb>WtB*9XQ7(%om1QL>n&W!C; z#2JgI7@~C$H6&3W3FL@%3N4sK!DK^15-cT=Y?2^hC*=HX`@S=;zQ60c>i6I8k8)kP zveR1r`4#?PQE_2V(2Bno?&e|xrSDthVm%(xY+;88yhZmI3f4Bt5Z>Qcl%XFXoAl=AA=j8_lfgKnQ)I=(DF z;q6U|jgC1>5lfSoy>{rOk=aWT%U}L%!;)|2@D|Q2&$&ihmKy*b;`W_?&!y7M2o zyF$Ka*k`Z$c5VNVMI&Y*C@*JkCW;agwM)1I8$i~gZA z|4DUKRmD4hT3r-Ae+>$Qzh8$xA6*Xl_u25E%QODno@sh|;if&C zKl=>+-c#^ZVPOg35WW=Tu`j|y4HWI&U%G$W=P3nvT-<>#@n00imE(>)?Gm)1JOysz z3QG?xEyop?5K_w1-udl{6uABLaQr(X+?sdN!xXuR;Dj&PRoWg0G5>losJjmOdT#z!!L8Y1%vQJiXC>{{HJZ3(JfC=T0Sr z|DF~+!T6_V;y;L66aSyF;jSB=9!=REeACkO|Jj@W?)>b@|L(XU{^{JGS&RQ#=--aQ zE1e#`A^tzRmL48gKI4s`pp8MFeY9zBdGNT73cQOz8XiTy_s!z@bAQeG=xitU#3$P&Rb(vilYCOrVAa1*+PSh)MZ-^Hj}idZV%PnH@Kz#Y}SiDSRbiHALF~;Z$_mR)3LlK1$Pcq^joO@oY{mKR*{jmJ8*?;d%{$LO~G2vYZ+TF8*R;U<+%yfeZW zmMya>9u-E_IqEX%7Bl?=ZwS|&S^eUB`F?oi(0Nh4BYthkq_xx6qKJ>IB%`;KH%b2= z22sDfdce9+c8cfO|5BYl4*ke^TiCH)Ka}E{>b7lu zKE15e7#Wlia`F8a9c1F%Eb;gF;L0U3H5eIW_(#IywJ*PzTyGqn5iaiIx+tW3km~~( zWD_6Xk-_d?2Ym3mD)DboUOHh8MIE@;fDfvK1Y2re_?heDCcKSge09dBmX@ ziRhkqC+Pks{|{3@Rqc@2iBx7vi2wB6nzejJMY}dusBB@AzFc`Zti7_`{XIC?xv>S-mJq3J&?h zmH(cN`j6E8VXXczR=*og{1JEj5eELAn*8C)e^-tEO;`Nk%KvcX|3<+7cY5Lv&gwtZ z%{sDA<&x8NR6#e1K|8V8M@1g&Hn(wG|KWRGjzq3!B;Oo;r#?y|D zx%V*L54#tCPqRX|{n<3GqI>cFf{^H4`Pj)~DU{p5BlmnrLxwojkGjZvfDsNBu=4n+ zaa2U8BX@c!AOm&~C1vSfpHF$#C6%Yntei2dJ<3GB_iu>zn>7-@9g;Sk7VSr&)t*|e zpC~c8^CXQ}`ZcU*YBe}*@LLRV9>OR9G2STGg&@AojO31hKA-Wn+m^i}xr!2kpl2#m z5C~_Fg3KK$FOZ#<0!_-leD5Z$<(?L1DXUq?YCS2N(D}1*yDLl z(@~4tnN?wu@zTwCZOfj0)+$3DoPCpZI2HGv%byR=d9B=f$400lrF+@iEn3R7sD)C2 zp|eOvT`EWKz9}BTDWTi$fGyyY^;Xh60=nlP>DhGOXD@q&Gx?t=6Dp$6$`Sb9PkJ?Z z&PSIzXDT2;!qg@}WsYT2yFpArW#5=FTS#T@st5b(W^eYE%N>(lSfR1l|!geXR1J;ns!vfh7h zV$)3iwXGy^8DQ$o=$F{yd`oc(NA%S6K8I(MTLZ0^wfZZ(n@pUjs-%yHE0Ng+tO%g$@*;3`nd zsoO1v{1^ms0CD3-0yi^rW%z3qAFM7@86 z!(@wE{px%ui^gbxqJ7hDvhzZl@+uNz!cmQvGM30Dx5&2Jmrbmi>2SyEu#L1-8}Gi9 z&a_mHu@<4DpEX`fC+b(idFUj&^g_b(^SKj3`H4dPhVmHUit;ab=%m9EOmzcvAJ7zl zWPYGuN%z}({jz{FApMmsPO;3MJG5xFHD=(Kex`q_U*;hNtYe0NhaS-DT{gefmhRKr zeENQyS7FP$_Hct{D;CI-)f;-^L;Z8h*Ho!#h%pDj;<$Jy#+KKM&DLv>tMoTSl`EfG z!c0?&CKsVs8~UJDGJ{D>P4CSLoc*-ESAx6qIW-;1QJK`~y=AeD)R&;aR*CW&$MSd1 z6Fv0vvWWw*?M?>DxMu@)x?f2N@Ihh=S@Nozl6 z&dNpNF=*JCGVA+JQE0$-H^X~(k0-;|pONMp$?%W#X9VmS=%{y`OFJaw(BQaP1-|*m z9?bYP>izfuTZX?oFs*-r$?y#J&Rg*3U82xe%ZA?4Ec|I#Lv`n}*;DSrHr`H+Mu#l{ zJsre63BRvZz6{OnNITuxLF4-`>eSlF+_Rys)pSc44fR0%2sYjTRa}9pLC^p-=Hokb z>LDYyJaoAC?TN_MM|>9tWgwX`wRntf9l%}%?uHb2 zqSq~$H62;$y0-nfc$E7o>_1|TKb-TNK+G*ihNQif?mRwCUNMBaWpFTk?R2qIFT`ZqSwELKDA{BdisZj zalyx0E4WoNLh#2rQFjr6M#(2M??^Nn6`kQ5+Yw(BD8qt=!yb~xlo4<>#nWBAbz)Q! zrgI{4L38Rw3) zclFA^IqULcz`=;RdP>A4=Y5wumwaqU5X-Y+7R`2ee1?E8GiZ3BZ2HHhcl50e7(z0QU7CkuDbpL!j=Nn?gC>>frl(5YOBk%7||t+r}r zZ!!EiVNmR8er#tcYmTdDm$=meDWu1!Ic(+Gkjw5^;R}mz-jTrOPXZ3DXA`h5!$j#_hGHc@H~mi5!nr}y z=55gbqLI_T>kNsurnSXRU(NqI#Owa7J!H9CEt77#fe*^N{87Zog)91oXU|=E=nEh7 zY_7hKw~{SCzH94j>Eo)>A_`&b&Qx^ZNi_QSI_YFBcLUFcIJDsU?Xdfqk=PM-fUy1a zZvcZc`_f}xKX|=UbNsA=sHqHZ9@z1Z1!wlIDc-adUZ9WjZB?0If$i^0Y*aopK%r$k zk&4-JeF5TZXs|`w>CU-NKm;%bjEf7Fk0hBaa&|t1q974WWIevyvpR;G7&?4TGfR9U zM6#XVm6?k7*`NntA-9oQ0;R0Pb8Bkjse9OY3!k$kL-2x>8$OPE?%>>MUij2yQt({U zT`lZ!g8GzqAU2&E`FTeD{`^lVxbU5t6C>NmCXhrmWYz)g7M@OD5pjVsJfuuo;LY|O z-;wSaRHjp1y=dvoquxi+{zrR)S5TM9yYzYI)Esc|!``~5;3c;vbSaNByE*nczb%2x z=|AoZFT(|fOzETw$;(0BcdY~U>keYMzRLLVa@*e}rUgOm%pl#x)$HxT8Nb;RYzwp3 z;!O!Uk{gLJF+UQ5L#C|+O_J7nu?Gukw7vLL*f2VMO@S-$|e^(z1P~LRX2malZGDI zv^(ugiD4-5ps80|+4vM;sGYQu+xe{HSV0$}NpjHLB~w>!qKD={vBykg|38f-LrI%2 z^Gc=5tyDo!r{3^DJHO>2*T3Or2&RP zK|zS@Cyx?oj zGyILuJh+;BvX2*Y`IbL5j+-LC5mXxzLZ3X#+~9LD1Fk}E$ZkjVdR`G%-hqDqmx!tz zpI%Pr2?EGO3*0hf4x;MH!+r#hGG$4q$nd#R%B~Xj=XMG(7pC)th zh#INWtuCN`=UCUt40uf$kMDEYdI+qChysu%%6)#Z@~fis3yuJHheJTcuq@=P`$k`n#xaMo zWZ|OS+T$xVv%^;&x*^#p4*4j>THm`$yZIN*{6l@`sr7p)RVOW>Q?(^xNLP*<1vnB~ zxF2l4e7EcHsgQ_zQ&(zqzO4US+069hDs|zVEVe;S$+)50ffMk1@e;n3G6y2CRAbQY z99#_A{WJ0}f2a4uVL+?1i*v=xXUp_9&s)PjR6|B58CkbnMhh$dvbC7+*`w)p&9#RY}b05V)mcLn!cI6ceP9$ z5|OG$)mI}^Bd))3oBDbP`z~L7koyhwZXvfxUFcE`rXcm|$&NArxZwOO@9YP3!pz(l zO8mH_5@f|ZZYP#oRYis@h6=l_%=?oTwX6{Uj-F$SOI;!ka-?rG^JVY*v)dY+i>>9L zCoj+oru3pEqfG7%^J-ba^DiKX|1Z(SrclQk!O3>a1UmSb!J~J^-6^eQ>yIy65HtYK zf843!(x5Rc+N0@z3NLz-&Ow%)p?(Or%QL7?Ta+Fh$CdTb!g(8|QldF5WBSf$$6ZJ|s)Q3{Ku`rB-0lx}V$c3CAqBvY2A!#XMIDUX{K2h^-2@dHg_e zH|4UZt%c8vl?9!ldQcggG=j&FT^2gS59_0B>gY=q53gO8Ngvo+Vc`1S0Qa)&H?W0v z^<+1sJ3Ev}Y3QxXoht2gWBuL2cjEoc&Gyhs^VaX5YjB&}JAMQCg@%MUcFpmi82mjO zJ>aRsKGs|;uxM|RPLqE22GJEq)k=vNsQjuqg3JPpi(nugq~2iNUex-0==RRxrs!`UyUUU0BlZn!HJJ z5Tm#?eXafrbZRBn7lxzgfGx>}X=hhnj*s?ml49YQDo)!sbqTXg<0IsIl)_OS*9wyb zmW~tvmp<;2xGak!2_q#6OduwsA7-N}7%_-|$pwB`f-*sp;!{WrQGIZXC~CD52e~8O zJB zl1JCMkOl~{UgX-jrri>iB+hf$6y5cOJ*S>9K1#iRlnbi-<0Io9A&2msX`9~nlwL7E zI`ym>oH?s1FBhfcs^gl*;Ywz|%e29U0z75lr`( z&g{VLq|6c?r8`M<=j1xsQ>4rEk1PG-W08jGE=q+)!zisDSWqx2yIc&&ch6X9Fijh0IwTS{#Ps{aU zV6P7pL;HmOtpKLmIjNk4cIk7R_Y6-w5J?S#rPYDE*XosSvp4w!p~TbCjfCu-@LIw1Z^Tpf`)()&kvz2XeRYYthOIU#;3eWX5FlCVoPd82FAzf!nkw(kWz4 zYR{Eb@QzqM|EHUl%;kJDlf=JTE%X7c(krI4X{bbqbh)aQ=5p4No5N}y%v+v zJ>b@Qx+HFp0<=#xds;@SJv2)ep1LnkDX&E{LYlZh4pAu)s&XWdB&C)P5|%f}7z zxR#2%9IdfTE#Z(XM~kK}28v&;$J~wOPTdQv+2dM6Z7%UKM{4Qk7$Zzb;pOGH`XB-o z<)7qu#=O2B7J*B3*#x-lD(w?^9p3WXiDYcF=sLftq*M12v4djmBLrB&k zC6i@&^^yfWSc7X2-K|wRFo7jZ9H%$&;8?GjVR1-XllM7jzGg2B{38V^kgkG?M`%?D z>2tnwChaMsQMcgqv)~GTHzDlxffGOVQ6iRcqw_haF$vXhDf>R!(2_loXZUCK+)uTd z@v1|2%0kDWYC7HBM0Zc2{k`;#nZfA`r<_%BX5H3MFg71=3D<*7m7pwn{`moKc*yES zw@$WMJs*Sclt z(s@y%7z1cS)teckpa~_s&64@y8SA@p4Oo%4ua-E(Pr+osL`RZ;&|gd$8~>510xP>Q zbSzqbnkABQ>9k{wpzBqiItI~|5+oqp>%|}`u@J^qiJ=Fx&|VNc8*&EmJ)kqN!(U{ z@+U4Z;GPyTtB)EpPZcIx8Op`!&7l%vmV_eB~ zliG#XVas@xtZx_A#>8AM=w=86 zmMg}|t-T&t3YwZ^u6kL8n^p{GUiq67^L;Lf!6Rv+ebMfkHvtIz^RG`oW({iM(m*!1mhIPYOU8J2jFo9k1aB*~8yACbu5L}& z-*}=h$O{Pw5kb+5$l&GqU~$5^uzUO$vULgylHuuM>C9XuVQ92g-^;~$x(qH2Qjpx8 zQllh;S4({*u%ZjgGLx*meGmm{8o!zX6coP-SU5^R*;k8C<1%ZL6dl$cbk10X4Cv0G zIRxJ795PiB$rWl@0;v+z4}hd1NDzxJa`CVd97APtv%MQQil<(%ze1~F7Mh-z^H#~G z2}r&-DcN$7py8pJOrtWn88^zx@J#YQDO2`n`TWc}*;I$OdQU~S347(}x$F$pN-oZl zlI}s#DnP=RhTS|R^u0Io9$g)ftOB_y@a>aHl}3`DU$%rfYTD3??`@K_fS#QUtgO|R z85Zv^KGj#fYj9HO%0l^bq=~(*bs;1}y=j|Us0jx8Z z=X+NM-MXE*FlfN*?l92(Cc3{iY>aXY)rkiBlwr>PE(Tys`Sj@NZ3Lildqo8REjEeu zt#arn^^yf$mNzI)D&vm|>I7jUjEtm{W*z|K;0Xu=E1P`!C?DzXbMF^{a6ZK(n5-6+ zS~6jf5qPTrx0Th;cPwFo9iSvJrylgzp`*2lOhrtFhtrJJF2bC7Xhu78>iMk(26tR9 z?qP|2ulTj+$7OSQ+n8Esegx>HRZBOK=?gv-94Ha4cNfVRS_0$a;AF;0chjWWgtO&92C z`W)l==fF}!1593r{x4B02)`7O2p*0|0xVIb9KFIbW}vNg{uW5@=N#(@F_Sk+gwTV{ z03SwFi4r``UcUqFGiS%&A%>1xt~`!XpjOF#$bhsnexda_XTtrpYlL*sG5MJGAco zTFMxKXvWxASSkw`xE_T6G)v33p9TQVI!|cqUVWBNQ&v42RoV1wHg}XPW^k>Lt1G>? zH?^B9*I3*swsL2q+q9S~b~PlzE;9y68*|86cGchjgW0X>NJon@M@S%d`n~(U?dD=Q>}X}GRaGbZXyL8Y<>m>~ zw<3$Eg_mw)1ug^X3q$`#? zVkH#D#M8ABanCtfDb)C!=uBij1>|ih=D+KF%DlHM zT#>zT*wx89$wc{^^>)^yFD#t;zs7QlkE`V5eFck%X$E z!ZBw=T-CS8ZYl59QEe(7JvSesn@BWM_O+Z0(}q+%@6y<5z^VC8*3uWXYT)!0*PxdyY>Q$eD=^i~6vl;<)37CGLl7=`wU ztUq_f;GKsmG9#Nt7+jlzghXz3DRCGN%+WJ&B%R06`$`YCnWy`Zm+G8k0VsdheqmW7 zK&{QL?>dZdX-ZHCyBzCma`PD7eNc8ZU>_4pa0NrDC`RUwEMad9k`D2}cy2{q937V> zo9t0co)+xm;>I{QTo!&TIg6StlZ-gL3r`N2xVAFH-IijyD7DF|jb!>K{*_NCo2w zc|MQ`EFN-e({f~tY#CcTT1QgQM;k|zYE&7$Dd~b%1sr6yt~r8cX0+jfpG94e>Et>$p;RQ^l=xLTiUrOfZ>kU>)XqOGmzgm2PF4 zy&-Z#jeXs<5sjjtsAAm;d^d#1@fC~Z7@V~lImkbaB^dYd{Tw@-=6^>1ss!8M)ReZY z8yWvRN3^>t?WYZ?RO^9XT|uoUuY{H`?$F_En=&rqvlwj_I`mKT??W9*s`bCP5T<{O ziIP^^P)j>ClGANrLi$7){fH}hSjxV2>|egs6H!*juprrarv2n&>eU0Aj#)w@8UXcM zJ7gN3?TR%gOV`>=Q=IGz-ByZPx`Sd;B|F`Rz?20`1?xwQQb~#hix%1aM5*Nxp0GjS z9@vnXEl2_J1qo%&(!avHoO`jT+k(VkufYz=%-Yy%@s$#Q{eBMn1AbW#9vfG$d~f7O zCWy_Eba8Y&>sE2?r$J0bD!iCY2@g;?I5XCHz;`au=`iYC7fQzEqEb6T*wQtq-@s2` zhVCqp7h6HDkjEASSi3@0kgC3D--s$#sf4!xI96kSj6jrx9FCeXFetudgpC z8r5QfCpl7at8z)w$qU??)y4;s*fqQqkn|Ep==>#*&vdd}-^o5m^k3itJ=G|e_XhlD*~$2TmgD?z}&~ia-6l8K0K*fa zkjV20cmVi)i@G-lLr66V#72QvUO_lCgk!b3v9hD*WNx5{$_>DA2Fk^1^(#8|@_`?S zB27u0D#z2RCsg!usa>t2}WsrQ3}vi9(Jf*V!+^FchV0Wwx@PBe%u! zr;NT)WYat!gA~lZ6tMyrl!TpCfd>v1Q6ly`W62rr2Q_hbBGZc5&0*J|T@2V$>oVL| z;rwP_owW4jkkyYlVI0%lF*6T0&cJVvUXEl!4~EF?+PA{jxbI=o2`}%xvE4q{j_psF zf2og0dm4yr*lE3U6hUN>P$Zv#?QI_tVt%sm*qEA3xg!z(~G)wYRP z}KEFW9@XdxXoZI)Vr^S&6wqdWCh94_(X>UD>sBC%z> z*soh0qAs`PqLxrJ)TKS)a$DNL#~0l%k2#Kim}(Phv8@hy6IJUT7n5saW4ZR#z2L=* zh&yl0{xnzES!K;6Y9d=De0eK1c!nrxGy#y)osHPT)>?eJoR?gT8cnhq?SA;Ny76`v;v(>B4Lg zUp;Aca;_%hEZGe>;Guc|CW4Y0q%JugllHfItkv=yv@UB-$iLdBa=>63RE&Zhmb;oWPN)wP1_X>UsY6vHcG!7GPV+jx%aY+nb2!{}vdM9WCPpsxJeX$xILrt6v@-r8ZNGfLu?s zf8u0a8PZ_z=?us&U3sJ2S*gP}KnFzg&+97B>D6NSU|Mc;D)*ohW2@E)BxRWt`c1Kf zB5_`(enN~uL^1?jxdbf*J#PPAGRdzNb=2|kC^o~<6>~-g0Yi%gR7l`JfRcq%4Y!&6!4HT?`>m_%w+S7P=EM+oWMk@jR#H7?SrA5i^# z6|1Lwfo)BzQU42~6yP)>KD$>}&!I5iMw~@7=~$AaEV?$C3sQI~%0`~fSHU@5`7Adm z#ywRdeyWxHyc*Spj|XET-cg2~Hyxe9(MOeAt4NzZPCI71f{plM;g>C8stf!Qr}bq3c&q+-S3#RXd2Oc)TB@ z<;CM&P_{PezG+`)FG=RneTybMK0qr>Ym38iZG87n{F9DGMv^gVzjN3h0~5*p*)q2( zb1n*}2y==2eH4PEVZ>aU$UHvhqRlA__PyZ#p^3i1f17GEoISGZ}Sa3WXn$b5(G$`zorol@W5za5F zw$&4Y=gV6qM2fXK6{HjeN6R~03-{l@$l6929FP}qFUUpG#oXb)8Xx2qDT_fo;U=tv zmR!t({k6pC+`GCHpC@fEqF_M~=1D2(a@@$n?3Z}BIrG~0(Gg)P(pnB9_I+I5`s zI#A?nrKqu&J=&xo8v)DA#%d)XO(m5O0m?@dTNPV^GT6c^2wbUSBzVayk7gxQ@%9xgNkR!Fxv~tC3pG`X))Y;#x9qpA31Ru7!;_g=Q0)(&V}ai=N|GZ9!0cJ-kv#C=QQ_%{DojqUk9}6!>dUtwl~+W^L8?VizuJ4) zAP&Fe`K?wYg>5q@)>N)d)0HuxoHHM7dTnswzs?l7O!~LN{fD;edQr=8sv<4bk`jIl z8;^Hh#}6Kkf*xR5IA^kwa{x;N)17P&`-Zx-;G6-x41!{;C9R1#(2!{%&0*i^;-UyE zarJkL%V;Yroja&`CZ;L!YVzm+S#d>@eDJ<_;qYJ@4p*YhOF_#TLDJZy(CD_19qIK3 zj^wDw;o|r-2`KFKidaiI#VI^?PSPNZmR!?N4A+~f_M8ACiTl8T~!MDZ$vJ`IHKYhYFcxCVUUYyq}n$+p|GTg(y+6N`wc-(!O5db6RFwRdx5zNFox>MlMfHJ4TVco?Hu81^qk(zoV8)ut*~=xKf(2yjcMc7s>2ak3m5Io)#o%h z(uVb$ZPM3Rmzxxz?4(F#kUl|e5yGLmGhYU{Qs>;j`r=p9ra88dCFC=P zyJqQYwk9FJ0>CE|vR7ZHFush5|u zy((14=htULoB`_pPqNZw%?KB#yJ zzbvUv{RxFy92F@`7yXq(v^Og>CHIVK?0TS!Et6kO;n|`VF1pRzDd8Ji6Jdkc#pPDc ze%{J&6Ho$l-7@(Z08T^VKo_)68rTa|MpEmx{xX2 z>bPuKPio0Fk{EV22e?<#my_c+0D4W?5?)R;yOrM)$x5fh4-DnDQs}E=zh*)GvQ4== zMpX{IdJ&-Qh>Aflkd#*?hA(+akt7MHmn?_;nxT3EKu@bNt1;R>m^?vYXQ%5;5A~_7 zhP=84YJy{29dKI-Jo>UJ{7LI(gAp!WgD5_RcF?(6F&V^)ij<6>nz^(D{ew69cgP&hSjG1I$lKzjt)IGwUmF7GwK{BMEoh$ zx~VeaGfKITxhHi-5UW+HJbAU3Ld=GGu>&8i%aMv92i@W28kX7X2hJu2JMlwqob(~36N`)}>IttwvilhE2Sor7r zCnk*jA0jb!G+bB3ksokQ+>4R%DUVSTdm=QTfENDcp@v2zhVawPFnho!3pjf>PZ@XT zP;r;K%;2Kx?8NxJxRf>@9MfC?id%&4q1s0em9biJD4M6!zB#Z zv2v|ZU_Tx$+<_!v3C=^K&{3%sHm^7ri5kkAcc!1G+CmKf=OIhrN3{3HLgd38h1!c- z3Is_9skm|ZZ4hjywXzIql3kZ}bHm-xZ;9#MOKje^DBYRaBva#PLQ_|UZ3|X}{aJ*? zgY7A%1a+Ac<^Yrs!UZLiac6%jXD0|jhQ*j8a-#yH0=BKO`nIKbk4QnWltlC1V)WliZ zanxEkJuQ_E^@0;bQocXTH6xj>4*D8(k5hR)}h9^{T2cC+PqlX}c1=;Fwr(kP~-!l8ot zGfG7-vj|{p0uS1%c`;n&c(dSDfL26(%AS>|5UvZh=eT@)>(lx#msM2uY#=mudVh#A z?b!I0FAJUgs8f!OlCbW^v@@2fLpbtWVHiK{L*0zgs0PQaHhbE6uFbxw$OPRE`#!Um zuF`Tu9mV%T(a=T#F5;Nzni=X8Q0=SIqP^;aREsdY__4N{Ty99Z3@4mEPP=XmrXaSf zlyEAoB#P3W$KV^=BzCiaK`^&db|2dq{OOXU8mYusZ}1u$m7D_S6?gR>4fGIG&}@(w z6cKLVpdPTjEjj6+VN!k96-t3_NyAK#jJM0@Ua6agl1_A`*RV)dWcFV}8{1TL0=}9p z>vQm7NdjYjx$Zkdp5cwa2mq$=r8Y`yQM??QM z@5pUF)an~&jZD@xK=8{1s|=Uo;PRGcYuA2qRz134z0x5TWRqNt)!A#5Z+5CBX0h{B z^)9jk=W8ICr-ve0c6lMl_3#|EYcK!Dma5eRu!|9eLICy z)1wt$Lt$$L>7GkPr+GLp;Z^o%dc5$OKX!LLA4=jjj*`SF^&W+ij6`$KqEf3LNS*B* zjBg6hlp?u-*S^QUJLFLhl6+hmki$d*=~u%`!F7DF_>{z$s4&*5^bzJ(sfHwJ#PPIQ zsO{B*NoEz@_K3>oCppuZurL)%LDRk_(Y17YefNg&Q>cw!G8+*X#BwZ92{UOGjlhC> zk_%=(J#Or{pL&bFhfQ;~Ky5vcYz|e{QkPD7urNPH2bG7X%Y-+c8dV_3l z`CsUZ1(J%X`~0vcp^H|p$S<&6aT)jc9Jo|Hu^BZsN#1WbVU{*t%l}&lZjn)OV=_-WB{U47I!K~hP?lqj0ox*NxWUum&F_Fn2fKFe`L z)F$z2N-v?QDo*F0jRUSI1xf0F3Xq}_~a-!Y)}B16UK zD0e$pZ0oMiELd;tU^CS;+Z*g&waJ=oiwq6id-6Fcpf(x%FCD!9L_x|E;&5d&1`1&N zjrSK}(Heajzr$+Vw!uKmAX%Eab4UwDd5J=sq{MUYaQt+$^C$H#@G!_b#+MjyOMq@Q z9Xw*|M-X(a#s?^!h282f3tpn^z+XD9aM1SCMJ66s+>$QvB&$)&VT7ifg|6rx-KW=6HfBi{T8K!AKUUDeu7PVYxCPjImk^Pm ze|O@))kn_WJHDZ514aY2#WFq{a~L!3a*jIT%{KE+r{HZ33pQ%X-%QAIwzcS^oec;P z4lA;^Hj8`eN;q||(4WOp6APaH0PDASY3B2*XI5M3_l4Zx=P#*hhXbp5mDhcZ!C8EtF%F`exWpw_` zY4$?HuMc?+HY&8&qS;Y%;okRc(lRQGat^<3{B7z8Q3B_kT%>KtObP%qV;8lo`fYHm zu7zsRaPm1Xv8hMY71gtF#jd44Ngv(7!sTL?_S@l$#-#J|9-Q!nY*FN&tnL@$tXk5X z#(Iyt*`Q-udyQ!S@mFplL~gDkWKVd@4W$u%>{IP{ctdOu%ac{VVXb8`D4>>A?-M!r zI+0lPS9YWP0C6kp?18GNCE27=DCumb@!O14L&_={`Zqb+Zh406LL9 zB9=nG5Oa@Y-l2y+`cmjHEke{wWMwiS~kIF_WQCcvG85-?~LeoZ?E2&nVhH}Vx1)o2@?j}$WFs4Wj_kXy~;MrL8swHx{ z&Fj4IFii)pt49*3i6_mZZIT*{L8??!Pd~gyuD&gCaLL$9#ZLM4j;RVJWh6*C+h11-4GlPhH*5fRlz`ilC`6v6^qlAjI3G1e>BCb=82*cDWbbZv{9QS!){|v>I z4xMfvZyy|~-UAMW%-X=zvD03xkCm*HV=Wa(p+IlQ5{C#sILrALb zz`t$YFqNyVG&gl*p=boWSiG3!)d2Kv z3nW>3A>^ZrcRThqc^>S*J8*w{vy7UvH}Pzj9u1c!+RQ}J7u>Q z{vXcXJQ~XW{~wpAP?YXSLd9^~n#z`KkYtOgTga{~BV#FJpD`0Ebqh6<-OMPVvSth^ zhBlfoW63hMA(|PCbr{ABe(v}0^F8PD{(O3$?>XPUu5+F1I%lqP=J|RqkLTm@e7@_^ zlf9i4v(@+70q${YQXdJUjkrX6#ms3`&DZ_H$7O1x+6I`v47jb~l6}*-+R%io7)nJ= zZ^)*LT9vTp4()$TXJb$0$k4gLd|AH2-cJafYAJ!gqLZDS7kJ2<^3nBdjvkBD~&ZkxC^=^a< z`ki*vRjs3*v#5oq30VRZcRsy;aqG@jfhW(-~`YAa{5Y`%#}mmXI>Zq*=quS~>|4sI3?$?Tn!Z(w?7tmB9EPSp9XZqo(F&ahaU7qgPpvU6f4!~V9|1wv60#QsF5YfIu4S3Ees6Dmt-g~d`H#}#1x%XGBRfI_Q?*uIdgS1jdHT_ zlM$#wZ$a<9Z#a0GZ4w|crU6O_E!LYfq;J%vww$WorzQN~FDBL^TN@|>u4rwR^S>Vc z>(!k>_WLflP=o?FLrIy!CBmPRirgoKds!kDqB^41qJgjZ6ptRO39xSmw}3w0(xx(=oao6e8Ef16s;)k zK6%ni0Jv(i|KLNJ#}La$fox5lxl)FT=q}ht=&n1qdI0D??;@vfH!x?nfApVDO35(n z&#ogVln0A*qF!`Gusm(CkNs*Z>i8fCDW_#>NN;& z&xz&Jays4NDqTM4)R+5eh7OxV_9#zV-1PwrC}xIy4U7MQP_sXmXj&g*7u#b|0!da_ z?|5FHfi_tG1lGM_gTL9lGJVP^QKCb|Dpqm2KFcfUF&4nJmsF>H&r6ayzzZ6@5x!pP zU&bx(@BJ!UXB>|HlhI(=R_Zok35I+bi&7lad@kz1$11F-w^pCGpY4SB)a7RcQmm>D z&<#s7fH*=^K>HMaWvc5?Aa|6PIsQ{?rSXBRVbIcjkG1>8MHkKCL3AUtYS`(5v*%3J zD5_q6o1QWl=1_BQVhBn7n-{Y<)}*FSMK#t?EZ9Fj3ouZUpDrk^=LBZ(CU`$Bb=~hP zQIt0$V+P#(W*IL(c!&^p)l@+S;KOh?(O z`P;V_ToZ^mHM;r_ffVfB=YIYtn1eTcvL<&^P;EAbsZM^&>?MHJ%9o;5Ya|v-?Uui} z5{8Y3-IB!U?2{(Omb5)ky1}&sZanp}5^cJC>FPNZ&ygnou8-kIq~I*4PhXFYg(T{Q z{2+{X;`@(5$@H54aVY+OyO&OM5E{Y!&ja&c$44L}A|6Z`_k-#9y4^izFw6?(z zv2_0E{_(oinc9n|1R8l8Ly_3{@=?M|orE+f&3VF-(|K#jr9_D_eliyLM63FAEbw6n z=}XS*&jl|YG zyBdO_5@j<#Uc_U+wt@i5hm|ehCb6{6JzsOY*iQs1H;_2Sq2{3N{{-e;P%*)D&786kIyjZ}4L8)^E zA6Q+>yA-yElHyB#|wh=w3pW zkT=0*bD9Od^2pdS(^Rg^SS*n-!H&BP?7E*~wt;x^TShNj?@+6Xb7plv#vz>7u?2Z;)Zlw%1 ze+UktFAf4XDOYW0C|8+PdpxSY?3*IpyYaweIafByj<9!1zpDMBxsp(7?GjFOEXzP6QPL~p*s}RyUxwTfw z+0hoRWyXnWBWU(GemDOI-+9ivevj-zdI-ezdR#hylNl+Y^FDrUDmlxmdJ=!nn;NpV zFW*Rc`fNI}qS8*Ds1zPrOHpH!c)wFnuU zW*LjhFXkmnV7d8TZxUWuI(J<%^MFp2fyc6}d=Fh0kxBgbOY^B}vAd|RH{t(1cKo+U zvUb7TciF*yS7%ZUdQ`-sFX@%=YvE$iW>J4pABl@w(k|LLaTarG@r8lf;_2JlWHo#vX9u+fE+AIAtzFL? zOP{9Jtp@`vTik>nh$tk6?+V+XsGO?la-US@56N1Db6@p;3YaN%vM4HyEB^u{-wjDz z-`?Rs#xf0>d7UvkvtK5+wLMuaZQi!xfS0y^{>k3L4_Oz3_;BYVfU^T*$oei2QG zwOh=&k3+kye<5-AVM*T|Yg8=HhYL=Xtp;^>7ti1UsNwp4aw66^v6mu%d}pM)TTP! z+x}jJk4={5^j?KHHgm7QgpS+0zB$~yIUHk4#L3pu&PTBb$;b7EzrCf}QDuybIv~xE zix(cNs51AW9-Vflit(RCPFOKR>~tlSmkFXx%#JbR3`(-fghv4G00`tpAK0M1d5RS}Y@ z4b^Q}3Dj6WmQ`NpP-+^T9jm_>UvH>J35>DY%H@PqCu+aZDJz_AD71`fj)p8#n~th3 zd3IE-&tj4t1IlJbdVkGln!mz7v3Ac{25f8kH_UA ze>vLMMd>Nfs5r!ZH7&M|;hDMx^p9cwEm`?>YoPmDU6ZcM^!pewXta?s<<-pPmgJ0} zm1#%{?8NKt(e;Jxt%ZTOsKD+|3t3qILD}`*UvcA_@%&q(jjL0OeFagO4k7o#;rAba zB4(iEvQFF(^oH60JQq8sB$lx+M0i}sOlWrNw+U3jp@WZ2W`A7iau&K?O^DcYHchk{ z@TkDzCRFsoQkzG92fTg?A2oA+m9SKhO46%vf8u#AqoqkDS@@f1;*!j(tm+eT_BRX6 zNiD0nHcwA$D-ir$H!8#~3?I(1SFN$`hy0ZkWxJ;z;AHa`=C0FS#CJe%tP70RgIG@E zsj(9%GKK{{AvkV z{#L2F+bj=fOLqPKvX_d7&7DG8DFsfKeO1!$?kchqiclRN?|98nDeQpZ70;2K(0!hq zRzho;DRU_Ysx3G0r7WXgDgQI9-_`?Pz-=FS-5wt?a!8u3;?tm0V9z&N!|bO%gH5?D zdo~z9zM;1C673lp-J!<^lT=PX_SR7{jLZ0cAGlGuKw1<;mD0cw1$O{mt4m#@oE}7- z97Mk0n})@Yq5NlO5Qm3$h6emRpi|tWSGPvNn^g?SRij3CyGN+l#s%7s^~C^YZ&JdjaMwi+wJkNewIOQ5!o3uo^P%Ar`mNA7c{$z*F`RV#}W>M7p3*T3aO*-_Z&(T_sreaSZ&j`EmM1hW?rK|3kt7+}yaaZrhE0tvb45lv8Q3R;Te zj_w9*6J@7AC-)PWv^Dnoy+5QSXx1_`Q$FL_x=*?{?lAnR*Lr~{wHftg+)%AevHBxu zG1Kc!Ol}+~z^`V3R#O)90%Z2=Oc?ukT-B?P8Ockj4}jtxlX_vD4F*yMH3&#z=o;rG zAXWR!+XZg3h`GQ&P!<$0qZ_taP+u4Do1BIDxJ6Y6#2odZ%l?mS=3h2Fb}Ui&sZ*De zh3!fb{!K(`e}Q?~iIBuW+ib@QUNEOO3%=I7nln<$Zv2Yr1jy{eNu*2clhDXsG(YW5 z_D^cxL}%ao(_(WVbEUAC>bNc*D`8S5JTAHfI9zRC=>9exI4t;-=1ZE|&6)C7QxI*Z z3T@Zk_w=*46X|awvm|j9kKCAEowXL8VLt|Ye8p4z0aDRZPc^S5de(`5SJPBv9vU0+ z$Lod^K-0*tu9r%=tfaWj5<@C4=XSbfl=vi~{}h7pg){!%%!T}_)ij*`Sn6Xu-F>X= z2#l4FhX$ch-0(EaQ)D9sHMGxI?2NRFonnM)M@$LYa-iZ|Kt1Kb`nO!8Zhws4W`8)@ zj^P(-GF@in)7*bNKE5~9@losh?|b=Uxlg84c9k|+m<7aDj>-YO8{eTz?cO+qtqd*R z(%wuXXX?I;*WcX8XO_WtndMPli5#zUPFr$D8@DlGHi6O4m3?wy17DDhM})b;bwh9N z#2S=3j}*@8z;w!OB+&&$zM{7TBVNLpY0M{tBo`sHB zp9YB|%d1V`(XV69{rq1IyvI+K)w{hugH~`=w|0AA?<}hfua<^@;gj8U53)&i5x#pY zCxg1DIT-B_jT=1(JvTwLRJHA|(zAwr>eLU;!iD_1A@?h$3i#RS9u=k-k?E#9vz1SS zxF<(saJ(Ru-DPLmw*8*1)I48P-v0-*PjDY&OeW20PMCNgTFLlGvPv8BBL+`VH7Uo0 zjx}7|YpMUrE`qR{hgd%!MG7OWhW^IhV#D?cR=2Z22GjxiZyl`Fxb;QfJz7*`utY?# z#9epIC&8rn<;zB!{(4oL>UQx^0(L&B0g~^U@nFB$E@?FtMVp7x z{-^KU>~R=#iir+PUiG(OomF+cknvr0*9y1oJ;*R5tL3ihFvCbec#M`6rb`G+y(jcY zVKdH#44+bUD*Hhp87>nwnu7fzzUA-Q>i_o9!`HheNyrpeZBdl5owZ+Z`xa1Cu&E)x z|AuZ{cc5ki_=tYipEu}$t6f#jCEo8|Z_fB`sWms{AnUo;`3bkchNXBX9P)Zc7IyJx zicfR=(vw=%8&)+B<7&BkQJ@)Dbif=_BP2)v*Q{Y1slSF_OWP=?3@DlXicrXs32y==y?=26byR&IfH~w?$FDq_m?GKoEj(Mn!1fYGe!U$&`G~`YKA$} zqO2B0pc{5m?p2}(*-%7x{DaZN&A+{vRKwg_tlUOH{cBfzqc~}vBR!=et0B#5%0|zP z)TA~^&#AN-rlN(&SHATdSmR>K|E|w7YsHy9n!*{cor%Npr@HZ-8~sNT&Mn3dWIqe4 z6qblFfe%hJ^yPgHPmqays>TCHoI)MhAQ#I6<&cKmz+Rfv@{x1U?w`g{7cpSj&+8{r zFAt{Z)YX{TKv>SwBUH$_0h9aOvpb!TIr|vq%U;)IYx?nqDeGbE ztfvtWK`e>J8^QXU2u;Hy#ozsoQsW|C=;7JWh~MU;t^dkL#{^Lczj2CI<82m&<^dJs z{uXw}Rv}o}hUj0bqV^cSa+R_Ztae&9zMjF@Fy+%S({%R1+td3e{ZdJHYg-x$ITa%2 z%c42XiT;m#lhy%3=&JyX;$+AxER6N6x-#?66BFbA(69qi$D2el$nA>GzQe~pNH7S8 zDpprWKUS7|N8BpLpW2*syLj&DMRSYD9Q+@4RJpiCi_>vnp4>q=5d zRG*?tO|D}C(*>*B9meOJ>cRzD?ab@&gR9;6-oy~x!dmd(6hcvOAKQp!$7#9wf~c*Y zL}~%IpP=ByJc#vq%K@!ij+M>am)cBd_ttlhsXAZpU%V63*0kiipOi9W>EB?@oCcqH zsOfOm)8XqL^kex;cDl(*3L)v~+HB2}-LQ5=kS1%rCTPUADy{>haUL|g8 zUiQ-Cg!`3-yKgT7E!L!Wb%7NKcr6%N$JJ~|`iF|RP5;4f5R9*>PtSeoJC%cx?6YgC zfCTbKze<0=d)kTHj*w_an$sl?pvfn+H+%ml$FD~6i`-Nz3OTp-V5s&6 zzG%uXRDaRZc`$4ns}8ZaFW<4a6f>`ci-n?2Zx1fNj~L2Ypn-Uu*y~H9JPn@R1vKPs z5(or&K4q4(Q<1Wq0Q?$>3PVU0K_<-*u53XdsGn?)*PR+PwoL+@c+q5S+h*!t@wnMa zsE+G6ZPK?epS^DY?;I0ew?KJhIxiqDFpfa3KLYX6n1=0ppi4pB?^4KFml@zg#&pJH zTl?vSYvdp_wZN5{bklTnUSZ+dEKUye9%2d=&-ITRi|4K{gm@U^%cgz?d^p?O#DQ0# zEi;JXhHO^CN0;*y$ODs_MF7?Kf#>9kTiagQh;^3>&w1RF^3bK%)%vdhcO>sZx;0w&-`~#5=oS2=acZ zk4*IT2B1n>va4XZ7glMN?HRdRAr>ZKV^6w?nKDb9Mm!qZF)iC8NjyQ^o0rCND~_W8 zSeG`7lI0Qb-PR?tpAzMF{o@m0t5ZD)r6O8OrRn{uNl8mu^`FLQP6*=(H@wg8%?6Uz ze|{?QPs;t_^4G5XZ)7@~dMTo}I5VjGm>0`gFr@Ys5^F7Sk7+|?kd4NwGx4LqUl23*g#mKbE~4t=`a?SZ4Lk`HKWQ}|mMwJsXRh%e z2dzLUJvSHSQ?w>oi#xq3Ei}3yy&hl5QiaJ(hIF@4W!_<%2W6Fvzpa$V){U&;hH<6p z8R3Wb>G;QMc{j_oL|oP~YY@5>pU zxoLUb&3O8>UpS(xD9r7D*StH}&7++XVczzCdCLS}8gHB4|kJl>h za4=kJ{Y`1`nj7I)ttni!$$ar;#$Jc!%PN1KJ`rXjajY?k0_d_4KNuvH%~JXdkn8Tt zs~WG!(*2^E2(t)|b}M!IsQEDclJvcoc#q{0#O5t!w=~ffz`?FIv#kg6B!BC0$Fo&9 z4$yUH6cX|yk`S5iv?x!FpV7G_B~fP^;S06hUwyE}6>#wAXZCP-a}!!Y(Zzd`;F<#nB8iSvWqXIQHz?yf$`Rqs7&p{oOO5Q zdOn%9K)abrGOWcNfD~v&wF9LRxmf{N3m9w+N8vCfb?3MK2G8yvj1i0-ngO&t_ry9OW*e_?6HM3DR%(svrMQi^pk;qdDT66O(#H(%d9&Cwre#Mg8k;) z%GVk_QZn8Ow{t%smRV4x+K{sbYwRB!%eIiD{20~aO;w}LXG(SGtiY6nMXy%gBB|eX z4r4Z+k%{Py%EC}qR%>-*(DI;X5;!E>JU-@$v-BRfqZM5S>v68LXz z)&J8adb#h9mp{bci9gYAJGj}JM0n#{Q&^7t*mrA1PAd)7Gg1T&vtUPF&M$wR$zq-- zh4iDZp7B0NUw1j_anS9rXXAtxjvLyH*{jD?EV6_;WNMwb^RN=#%O0qeQc&dD2UUZ~ zIoAOMnFEHwkpS^$<~Kn+nj&g)fVgsP1}xVr8Oh9B4UQQ6ddXHq`XXq9Rg}7rA5P*) z?mn*~l`goKp(0#yPuLdVld#%H7r3K0vCcou$-7slDXMkXrgcymCdn0qMH{Qc7?ElOHsHfE{R>&xF z8lVa;e>X*M`O;u)!~Any4)PV9OY9<|cW9d8*XyX69e{hs8uR$-5>4PEvub<5-P=tS zOHJqA22(5UKjo+;LP_IJ*4p_z7tv39{@w`? zLmZ3KxzrZOjfZ5ux-_OmsbYTJoX71ba<>tt)--cT?+BH{c7JG|MSaiRWIuPUd3n(^ z`pwjJJT(ncClW-a3T!S#q!EyXn!>m9bilT@Y@YRu)ivODRyseQyJlD^UGL?T{l z{-xR0QpNzEf-B4=J+%ND%`V}xeU zlk3({RfHE&b#|w;)DJ)Cwdf~^E@9-uxlraY?DT8;`Gjia zY;U7$?>imbH(Pnj*YXvDdW!Ln8NnWYDK~MUL*ip0Sh2fkph~2TG^_kYdp6~*|6cN$ z$d+qA@0tS2G-$gS()+L3-hR^%Le@WTyU#znp}(|gmB{lp9+;=0unOSmoB85O5HH~q zkH6hh-kFqu&LqVW&0@$U1GL1-_#Pax5bCI;NWtka%PD#ZeR7G#oXN*>lco|wj8er& za#~yb#?an5tsqq|ZlU2XFiDAk+E~h|G$@8Y-rk;VOn7~Hf7o1c!+ZjyEAEww_3Y#K z@__CJ{z%+>xt%VinegIkl?GPNWZE3FKXQItS}2@%HxQ&lJL?f|0z`lPXHp$vZKTjP zCc;kWnU>AGlV}yh`I9`z`7cEf)YNk0Hu{=PnAlx^Ch%C!+s`1Il3wl>S#o9SMRA$1 z^1`dzQXaF6Z_UoCCH;imQgZXM`nD_27U!{$v`Q9vU$e9jEh7+@mO7yg8Z2St^QpK` zAKhx}d4_koTtEN7#|3(Di>88$hr1f64!n=E0~rRB8^FY+NkiV_s)V?M2S>HtSnTKK%|3@~ z*3d@2CmMEIy^RxnBvmQLO<`$8zWZOkwxZJeRbE^JBt82gs^<4-FW_Oz<=i?v$lZy` zV{g12DqV4acP%BOZjVY*Ozr!%&G7F0w}=m=BeziRIt<@;>_niKN)X%J$c@{P zj#zD5jR}^PJ6><=(KKMCwT&#B5%={Sl6sqOFz}+``OQ*f;=bC2T*gQPzrd0|r05YI z-uZ#9axbpr!$3vRg7=RX4vsY}7Q!Iq((8(Ft>=#&dR;gghJg0x&z&B*q&m*dtLK*a z15GrJS=r++8i)mKM2=To96pY$Me23IZ-SZyW$$~Nd{oRo?9Nm#11T{~yAT^h|2*rq zOU=SI^>Oz@H{2uV9^HYFLnVD+#0t4#SSICmYthkqS%FmYRO8EdKA3y$TV3haJz&0y z&!-EY{xoh%rQLU|z|Zj*f*OS;{*T=LtZzQ23i~}dtMK~C**IUnWkP*JYe?Q!Es|o@ zJolS!6;X5iP(J2hsU+?qTIgTHI``h(vc^4QtsiqE*Qgvc9I9Qp0TJ8*57J% zj~~=(shFXf$JMS6cE&g>g@4^}>vedLr}&P=^fL-xdg^>@E2K!r=c~cmOP=~Hn$v=5 z>hEyCGR6TG7bA|KuwWQkQzhovHD6>_WKEGyn$Jy}=I^>|ZlCUIh+T||RuQo~vp9PN z+5PZx^mw}q_ZYO(`SG+q#H$;x+dWp6aGCq)mOc&6ybBJdem6NBJ0Sx`230sK^(Fx6 ziWp8wd{LQ$H&-4HWw38B9m_7JxbA@Jp0?&o`}4!S%y9NCCnpPb1~sr*YE`5=0pC#} zprKGy?!HLJKqzo@b-sdv*EzfP;q6+ze_4MmE?{=*)o8mrrvg*qIC^D9tM7ql#J7i( zf;ZLK+BEElEw}`7|G@k@GO-UR7r*UhU4@>M{i(8=DUuHE)DMk+0TioR1Gur`y+@a% zg|`10xBY(ik{UB&YU1iw1pQN&r7P0kAGZ1$g6Mb^{*=5ZTE z%+^8|=F!4)r6L#mw&L+cwtEc4o9e&UGCjlR3g}C}v!z4-*i!lj66p7~w38Z*yu4QZ zK?E<{ReDx9FX?U74$Ke%mNVByYz?_GKN!ir5oBTEu7CCLMH6^c{-|1(GpC|Y zO|8-W!>`Hxd(5m1;=u1CdtCoYa=C$*rq(tI#e+PYYWtu+`>f-a)6$csha$gV9vhnR zyF2w2VriAmtj7j<9&^w1;_San5>)nc#b<^+#AKu`KmGkUays7?aCkiXC_23NQtT_h zVH=@m&tBLaeJR_dvYT6oMRq&qE_YAa&-RiSfyM(6R8PTX8>`1lUg^WSkfrT;on5y# zGJ#9jc*aJ93>Dl>dNdytOaoEx#_b&9nEBcYwdC-_?YA3=3v}7NMkU&jcmTY^IzN=C zMomZ2_6^o^DO*M{^T3!Z{81zDO6P~+u1=k~N_O0(B6ru$`Z3St3xCp~&C`MH#oA$t3o?TuD|RNy3Fu`eZR;eM`A4tA1md?*$y7 ziMQKht#HZ&Hujpaf(7TiYI0H{ldf5I^0a|KP`Ox~T{k|_LGIT$H zv9HT(x;tn1^zSm`Mh<0i`#zEN-#8@yZbR}XPaJf+vMlp?|21(**@t~HTCK9!@rt`| z?v`Iv+hJR^lS_eEV#Vl(0N1+WRMVu7=xqV|U*mzx!cTiF{ShnE!7TH+o11tCDQ+~W zo^yHcF~M{%C4M7zC`Es(|L3i-*dAhK=OulKEAsf-)+2Rbr96CS^mu+FgR}X=V0r~} z_7}+(HDiMcg@#-)!Z^jm6N6)I24mMoW2zFew04*y0`WpK;GeXjFT%_hQ@hT;wp$MF z3~=4RN<}Qj%BUQDgLcHK83D5Gw4Q{Vm_8x5!}>r#=knGSm1u`k??mLo^JPld`9xUk z3~1FqMSt774fg#V^ZY0=gG_Om-C)N^!W9{UXA@clYnN)BAnTpcGhYq|I&C>^R^#IH zJ{vIMB|T>ca6NY_0|?PGM$^%P&jV2M&T3B#ck3QIYO4FP%^C3w zjda>sxv=7ZCF^8wu_mW;EnrzeKcA{F9D#9VtAdmEKk*Af&bC9G1jDFz9{>{Z1}hQ~ z{e=6V_pBexZO`UCQcApBQy8#ISILyO=pe=KR%t^(8I1S5DWZ~E!t4sM1Pkv%=-;aN ze7mP}wSKPDsVs;$zWIt8_K364v^EyAz(zI=c&}0(VDqqKWlW=gpY_0+dBP(+C1pXB zq#5tZr;N)Y=IUqQr{Ee+Z3Xq9fydM+n8$BGpVr{8AQ%Gl8cFTWU zL?3iCTq@vH$rIqX=M8&fD_-*u_GWSrVm;;U7vo(CVv5KKGXBU9JMNQm<^W11;Z@{i zc*$jGNIPiqcBY68$QZEA(^Gy_tb|zn=xnyNJ~>N6nE-{jD6W?GLeFfVJp4CE(0GIL z;`;VeC(K*R{a^3Yr~%8AxCAJs>Md7`)l;Osh%F!&`J8C1i_&(3 zmD6(?L-I&iZpWQQB5aPoLeMm%S?nr|s3+mPNR&Yr~RzOdW>%;ePig6H{WY4K~e zcayd$c4F!P%oD@VTS|HP=bwMI2D;f%AFBL8mGvm=CtqD&IEJ8R)K4@O8|S-EX237> zxvHkU<@EvwI}9V6pP@IINd4`SXogRyz#VqP@4b<-J0NfU#Q+Z0?U=`693#bcmcfpr zplSHvQUPZEH4zitX0|_(yD%lm$8~#9nJ@3`eQny#G6u5Z)0wcRl>Qe3t;vCu`am!2 za(Op!q8(fQzNnL$RP|!v^w&vQm*%aF+1U?&M?qsvo!;Jh@O|6RbF~$-^uq?rb-#&7i`xo2xr|_&lnmYe_bByWcR=Yx zk3`!<`(1$+KD)++aht~+Kl)kxl^_K1}wbM>PL_PHxxNHgTmtKm<3q zgsd)uS26bDWVT7v%sVUlF|DAVxuK23*z&TKKL)e>U8>`IUKpHyrCp60Qra{$iz+5? zSGomSuR$$u*MmzXf%;Ed$wKER9l_hl(r5b!O0_cL>~lMOMxOi=|KD<9lU#4&N%3|8*SDmBh;c@!}3 zPd63_%fow;FIi-3w*oi~_PhzcxbZcrbHZA^hHe(9f4FigJaQYBU)m>YrN* z7y6%hui0C23x>R}8KTjBYi>7v(>+A&$x0w9bQ!G^@C0h=;co9U>kehc!^n#YT|h=n zyWvbFei<2rKMlHN3|ztKyCtU)T4dH^eLevB^EBfRbyMcEeWdMGQ+1!-Y^vaftQ%z? zNPp0*k;R51++msOYo4ir!@p_ZNZC?&=c8i$X=O z1FXdIB&sD^B%a9pfn6~xKD;76D9)DH2c@|m%udjGMQIjjy~8!NCeZ=Hm+7q6XxF=L z+geMxZ8~j?V`^1PFYEiyCnQZI{ftyIFsfx&G1{J`mE5Ul@VM_8Pwc}mkApoNb1^Qc zbPQ^_5zNI|R?>3F$o*ieY|DRZ$?K^^&@4|5{{KzZLj z(9>Dki(#D?z^50>rgm=_lJ=NQSVv#Z1i8-S(0SE0Wp~KI17qC3hL6ehqepW?Det8>X?2%MX55w% zk`HVyj{tlT7l;4w0Icv1x3IIz8Ez2}Lg@@Ht4n*=l~c4_A=c@&O{9X;&b9=ePMnMD2*`-r z02qIIR@G!(FNM1|s^q78~Z)H$ME%R&K|Lh+pUj6`Pyasi=PhJ0Em8 zNH8xYjlb5o?%wlk{MFsJe?5^4O@wg5Z|;7tew?J{>NBoHQEaNAnQOi5Nx!1iyZ?hF558Pbo1~eq1l7>pX$Ups}Ht>xhou?!6 zly`^Q?vGtJh|1-Ier5U4-gHWyVGcaeZ&J7A*MYD5cFqX~ z+nj1z%bAtLHEd54gjSZ4t3|xT)susv2jFDvLS=H(_=xQ-&5O0+-j<# zdvc&-aW2!r$Qj?N88_F}dO^*>YM(hs7BRaOOB|a306TRKDY>sbxmdL$Aafn~F#I9x zdn(vCs>s%L1(q&3Ib_>ALR_Co*3vJNt{603br_oZY0WwjRW;BEjZK~pD(kY)tU^Sn=nTf0mI8>k)5_=UL7^5=WrOrb)5&OU8`~9axn7w@~ z{y#P$Mvf%5B|Q;UtwMem_7C7xhfwf}f63(8olTDu z>OQ`%UG-+aG+Ks@@>giU9L+B6cbbFRPx2F3>ympd1pSLvJA}C9eMYm?)iY;G9gh>N zJRBH)+FR1SEW%!ZsS42BFS@=;^i2h!_%Abg`N=j3wTg3ZA8+$(Gk9eEUs(rw!?sdR zx@D3fxX$Sw1|~XvsmK|-i>xxG238^k#~O3~$s?TstDC=ewgRRrrU_TAJUQ8|Vq|O3 zO36x^j}moQ_O|BN&DOKUnmwQ^0X~CzrJ>vCtNa`-leIsmyT^J0a7}Mu75(8LIrd3q zpOwkB0TUzm!aQq#UfKAgD&{+8OwSK6m^)Bc=}iDyx7U6go8E zz8qHZwQb(5D9zx#e~nVpT8!9TO8o~KAyw%>2tt-6yJZ4plot_PgbPJ3K*ha@FE0+R zTT8CwQc0gU)O~m9iByV6Re5Uv0)!1?-!uWZD~_10g1Lu zF%-KSgaEFOCrh1nLrYF~%BbSITWMNy^RJp6a?>9m3pQ`NC z6`>x_L~=hfcF&(Xg23m172Bg%kLY3?7khzk5Syz5vQ0kH=zZ4>r}I&75;{sSdq-_O z#N=b5+P!!!` zU@+X@*{$|U`%GtjuFz4bc+fJq#l5<5`Pl*5>xx2r6lK87W2N4XL!8cy&;N{?2`vbz zCD*i7Pw%f~lGEEruAL4EI}*3!JTkHVjm~ZlTlo!XOO-AGkBTBuj^+6W&56Rqa$i}h?%A3tr#=!^EmG43wVg+ zf}7nJOyg^cig(?(EpY5sGiehGg9y7A6`f3#WIksOzDqhi#PA+yEpqUQxeveaGnJz* zrb=6~3Az*hp&2`ghW5xMOit}!jNK|9R%3(ntI`%iiVU`mhA?XmZDed{!nvA{o*YIV z%E{DBRDsXNfB35KD{LC!IE?)`uNOVBgln&w_CP|Zag8uatPFHI0@!0X_b?k93?=9I z)jD$oH|y8x39|}X-BfqPO4Ne8D;(&~33tD3 zJOJ|OVt@|-=;8YsFEymmz{IIoOT;V$(UUhSOT*1J-B{Z^{B{H7UV?em%hHCevyayF zjW;SEp8oLZm-KCf%0kZA#BXwJs^mXtVzdWI^0#Q>$nHd)qv}G2yUTP=xK(F*CsWbUfOhLcZ9mkJDh z#9aE>kM1Q>MpnpUG@!2ZRTDoN1{tr3sYjChhiR?wI@TY8rOSE!oy1BjI_%J9Eub;a z(y6)MbD3Gd+c_AW(9Vekw#j|xx;BGfDwg)D!$;HVj^{==iT^ZLfU+AHt}KRs&)r#N zi>9#4NX(d_xe#M{%KHy?Nd;$3P5mM##3Ux!U3uXJTdl-cv};Y7egmsqGsM}{c-}Rd zniTy#G%bAoYO_BJ{ zJ`_ibI0Ql*ErnD1s?zXC{Z4qcXLO5Wl;KH`uAchs!+%7mX8U&S z`j%8IYQXfokgwA(du{ulB{`aL7h62f^fkWOcUL2+B&mK2f%UoeRQFGFjoZf4z@OG2 z@gaAL%VwlrRYl?9i-FlUwXU=)l4FxLq=iJIOA)oA*#K6x^QnQAL#Cs`Ta2=#uD^wd z=mWwt(xKNjM2OS-ic;76tU(U>Jv)$Sc=x_6dzFKaWu7r$yEu!K=&eluKuPau)MeLm zJ@^b-#4^6lIz?&j_-q-B?r2;hU^PR*KVAK1=S(k;J6+ftN3rSi)~u&M)}O>=saq@6 zA+bKqbz+GRFIRw{f07f8vCO)hST?#50$Xhd+I|z8gTYfR7?!s zq(qYkrkxq+a#am~zoWTuXkD9#vm2`*w)vOJQ(xwiRH!2_Z*Ad1je@6*%Q$Lr?QnY( z&H_QHi+L8~{AiZzb*o9|{N`Jkv^pY#nP-@(*f+}JCuW5-_QPdHi{JF{dB++V$y$(s zsukP**<57<9xj}eB{WE|&44KGnfIeg#L*;;&jDn!R=yse%@hQkrq}+x_Bg@U&o-p{ zXE8y9?jZvV8tMTtU;^%Vs;&EZ0~2XlxuG`l4)pg3lmV8 zaL0O8>e!&ogQi4Twvl}6guUZ?v|GNmJ80q~lulm2h91~+=488^P0YDL8X+mYvp3u* zoR@-X|BXvdZK3~56`I=ipE!8~r_Lll)!FCPoONO|DK|~j9j)t%I88df* zXb9lt=28Z#QMlqCs1sl*xogF?GA6&61iwb)oFNr7r=Gao(W z1(kdFHJ^w?QJj2i!)iLk!Z>$S6`vT~x#(l-s-HvMqwRkEy!=M@*Oak>o0T^!??k+~ z1#%;HTD!_O>*vL)92#8P;mk0McAtq*9kPtIVJ)_s;StN^%|rr=on4O#)ZsIsxN_ED@Yp-vhP3C1t#n9%b-d>7z6Z>{L zO=wYmD$Aiy}h zd26+*YUc7W&C<#huhc3K%W`4l4I)|zzEC!o4Ki-bZ(87o{gk_A{~-Br?wJ$z!i7GM zIUp)yhs7_iO@FJb9|kEUNaBOK}6M<8zB~4``(< zCDL_WLZ1ALJ^6tz@jyH`xQ+@pGRCZ4PgT+`7`0FE;fw`38I6NM`Jl~}-m%mqmiNZB;Y zHNho8K*4fBMLl{Hpr$6k#X*zu0LV)RX(dSa_4e~^Y&Zt z$LFD-auX{HpY?BV8wc8~ngSLqLMTtTvAHjJd)C@8Kmc5xE#G# z#7`m>m5A*TQM~3CrM5sq^o))Cd9LzZNkPmsQ_++Dn^}lg!{QzD&#~UfT_1mV^F^Kq zi&^u7*|F7_-rxF}J994=Lnq)co7}UC{Tr&IcCWI?_ua6Wx#_uzAorJUhtt z;7K}0^fo`J;Y^y$|BhF#t!$GRazx(oF}Wx6WYGDBnWR&hd~U482iCHE_#WRQ`-sDR zPAtg@qr2;GhuIc#?*@P^H(Ptcr6*VdYQU$SnFF6zaG9$t>xNo>y*>Hc5%&`P$BT}@ z)=nfu-T@kuz5ze^VzcD{Y%RvqvMHY68rku!NVh*BsdI>a$ujW}v@ri$hT?~xuV^BG z3}l{e(x6H_CXt$MBLqRB?YXL&{o1ikMsZ`1h_xX`w1IMmXPOilyMt=y>vM9)2DPii zkHM}jy;sb1+oxnuI?*}dS7I^V{(`O`vh+fvW?M9U;|L$ zcuj?BqG17fg?6kWWa@t9Xez{LRo-@^%+}R)<7fRm#`Yb#9XlISZ=H->i`U^8_q>`UQoQ zP{+EI=C@Xw1es-KKWy2t_gvjsZCUIQo`^lZ_1UHOJF4O1hs7(uGkZm}&}A8g$$Y&| zT*chOdpEZpDZeWI07!VsV*lTynBl&B)X-A$^NO=i9qLP+ioOklow|2+>Re}VO5%>S zCu%c&m;7ja(HApq`?L1kw>8ddf{J39Clk02(2-?tLr+dojieUfq-f(z<62`9&LZF8 zyzlLLx(^v#cYoiOuir~!UNi^am|MHl#`HP3dk&XZuJ+i$Q!d-(dkiUUjZvh_ zL4JqzN^8v2qq@u^*;^Qd<(BBA%%%B2(ObNIDU)zXhO;}v+&>*rNsr_8_HF7PH-P83 zx8)It6L2nP@aB1PUD~M}7+f0jXFnFf}*_u9Gm&0DF@0)sX@lzU(y5bKI4=uJG?e>?nQSap1CO@zPfkwlQ%uO z@lZ_*){w|+)sZ0WYO=&mpShyhJRpvLN;#5O8MIenD`*n+17d`kdnB)kQB1`4g!gWl zKE>Jn5da{-ui#4v%cBb6vvkrAEsAgJ!HRr@wQ~A5SVtDj_%=X3?2am6d|U3E@&e=F zt}>>ej>tKP3CaOuv~XR1Lf!aH(@mbv1LmUu#_;{(wA5AWZcT;>;wyU&u8*W4`}cHJ z{_x4wAiKYa1|$Yk{26gpq{a;{-H^_bE1r8`ZpuYdo+gk+Lu(Zz0A>(gY{@a}Q_-rUv@g#A(53gVO@X+XjNWa_qX7pKu+*w)4# zs}aiqMb{YC0XTh()cN${GOj%7<2F`sqP##_D*9<=>dVzl?8e1tW%mZ}TEcdMqKRj+ zxiwEy?NG-(TvAZIqvMQzZhEFwFmT*xd*gi8_HRm$##X9LAS1J^@A%!(2Gi)_nu$&E zg}U!^hrd=G)26QXc02wxgzR=5(qSfQa~>0Px+7zDNdVaQwP)y>iSj#a+HhpfwU|Ag zNza`@qa9t4%BSENtVh>Ci<3sZ$j$+LVHsTY#3P77*tqnJ@fE=13t!-@SCItB=rIgt;9`Bh&1+@Y0;%SxriQ<300Uz%^e zx9EfR%?3lBZXUb@JG(#i1)?WkW@_+us1M;ULs&^Gl6cI)L-9km3Ik_2ZcK397&8iH z@Y~V$41{^64wz3WCmX)c(lzh!WLIM`d#7@JS;0qcrEX&ETlU2Y%;;BCqI8kWMut>9 zMylRkZ|n85rTtFA)TH^&L#^xXbT*`0k?I@Khg|LDs)srKzSEtXLCP8o>EcOO@W%nG z%=?>Sm@fe{8Sb4*(B1cAnXJm)zNhvjJ$Z(Hdy6!DG;!)#MpNRu{_t(NktdGS{Cze} z|KSVkjNn7ngujV4{1MN5wtV^F^({#c$C|!B0MeCRDA~2e{@X)EX9xT6Enn?kud_dD z|7*zi2afF+KDz76*ZXbjH|Zlw+>BF8%!Z3xA)u21t)_Zzz%i%Db5k!B#?i)k@?%B7 zYt|17RUV68Qi>Dv}e+=W<_dVDXT*pPwnc(ip03qBav z{CZuBxWDMkMUFn@@S7sAOmTu_rrYjeIrh6ZdbFj|hP=eR^%v!n z&-vYFQ-XGryubZ6rEK{`!=*uD`O;|YyI+O-SluH*W`3#3TDNs%!sj^`dc{zv*BIK zcM^P49y>CMb}lNqFuyWbl$X7d{-88-+xSAAf8$Kb`X` zaE&)8>2ckQjPV_Q=jJl|xvr4Awh3c-oPZz?eoncQ_xL5SA{+Bv-@$V?p1fUEGkJP! zHw(F9F*7?>9%PK0cz^upk1fwB2t!2ORB1QIN^~#?QGQ^}5zLj7H;uUlle4U|VcA~p z$s<`E5>}1kQqo*ll;(m1c=n^C`t({ekGW4tZ#}}{>Pu*;bM7?LB}AMBMBoY>0As|q znsP7ii%aa#vziF%HO0zAE6?PlbBUx+?Jl_QQ_-&$lu=-CHN>xJ6T`8Gy#M*B=gd2QU&suiFGqr}^3Z;5*k! zepTO$5p{0vbHc=~$KB6`kKgd4hGmwdEwj$|ozF~q!CJa6;(F&hkJw_ryw&KDO^ke+ z5W@N%=1%a-%b?w%roNXuXi$MabGn=JvZ%w>rpW2d}=lPmm{ zjdc^~k>Kx=FPG1i%~d~f+gkt@(ZKA#m&o z!-dEf5L3qYaF(~e;7DAWK+uep-SEyald+Aa>mRf(UEy5z+-^mRX7c++ zY?)gF=0Na`(aZ%eLsZGG)35RZye{hEqAw1_LvOy*9n0B%Z*k|Oi$gt8bg1aF_Y?X%eu)3QGl3aH1>&waF;qBhQF`PHd0~Q|v>&{H>e&Kre!W(7`fs-Hm$bBIb)v|{}&+_@o zfA;B~Q>lpI+@G^V$JaiAw9}S4&%D_(KY8WIetyNdu4edZoQOsH$jqE=baIJ5_2#Bt zH^G{%K6r>zkabeM2j*yNoFhw8x%DF<}J< zNmJINNuTU;kAMB@mf2jn8f8$t9xZ%(d~USd1=Rz;o32m#WZUmyX^T$suIbpJyNo^m z>b^tamsc*0>FOEs5l`jH@MjK-IuZ5OMAc(eFSVp^onsGYatkLAIq!Z;(DAAbQ#1UX znV?m0E=X1*br7q|@L{cw67jzTSkHN|3Kz|cpPQPUobJdy+h^)+yvj=U|(c4+)4PCuBfVZ}gWoDEM@bm%pAK8ntLUYo+Gr5VjhjmZ#>`@;* z?x-G2fEFzic1a}AlFJ2O{vBLVMw!YjJ(7sl9{!D4K|`#zpPqP$g>pzEGs=F8Zm zc-{A(lKlF48JAC34xTF1vOVgxJnz$6t!XBfza*KDzKV7nW4YFF^V5|{ydK`)_Bur_ znO825ypa3Y3x6NY96Ysr`GxhHaOe{?J}*+rjb08C>ua}^_>={m-kjWUdZxqF$8_y8 z=YW}XBSI1W?P8*j9pJJ>ip@H3!__+9?;kFCZt}wPq3K{#o*(b#+nX|L^lX=hq46BN za>| ze&=xG`}&|MtM$|7DWX*UMeMM5Yuehc``$NAw&B~0QZtg4e^FC*DXlPKZw(}T70jkC zNZx8ze$1QWmsg^jJm#0QSdRI!#mo27J?fJ_Ymwj9)F{ZIFLefF&4#+4GZJ=O1deaw zJ!3M^TaWbGT7tX=drO+<`z#I_bqKB94Ntk?ci&h3U8G1lFDmQr>$5fh z?l)a0h_bfdV4=|Q9tLDU+NJE^A3z@t_$z>FhkG1a@LYdc{i?cy~I*=ik4GeFX z3Vz8<6SZ!*COcXanhd#TfBk*w@1i#O)rI^s7@jxEnPnZK9K2(-T2gyC4CR-Dxa$~9 z+{MqQnR)A`C=l1j?T=D3bnjUHL!+IK$`j)THt)X1aR&mdBkyL|yNpn>Lv&1A%HW}; zD{;-J3GZg^8yBd$?22Xb#kY>}ZobErV|*vZ2M&$XXJ~`^o>@qkEwR9%<>MvwS7tAzcVYQ z`q#{f7cQcs3h|78V^;vToW7@sUDUFHdY8oJ1?QaJVuV|cF?nvX&vch*(XM#o3#N4u zUCUpZ)F1z8?NRgd0lu1@DRzU8CGkrV&+YBD*?J&r`OC+)mey!vxWc%w^{g@3WCGYi<{fA9G;tG1HiP`awT?=i3$HOv$ z;10mfPT$)uz?#vrxgqmMITsck{LQhr4YxN4GoHBzw2vWD3%GGoxM zfKJj0c3p?F!ak}Sq3BP1K{rb|N0?3}k%u2a3!Qe~zx&38wVa`Db24_&4n`KHX$sf< zW@m%1e@soP&tM{Ux}Ca|32E!YWWEdV1Ux7V@1@4RODKD6>#b$22fUZ;5BhBf^BXJF zh;G==!Cfl~F4bh7J>GvAsBJ9Kefk2tec`_3R1*uLnVPyGiD?M@Ci91jy}2>#-ZO+BCvMyeV^GccXzq{jw~lUuj|S8W<8^H z31ZAZZ_TWkU*$532%@_~@)Pc<1+~m2bg8q5=i&Q34MNuLXV%_y=~3h{EjPENax_h0zL)#72>*!Ss`L?B)gQgGEx-E4N{BsW;ETd- zF4H(s%ly@KxpR}2{nLG>y&Lu)3Gr%fh6p!L-jJ=59E>5Ve|HL@k08bBJAS#dVVTV# zp&A+rjlTq4!NoNXt&}fX&3uWB6LoX9H>%GLZT+Hh7xmov7_W<$S0;Pzva0J_1^KPW zIUMV!b^%hexbUdI^FOV>k-892wdHRTiT{Y>-l;b`;*(N+;WDhdFzC)z(#;;5zU6bK zO~-fN@B8MJec11Z2hVP07}?ilu3i%6`zkYk%Qa{Pcq$urljPiR$cH*eVm~@ja|T}5 zVS3MWweOqzTMS(|?}+^-PHL{@I`A7y*mZA>8?Ij;w|KSwhpT1_Lw3JLzDMr6mbqoo zK`&FsoR>dXVZ0syzcId>_A%x5fQh>7Qo84F#(xB~MoNaQX2y>+$DwU3MPB;@?yUCv z&ipN&SXqR9-J4vi;rPX5McP6qddM!KZbJh0w;92qq~kj}EnelE|K^oh<1xISS%nR_ z&qEvGbYZD4q$%NS$GOQXqSe@-@5=~b86ReUd6FG`?7R6TM0uY8co2LtC)+R5u4<7P zg=@XTKwHi&OIuf6dnAsDZyFnOYj=Y7#*Y=E?t704NuB4mlJ|hQE#Ai*Gd=p+Y+u`j zeMO(C6}|I%+I(awb+BofIS!3jzdils=&oU&tLNND2z-1+>gD}~kA{!Xx03-b%A~qw zEt4w`WiXE8DMo3-U#-})Ho4zp_?H_5+|!;h@*8V2ny%5= zH}0|TY7h53Nrqzf{<{Dub32Whe|%}Ox-rVVb*BH9TmHw8a)k7o*Yagr`JOJWp|c~) zvS0G8{akrdIV~W!`b{xAP{JG+h^;1rpAknlw_Ii25S8gqtru3vS@hTZe13%^+;a25TY$0@3cka`b z9FJviS$N;Bo_RyHTQC~7xAl-Pa4+dF9lcwYJEd=UY;wdiY4>d~izMP97Yn!cjiz6+ z<#*qYLWxf>-DS5X-z`JPY+4PG?j+w0ET+G>w>1jNWC=B0+2z%s)2J^guAF7pMVOg8z<)(Jc_ zRI5y4|DRp}24l2{LL4Q5{=c{3pxZ7swuT$;DA{?Vt)wm3*4KQC`4aQp>))DxrT@cz z@To3}X#K)D{=|{$mNoax`_>;dA2$CrYs;3e9f~$PY%m5I2m9`;-*yeU8a6wAaa-Wc z#>oe>gB;k|WBZ)r3l>_t3SVyssCeKo=XgQ?N4La{+CzJe9nv`!%ge^lCZ2BUoxGV^p#YQRa1 z=BjUDW=PF=;_nt9^MW^4kNQw^-=3+gO89z?c*NMj3x<|o-rTJl)V2fgdf>oXt-r z_WXFqh0cAPT(P}9F%Ak2c-mFX8Te+yTg0vdX;}U7Z4`6VZGoUuoJ(+#Whx!9ymDps zCQSu&U|pF*OTVrsk!3pJI@F`v`C?NT+_Q((FFn zvh~5{IdhDgH}k&s(;v-(wq_Bw5=h;Vst>#KM!7qEBSkH68D|AWQt^6STP}8 znm9!$rnNxM$H4>T74<*9d*FyR2$5IFfn}0|q>mrLstVc|?QN65S~L9~u>Z(a?P1yT zcID{Z>7gGZ2pa^MW?j==Az4fMYEQlJm(YD!;A1xyngs(c{Oo~Py02828c z*vX9b1_TQ%!`N)M^p0>nXrq>gZQH-V>+=smyQbevFp0NY{%YFcy9-x*SxT1I#&$Mw zsJV@e)HZ?i>}az$IU&2Oli4hdw3~N6@he6!KY=46RCh28IN+&lsirgv`lHbWCWL>7F6O^L^WeeJ+LUC-pZ3-<-X7XpyloJOo5%P%;EO5=)=8PqxCw zw#kwjcB39}7dM(n!{|gVX@A&zU{7#1BO0ER2NqG-L7c1N(`$l+SJ3c>*sjn;2SFaH z4uaCdOB9n%jMFmh>tD`KAceUDIa>QzoYEIcP`HbT27I^t9xlf%z3oE)Ds;?);)A6- z3F4h!*@$R+pm9VZ2|`OKfZ=Jpu+<t}V4gS~)s3)+B8SGPxP6Q^CRN9zu=QtO1uX0!Mb(nY z5<)MpMxhTh;AN&o(dw2_RE9*Sj1SGEG>G26WGK?TlGW6y8f^AbR<%Q(vO+jzltdy~ zP86zn;AA^w2=s2plVnSZYaSTBqrWeJR6`eg{Xs<9jD&Gq=RxI>(li>%`PR(>SDB|jqq-Le9FU`rI5MC_ zhL|%{`&E+MkHbIinx38qkxM;FQ{K{Ty{AU=zNFYPWvv7zmpNl-fHIx>8UF~@8qmDg z|MJCWe70rk`eL|hs!A;SqO&9jz%NZgnFX}VwuYmc4R~K`>QYB(xN=t$MNwkIVGtDV zVa<$MIf892U<{C|dPB^fsHP|etfC*Ji=xcPrW4~^qiz@(Uy|I2RdAX#jsWYgk!X%f z;Y`FcpW9YJ2K0B;mO31EO#CqxzL`gb63`OWJ@q6bQ4AT+w<8ZxJp`LfcT5;yj-l*R1jhM90tyX?48X)ce!V|+?L*FL*NU*Ee*WB zO;@j@LuyIvI&E!H%}wX^j|f$8dq`qk7DEjZfjQ%vwuhtwk?3nnRTG9JKb66`D#y`A z`8-&`W4T~CkrfpCxJPNgl$vh`@<(9QEGU|E7>&^szKm=#UPZ)7CSoNqk3`)0;_hB7 z2#=?G1U26*+j#K6cLR2&DNs5DtRV0CFxkYYp%R7DYQ4X<0O_sV+^cF7P}!=(4JpRN z7#I*nomB9ICb>*N8>_waTV0Jy!)2s?p3gC?60{ z;zk>~6Gdb15Z)`!*O90^5Vw24VJ8h@|Vf zdG2JizZj0v*Qhp6-Eh6dR|=0fmkscEn_T93pk$B%;p@5xW*HF9Z^O|>kT7{TY=WVE zCVMGm&9556wdqxtMUs*uu>lMcFOEK2UJG6T3MFY*ToeOz6mh}-{fp>_N@3=JSys3s zbV!WDpd~EN=FgG5M8@>_g&P_K@4F=%Vw0*PsF(xA7BUAuV*Ij!n{~8z5mVd^*37G<8~b^GtPi zFH4rarbUODT~n>8BawOqO&`8fU5MwfYO0~nmazf*m_<6PvE+}Y;P|;u7L52keST(z zW|dHJqORl+hXfOV@YvDw*bexjbW=xhgL?7Wa#xvE5S~FKD|0H7VkgSwX{B|LkSjb@ zXVQ8iQR!=)*PKh9A)=+wP>#it=yV7oD3=G@1cm5Dy^T83Vh@a#oUFZW{Z$bc9oYF3 zaHO0vo2e%1(xE7M1->IRb{9csJRi#=18V^P{{S|swExNu` z5-BAj(q)kZXkKWzmNa1xhdDSf#0tvZ0=U&?GJ_9;RbpV~)Sf&CZ6tod*utqL@`f`- z5MMo!B$vLHY=V#QEb9Het>c~7ydXmiV8X`^*b=L>G|gt#Wlm5k5xMb$OsSE*7I&1e zqGC1FIPcj6$D^fQctcy$4g-{|j5Gr+fuUh(btKt4MHlj;V78aW1@!8JxWp<$?G1_L zcJ8Wra{xo8Ycuy`i%MC+h%u@pG1x;$-54r_r9Gh%81lL9zPx0sc0MuSe$>j2a4kD& zKFdv1<<8OLb+Pjv0KC4bn|(e)6R94u3#Z1cCWRG?k5FV30m;Rq5|7{$n`e-?8nN9O zVF!T~q*|EAN##6DHvZI*#DKYV-ZCH-La#boqCPiICGDwLkn<)C5Ux>p2KzZ~$m;<^ z?!iECwNWyLwdTY*@*Z;Uf<{cGlPa^gk74#%rAb#bbg?s^aS(D3xPYr!@G3J9T{Lif z^z4E};oLreC@?@DlW@AGz}yY?xJYQ{cN%ham6Q>#k(JsTTHiax*P&)B_;V5Dst>}Z zU|zx%ejH9`DB2kn0(cq&3h5kv&%W$79IiVdCUV=KdFMush2g-N@jt%yGnTpmUo&^r z>Xfp6wo20u<{ji)?If#Sp_`50C^~6A^;SCnN_PqBg5gX2N_69r^ap9h%kX?Cfrd#u z%5UT^{)vZ50lxAzL-75R$Gc{Msg?)Le&aN|(R&9Pg_@AlAvabUubxdo-!Rv2x^9+k zdVBndLclzeXW)hjr#qw(r-APxN|t?)bl`n{x9ZO!xu&Njn>CbErm--vyZiiy07Pkq z)z7Lm7&CFZED14@1cOD2$+`~Mc=6OU1QEh5CZ5A~Jev<u>Fsxp9tM)zXGLiG6*-vcfK$+$D9 zp_h|QnA~~}4^JcU_`&YjfE~uLvkdLa{md|U-XxV4S4No5BI8{4Miy8$@&t;Ry1tXjs)VZSSeOiz)8fXc=ppg^%K_t!5(Fs35DKq>1ImHk zqL7f#FtD~5$YH-!u7A#<^&u~z3~1lsU^Vea>vlVsI0(4ZH_umMfCY7Ip~zn6qSftS z`dzYHq;L)jS9N%aiM{a=s#rsFd^gFw%$Y61p%16Qo3n%%fV37QV)V#~Sgt)M87A>+ z@nRS-#M2RY0k1SzE*9*Rc=glz5}>t;NlNrWRIi}+wt}K?*H#3peh}Bna9+>>6r8Gd z6AR0mItA>$2y&vt4+gP@6yw?12Sz zb~3aJ`MvljhRAal*m49WPU36u5e(LD>hQ%09qhYmc0Qyg5j}%ddZ>%L0oU6)cAe@473q2 z{~m%U&uAmFE^^W%gx7H5wDRcL)3j*C?%HK+iSe1)`Z`+btb|}!(BQ_hSKX_tNpLAS z!7^ZakERj#L;>8rL{$kO{1vkX(tbJ)SCIl6KJPaO@yG@J6m?!t&%mpdal{tVO;WjSyQXp!+i4o4L#cTBke zy$&Grpm=OC5&L60Wx-@;7?omccSa3OZ7*UdOQ1wPd%DeqJOgD6-DJBvp2o4xsW<{& zEYC%$gmviCTm`QyVpS2L5kPO_;20s>Umor#LZ8;ph#3h5p}`)&)PkHSaZqe_b~0$5 zS{M)-d1ABcC_4&UYW(efK~n9(-pnvH#TY{uWN}faFUyN7xF+(ahgoG@+`{S^FmVf4@dphoFS?gfXAg-jB%{2H9Kbhu7JtfIR|6|j#CIrP1t z?TMq~+#$)9P!3C%l}sMz;W{*M5M^0V>S#?BR-erYE^{V~z&7Ep-!%wBm%>`Mfs#el z+FC_ee>p;cO@k@w1n6%6TxkwYDEM^#v`E@$kWpaR*%CTghVbVh4-JhG*mcr*vDN$6 zd-GUL!UP1APwdu&^Qo>_-%-wd{z&@-RZDf(=S{Eko?e%;M-dp|t>tZRUj~4fH6o z8r3q;qHe7#Top=BAmKZ3hM;+zK!VN@g@Cp6$=B3M*Cx4kB3RtSC(-GNqfVdu8;%Zo z2z1_0>C>f+caBpIf2J2MS)O#u$LtUvb+0xxM|gU0Vpy}V5-%Xh4?tkj2C>y(K$O`< z)iu&G4xqx}(bJ-GWqP~aTttHh zc)3RSsEm=SH3rz%m(LJ6^i-uWl<3q_3?&l1*rV)cP#6dsD+eW0yeSqID_^6?KKBQ5 z^3Du}u`mag0L!J#kvy_X8XiT~Z{jz_Zs^~ZybG8svFrBS2u3w*u|&$l;OXUrnmQuq z>uRyp1ZILBkxsBVgOztT&hZsz!Dz3$kN#d+`{ zC@Xm=%26W9H#B`BaP?>JoeqVggEDvnE{zJJyx2}vJ=c&B3BfVhYkR5|{T8Ka|lL^b1zz6J5 zESU%#Ky!$z`DCjBOSDMhp-ps%5aqKJb9fP7-}zbz=-2;b*)bG6Brojmw-m=}M+$%( zNEd)C%R-ktl%ih9CfjCdk9?a&22>qJYzIXi%#)AFuh&g_RLAo4-O*|w#lYS$QGT|q z&7Y5_8}P5Dme#{(ulj;$qvZ5x%`0M2qs9&!`vf{X9 z=%Oz>Xwmxwqk_hX4wTtco_G|*^DJj10*WdNc;y9)6C=vyZA5rJX9#K!0`e4D4sc)s z;44<8a)Pjb7h^hK>>(d1kT}34h2i=FbYXK=d6XQ=|Jvm6w+sD<@ci7f(nv^iu}39s za{wJ3*HNqf;HSD6jykZ!bVu09I&YRiB5gdPWhbZ-;&6Vb5mLw1Q10td@^z77#Ne+$ z!FrXN_n{3bX^cG_DK8{wU_yfE?t_Z^+r)_@)!*)Xs(~;%C<$@2>mU>tc7+u)gepsG zBl%0x$TjnMNYyyIvW9hT+- zRX-G>x(8B zc^Qg@eW6f}yFmFtG2_~7EU`D3)sl|nW@7C$ys+3K3IljArB->m6sCy_o}PH^xV@H*;WbKT4V~|It66g%n^8=$&J$^9r|`0NV$XTz{)yMx zYtRpxee@X?3;|9IK~2u(_oN3PMcT-$C`SruHj<(#0fz?XWqE*@%3TDs99J+((-E*G z>6SfQVH?1O4f5zg6b{%@0!VRbwP?LTlYzlV23_f;(Y=uZ=>8sFur)^lvdj*hcxu%x1)Ho>1rLY5y#>N)50q5KAemr!=r-GD=gggJU=m6ixDpJ1@;V}AbILZDLE$2~FF+7t(izDZ>nMfVLAS)Z{hCGAK?+xFaZU z-~nOhK(yLYsDNAz4F=|MW;mpWpZjieQ;h17qs99^Q&85#;})aN>m*ih%Q3sPb)(ag zIIX`zRV|K&Gs&N3s^#%qt=M0BD<`%#OHH5D&?9Se6ezATgw#*I1PJL3rkjVN0&@aD z(sQ}go@iRdM})P|qd>*aO6IER6+*s36;eB2?I_Dqe{K8cFBjga=PZaWvabBlbl@*q z(f?tL!ZokSMWwc1U;d0K{+N{G;>AV-%RlqK{r8bERk$X;w;@?@R9SdF?$-AIzW%>{ zglw6z2)Wi_^SKB6FE=g!KO^|#$6&5WQghzIomOwui%@6#zdSg&;zo|zTSV&}TS4_` z!{ll&Z(=Dh3At{boGO;Trl!8VLKXoO9ZLexTp1n6agL2(pi5d>EUV0dgK)^bEYAMa zoXtbxjl%Naf}8>TiiSZ{`anvu;ACG)ch{ z5EWwa@zk;?G^6$xhT)6k*>f;_H7;QP3nD=+4b~(YS2T+i9FIS5#d1#v!|So6=wCh~ znB|_p8y3d))G;2R;NA_i?~MA{`Kj(9maHdUIpI$uS5UeH_nk( zP|K`|(+_Y$l1SnszM{jaZ53sSHWw8vJ?Uq*BTwa%c>p@7ly&-A>% zf60Gw;*GpDYmDO8wTG?!e3k!ucK`C@8r&cuWUzM~IiC~SpBek}hoZjsF&aE+|LoYm zzvc6lsHYiLj7m0l{XFXY=kxn7-+sMf(V`UBs=GV>oxuD21BRznJGK~23HD<_mzLd)SqS1Uyk5E|MicU`g@`Dxry<|J^zTQf5g=POe_DW zw*P~m`RuQM?2LbvFMoUGAEWOdqwmkh^=Dl4U*_6B2l)Ril>gt=`{w}v=K%koY32W) z1Dr13admq2j%i4;5(3YfPnXT5lhg5L{!)7awXIOiiG}NRG2c0~35iL9(yj@ntPaCr zQ3<+Sh6Yks?X*j^_eum}#NCT;x8Nz$pkh%G>3OU>m5edogm+2I5IUELvb}=s*_1XC zeghXCuJX}_CisyDP5#sF$IDD6HzYX6=l1=klAeGghmqz+eXA&W%2LZX4tco1Y0G7W zM{?Qx1Ry6yo^Woc;D9`@V^p&+FI+%{;qiNfE7|KG#)Pfwr8&X1Kh+oHesn~DCyO$|$6MBjlJTYDI{!xg2^__{=N{w+y%_&h3 zeQZv_db9jLIo0YZ>%POLdb8i$DJ;k9+8+i6j*|lhD+NYhOP>CiBVB5(ok51w?FB&@ zUda{Az=c>VI2C{CE(eC|=oxaFf5({1j#k5bMXwS)k}0!wLh%foBM4RCo6qJ!A#ykE zIFHL@vi5SCA=XgJ-Vv;bqX-$*ovWEX?=5c_)1@_?lohHHDsXJ*% zggB_75;j6>iHI%6`wdnRqgIidKtlJ*$-@+4NbXOT|B;&T%O`7*a5bMvy_xKuJb9~XhGjGG8vHJv&F-d6JC)d* z7boX{UbQ!a)f{8dOjLPqTU&(gKnc-9X>O`#Ttk_DGS0zGEx{U*?MHqKt zr6_KoDWPM}f1F$T;yduM4GDbpb$psiQkcpZP!PAF0gDYBGxwFDqQ($WpIM^H{{{?T zUPigOb-=H-FGQr_=Rvs>^Z`;eq?W*%v9>!i&o!h(#)*9GlB2Tt^t~S7AT`L&5WuuM z6Vfc}#Z?)~{9Uom1H=x3TuFFe2_VlVPFf;{`aMJTLx<+2L3r8^;{m>UH3Pyx?;#e%vZb+!*`=pA;Img@0VJ3r z2eV%#mQ>*6iOnO}gz^B*`2x8{G2I3hG0Nm6O?-DS<6E4UE56tgJl+QOpqEwAe~;TJ zYDyxxrXs9BU`#j)QGOy^L=xG)QaGR^(<n4KcKu2>;=Kmf(gMSNM&>1aLFl ze*JUEFieD)es}O8l2$N+$Gat?7b7i=UR&XaY1ed<03I@nw+&zRh`l|2w8+Q zH$Ge&GW8+4>boq->)Av*q0-Y>>S8oy5XP?JZuxEL3n3|QzBJBXdZnkt%hL(Czz?i+ zBQtg`hhr=` zHC0lM$PNUJlff4Zt+|_}++v)J4civ1E*`<_+K&FmsiIC^V9|Y1J20F1(Ry8y97rp` zvU+lC(X_?F>CtaiuynkQcb~>+qm)e3l~AX!=Q^=uKrkpKD+Mr1PN>=+iw(s@_H#Ja zc8K)o5nqcGGPQ!7!|^KV&O%YV*kH+ma6y|a3~D!C6iXx3u?7BGKGMm4;io}pvdir> zv4*F3#1gZ{2jNfnKtmj1!&xg$B1r#O);-@z!M zfhKE4zJm*zvrEKT!jO8_ggv@K;2`RF?lzj)x?zhd4uNNeBS~c4NR}g9pH*ncIE=&A zk@ouH`2aashfOaM#LFT0*3r>CSP?a#Im1 zhD2LmX=B5m@gD12vAWjA0QyW;YPYw($D1|@5~>2lAR4K+Hh=E(p!MIdo#2bbs8LWI zWDu}UXxf>rDiEp*%!CS%FqX?up%|)}&d@1a1u&xvb~H=s&|(j! zL_@6>2`oRY-yZh|^JHh_A+2ZZuhyDr@0{=_&DxWPy0cp0YC|HPA-__*XNVvn665@l zSF#y&E2zr;Ol>bsO3@*bpz_igjsmPokoRwL866O%;i&RNPMn@M7RwqLm}S(SL#i6w z@N6ZoSZt?_(wr3monFN{z~FpZ$doXLK3kkBT+j=X=Z3uJhuTAO2lzmFZ|zy-e-@(4 zjDMe2doLJ3GH))J%o%D{MW042W>tE_>&%iRcs()ITJyv@an3h++=&*ePhw-5exxp2 z5p})AAcf*LFTY+XU3~C3GATrO5|k)&RcylF5}d*}r$grYh_zrau)v}g|2|ZFosF8* zXi#PU4`uHjmUP;+4XYDvbY`-RT3OlDR5Q8DoHV!8Of${h&dR;0n2eHvl93x^r`C*> zsmL)KaQUV9{Ri1 zwbr@Lwbr>TWQu7MQFS4G5hCbEd#8g2QSfPkluHs>j;nN*QPA>@2wXBK-WDL--Ge-0VM}!pyEhv(1UOH6bNhuTN}TUdDW} z;_`oK0i0}e?f71u>pwM@Bi1rkolS{;prI>uowpY!SkOgpF9U{L1K}nW?AfIM`FeP7 znIWF{`+kB_7sWCvVODDo45fIhryznOR&OiDWw__aRr7GA2gC2MD_S&?okF?zo-ap+ z`7=0=TH&Srpvqp%@gjwv0NFwKE=>bt3fqVkjMfV*MpmNheY(QEQ7c-`n3gfP_?cz+ znVAtDPWR>p(fIb6+9Xydh?flGr!I^Mj~_eyA1V&&$O3B&&2&WX=*%V7+|?V6hj4EX zZN?dU@y0h{=C@&+&3#~l`${!hvbec(v7NQJN7d(1qhL;+>z8)6+jM2T0OVJ_w+p#R zf7jkQPO51AwH`^I{ha_+u^tW}+p|ODa$(Ie@M?#uHhLWM{?H>h8r2VGk}DXxK!p3) zY?>xUOs1&rhta6Y`vO(9waLwjZRe^HpKAwc9L<7|t&bmsU1Ya*$a8CW5M^v!<>17r zHK zrA825iNHQPa$^?@s;GCzhT7%0*sL>Uym+OOseehVBzv|%ySG{sk2CLu^4ZiO&s30y$)eIzgyRdXnRlLGFJ=NP6VTN1UjFTRC@VV~;{42PNb0T%M zb=nRTXQJPC&-ueBB+5KPC?R!H&gu67y}{Wy?%gNul6Z3elu_ivLvDoP5&pjO2!1)YmgP|k~%y-N`WD>PO-zf1E3%a`=sl+Up&dQ0a$g$w)WE^2M% z5Fzb-p)G~7my66u0QO(#$YzuZQmnIHD5i8ya2)y0=>aLTS7qWG^f>U8@c6wvy^8hYua&45=UtiqRyfpbHim4FZ=_V=$5kG=Fuz8oo3P=S#+JWSI1DQ zBjbTst`vDKD0C6lA>yJCn-#&lC-vcArMd&RnbPn&(p%i6ywqks->0I@_61xWr=U;5AFq!pw ztVEwMu;=}=M3ExVO=-0+V!!Fbh z7POw#-4FBEmE6q+6-}G?P?#{VnWzNqEC=?U-^}{3rSnQ*S!}vj*5&$+e{?bBVV)lCTBHp52Ni=_`bL*V>*}KE( z5?`J0aUuKsvoiC$vQD@!0z~%d9LUC9PNZ{-h1i|x5p;i+eqkR*BY1JF>-jKnO$ zqvyw$0dq(G1VNQJ|RAd8G;tSIuvzCW_^BVNc!Q(7a^N^fu|*4F8q z{uAKLCo5@$tZBeF?H9m(Qkl}AmA$6*r7Jt~=?g|TixeMhR9K8e@5KdAN}je|r>yT3 zNi1eP(1^FfzMS>Fc0F9{q*R$OCaB!qI_a)0CXc!AFIgV92RkT)8X5|Bgzkt=H~t*`bDlDrp~c1u>FH|8#@&5&^K}X zAZ1N@a2-mliJA7YIad(uxll+;lrNpX2%NuIBr$R%nE4WGQy{~t({XiDPXVXcjQ3xY zRsS|pq)kzFJjA$-(?50DA8j+<3pCFbS@D>p^{q+EG7G#5PD@N<5>r$~J;OU6d%%N4 z^2W^;uVk5(Eb|P}Jc!SmH!6Vm6-(nC$5xtNu1v5~+tZCRML^7oP?*Y|8+cL4)wzt) zyzl#-X!K_~y^HR8Qx~dzR1}7ryHT;F%d%kgiQAXM_1{ZjWbMh9r@QeVAtg4zQjgbC z66LLCUVz{1q;q_fi9BSP^Ik@I7iQ|{OV{=E&GgD5%$j+yCpQ?{;7xlxG&>VDod^esr z|9qzxx*!#>#5sxYau}@x0Cd057f33%#U{7*B{HXmq3n=p8HvYE+@GjbQj)kjyU!hx zr=WQB-2?>AJ%(b|XSdk(Y1!|C1hz#7Y*$IfhTy8ii5SR57=r^Gtj@eO85epVi(^ zF-|rNyy_)KQjFyRqW3uEvFm_~&ch?v4s@;mrtFT+C`z`FBESlGa{_El%4X{q)xuXp zH#&m~Hd6Ez>1nX@WMw};vh?3e8UOuB@Unv58Z2v2F`m4x=GkGh!N+rM+8g6m;a_X~-%=Z*xfr^9B4vF5_pK3UMAXzJFaad|HSeJ|(VHO?`SS3_Y2QDe9 z+WFZxO=r0ROExJm9XcjsJ)9O;N38BDbz*W!f_FL@@FV>Pz#+Oo{Lxc_10N0aRWx-T zUqo!=5P|hv9gTM3eokWC$aJ@ktAr7Y%Yh=$m@nnLjFH2mcQXHYvRIp?^ep1gLhWrj z#E%(WT~w2G`o>JJHYjL)!P%-Rk??vay5JgBj1ADwF<6WIq5s)C{%@%+4_phC^=zx+ z4Y+101frVz6&XQg)*OEGM>ed*HS@i8b?{9Vp<}$s&TQ|jeD*Rbf7s3@dK!*I!EzK( zVP?93DXE(#s{c`b3%CDS$+ikYW-(gIcE~kK}_3@BpystrdTRz`Kct0jQT?;fk33 zYh-sUU@C-`ZahK&K|J!U7ecJ#cP4S|Sh&eL+~k{WZiW{i+kC(V9lu+AE@sT`jlEGB zdS;4gJ9pR3^zNA+Z_$J0zbW|-%^RTajjl&(RMu%PMrDMh0aQr?nT76S!eGAm{i%`Z zCLL)k;O5v$S5TI}t|PAh=~%8GkDG&e&>nqQ zl$sMF;oS96=R&;Fz421ft<+c%3SQzcZTwIN#IAsQJZ#?oQoispAXH>#1QP~du^BK> z(ZW8g5+>^N8XM&)6Y9q}siq9OOMR?hV%620Gw$>|ElYSj z2?2%*nWP-bN&vTB)MQL)en=eWRQmq{(0gpD*U*RF&o|{IAb^ZM&n@*yPd?_)tR**{ zP7E(2DNP+`(ZGMibwvVMapw|JoG-_?S|d5|+z1+$pcU$ERe1+c<&w_Y2SO4Yl#xS5M? znE6Vgq4G#lg6u5SXYI=&f=+1vR9TV_fXHb+30^oA@4YxPTN`;@fH#&|X7@-YvEv*f z+Viq{CvIZrW~+kILzPL5x5$o=XTPbid%lN^(@;tl5FDYyb$6RaW*~>+lQN=>*R!9J z8Kr<%>0^Q3mQRoN-_Hh7X=7~+uLPJF@TL4uE&seK%dI&@(jnR<0j+gClHTmEH{DZD z`jMHO#wRM15m8XF$^Vz>a?@Mnfg59lvG9a?V%3H)eTIg6r)fHIIIjF=v~a<%>=k{^ z7fxX=aPKMsMN#xTU#0kAJQ7Y}Eo7K(Ly%`10PrZ*TmlSx`-trWhdFpjyPLz0B-7Ey z;gV|qUR?lRFiq?8({otOfudauUXL7=2nv!#B2wMA{iP1`bDrlIw)qaFyF6c}cKi3c zy)Hawzi-!xdYgKHA|llmoPek|(uIMai2J~;g#_nZ0YPT{c}xBN2YnrCth#-Qc?DjO z>tN@8?$MU!!YbTUFK%k}+h)1|mzM5%3*LQ_Io1%c_8_gv`ApRHXhh!PtBTGGBklC@ zI=ctEBt{q`Z;cX@luXWN8v1PT7jE>194l78S(~6&wQHB zd_>BuvCWqust*gobec2q05x{*2C<`qL#}-ypSiOV`|gbunB!3>LQ(-7kjF_;c?^@c zJOLYfz#U8O$%ttMY0T{z-4{qO2+72!&3c`qWO*c!^V!vmWNOT;3$Q*Z}{I_^uOQtCClR-My+g|qXYYWOArr3hC_@#-YX{*GA0CZO_&a>We#xm!(L;H3~XrH=VzKP9nI8}c%{k6WYnM|6M z7zudI(}>Cr&>}nTdZIE;1h93^k4j3iMRAxk)n`_UE>lToj5>W8?FiPNl%Byluwht- zo1z%|doT~?`b1- zy3{Gt0sMkqZ{;g3mc$pldqaef_{6k~gabANwBVGkc#05XlH zr#M8NMKl0*4nb|h|CLhkc@xgBY2y#s;pf7;VSv5Z$#7!c{72%*${4P+yxE>l!nubB z5fIrWDTti*EgLtNz&=lKe`f_)V=VNF-`yWJ=GWW3x&57re+Zq(Y28AabV-Udu=9k7 zjrYrgEl4gnkLTAO@DAeakLESJ;>)u`a8nO~* zz}ReNlix3VR;$x+^vw97(79ia5UT}0Xuh@~Whv8t7WGM(C-XsQ6YYokaIwS?gjcM- zHJpoXPf&ua5aegT!*s0ccUtNhoXX0a7I_zBjJW~CH2<6OI3NdG3gD%Tgb0Qm?kP8? zjdJRl`8|Bncx&PIMU(=Q1N5KP@!fl|n~?}FZNj-kg>N~DNOu3KKL3#&+dk^7nscta9(UkJz+0!_$m@~VwLeC*7GAS& z+4b;IQmdW9evf-?hF0*yfiNZwZX2!zn{;-II70>AKw?;&8i!o_&(@PV`(Ylm=={+_ zx&6(!@lyh!tF&-9FhfKO_>CbgoUy;YtCoyf`wc(7J+TpN8v#gldOPGg(pMi38Qtfy zpWgJ^OeY-?+&+Q?=f@yExUch|YGYez)LB84^pAV9PM8?SIF(ZpA0rB+sQ9!b8sAGQ zgk2jV9X*i4sZZ*t^s~h0xcwx?xQxd#$$R;Bi~Q7dr!!IGvB-DkuWvP--;_f%^;zpz zvdzktY(ft5%<*cM>n-Ci=ki>^bQyz9GT3cX=0K)#lX(#L-Q@f(yU+1bf1GsBFAJ1J zNdH5IUAFiZ0o{$Y!fs1yq^RT$iS7zc0a-lGQk$a4+1An7_JC}+=(^05gjxtJrgfSy zNi)*~!EO3U>MR1M1&IhEAAypdtXsPfv=~h^*UonK0R2 zaRP{N>Ob)I|EmGYdv!~{O&8$J+UHd17f#oaOwv)?Kv8{rel=ir?TbOH#9Dp360p?s ztNP|Sz%p$rRXiFseoE#1TSQm5Z6x3erx-q{H?KGb;RV_qV|4@GLs8v70v-&dW(oB> zsCE@?iRT33X1dMO!cSn*@7xw%Zg+%rpP_~4M|6h+zV@rJd#GDe2l&Uh#j&$&XJRv{KdJ_IUTb@cvj!0(u#8J*ScS> zH#9HR3R>!kX$Q`Lc*2nl6xFMe)+Z&@Ig#(K8TY%vzPt9#e1cdC*HLKzeYsz0pYtU? zCR8t9$nLCdoxW(dRSC3gRBo%Y)8~Pblq?cM~jh<1P8KBSbmez3>EYDlq& zOyh8GX!d%E_=nh_lKbd;<~B>)%0S8(|6Y@SsqlTG;UoU+cl{*Dn`M4nfsi81BuAWCDbi_>3V|!P3K!n* zuNUj)(*JLf{l8TnKi>12f1Ukqd-m7k@=te98k`*&r`O zoVyK$(d6`HWNoB0=o1_0iNJo;!1#c7Zo@(eDhiP0w6WqO(!2Jt4ZCo7LpU%Tl$3x_ zE7S8~48KVj>_XZM2UxOQ58v~?C7)LK?6G9s*^jy@lSCAam4z53fDWWEuaNh`I!KXX zK%eObelE<*_M8>&FM31LHUqj%O1z2Uod$co;TyBv8lFwp+=l4x3qv25)LZu+8?6aL zN@t=Rt3@X7(eUnMZCeMcg7X#EHiHAXEM&UG2YlGS_#(778IJ= zdgI!w;w};wTZ!#UEZQ|gGQIC}Z0f?N-|z~TTDpPr%T`*9R<4>c-OUc)pQ=~06M>uj zZ*sN`%EgH|{nXsyAn*uM{2%$Te?^M_jTQw5{2ZQI^*bnkI(LM}RnsD?mE+Z9hRgDZ za}fnU03w`zjF<`QJ_RT!k3JWZ;_#KyGx=fwykP0|V38`F1k$>LXXN5n6$x6A z?-^BGeW57s*}{t^9Ec@UZT^EyY$P4;F4KmOgCQh}m@i;P=BH)3A_Rm%-DElVdV;nc zEWZH~oK=+gUsMX))o1VK-5&#$!$8beF6p4MSAD6GyU!v;qNSSmz9%Kx@{{P#D=%1R z#{u)QVPhLV>cknxrta7p@;@#?;2mlF{qfcI;s!U>AbPJTuK z1n~LC-P#EUzDsAmCwD!uyYhH2)5?ovIW^N5rA|{3V+*@}tgj^tzn-a|18j-RK>=*C z#qsv3yLLY!`M-2}!N@-1@TvQmv;*mY?`YoRWWOLpa7jC3=}ke^ZLo$+WJd`N1KehF zPH6p{Fc3Twqp;Eg5T)m34ztPp%G>nnKKwvDpkfFLq2R1859U$Qj*7Haj7g`{Kv~XT zS~XMYR8C*2c->)FSa&j@%hQIUb0E7fPd|XB(H0+PuH6@%H0+94+N;fO6V~I>Y%!!* znbKO;5gTJbLj>!hm`!_j#UKvkw(le$r4P%d;?#wbvq8Pn#KN^O7HL-A>f_R!Egn?r z0 zP7Qe|s^EYqJ6+~*Vb{xtHuvld&W(}P%z%so&~neN2Bu9Nz0Yd7-~(X5m*oP`i@thJ z;qUef?pqr7GfQ0+gFxaby#wU@XA2{uHLi!!qpgWo zJrCu_T7V<^b42W>jxm3lseocSiiAbCyXK^DrAj{-OqB=*u{e}~Z-{Vc1X$s^6jo<_ zc}K+~se?6HssS_v_L<0P$PPB}YP51(0kjzUZ|78@O{v4C6G?E>1(y6JRv0+Movs%q zfCb2SqTq8v`+pZ8`TxnyyS_dbZM|PZ%?Zl{7sQE4rwR@@yo?=5U`60GVKT1G9Xm8P zu%3}mw7VvBr~!$EU!8bpbJy;-vq)>P;IncTqhl|*@UguYOx>}CRLDB)aB0^&%9d8~ zaem^7Sd~j{^Zt7a>7m+iVH8LkJ|mFFC8DKYHKs|we)veE6K04-eDSL}#gmR#oTj8U zz*gtiF`^QLEw-c%RW6vnt=}0sd!=9WxdVHWROHZg7E_WVjRoEx;yv_pz7{net@V9e zMwWp`tRjQ=s~JunQCr47@~}l^c%#%>8(L{yj=1t)u@L#yt;WvBgZrY?13@B5?qSg+ zLjT8f-57)r{=O8JlkQE)YiFHh>~HS7fS@HZ4Vl>Az~iT3FI}D8C8D*2aD>|ZT_cm! z`pr$1Z=6M;9rF#y!N-HDAPtGiD9I*9x>wM22Ttfa>D#>Jk2!vh2@VD&NTOJapORGx zlrpMhC{`G6KU0s_f6V|y!n&S7Ewb5vp%r;yB5I=qS)#RNtxRAE%$|IL4m9UaA29;1N$ym z2jF+D=CL-~t>ix49famI+0Yj}$JHMjT~acJ5Zn^)8`_f+Wt~)h3QYr@NQnYuc-k~J zz2?aY2Vjv*;Z$4!7=@cg64CQNgXe!fQk$aPfItX9u0xdx*l32I^KwC^z#&f*++WYr z23cs4LFwf%3g@G`xU7PYI{;;lQ1*9O$++(-#+wUmtZdN!W`n=Zs)uXi@sQLi_`$Z) z72zjx6)cFfoYp!yXNAziSY0?!8;)SE*v*^n#>(x_kjkbNWSKDJ6~UH=uFV$lGBZ9cp-8Pg zF@G&t68x)lk$>9`A#}b()%d=9AeBYaHGt2nZ3Cgzy?xO+2TlT3Ips&~PdxA~z~mJ1 zp;OOPuda<8kLZqeSnJ{0*x=6_`k~+yt!Y1<{4ueK&vFP|_*fL@6UH`xR4&cYt$@Q; zH^n{)0&L$~D%M3^AC^Z66Z2o;;#zPnpVIc%m%FDE-pk%vk?x&zzxG67F3|Ko3|#og zKG=PKeG;wEv?p#v&W~|9n!U8oGyiOgAX@QJqW!B}cO{ca@|Q4Y*{&7Dq>NC&em_

    r)1URfW06gKd+hLM^MP0 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%0AZ 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%0Dmv3|b9aF5&g0ye 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 z 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 H+eiNoGkC^4 literal 0 HcmV?d00001 diff --git a/content/terraform-cdk/v0.21.x/img/provider-modules.png b/content/terraform-cdk/v0.21.x/img/provider-modules.png new file mode 100644 index 0000000000000000000000000000000000000000..c00d6a55db29a1ae2665c2b843161c6331fbe6b4 GIT binary patch literal 257584 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

    P3WqPrKROo z(93eI59@bWiWYhp<&YVmEpPRyc#iWv8bkTj;DGa=!61JO@UU}v!OWk~AF#`WM0s7H zo)XZ)edP!C2ViWZ&Q=Mtq)w(x{X^e%?~pVot?`V8{ZGc5>5g`XB2S2rViwvA=_v%l10<0bdzG?~ON5M%dEu-5C8_lVM zi@fhqu7xxQp{B;BjCB<%ylbp7#BaYJ8Tn%Ql_UHPTcHO^l>%Lcyo398d|wpv#fKFH z@PVUHy8@$Ed?y{0gYc_^32Do%kWKPXf zKRzdGf7IT;`pxt+5C= z?T{w!a<9=NE=|N&J5p8bIx(fdENx4~a$EiQz@jXqTMf_~;5{HEa{6eYRzG^DGjEv^#wj`PYHTpXUWQYhjHeT(h+7 zJ;Pc!qgGa^Z1Et9Inom-?l!Zrt-@gra!|lo^)eHo7qPxS;vLt6uiFXqrM9n&&XMbmx z_Nr-H&7X}{GId6Sj&k{6pxIy6!DYz}9psDLDXAkd>mQcOCtjMs(>#`#lqnpYOqEzs zF#FwxR;_^D#6I@&UBH8j+eqMqrcAV+8?EG+KR1${(b8*4xN}T+u5anGU3(R4zz&I) zd{vwm>~RE==mK$ZSb^|DPFdUr37W^)vY!IWy1Qe~P5h2g(i8u{;kWiNbD7?PfLi`Y zJ;<(J=6|vM8^8FEf+JTc+=&e{YHx;A>^q9S(t<=mT;ti{{^+lMxsZ>5Znxk9_>$=z zwhP%D@Q2TAcnk!*B{N&*FJj|={8GayV1O>@%Sry>WBwp{e=nvv>({{&x9U265yAiQ zZ^A<_ND674oAY2;>BOv+D>$<9WfkHlF8v}XFfghjPLj0U-1+uOLpg^pF#1a_ zYw9c{W}MmZYC9}#6tNxFSQGJkvZ;>~;!v$I-i#c=@)s^Rc`ts0XTOdjVD|Sbs2D~Q{A@8Ve%Uv zJ*9ynfd}tul3M2R-33Q5YcwCia7(~9u@PT&Ys&(@2@=aI-A^=p#J1C1hvbFziv~Qh z`@m(RRmx{$AZNjgdxVc&!5)Q;yZY|nR$O}rQ^b-&eHb8gFgAibPuZ!>Qr~R=fDJW1 z268Pbm0D!DifbqGkS$irj46=6hbfBYV2@Qw&%Pzd^BY|ih1fBp2;vImdQ*=ro6axc z0kaIy+Dw~GK)Tjm+g5S+@664&78{Z-?Y6G2>$?ZR(3Bwqz_#ySCG0Kt78T+WsV4cC z4f5gBg(p3aMt=z%X4Y$b#-@u9D=SYuWRnKyRp}rrH@(Ynr@C9v53$<5B-|j{M(UJZ z*}H&CfZ^W4U%pBhmYyivilNc2=I>5vj4c;{jT#dfKRfWiblvSiIRm_LgAQ(Hk8eAP zz(gG{p&e1HH}w=5IOuZNpa=x{1%)eDzz#J;9o)Bo=&5bp(sPMHvcY5!ZD04UdjU| zGAjJ87JOGd5X-sb+*!7e6$leQ`2LnBG%5iDRi=~*0C{!obXvi4NL^hHY{=>jD9N3* z1IP?sX%?PHJq9ZPl_L2iuxd~WZjf>*@BHWFC8UL zTt?4ok!nDGhTt9GgB9DMuUnBQ$`+{!$%lXf%0Pt?pTw%;}h%s=)2@T7|Z_I+})C}4k-?Z5oZqJS+5*dLtB zq6Pat_q6CDzcc<>6tG1B`#LfNG16iT_EmiQx6$KbkpH(w^tF~P3fQ86eH#ofW|4oe z!`~j!*IKq%rue>eeo?>{1?+1L0!DbTO!3!7<_~^qu}ra8ructfnF7bXHc}ZecxYs1 z3{gFpbKu42{Kn)#Cm%tnwTIs0PW?>beOS8m!?tE^mXf}9^U)2$`bU12p57oWcaDem zmtEH-Zg(_z2Wg~VAKG$D@s=WchTR}5`Eb|i8(y!`z-2K)Y~w?Oh2;Z`@?Bo)hlR_yObz~^ z;%F(qWXTc}s`oaNn>Q0(w7vYlil&FNfSylb#wFD+el zJ4T0@-<-=Rni>orj;YDeGcbrVD0d?7%P2cLlEazT%WMN+LaeY$HzEEI+I{sre|mg2 zI=Jrc0NcUovGKw&zwYuzh3>eF;?jZwWMk5`?A2?OKER%l$r)Nf91drHo@KK1+Pzgm ze7&~<-F4kFlq?JU_*S^a7L=BrIysHCvWnlcXHP9zEa&q(A(>@vA#P!~(`{wNbR_H+}-F{QdX-x|jlPX!=K9 z8JV)~=_G!zp^ue(|E7|4lfE<4xh%cUgT1`${j?JbY(gw88P#aaeeM6?!C3Srq>)0* zIwZ~Q0Su?L%eRd?K5n}vl~`Wx4`|BjBAG+OsX#KpYUQ9k`>TZ8c0e+Uf%@G(`dK>>2eldokCqzg*U-Q?=7B zx*}A`D22|>%SlhaAZL`Xzkkx<6n@#VW%10Z7YD%#=d7%(%P{c_DJd!Qb`J}sg9qz| zOP|hPRHQrP`rF)Jm@hzCkftkR72BI13HOxtWZkoEXIUt_47>K-dY8qewTK;P?}*s1 zx?g{Cu<4iM$4``U&@TNOGK-&)nUf>ZOW5ovLdXW5-tud2b;G56_p$)(O=(BRRR&nO zX~>})anlUDISww*ru4P6w9q4f`GX8EK}$u=4RLTJ;{UXqU?!2Z!|B zv5#BRw2wR#+tr3wR|lIHbsq`EieV!l8Z>3}%pKHF8mW}Rs-V;|<#R`mehRw{c*I|D zWG@rK$-h5)IOK?_+XU4hY|Qs+} z~9s6I$L`?J~q~WLJ4bEO&B;cM0t7d-aT8u7BUWPGYts|3HMX)gu%Y-0_d@>y10fD z^DFX(;QT`)sjGnJXB2DjFTnHT&I;Zfe}C{C>q`7I$vGo8SHBXkrn|AHr?hnZ)Mkr! z@3T6lAtH}u%Vx^r!*fcjY;;x_8z*X7k}nsPb)L}%(}IJf$!_pnFb3l7+y@UHY^fKs zUTLvw6NSti`1v(oCt3N(3?OR^*aNMoRQ&01&ww3a`h$FF(zRkU9&e8>K<#k}GmwFK z>*ejuaW0zbdjbfX0>#+9C%T)n?9zyRBtb3JpVgXbH{L`3+Ki;`t=Zq67 zx6)^u^Gh$U)j?+}xPTk;7ncG1oC3gQ17ut8*;J)QW1fp6qf|G)T8OkMQ|>e`SDM#` zG2XpjK|yEZ#*L7kC<9v1OP4SI0B8}|QHKidtr9K;%X1k8?vs{0Zk@$GBu+F8IrD5^ z@bBJ3F&((Yt<32y+ve~1J0yG*#wVa?XwI7x@~n5PPSnE8s=KsXSYCe*YPz)PvfaHA z+CitVcQ7`aeP$g>r*B~3?N3X_FZKxW_YMtZWs51TxRZly6-42?)ckh90L+af3)7}N zs$g2gg$PCxXW%n2H<9UDRe;@%W`aUxl~+~; zyeJ|tKXp@QR$jLNhR5r`PY0|_PVIAh{rWWs1@$4fGxcQX+&W_rN`xV>`Q=1n5U@7` z8#iPID8~K=TiA9MqJq^?CeOz}zf0%e{ZO!N)h^epS`Rt-gICIck(IoT%7UvJ?WQnV z`O7{}`B26%mKtqV@YsV_m<-7ks!B?FH$oFRgCDYT(gp^GrA8j;hp?)ns`YWKtBenN z)=*qD-s)2P?5&Sa;FIW01>W0gDy}Utv9NgQ^?0q)NJzx~DvEA`W-E!L=j`&~$M{DB zM|epqQkN>7LmCg%$8}ddKXzv9aiQ(ZM4xSc?dzG5C@A_U9&gpx(|h~VVL8Lxi&Or0 zmxQ=HdnYn9{!G%!NeNJu9-j=Eat%a{fcT@%^4uM9A2GneyivSlhB4LE-)~0CxS5_y zt5l(nd0ny75#PmbO}chsh_YrYyZ6DM67v+!yDfd3tpEs zp+#5Ni;8U7LyivB9tHtznz?EC^5x6QIA|5~=Wgegg~Hwjmw=h{Ny2TuWzVM0MSFbY z2V6l#RQSUT+!*j}Th3}7QnfqU19%i)l>rLA03fF`tz{T1Db)xhce$9W%|ZW&Nax8X z>~6|qX;t6089-8FUZpkwxb5iz&Isp;n`=^}Sa=6PS7JImonld%pW-tpe{XFQ?~=Z< zt2$m%OIPd%M7(!bbar;yH^ciWw|LwXOe<^Arkiu70kJtdiWpME^+MQ*5`(Sk4ZV+v zoQ+VuG!-<~mE`o2xY_g_2c^1nE5uIK-CYKI2XT+Z6Pv=Og7P={gJNWdJvk|A=)V8zf11~EqLfc$s z{AkNk&WI8*R_9^j%<{vHl4Qx7_zqr(MXqojOql9Diorn@jwdVpdR`i7Xaq3>9XZxJAP zP1q7$g`Dx_U49$z{O(cko;X-6yL83)#gC!Ct+m|eW=_6?pL3En1juqxI+_5mxIk@P zNf6PsuUxp%m8TLt7c*6<@iKf?FvgVam}0xKO(%~3eIB72%WGbN@_BTo%_bhskvJd1 zIAyoCt9el0u8!XAX@7Ah56AZ`=w{YA_k1`kAt0@1(mhPT#vs@zb|j#Y!Pu`t5n7U& ze4!___<}CUY7+_D1c^(m`wo};wD0bHL5W@)`ETxJ8j&+=bWs~UrG>EDX3K>Hp zBIK~sp4f}Wj~}->TuZ0U5a{)K-3grj1hZwv;IQdGOk@eLhg)*YMccqee1|n@Dqu0Bi@Y;ed15IrthG-4IfF3$i15ntWo7{&HSMSP zDZ2Y6VpU94;YEbG75cG-GZ1^8 zvx*R`V<^C@VfF;q*x1W8_vqq3Y)m1xarL=du+tzXyt zW27LTK&;k9d)cy{gG}+5FooP^q0)v_lnxpndw{w|UY=e%rR5@byMEt#aT_KtYD9m8 z?N@v*QnG!FuUSx4YrC5!{0Vi;gJ^A1N_m>AE2yEhSG|zsFHY^#s@%uVGxz1nm(pjA2dxaN3hLdg(ar!vRu*hBg2;UW}~N9H6w z!sGdL3&)g*gcY!#)~^LFX80*GU$bYGc_2d|g3L&6Y_)n@-4fL^I2V^Yt>9}CW7pKN z_C}QEqxRS_k1>wzU2X99yTY?CMSfyZ^*uTHoMdi6YjRZ9c*27M_l+7C4p4jKWDgdS zPM_{BaTy89>dwj`$JJ(QNTwNJQm6Q?dfxXurA6%7U&U?zC4c#{nb4_^PHKpoX5{O3 z62qUIU9MlxG(^5kNXW?d8MazJ^tj;T1`T61YB%)_9quo+Is%D_j);iZvYJ@eCb&*) z%a%7-{$x#U)gx110^6*X`yXi|$pdGUM-YYV*wFN+JS7Y?d<3Msq){f|UNDzygZK*o z=Rz#{)m=Ag=De&?be$*cJ zS)5yWUngMFHD~tO-JL{PfY9tdE5*vSUTYtUR-rV|P<`PYw~+)G9?W~5TPl#F^Sn&Z zF1Mt7!qw5)EWn15AUVrg)|JtzPcd{+A*U|gayI<%FA(`d|ArbZbia-S_Vl$t>7Fr- z9Ke{H<%}p+Jq~dmqBXAEoA^AhDNeqi45+Gswgg@ZkjFO3$6V@J?(WJc_m__!O3pJ7 z8|D8}H;k0w8{g@Q*+lfIdz~I?f^p0L>@#D4yXyOUtp9)gP;hLQ@1t!N@ka;qne|1-tj{>92&yPbzw<({-GS~s3cz{=XCI3~c5v^U(nEDFrfg=77W>!WU)2#;TT zkh;WDUM1A-uB4Py>GKm}w|EI$N1X4(Z7ZvED@w$%)SrDkZ?De`1);D+RfG*XUYy%x zo)9oa!E*Z<40yei2R;!Ue+sXBg$*%Su0!z-%#x}at6iBAT6J=_I(68<`jne``ve~m zJNC$^)&_mI2hJ2zcg-B;jund~kg|&=In7;VG=0?GWwO!K+{IEHfz1)f)Jk&m zqKR?G#LUOsMle%3-B=D4+mG^+7BAv{T2+y?L+&jQ9eeJT;3V0k@E`bS^RbwY?O;@asW9)J#U zh4@gKx3tJ!H8lhBDVIjYYo(J}1wZ$QxC`lN+;&S1*#Qr+)d#i+k8ZwcX0&98@;>-_ z*e&_|OVJ4B3%ARMybuFyh~1uD(QqzR99?4m>33UD1=)h$osnpu^3Bo6H(GcF;4J>t6G}%q zWzSqp&scqcr?FXU??LLyP*9=P7N=H9I7QHUAX?dcdYpA#BqvQB9%>rCM{xM;I#nt; zP4^9PL!01XA}z;Z=nZa+8sRc*R+X=I0&!#_$k6$+IuE(+E8Sjns%7e)@UnSt024PD1RZ1K>#jbmAsZ0N0_bS1h5EOLuyD~@&i#L@Fr9JguKbiXmxbuw1BTx zp@#>n#BMDEB}6Ca zzcm3sK%8K_N{8&FVkTA}q_QP{%!$gXDy}q8dFI=%(U=nh7ZYnXA}$xTI+|0-M!||T z{rDdvD}Bnc?34-W!j+6Rcm949owOBMnNl_be@J~e2~PzyVTgF$5Tg3HQ)L-QIC;iB zIt4|DY==_R3^~I(f%&Nu?q`}Kw7o<HK|KCo!cw^VP!JL``A0y?Nj^i9rIjU_h_480@l){krJa$f1T|k;x{2fJuVrE zf3)j^tYyp1(%U6rcUMC3aKtSYbY`o6l4+jiC!_17oSF;6l-RiJWbFKb4!c90G@eU> z;QTVT@(u-+xbCxzas6B&Jf8lWaei-4{)0J1U5jI_2q*Gf>Oq|CvO9{oX_Qm#YFNSz zWinPjDUN49&sXvA`n~D!SEcm=cfk^r8aoe7Zw@bPFRUilkoinq%nH&I5@H6)IWeuE zpziGa#xTkyGb`K=QyvSZ%zAFW4fc0Nvd{#kdQj5nX5dwEK zNcQe?3GVMD>_7XV;J$DPLrqXm@|m5>{n8gcqPsf}HXOdNR?RsPPFh?4RtIpO*A`e9 zQ9Om0l_`cOD9bw)5q?}fD!8)CH4EZIpDG0vmNJOE$_Gv9a?J?~!kf6@!aZgXTn3Re zIt>xP8UmUw=SqW0k`ba?HFq{W9F0h~#Td?vrr_DJhH4n7?$#HBk1rf|$l>de2USNo z{Y>puLad1xL>v!8*vK`h>j%0tuP^(0w(tle3=!P1tWUS8EbIOdB{t?F2qKojA!KksVG9Fk}bo&3^Ad20VPbLwD@?BOcI+}mtLtN&O# zNQ?CJT_7zwhNB}6To-28;&;Fpw&5njlt=O`#|DGYxr*r2Npbwr{oTbA&6TG2HHS<+ zRU?QihC1mdx&Oq-fe71gm4#VlUq#>HON!LqT02xStGBteP*VHwVa3bGkKZq=m%Mpc zeV?J^GZ{U|?HxPg>tt(dF38He9ZdIgtP)*e;ff2}8l*f@IC<4YOsPLMRJo8A_6Wbu zDgFXp`2(y;hLl02rZLO1fjc_b8*vo|e?fhxMx)UVwqf&R>Oh^x{v4k;53L+!0ooa9 zEgpR}K`zQs_&&#X+>GiA^(Qsd$#F_IiKi`yC(8FZxuo3tJV!&agDH#t#%{f_`}divO=xyoc41~4?+AkxwR zR~t@6s3fS?wT~!FV(osyWc(H)|B7Kt#pkM@gtRXR9&eH zv88K_wL2ne&Yb@K=bB@j}CTS^qA_^ySefY)H^%L$OKo1BiCRRqM=|up_QroeP57`DT z5nRwO)NKVM+_tRgG3SHKu+E^j#MzYM-m>c9ys&EOgao^?LH!fTLs>p4yoMU~BKWqc z#ibsMs?LvBfXlC=IW(O%swsx(+bxZ-Y-6UuvksijRNG^TAaKz!^ z+FiX74xl|gpzJb|&$L<-LnIPO)O!3BAu&$p#jnsIPVJ!-f{R+W_4%eO zvZcwMERD~=s2ikT@)Q!;WX0ipm}%OvQcS77;X2uaLAKO6u-&pNiB8o>XO=pL*sZR) z@q350?TYZ|gPtphyEAkA?(iAD8miser#*9Bs&aGIJH=b#m+xbFCPToYv0|w5Q4a>BwjQ+&xG5mW|9c! zjI^ZW3^pX?!N=DI9P?2>_p$hdx$hwyh3|ZdRUkYrTfn|p^xQTwj2Go2F^#{v72Y+{ zl9RD)&{{Fo!cVy-{Qd|nU)^cc7{%xgDuaB{RQ^;RB;2;ZsE z`7xvJP_va8qCQL^5JV2&c{QnwRT`$(dS`8$YO#>tXqn{hKqxCKlUTZ5poi$HQUd@R zEe^MC_4TLUx@K$~DLTNiG%zq=2N<-Ljj>N18=k-3;TMoMSg)ru=i9%hy;4xL)7SVG zZ%kgEn#rB(srnHYf6z-m>;L+7TpFOxn>eonGahW;>>DA_V9Yz@GEvmA6@AbPli(Sw zsB^~{7-JI*CVyEC?c&i9z~uhw3f-ek5JR}rcP+f#DM~8L&0)V)jyKo z`O}ySRa68us_sN)WlsZi&YA&rTDjlB@*I<^x%WACbptpYM}?df2SWIpO9g(!2M536 z;j+Sm!@^<LBKKJgxICh|R3Hy3491@MBaYC~?e=FQK_!%`yjRwg@01RfFW-GSq4 z5uDM=%p*t(><5{5Q6IRY-B1#@CPAtoA2b)Ycwnbm90w@gx`wEzjXVut$Df|yhR3a35=5u5!X+E}1l_b6u%L~v4}$Oe z^;%(vewLJ!EFB!QIGL!Xo2>QOZJUZi?K>WLGGb8YW5kXXn|1Cov&7uJ(4fZOY6wsb z0NzI*p+4r^zYz`y=1Eo9z(~njacnOle1bEhAHjRidIyMXy@k;ptt?YQ=axs5v^nhMBD07*h zm_r$5pkupPL}bq_Q!yx*8d*#2!OG|~m4u;FX>k^gi29R>+}AM?KY*%PT&K?m7R!~9 zz@15$h2Ve^L459X$0Pe(X*Zh}`ylw*Y$Xjum)$^?Z$ZefZ8Rvij*f{b1ABB%W3kxA z6+a0M7vKK8?2G6n?&AYWx2gE^?u96wi@5kSmS215X~DAf8oQyIl0{2)8r0{PA(`F; zOtmrq;Lu$ib^6TuC#_qI#Wru2zIN@JeV!g8r}{pZ+#LXVgH27BTd2STuKAQfln}=f zV!YI@l^-~K__8}^Uoc2@KCHZI19}nJXCE%TURmp{cI{IbofxL9Lls(g@zSN&H}-`C zHU4R1lV$%}*1RdHS_&b^3y&!N2;}K&L-7waZa5yvI|606x-nR&x?+RAb?fyk;jTNs z`fhmt2&jlc9dAud&Dy=LcWD^{H;K;f?(X*Lz|EaJq|RhP<;r9{0 ze(Ev7M;eFxHL_kw9y}(y@8;G8 zZwq$(DUtx37G(F@2(<7Ke<8k1VCA8zzj+Dw^9eCo=G2Hhyg+IX;=qABWkZsC@N|Wk zR|U<@`m!)zho&|*)b82qtKK}~>$*~C*DJjAPirGkJt4`Umkx!OPwy@bk~fN93ac(w zooXav(q{n73e35UTbr@$N}IQ9OxYHpqfF4B zDt-6v=p}%`#WA2BJ&13DF(?${f}@Kr>GXOx&A#IHBF{3=4K4!|(ROK7g+Nd3HMq-{ zEi-#^7u0Ak!`c8)M}h_ril}q+6oPS58Ow2PBw(?O3IJn-uEO~jCi&KZ4}AH6 z`I^Me<8qh>S$JL;g)^BkU?uQO>xmmwdt`kUWB)9Rv{7LaLI)%hxpfJcH2v&5uf6Hh zW1SK-0-H<-SS2jy54gseX_VV$MJ#|~er@n8<@qts(&=d@Mu#xrq9KOS?d(FyN2l#A zn6VtbfghTuD6aYhY3ums&q@o_Rs%WTbx!Xl0hF5FKMpV|uW{2*9HM+=TJa)=@VYvt zwYAmx9&_SFUNw3~;lP3O?hJT_X*fA#W@g6hvm0Nx&gxk}&Ukkj1Re8MV_F}Z7)m}^ znhwA&V1;{odsB?i>dXx znzepq9ytS#Oo)%KuW|{5zW_-$ru)=npUd6h3;H!eSYSh3NdtQzc)?=ZJmSS1T2@6eReRJ=o8v84VA|F`ufaf$`y#ULx#?MQHLWu zSk~9WIjQ7mqdu1z6$HWvWcS4uz@RRpr{K$Pp8{7flVZ6N-W+@JNE5_bKd?7>1X8ry z(OBq^ShuF8Ks&h%a;Mu;C?YQ=KFpgsr~hsTEXdMZ?e;ZB-E9xSP#rNbuAr?Jn?ZAm zpNSY{K0exK|A9H`<3SDz3NkNIJ2EcBtHI;8Wck`!H_XwY3DVNY_#w`*EAjWca=h${961 z^k`KMpgOO&tRWJy99rG>BWwVB%T54@lT^?wch;;Sh~x}r|8HtuP?2p=wo3B5NMuKSCspUOz&R zjkb|u-pr`r?B{sUz&$6K9h(7Qr?kCCXPQOHbaZCpP-;?scxar<3u;H`Rrv1~UTS4? zQw-tkV3ztq!pYgkZR3IOs=|zSeS*Ms<1{=sm({i$@k)&`MBxl2gJ5d>y`Wa@I@Zv# zX0a-p;gc!wrkI<@^i~^#^dw!-FWtCM?N-Ctc@M*%1eGSn3Tx~as)@rsNM3G;?Jvx7 zXeI<;&Gj>Fo|jit1bq1Lp_)wAJAUFsS#9n4HThC7%8<_L%br$p_p62ymUK#esij&$ z^AUO($&w4T1qQo)N4cM0oG1g64q2`Y+brPCFI~L28>Bp1v&k%QTsjFi@uOVGlhtS; z3>*OdnXffx^uyJ8;&+_ZZV)9)@uey+^jmDz6E6g4Q&%kpTcqrfM z2EbkV4^yBd2+|u!(?1p$Z-6y4$gg?lp>*xDw8mS_OzLhT1W0{8~S($UBBAtka+9jXzEB^?Ac z!Ua8lL6KBqYU+7IP#2q(%AQc`K&4iv7hOpZ4Bdlk1XJCv2LU8+GK$ud z44~hh)``x)Z>t|gLaH6f+A=2`-+Kzk$eN|lF%)q?$rVBlhbh}d#{#H7aCC>Ez*dz# zQ3IXEeJ*om<}g}g=6C9zs^^fa?!|qUU8p7;K4xrVljz#M%4j#Z{_Y1-5xeE{CeA^g z338yY0;r|9cH80e_wV2DZ{D0&ziR%IaGpN{CGZ@3)u*ta^9Q#!btV#Ekg~Hc_fV+= zVIQR=B~O8r2*R3|oe5P80AL$tz5JTrt&W8%kT=EFeFt~Ue~0h=;Njnpci8}W4-LG5 ztK2e8yav``>snK9&*#pd;H>onq*fbJ)xP)L=P!P%VPs59jQ8!EH(#w@y}Fi+Mx!O} z!8HG4_=f|50dqWEjhX+8|Gf0ie$$Z1Ygt9e(A{NTBzk?xyguG>E9hC<>n^t-zx&Mx z*uQc9aOnKs{am$t zp<4J~GSKS`R63g@0b8IE|LQgm9|7lo_Rz|iZ|>#4KJTC3gMoY`3`rvJ!Tyc&mx9JU z;3tlVE$FL!eQA*cz}@uD1i@hc#`*s*_55#-`A!~CCIhYj?AsR>a)jaH;QXaTmZJap zm3@6q|0Pk2#_Yci;~yIEMPv5e>a}RhzT3Pl8nf>k0w%)VEfkpCZz z%sQ4oX@kw}0{BK<7NfL3*Pg!!S{GB!?~dRXQ_jDTr~l)n#gy|O<|h9MGZ&57qA~kZ zZTkOB{S4O{FFapxX;#32b#6}?r2#Tf;~cDaYjMy6;EErhb_(Epm&jl;nbt01iqpT~ zM10CY6PZ5!J}n_3Vdlo>0hfK#xTu zsn(`)kaSj|pn_rRzRx>nGwQ_cd;)tRj3VfFy}B|2&|pDjLGqOPhH;bqg`)t@w?!LT zVglg?d|KZ6&RE)yZr4{Xmf&HPgHcp@&?BjH0LZ3|x&SY@=XO3>r>SDh2=x0=vQXGI`s!ZL*+qrHj?fBoC3rzT2#<>y^amzu!k42mN@1@SIz$k6`p4=XnWgcrbeV zRA%20%(8jp*#$5>Dg>v`?sFrDH1Wa!e)Qn32xDi_fuW(eDIF2sQHuf{mzR-81Emvf5~6cOZTINhX@hnch2-bwL#?hyYhM~EN6hzMzbbM5$MXI6 zg|tmBwG}mtc0e&*5|@5?*u;HH)yvnX#tcXy5;@ImdWKTZ^y7!%z4)P>nf#P}HDAcd zMzvSO#>Ydec>;Hy@UHb`I1-pG5Q>&O?2>;GY>cVGzUvqY=*I)F(3T5CcCn~SY<%Zw zYB3GGc62qo4ND89?6D@W9U1}19o7FjrW7c=Nv+&z zHNCmUpi{%r@hoxt^5k*`%iKJK)Q@5@G<|6dGUJNaTL@ohyc6^d6W9B^0WI*~&I;NZB4=6Yr#XjKH57vae+~GYeT6l3SV*F&W7Yxa{yxjhldD8EP3mM=T4_VBH+5aEHpeQdYqvB#`n z-SI~s8%O10wh|5rg@$a>(@-SO_pgRyI0dr@|~1CJv4O%#=NIaA)DT zCbX>4#%9zxht_ZycTv(;tQhK<0yQ>DtFW6gE4^JFrbxS7g4Na__nlx~dzWWM#>{u` z|JGp@9N%zr6;CR4`Hc|TxUKh%O5yUMSifSjz0#X|x4&GPmGDgk9>x?_efjmuYXgYo zT{Prft~8%7c~)t9p+4c^k>K9-vxf(oWpG!-Oz#V5!wiwAE&-wpK6V z3Kw+!o$F>GxD*5yV$l#>JN9oO=*m;7TtJl(c){oN%$B|Q-rW(W$jHE#jQX^WspZrHCq*A-|0O5`v08qykpC0#!r7}#wjyN>820WZ40W@~BwuLBP^$drC! z>XMAVSwH$$`VpziCs2zwm$5?|%hIg~S%!(NJcklUkp=bk1ByLgWDdz)RXZ}{$~DSy zh_>o#eE$601a*z$$Owf7`0Y`0{UD;V)@OueOJ z2Oyq-ImC;Rs!2cRb^0K_*G00)!+ z%4Xh&vzuY@csKn<()`06>qQVfEw>a6xu#k{?7FPpoV<>%qq!hyK z*CjkV3mg5o)!JXBaRki8roY+4jYFQTBE??PnFNCu?P7sqbn|6|L3~)b%-^c}@BR&m zUD4G<;G@+I$kJ4KxWJgm(Nrt_pOVh?w_wWzxpQsqWv9d`Ol3KZPmWl%3mUP=yBxp0 zyNh`b;;N8qT8)87?nUwnz*bjP9uS(9$tr$cWt8SR=V(@2*sXYpPfHZ7nlGLO2%i(D zx4pK$di6J!c6fQ}K|O=B8aie@P4$YG73%5)$@TR9(+d7XN_q^mzEXSD)#^Lt&d z_XFVr_Z$(7xt_x318lvdPE&K5xvn6=`6&i~IC{W%{VgytTD41CJrI7w=k!yV<~LnF zu-8)^A0C-RB*o-UgZ~l?a?)#c*Q8X0Pj?=<%SpjM4LLLv&A-{MXEWJ*o656a-d;G9 zV>(FZ-!k;k-%=s4e85F~ASNR7{SKW;9ZRK=7|qu%V4UuQ+(6~Qc4Q9b;y<_YR=VP( zyr{0rMfzod1N8j~B-NfRS$p0pm1ng$Sj@qACVY_b3B-Lzz4>j2T)fxxcjjKWwra-o zM`tMJ{2(FDQ_#^wIevQ9eau`I$8`^o66B@A;iZ-En`)1Op^vg;$u`6TJ^^36gF+PLwG?xArzSgu zgs$roTUTv06FSs^Z)1850Jj_^_F9R3a_c3fPs`u9%=k_!MAfo&ih~dP<%;Wk^n1zM zNI98Z)kGX5c*%CE*>-7!oCAY16obiIt-4_3UHi|&;%^)-8^C_r(Nla>ePZ;IFxfNOf)DzE|iPD>v_7ZuD*i2wbZ0z@$u2F*W92)YAA= zBxi*IRpDoW)bO?mT_bcF-z%!;AfKgFgUXQ(xCplx%PQ_Gp!2m+`5ejVmJ&yhPuDbL{z2cp3>~G`(eDV)NQWpsaGxH7f>@TVM*|di{wn~45b0FOLFEdYHu1O+d z9vhWH>t6*#-^(%gu}d1j4kBGlqQ+IX3&j&E^y?N01dcNe+O7j8DdY5XpRRbx(QG7I z=Z+meDfxtB%HH)P6O7M1iw#YZ{CxMHlRIy`EKZW_aW2u94?;!zXBp;XRIy2OTQ+S> z`TF-E)#Nf2(%#J8aL+L$uNyg2_GdM253ocBMa<}09V!q z7JiysYI??a;WYC^tkO@~8VnXltYdSSBl3=3T07kMd`NsS`paxdn1&nbV-QC2CKn99 z%N2IV;RbG{7@UM*1VnfFsud3H+axAt4JH=F{Ke_2#6#x1ZbqyQ;V7-7lL*1x2t8=J zj|PV10^AtE9IzV5WwT?`Nvux4s?W7`L{0cpZVgx;(y=}##PAZq;FI%aou)JUJvE{A z%41r1J#yKkJ-1lx0sqt9c25NB%4WTpCmygk?~@|y9%-J0jS{&mq6wi(%@=*AEvR>|vZXSB=dl`VRR094zF{C=*e!ht zA%UCBvU9CJ`5R8PG965Ngj&h)^u!_F#856F%BmCmQ~fyI!{dEg+w@RL-Pl_h=^>U+ ze-s}u)ohHm&#A@JuRXO_h{D#zL^X}?9WY_@4NHlu>j><)j_TLaMqA3zYVrBk4aH(O z(aNMolH@_PHnT_?m1!)^oD0s&eY>$L@a)b>55TrEke$Sm@||6?%dFa{{pD z{P4N)Y#eH%26770+2Q&K<59ksQZQF~f1O08ild8B%8fH{&RI7H^OKQ|yqSU`5jiC6 zXyNi2To)9*f{@iP+JakQjY$D{z6?=NC?cnb3l@Ca(*}&V*?iBXHmMa-prs2b&~#A@ z!&B7x6`y-dMQXq&$H-D(Lvy)3M9v`blsM|?+UreOcBV9d1wY`q zcAFW7L&FD+p}`_6lk$@reK96^AyLby#XAS28rVS9&dj7bjkogdgx)4}ABG2iNFI7C*>}%N+uuG-^)B^e_o?@7bO^?Z-dhiSy zB4dY7Dzt+6{)}BaN-$%~pE^7XoDILf&i4O7Nd)+&2X1_@@SB%{zId^V+Bm+)Qi-aC z^em=pL=0G(&kcHQASEbbI5H8@#RHeqDsTWQvpT|!%jYD;gS^`$*cPrrmb!u*zK9o} z1PJJB+1`8!K0ZD{uu;C}2wJ&96#p$1%c%c{z4s1lGHu$2Lkvh36%7g&n$kp&Dj+?G zg${}eNR_Ho73npgB7#U0qy{S>(iM;vaHV(YHAwFPLJxu8bqnsZyRWMQJ@tl{akvQB9P{=i{WY%nD{6MY^~8OIJeW zUIB-r8IWWv;llPFC4_Z+7MZMX^DB(_yjw@M`!#Ln6UC%p$6Rm-zA4m#j+{1SmcMSN zes9a%^?_X~PD_~H0x>Y+H0=FrAjIQHkic}<6|b5j>ut5<+EiH`-ylNU6Xp@kT&&U* zUEIhw4RQT+L&c!OA?sc5W|jwV(#~QN7Of*;Gf=x|&lMTD;V9H8Y&+d8Y(D|8>830Q zQcNQi8kq3SYF%z?tsOyp)HU>=zuMgG^#K zs9XtaNzkwA0M**no)V5z+C)G?NuP`8!h`)(CkBA9k!4T9veNwh0zz@Y`;Z}cr{UZa zCnh`8fgukFG7);PaFirW@CDop5y|>2Lgj&CgN2i61<`@mr@KDXK{W15^5s$7gr~gf z-Q&JzKxjWN9_e*qwN^no@)X8%-ge=JFsd)mfK@hD?zO>U*u=dAa9H+9ly|}UNG)f5IUTkzVzY4v~{F}9oMXwNqu;+1@<-n zxYk5~E{gHhlPL2xLu>`B=Gs2u6mF_w;*`DAA?4lI)Cvx1*@)S^nMP2X8=Cblr0Z8r z>c~30Zn()mS$>?vzF0pJ<&f=B{!}9CNfxc}1M8H%V>>a0_^^zZobV*9aCQ-abX{dl z!Mnr=+0yXRJ$>|cu@g}m+mO~-jNhqTa^o)tPTMQcXaIcZCBBI5jvxKK3Igqr8v{Xl zut_pt(>I!NROQ(FP7OJrHf#B&C8R$C517L3KseF`Fo2hQGt&9f#7^P0qmMk4rs|10Sv3WWTlez7`tK}pAma5lIza3!$#Ppl*!3- zoB_Ot?!6~)Pr@YtXd4qKC^s7yj=<}K4ls7^)1XJ+9`J{tc46m$Z%0-(MDgOgB0IYj z`qx1hR&VU-+bMnb|;xA zmfR^17qsXOu@t47@h$MNY^(sl<6sG8n0;G$f z==X@?QME3Si|Dw99Mythkq+rWg>H!ck-Df&T6nLt4Hzi%w4b!_6`%wh&SJz44r&=q zrM0VJCrsnLLEC#f-6^k>xet?8`Vk3*EpgmWG=+jXEUL97xW_N_E?s?)sW59;e#v*; zt_AD zOBnmX)gA=_8yVsRZuI_Gm?&^__F~-k3`?HISFNU{SM1jj?RF9t|GPrt<;2t<%cTzs z%-psYPI{~q$-r;+A_6}nqM%Y1O!XN~o6WVn0scu`1Or1@ts*!wL@36Q_4V@~!{1?9 zvmYN36NNwsC&zR-i_~te72eV;K(}BQ#3E}ja~50B-j419oD8+EUwMsNDf!riWw4go zCdNhclZ=}n(4Hv^W;SOH5 zma&`nY_J%Cdh*{*4P{#$C8gWI5mZ{N_{r5Y^<(kui&eL;#*ey55Ic)wc4~dD{JZvg z7Ej3zTOn{pY$u}hQAwq1$XDvOCe{`wl?66Zqf;o}A!XEOEq!$CxL74^ED9uE_esT{ z-0NYE%`%8HFLsn{pzFVy7}aeN3&{F-N^dQyEh8Tl00hDw(16^j=*hQ%ck=7!Uyd+~ z16=>>h_oj`LG>=~!X$xi;)Ix1ZkuaykfG1~q)bg=*iy>%3GD($o2cSyPC~BAP35DF zPXI0Y2$7Xz(_r3CY?Hn)k#yT`LKsuJuX0Y=XH$4Mj}u?F8kq08IMKiBi^AW2ei7*T zqrFA9doxG)f???h1Fk#|2q8^t0oed@BT5w+Nw zV+pevL0&GnGprQVpy!p=VBg-|^Hp^5RsF(Cs^SlAA*_qQfQlrlV{P{^OKG<$lORyb z9&AERznIE)X)A-Rt1c*PjJgfqmL1P=2!$NdUoB^R^UJIVDUtm!6h5wXape(>Y z7sAkFr*M}(!lE!gVRHQlgotKnz!$ZT<8k6?3Mg+z22~Xm-pi5iw|v~cE=No}9mo%j zI{NR~$`6&&Ct(Ok1^o|}SE5EtJ|id6l_FSg zoxA8VxuQFnL?*Nxoor|o5Oq+(3cX<$R>*pY5Fm7YNI?*Cmz>g`XxhOO#H>3sc)?*c zXC9}bgL7D)Zp#fsrz2auaEs*l&xcl>!W(+ri;n|9MEf{~@dEpyOK;pohlRN-go~{h zET7!ij-CHfyba~d44|AD!}6o=9r4mfgS|TuiNky!7H1Zb+9?gAhZ*B-Q0wuMJ#9Aj zS~GxHCqmMmYaiMwnPLq2NV&w;rxm!LuOaLC#8n{QW1z-;-_#`lnE|ad?Ond9w^)0YC|jpAy~6*d7O(tRu!swBm5?g?Zx4ve@%K2uNd%u(O#0bhgya37LITSz{n0BcbNy|U}G zKi73;Tf}@rUxs9tI!sjIU18My)46!tB?8_M-c103;}<;GAm$(*G$VZs{Gh)H;$t*v z!3+$^Yk4Xv3!#v<TwN^y|l( z^?ZlPXhaA!3aA!%fJW#?$i@VVwlDYXnw_>dS#Sx(q$jn<0VE=mm^0re=&AW0q#sa1ud zL@?{xX=ub8qP60Bj?r46h-SG5;8_>}^%}47I&EpM@HhFZ7=+X_JR{7eZc6$ij3YN{ z+sr2(yX7cWIVy4j=*!ET`NDP@?;}GAWyo_q!&sAXugm!B$Y>}R1-wfNcKQ|^3X~v;o8#lyVLT6 zA~?omFdK^KS&-EX2SVW(gxC-5L8vhDq1}LoVi906aSq?+kaQ#Z6B`s?&4L+(sypW! zrY?u>`OFT!Ybzis+6EYs z*~ax84WDTCYjFXy=jK;HLiV+nqEZHEg&!}@Ny!c~8@CAE`%X7E4KZNR{XXh;BCX=X zU=-GogIs3?xMJe^H=#YxPUVuSuNVUquN|cPn*mc)gemOiB;YyYxFPFs<%y$%sSb*o zeMQ!Pr!hoE6Z-BeU{B|EsIbnFslA#w{2N?)+rR$hssHT7SPqa#Fa6c+@v4oHaAdJM z%++Us?s%~$d2L>*bQFO4JQQPuLZX@?B6tXf3~dk$|{HwFh+%Yf5p*3$>H|C|V>sHSD&E z&c{1u*$@aw21J$0EMI1z$W$-v;8B@z6DIq$s3F*GCex(nh~K3TefyaDkkBBdGzAxjIYL+f&J|s3J z*yFL>TSp?`47*fskwHCy5^Muxo0Lm7A-v2~$;eYB^dKw6TCNgY!*>-RWihfFgR*=` zhK&)sjW-7kfVEsr!L6l)qQ62TL`htpik`urDaMsiC)ux;G$l_Hx4fbV=wSF zm+Y2wmoon@LimfR!x*6UF19GU$s2AtP?-3A3IgErHOj%x@TvB6Lqnfh$h-0BXm08; zlX3c}uHnYabqi$lxRIgi1KvHEGNl9^eup;KOBTCZ(wz$VkL0ZL*JxUxD4<>RYR9;y z&xWRjQUn*QxHx__t}xqUEdxL$0~%p_Uri%gEv(1YeWvN2VI73aSdp+S14iSp_DSuD z{FCxFBmsx^d+^Na(_q(MoKRu9ncHOwoP#(pyzgBYV)wW_oIDuEt+-!EU4J~~zmWiN zeIl106mM@-X^!Cjd4#`R*ZbsEP&h|KX>U~Xq@MzFL-=b30eQU$0Gw|E@{njKgK5_5 zYC%Gj0(?wv3K)B5q!b=7xD&y~6hpqkgF`bG-q`G?g8T#ptudf{GP0lt2lR>~gA73? zfCHy<3XC#fr%sYva{5Wg<_QRzOGpQJuAYLjlb!4tGJ_rv9qd7``7rD$kQD{xLvt0j zP-1IbZUjdv!0ASiL2mv+*m#PP&mu&ncM2lqtU{rBSO^fe8n4@28H4hHn~6Cw-ka~4 zmaVOL8=nT z*q}dRFGfPVz)HDfAqKF(Xdy}s0ka#Tw7rz0L`shEvD+P3*1cq4Pj42l*4afMV2XzY zA}{&2Xc|s@bX~MW`ly$980g|WJ+gsShse20HsbgI$;s>L_sdXuTC(I7 zfO(d2o##GexRwpd8O=dR^x6x*QZ80Kk6#}Vv!Af=S)1&b!2t_?>Zl?$H05#xz!P=Q zK?8a0OO^xo=S?TPkQ)s-im}13kodK>T%~@m_;ynY2mOD3@GU$7X1*wkYhkOVch@sC zyoqjIMn=W}J_hEkCZkSm0$Q_EP;I8%Eb<+}Tyd`}9N6_ZG#T+2q#3dO3m+p8#TM1i zfF(w6AU<#%+ysY{88kEPlK$>m^mjq{#~2 zZsoI$^0WsA7p(Y7H*ZQ(jdw$Zzu(LxCDC{q~N^861V?Fjq46U1mX zV3vULv3t*6u>kq-o76qiv{Sto+zztk#UpNblEJuFSDnP625WM|JiDes6^WZ1$H>2yEc=|KZYlrW6Ij(Wr-OhCTpvR&>wfE@z9@_9Q>r#I>(Burhv6<%OL z<%@sIlFY;56q{~RE#<&T4N)D%RQpG7RxQSkeulGz%(8Wh9R+iX6-g(_5&phFQn2*OOW672Jw~4S;pjv z{F^q`4eLmoFPnuszZiHJzMr(~QZ~i}lDj@wy?$J)sUBgm3k1_2^<8n`^-=g)|A0T9jajjapPK1 zj7b!*Xipp7GHOCVu>0l=@H*MARgYd#jeW1-(F!sde{yCM*=AQqxneeno9nnbUArR9 zw9Stai_4#T8i%|#(>FV%)@OZ*&B)YWdq74Rh>eQNdY?DNwB>~k!voZfW^#-5-9^uD zvroCJVh*pzS)u}^@f?^QDNBIm72NQ z@0GlsyQv(C2?unR=4Fo#4Bt+1nH-#dvH4GP_vnNQfKQFhF};FDNr1=;)WFtWC~-?y zX7BfW?lZHxyjCE;`Olt@dhfGsRPNlugzeEMB2_Wn{=zg-;7|5Jf{;^jeo5bfuZT|Uq+Q7I)X#x4N7 zXP8lBG^Ji=r={4DUEdTs?=@Q5E_F05Dwp$p!Em_&RL%>WP2hT2INlHX@dA{%Bi|bg zT?X=SUzC&Fe#Uj0_Xe|zU@I4ShK$R^=zf&yh}^gyy(Wz=>QM4LZWuC>U$ar3v>9*Vi0dUoa|0Oo&^K zh}+f8p(nEzUdmw8Wp4UG4`-_m_E)!k_EshR?}Uh;UWh_(B)I^92Ni1%DtYJg_)_F= zmufy0*ur9bc{KPf4<9~!g5k7Tv2|w_ClT-fX7MtdZ8eH7eJUUXM@Sr~Ts>QVR7h1# zEy6xPN)7HEtK5`}~yICG^5p0pz`dpFcda1-Vg5qlZ?3>blszR`D%I|7elITDnuu1=T5GN-6XmCL6or}$_DO!mHXCXmBL63^C z%W>_LB#+&uG2hZW7#War^H7Q#Rl9-gQ|z~8ZkJ3LddBJ`lguD1etyh1E+qhw&#OTQ z)h4`nM#BjW{ef@j#-w5SQ){F+w~h@ec~+cYPDCu1sm_QvmBJZs6>bql^vIUAf5wkl zXX3>xt{%~T;;xJ?Pld17$5pJ7w50he?|AJD z@Bs_|yPk({JMPyCTEc{?q*RN#^R*dxIn^wugd2$KN3#tc>hgQ$%h$c#o?tpAhjA^{ z91*8iNUnf=oV{t@s5VKdA$^)r{}|ec88Pn?5^zjdz5gtHlel`(m;0J5*Tns>@vG#* zC_g^SZ~Gqg z=EX9A3XXCwx^d$#u6m-zMpd^)u~X@?R=~uc)U8^QJqkGC3aF{IWr5LDU$TsV1UTvp zfrf72{m%cvnVh>fiD9fw*0yc5^A*+P`+B>JPb0TXGe(A?@-|v&cVlwH$0gF+ z+t=JH^VPje+V@vl$dLmpE#%)^n{YX+${P{Dk*%_g08%L@Fw?ZSFzLr9wv;@QN~`#3 z@dK~sw`-QTQ@7Z+wYk(^6draLQG{8-VWVlp%nR@3z8wJc2CSngsTEX2(^oCKCWW4FxKmdPruLN;tUAW#DpsnxX1?;$MK3q;x zhaUFY?)_#J6H?JZG#OG1Sy{-8dtMz% zQ&_dGydS#A_Xty|A3EO|O!SvZliOd>5F;1827Pi{YhBR`+i%7oV-_xc zUZIN64T!FX4<03|xSXt@5s}j%r*_+Q)8O#mBq2<>o_|{N^B=@l2M=OgFWS}_$IIH9 z>yUSt^L?rt1j@^IMh|lUS+L-N6nMHh`IilJMT1Re1sg{-7>Ls;R{W}NZRmZ z2E#Dt*n%7UVlS9hTgc1sppG}WGG7dPG;II#xzK=-)awb595Wsw?ra2`c!$>#r7EZ# zbav;}3Z98bG-cWXl4~Q;#ZGU$@X-=a>WHp0(e`a2!)#{NSqPGd@<@tB*S4n6UxM0s zoazW|;)ZpZXr-Vd*G7l^zj;*X2BZS4(Z1lU-LbafMu68UF`!KdN zE%p!f7^7&|tON|DBeg*T3Nl*Zn0K_wJH*Ai1tt^Q=>ht)3G91G(=KNxSI-u2+K+zb zRjv{|8^j{iYF5uhZyI?s9Oz=e8CJZ=;`)brVq9zVd%h=r5xYf{{USVX9$WFcSSYq@ zYi8bA*3p-Xd8|lV`#mvci?JUzHsS{TRKA(Fg$OA6{UE!rZDxLLm>^xB$v_vaa1&J) zX=7K}Mk^~@nAG3A;jMYK?GyxDU}ZQr+L3@5RgsRDICz6IO^>@~g0eY?mcD^hs(`Eo zXFuqfnxqVlN(A*#itG^;;^~#Yd|Npo_QJYoBaV}yW>r4u=%op}5SOXKV?TYnwY&1H zc(FyNcM=WDYQ-^@$Gl^++eUlGd?mKel)eK=6_g?_`a#GEV2E~0`BP*`g%R8PdLv!W zdzTDA9Y?okoL+9*_}?yS$%}nSUWK(%UhiVXPadY;vE_CkHUiK^50m>^U&%BmEe?#g znQfYxsDp6q6ns_cna+G?<4m^6h->`z;1J)F!GoA6oOs(l3zveyhimy;)W~CR(Dk}; z1&*59y;}xg6EQI-=NkXY(IuW8R&PkMGn@dKvVaS~OqOM*KZe$E%YXXyi-1cBy(~QT zw{3-D+huQ=r+pW=a)Rfkg^X~pSOx9JvE;PuJk!7k7>2r~0gO5wGOny8>Rgl+7D}hv zau(4>bI767tWKBf=j3KWwHsLO06hZr4PAH9=REx`e-jEYkwc{92-iK``R|I&w}+tc z?!hqb9Ev@Ka{~2HIH%E`5Ap3I>#cL22ApLNa!|m@fX;X`|6RrZyz#APw#TfOW^FWm zIj0^+>fAbhcD+DL%iM@-zdd4{6fTioQ-|EEEd^g)mbJGe7bcA|1YG#6u)VY=G@c+) zQX%-mlZ3}EMa;77+-MKIT;Z*q(Mz9%zbHJ~YpX@x`gOG3Pwyo;D?eJQy6ZOR3Tr`6 zm5_^wSiI`=M{50BZTLm*XfI?-g8za<>1NcA%XfQ%z;?-fX}%o*{3nR`EAsXYvTcc_ve3ld+7&S`@6gP{a63z4>m?YPwS!+ z^S}S;|NQdr-?@7ZY^k)2w?E!dfAijcSA+Ej8uJ%#TOSIhc;21Zwln|T#p0lYDk}2B z510D)GTF8pfAsKZE#T>l{gk5ge{wMkC~6-u164);-4jAz|5wfa=28Mx{8!EXw&MM( zX8)?$k8LFSUu*Wa{e^!I%^&O1pSTJCs@b0i=MO&mSIz!avme{0e?x%3uNnV_06*5H zKau3WYW63>`SC~pMw)+cnEhB>-~Raje`=P&3RjNc<(_U^^|^cI<=>9xejCf^AJA@V z?Yi;}(sWWW>dfMo&GLKjU`9Lc#Idcvq`J@#65^_FQnb?d)F%XPu@wHvg8b;Cj7k8Z zXq!s*+(H6M5e$cN#3?ZNxDJ#%$FRdHzw`aDHl7IX->j;t8Ud9;b$}K}*Kq#X-`5Cm z0}1L7WD~~pItGa68Fz3=v6WW3h*qS5jV)h6XAff$w_u41d&4(Cr{owa@AlyNFm_m! zWpb6TP$W9(?X&N5um2WC;|k@S`+CIywhqJS{={BM01sIA`SV#}koJ0atw_lTf3mDl z;Ts|fTFU$}s1;dp@lHL!epf|Atb@7-5vWRy$WHNN*z>n5_k)FZ)rD@LPu3L>Sz&VE zi+hUO?c81b@U>xkSzi~oIm**)L0A|JokE6}DlC{CCeB$&3Owio?x zJvY^5@Us-XnV>KPv^BFk+kxTD!!t!ZSKl3XT2l4KFIs6jtrdytP`LrBB~(x3B0I&w zcVxR$-=4ro6a&(sKm-V~I;iZA3WXT~LOe!VkR~jwVn>!(`$YV+#ZZQ1(Z%8l^062l zN>pW}kc5Op9E??N6Lh}Vq~Y`Wc%_$zdp-OjX(P{4WM3Vk+=Aqcj1ZxF$0mkaQ48Nz zC#vugd{Zkh?RdqGR6s>&-bnS2YIP490Z5q2dGzpM3b-$~z^PL$Q2hft3^}2!lVz%C zzu46(WEXKt)raC6@eW91&QjX;e9CAn8EOEv=l zbB-VE&G4^gKdT1O0m+DpULAobMqx%xIQf4xl8ej^s(NInPkI2rw!1ZL1+Y79F(vQp6tcX0VAbJH;<)vA_4Y)C-Z`4}&+l3|&F99p)wmK}rR!1vTYc15bfwp5s+8p>IhM@OddiQkA!*Pr~!p@~RPLm;OYIfAY~9RBW@+Z2?WC#2gDo z<3P2{&BvffLrl!B&l*Tp3FSS`Ahn%Kq`GPZW)m{f4&^0$0KoOzum7k`EWr!1dRULw zi9kFncJS0vPnTE(48E~(B#d%vvl&s&7h#hZpBWkLv@-geLi}dfG3P)ZTFJ4Fst16> zU|^rZEPiZkY~WBv$hIE(Y!>bO6S4g9M>~Kzl)$D{+b&7^+b;jF?*SCbvcrIxzqw`R|GQOaOaxhzh4G-~ z|BJNAL0-rbTX`Mc{a-!c))Os2sYs9f!Mpz#**U6z)$G?Q^jCD||I2EIG4mB+e7Rj# z^L_Vk8(qxm{%>CAIB3RhCIZq)(WpyMQx0&AYb_$*|7wOZng#hjUQ-XZG5qmdJ=cQ= zv6>4_wk=nFoj=?Kimm!USJhd27h~fIJ3~#c(QEmy*5j-|cWzaKjp31G0m9MDQrQB&2b7B2&QV9MTQV`G&qF6X2ZwM87%1mExNZT{_;ZeAhG zdeLNd!yYjf&$~&niD`P7FAgyqv;{uFUwIRYRq`yV?A!m~*M0IBO33VC`bB>I<}bS$ zo{H~%iuS)8YtJBoUaXh0*Kw2?M zJ|3@iL>&wyqzc_ni1*H3hEIJpHyzr{aPFoTxFVW{!dR$dSNRT# zDcs!tKpw}}j9i|#2Hsxgcv?8ZLF-a)a_Q-1Mb-I!sF%_9qm5hk@?(!OTKyJY{rn^yz4ewbb@A6a z#nwsUnJX!i?Wrk*e84>o`b4Tmj*fqmkbKFRRks?FJ)s67Y0ZCFjL*6p@Zg;uV2FJq zLS$DCqWhJs6c9lo@Q<*P%=1#+%D<7~ukPl%XpQKP_6JagIwAz9@41o}+m#3E3hq>r&%1iw`T zLBEaHpfKsswfsC!kBcvGXK6gkOT5cqeedL&-9tgcnQFpf;qTXY`|idbmz4VYMO$D! za$LwC^y^CC#bfA2O9?*g6I1~*OR_v{t-VukE2gIRRd2~kLTW$9<&($ZKf0BNcOP`j2z46@Y zh}`M1CPP<6L%-_C8`Bk;bMM8vK6C}-gFaujLPo$Y!)#YG&Xen`UFdw<f<`E5>-Tf{_t-FCD!Q@qNLJ%#Y5R$Hgqq@ED%wajXLUx(3s9#Gbw)(xb;>+M&EF zy9=T@%mlqT%BX}c5PC`Hqc*8(=AMV%$b4Uqp-~b#-*H%wORXg$O6Op`nr)}mqmwbx z)*mxE#~<2XujrgdT6bO;T%y=6cZI7!$+6haLsYoH@Mu9M zjQMNL-1M85MR?U>sfgd~VFA^>$3>T7%0{FvqsS*8*mzyc%%x>Mt?iXAd&|hn#ZO?K zlr>#avTj~=$#L|dw1oCl(~7EVv_iNwSjLk5tR*a?F~#%MJPxHb5QV4<=<>}Q+;xVp{Fr>1wkGg_GlAPi^S=Gk)Gt z375_sU|EecZyl~1glnA7)wcpIS>N|A%3fU@~*w?fAGCqYWgFK~cDD}@Al zE#q2B81E#ZuEaYJ_*eT{C_J`@?~vx22<1?Q_?g=&PtA%p4ROwI&N$&xrlBq~&MIf~ zs!^SmAc+tZQp|L1+RjUtfl`jf<9*e2uM+_|91oigQCu~3pZ?Hpd5d%7a^AIvXUp(_ zUD%)^0rWhy%V5Npekg;R$1S z+_jM@tr#w+8Fwo|!2qfQSfj5#=HxCBhxmvo+4t5rvu~At0*%R6TB)w#JoP*IWzNkB zUrp6E$f1d$+(B=9?b^s^m$I1*=P#8nWW(y*zQkNZjGbrChUi2I86lm{)=o?DXKiyB zC2uspQC%eLJ|cQ~(u<9)GjD`tUKOt2X@@FTkXM8Bkj}2n}BEXDibtf zCTM;7*?<_8OeGjI@%FJ@Q?PLT>6gq-o@rx9o$TM502M~eK2o!BzFQ4pMKXnHb(T%C z`h|np(WwEyG~T6LN{Xxd@prp(nw94_zlb#ZCTqjHX<$jk<@;!0_xN6( zjAEyU1)pM5>>vV(v?Cb z_rncZyd2aaoeWnvDoQkk0#8PnWMXXBpE&ID8hc6Zv2SQKbtqMFzW7lXy}; z^EmR**PkpZ7Lti4^tx$ajjt8LeRfFANipkj>Ap#@PZ{T+wkG<>YyEVxFSW3$;sIsBhuT+J%b~n6)zVNt{5=8jy*r@e6~DQH@6K| z22rrowQ3paS0R{9n(i{=e4^P0ZVUoeYS*WB!1UJLOpLqAK)(W!lRmPLT`0GIe4oj- zU^*unw$SfO+vd2)ukW9!@I|BG$)bLs;#zx$J+R~~rB_%ctqw9apjF&;-}$6b?=RR` zn@rhoAE3h~xgJki0G#kMDTE5&n+7r8&p$?W#2%IthRc16uGyr=y>&I|5#nwe=%^w%n&^dv|g}J`;a6U9WW)-{E%^S5x^s&u50P8!T8A zFsXNr8h3|wVBP1dEF=4FS1{E9vLu6PCBu3Xn#?CZo73uwTZ`+u8o5<-CtfDm0J?*^ zD_Z(jmOC4ch+3acTk5&I$SoQ9xN>PkcN0+6r)g)J$dWo6+RnjNRNeif^i~c{dE{h( zqr*Tq7j?X2{qE;8`|j@G+_*Z1kc?MP{DkpnSit~$s;(Dd`p z^m}6U967ijAGha_U7)o4P1o>Wxql;^a6lJx?xQ0i+0lacY|Wk`QXgr8@Ig61y7>Cf zYsRv?Hfr3suY9_qmnXTo?A|UVgvY z8ZJ0G82dTcBHrZKWe*evMRIO%L@7*N zsv334phm<#empJcRJcG~`^6)aIA*jVnStZwZ1WYj-%RVZ3tx51h|;2`I(Wh{`s4bo zk9M~*+^^j3L(g&1i|kbXg1h%F z6dvHgO-C+YCn}wknF0}7;f}!9W|{fzhWIP=yRWtF;$yVF`m}6nPdL6&%=+~6D8nfS z8S6KjxE)#RY(H}M5?F(2V6P7U=STi9#AMV&96K%xpW@(AI8A?#|EBgGACJ+vY?!z4 zMVNp4TVjwhXHNQw%v7%-S%0*gH#4$+`J8LjjJnj^S#peR(`$#xw$_tHFEw+XyQPJw z9NVY(nB5Aqu>iR0Kc0WFa)V;?Mlvd7mQAptXd?pMZ-DFx4I9h!5TUPYjHeX7+~8lf zYidyW#S;^VA9J|r7$r()K<7~zeC;Cj-AezRRm1e$)WwZ4L6o9v=*6<;5|K4!RDW_} z{57*j{GOp~Yn{f3a@MSun0S+0A8^^c`{f+{nTn5D^;Cs^H%jdA<{cDBdXn;)*_g6= z*Ttt=F&=KqPfZ`)Z#{pQQBPx@Z%-Q~tivXBv(s%R^E8@w_G~C64b=pG+N4?jQ)dIE z8&7dRbHHiEev5$2_Kw#er`pO)b0kW-T&CG@N>uS{n%QRNcN)HVg5}sLQOHGQDg|H^e8^KVEVx$?WIv{*`w>7>ItS z!_>XUanFGx3y+N(uI0_FG8ED|zg*!>7b8|Ldg2Ulo~pfB=T6cK2ngWTi}Kd8nO@B| zeBVO9M8VKC#qXi{U;=&;lIK+aH=AQ5!Me9}DP-?sF1Z!>EMj(`{Rj$_&k5unGIa>M-SICe0!AP}XhS-An(Iu|f$CdST- z)V*jGSialPv_%%X){=A0W(@5gqG(@z>7xwgOB#n3eu_St1LPK)9GBh%ZW1`$yhSOGamawdr; zx%Y0f>f;mpbcZKn!Ssm_UW?O^ zJ{r3g^SKs%{G${-^)stL5qhGqn$GEgK;il%Pa$j+-?g*Hl>g)N*Iqw98Q0o z&kHYM_Ly6Zd{n379&X{KWuv~tB^yqV7)a;iArwT2>E`azVi|cACK~Q^kZq~#u70dj z(30b$xc}_yUtCT>c~%D4X>$z=`R{N2$lS$Ix1b;1(a>-zI6rSYy142D?n{LqA@#GL z(twQ=4i(N6U{P=+_cmY7j15DBtVE8S@@$y#q~3e3>+%OoQzZy?%Wbc)xi=`|Ze;fw z%rtl+#sb+BAo?Uuhi<2-S7B;z{h2}^BF2^J#aD;ItiBYoudGPCGNlW+*vJ#0w(>R! zal48Wr8uPbVfd^_c~*9Z-o?)6*5a*jSg6&> z{sW>}lrVNDKY~S%xo&}>S61#zLdV0g=U)$#nf$i92Klkcfc9-1Pi&s4-|H-Rkh5q57RuhlR4#S`H+nWxE#BXx%JKH;88^u6F|pKkAdeCWoD3X#m|yf(&tOP`8& z4C|knl#r zF1S6Mf`3uE!Y7Umc5UE+_n7mXtO08eS4mX>ImElu!@3lT2lu|F16`Csh|FOFB);I z$uNVd*B`due=zh+nS6}>vFV?i`H>vc$NYzKx^1lt z+~>-^kyiIQ^#a~0%g}1GNd2~?Pz_PLK0N}hv{PIOeLl~}5(cU{;>I!#$C>`pi8P(t zF5beR?h&GKiIiKsm>P|+Uu@OVD(+ej%u)ALJe32{@~NhM?DwIG&aRi3Oidr&(@Ja} z7x(c?ciEWrlYJ*jxmq01W(l+((9*k@Vmbqk%5=VJunT2cX{Q9M))TRwt{;e-{@-OX`HC@fVVMtCj$gXRd#?pT=X&=sRLWTpy1S=s_2G@bcxONH@Y$UX4lJCi6@2F_f;2O$yv;9 z%vN3sHy7G>!)%8-XXl|a0X8e2=_F&wWn6xrW6YWYdkY-J#CqMWh+`&C8uoIB)^+-L z3zA<)dKpfYMFvdg8F$8)9!=4Y%F z^{M;AHPzC*()kJ0Z4B5p$w1(dwM-VE>U_b$A~3jbb|!#@k>={=h!`$;Fod#%y!179 zpQlwJ%P5PRAv58SB>wv9v?Tp;C)p$PyEi^`rEg9;Woc_P6lexaaJ$>eh*C{JsW3UMR_&YA`pQqXH3}x8r3DTfQuikz<%)D83oC` zoOh8z@bUe35i#0QB@CQR3BJYX@ipz1^BKGJt(srv`dI2&@iZyMpc*+AL5bRH&IBtO z*=aYcK|AuG-u_a)N8T(4Xczje9Z#I>W|PW_sI$4tRZN$WQfhk)~tcht?TYT@6b^7zO(6!aCN-C+ao&x zjd+4@-HWn-=yPT9!tH)cAMzMY7;){=N! zjSzWXKi>KLVlOo6he2}CFZu3JtbKiQfXiHSivf=7ffs`#AT?jvTaLsXx-kl3oVTai z!uiv(D7Ion0cJ!X*NCWnZL|7j4sXlKMCG*I>OP{qT;^Pf_=WW8_=8efC8saPWA)Ps zwtJqQ9XsxRe>5P@x!EWH+1*Cq_82G>~S@H6#1h$>73iTiJnW@*NERr6U9G z_@nzf_b;WMqqrJ*e=<7jVJ$ep90a4vhQ(Y*_mE0YKwez!HAF|Gr|{Q;`GBHPQ>(7g z_IWch=cfxJvK0ij@(f!_Y242%$9H1e9m-KO{1WYUw^K>0O)Es^i(l<4-0}<-7`c4i z3LCPM#C2YTR*|F#$5!W;dYc0ba8jcVzjobfO(Fa^s>iL$?LW@r?}J(4gB1MZ2!ivW zaSkj)A>E=AA3vFVqHBM!(fWKgI(VbWB zZYpM_ui6}u97UwAT)N4g(tq<95sTmsIHWDr56BMFswT&D7huvD^iVEA=a%jJW4Ar? z+{c;uQ23MApvl>6RhJTD?->?ua=I_Opi^^%VsQL2{esCwZ?PIJCPTOBMG4x2 z0d@ZJHGMbe_XMr%1=w$l*=q?g0RbU?g^Xv$^of_&Z=UPcTU}^YZ!gQ_Eiv6Vh5dhw zy?H#;4Y)UK4Iv>$S;nrij3s0zTM}BVS%wIOtXap{lf5XCok}G;W8breA<3A*U@#-w z*atJ?8TWb5d+zhR=XpNwf0loI`28;5>-uhIVV5a%>jXbL1SiHRzwP-O>D_folP4G( z7+%TW-_5N(0huX#-@_HChwyVc{6XYz<_zR-X$`LcY>cPIOBaQ29HTTf$6hkE*MDsr z41GT4FIWfYKIW0lW^uta%r5YDa9>TePmD1j453~j!n1V6p6DM#+yd5&qL;YbJ^4SFQhu~;Mhj)$2ND(*0 z=5g!9T&426i00KQrI{_h=Ia7I5uF`K8@nwBvaF5R7knitCI9hS_5yaoN;81hV<+}* z-X6(BtB%v}8K_S}{Tprpu9-Voef~qRL7L{Gf{Ov0nU9YE+qevWqOTY-Fg%ldF|q_? z0F(*_-YgVQU%Yi`MDl%!0@>;89V)bJ(fME zqyg;z-5MT9na1?iaS=`{tz3d%>dWY5KFEgoJ}(nJrR z=qh?1t5$NOdt2_nv`*tlThNXkys|}mr@KCCPUlLDxq5LIc&Z|>n5Sc)*R94!MMY}G zt3Zl7RuA+IHZGVIR)+~_ zTmui@1D{(#KQpCA&am5w1@M_+)w@DTo;9uT*|Hyq+gmddUj_mCDQQIjBnRY)hZFs~ zxx2r)i?@(nr{#A_3|K731ga)Ftu4%rmn|RwP{ON8XJ$@LEF|+vU0m)3WfzM<<&pSfkUX3n{mS zCsOC-cW}m&3S&{ zP>?-jDLcF*q#C!!3?j9wpK^>E&~QnVzWaD~BJ`pYRcN(r|Mun1u(FKV6S@9Y80C2u z-~GW1YO}^B9qk%&N7y__zowMmSY%TdeBb|;(Rt0)k2PSde0#6sW%$pjNu-U@!@+f_ zQZE5=7aR1R*NZ?YwWG6Z0PM>K1t-sXQbM9fGn`Him8`KGZ+2U9ucVyzXUt4Rjm=IS3;CxF`V_;(>m*>>d&lBoDSzNYkJzX z%jELqu%I(Xx(}u*$V|4^mRwNVfPu^Eo!%PgMjB2? zFWMz0MpImil#J$A4G{yPb-=t2%>x$8@{d`h1NK@p8?5!!qDnJdi79OIB>?AFC*wuD zJ}+Zn3zxz@hHq5hn7vvoS?!{s&s#*arzoWhsC8+I_$S0U$bRO_$-9snl()ZGNDzHw zlH@fK7A6-P&Tyct7D4*mxN`KoZr55^_BmbR6#bERA8glWCXjo zZBtja9UzZeBGGchmt7IBcD+t!eB-n*%8Z&l6h*}&(o4yT#^U?a2b&8Lg(L8lj9CgR z_9B%;#A<;_tnHCOnUFW*=TFx&ZJ$3q(^xdWrwSzskSoxJc%2LHfW7G8vnuR})5C~L z@}&?$)I!ix<_MuI%pHO^;rM3<@#o)$?QznDMZ5pT=dYZnDKQKg;kxu-^xw1fe_uv0 z(b|;p`S=&Jq5iy6>x`Pr-6tiK={lxNv(17EO`QzBhE{&VWcP&?6RRE1$XGQArPE?; zPTBrpIUnQud1ROF!>Fz6RhnbXWAJ0f@FM2aqa5hoLp#YYdKWti!;Z!Ada}v>+kAy_ z?YlI#qDqW@Z)D58Zp?^Ww&l79gzWbio_t^&nmX4`x6j=EMqO|od@JhP{L}Bz4YxS} zRU-G|?bwrb&%v`qV-v)0r1bXajbh}EIs5R*nt`Ke(xs_!hMVWj{VFxZYoWI$s-KJD zd*d}_4{lp0RO%T#?!En>v;9Lrbf)H8(UMbKT)6uDCt&+{p$F~`p_;4plLixz-BE0i zKFwvKKM_VM2laS=$48IX{CFN74GiE$aLLpA^*t?PE()CSSettt zm%JnbNEWkL^(Q=4+nhAmE5+c7qudTlFviMDzrZdJ#&xZ<<^f*yR=!?)Pt~#R#w@qs z{X^Spzd*}nc_(a249Ux3KdrozQeBNGH>W{E z?OVN3^5OzAaO8rn*jUI;PB4T1UU;6BW?aNdhhiT*C*q612QAr-WOUfiTq_Q>!>uys zMrX=xw70XfdOK*Y3ok|PA-bEox_wCE@)uLfDevaa`!X^Z=-5-_;jyWR_24w|4?{ek z6?8R=^;#65e5^ru;vwneQCMEJjNn_k*OQ9t|2!d(LodBiEi%oqE_FbMiYkxd4!dQ$ z=_{>9Td>LMa9!7#$jQ@aHQ64xU|{OSz`b5vwcPDG$*n#O$*`x1P@gxlb#W`HF2KEl z{vqq#L40(NolR4k9@KrV^vLmdIV;vKMmhWw2$5biK{!xuuP=F)_1wM3mxu~PF1j!3 zbQDHqx<#+2PDqp3o1Yqkbb)n6(#JrOv8lR8S#8_%oi`?|0*GG=Zexbcsb;OOqrgJd zGjd)YBBS-I7-|R4h~Sd1g{yo=xMJ99s~f!DH!sX?N@kOl|D_eqN6K>k@+~&7Yc#VoLQEo31HPcAoo#Z$wKMO)llQ z{;0hA;Wz1}`UlD!*)k|pm+`(Lqb9%$&w2*A@^!0SF-?>vBZVq2#|)5^9nmOrXIx)J zqGh}RH}1cyxVu1E|B}6WO|SKjD8`@9U|_47LU6wyIs3<`aG4sWtd^TMx-}25=1Vr? zgNkW&5*$4sK5Qs-rpXqxH+(&UY(M}K6{e0*FDeXq`88=f#32jSKEK8DXDW9l3Cc)4 zP~ySZau7a5Dgc+4+;QYy!D`dZ<_}W!tt1h=Vp%pPq5plSL z%%MVs^C!$QjfK$ZdlyHWu=%zqd|WGG2x$L1v+y#t^fOWF76VFkl}FwQ-EX}}<2t!~ z>C1zOAh6D!)OnVjWlgw<%1F7({yXE~WXrK_3vD=CC^pyM^c}s)&hha=44bBPN1gAP zu*=B14wibrH|@l#HOT(PMaYM#k|sfbqPqI9G{08uJSadcG*r^}NeA66E=4<)NIRRh z@Eq1LM^Kvu&4swJR_s`CGI7y-!^Q00M`1F^+mlA&dlV>A^;a@vFNVBffxA2>d{L@h z+bj^mlSFU$l+$uux)n`He768WHYifV%I`+L>0fZp4UcmHWBR2K)=4Y3I$rRrxQs-r zy+LkFl^nt)f; zwHk@*Zdz*T+8;p!i%qdbC&kClQo{C?+ch`|k>Hkj<8hh0^G>`snL=Z7G<~E!%>!_8 z2gw@9vHZ%~W51Mi|A%o4jYI|Sx!Vsuk!@g}tFKa= zgedLAEr~6ABqnj&Ao_%ro^<8PXS%7V(hVm$^;C%=%GbFLRKsH1It><3DXt7Dee^A9 ztisd#3I#`ZchBTEuL_>cJ(;LBY#w)uuR`OOBm=9fxOwA9ohu32FO&+K>}{{NbOHWO zUx2OO_D@s_n=Y=3WYSvB>L5O0&BfZH{oxw*8YjVitS#|*oqam+1FMc>i~0_PuqWG8 zp^Bw1YxDJ!{;ZMlM#`D_I>-s#l$u*591j)7p0RO<)ABA)XuoAR^}prI zU;trd!XB^B@B!JX&epkRt&b_58yYG2S`2JOl@K{nx7jD}fVjEZo*r=tf6=#NPiwxocV5su?yik-JFcTNWFeI)id0|z zc)O(M1F1?OPAm)oTqp*C;KHFnE2Zc3e*%n!BKD-4UH(LDPBy^y3?@H!IO%CZ{u%mr5=QqT*i{H@i{t?P(wwWQO5ti8E(vraQ#Hgxxv%zF49l)PJD zg^mHwlY`R++;EnJi0ck*{@ZHNu<=7Ev)9RX7;}L$g#nvv*gIhZ0y~I(6!zT;{l=4c z`CUh}5|j`?lqFXzDyQS~NEhDxOVq>>)fC&=QsS|azIV;z|9q26==9aq7L3jccAz@{ zc(2=(Du%?EsQ!HTNzZ>kL5CkGy6 zME_NtLY&{RbdLBIY}`CS8-?=@6@J}I6fSh2>L|QyBom<5IUKwq;6EvrWhejnbv{#+ zB26G2>IV%Kjk~as!3mDvOGr{RU2s77=I!D->^-VfLEZ!!4mwfiWJ@|Wqt=UGM5b>Q zM;7Lub@S|JXEsXtQfcU@_NxgA=KDgJrP8m)fHAN2*r{*zUF|X??c8yb8Y?`oO%6i7 z+@~x;)5NI=l2xzSgM^Q{f#cx&Ggxn88TZ?Zujp-W@}dS1WsHCIzPCSEZo7Lyz@U*hHrT6H~lggmdo3qthiGu2^V_C(8mjBQol)7 z#FsmJ`eV_oIltd;_ky6+;=s_)^N(eoX3bM~oSt-?+8(8QidI$F&y@0ey_Z16Iou)2 z%RnfVLFzSB+9w}ov|x#Bx%RFpd60u7c0u|&v}b5iGN&sY(eW9<9`mFX_}1DyLz?@>&mlhX zH@6l~i~VMZllfMqZ{ap~XZVIJGdzc$Kk0uTX2Eo_?oT~0XJ$s1$S8o7{4n7>_eZAL z6Z;;ehH^T*t?hbP6+$;wyNeL_jlf@0(j$({)qP<*S$J4*Y+k>-Ub`DQUF@Zfu!%-Z z*DB8iJJ;7n!@O_>VV43qY%hevG{fGfaAVi>HORiKCrJg}=l&5gw)Lk8R&pQ$h6a_= zWjifTer2_rpCpZ7FEiPN-B4R`@>)nq83a0c9OdbNpT>znp|YHIc&EcE!!@%aVU1 z0x-%i9S*7kxAo(v2l13&?@7lu$`XNRW+^e-D;gpzkhfV^TicV!`n;?G(PWD!^G&ZlL{-xYUg9gzhqce zCDn34KN$M`ak9;K5KFR*o(7{gM#AQH^H;vtj(&qbAaqxBm7*`~Nk=r=%B6-tk@SD| zIREUu8a3#ujAJ8wf!>N6*Y}srMB7CPPBA%X6uTxkP^g@XVFNp$J@ps1*Npd&pKH^rRegU{2 zUEUTQdNoGsqrleT7j#2)!mFoMN4*FK?uFgfxBEv|l6>tU<6$|{wx-hX$zSpjUf&On z?c$}D3qt8A^=Sz8?WNHjwMtQ>)llv;xhkVaRE2jLcHckzO#kfkkJ87*j0)S13Muj0 zkJEMmP{Qwri4oN`Dkt9+5`nc}Miufp%4_6)|1)R(+2<#=BaWQbgQ5A@V@kDR<$+em z;zR*CfYcVHg*~JS)B?WpI*kDm3z7TVw#>kxEjl92fjT;>d?;(4HiWG^2%~nyD#{HE z-U>sjU4KQSZRY@YYe3FzJ(gM;fG>ONEm$3=bQL?#Id5-I4-+4CWH-*8ShjBGdB#L+ z*^sdjYYClpx8`TZ75$Bl|8Hu3h7F8^m;z+jy}}PeVi78I%@7n zDBV}Hh}evtL2Zh-K9Rk%@|3QU7?W=e+L_s zraB+N@nqnNj&b^j$95N!e+#J1tnr1s-9GSjbYG7#mXZ;|-6>3``plDs=dpg81#L9A z2#}(eJF=B$R1L6-zB$W8E^b4lXADP|uNywNq#*(bse59~Kxe{~%HjDb-0Qsf#7h@m zbr|zpu76vk0^UL{|%7LyZP&n1~nowQs^ z3;S2vDHu4{~;QPAX8}X3f->D(2mdDz~1s&U{6^k&AU3E@; zWYU2;%Du&sivPICJ6M0J&853+x7v~F2+wSGc-I^tNp%E|WqH`o|-(MDEwM>Tw5 zzIZ)@spNyQI8BL&5B_y;&q0>xlE(fm_`>}x)zcILN4|4X*l!izu2&;9ACo6m*uj_V zTcD!zAwA9YBgN@=omi|bxv6~7i(*NCAT5A zJq=jt9+c8CLmjtG@g;$#-e-uBa?m3aE8d4ki)~@kLfjVY^2 z#pG>tQuS43-uC*r@*6Je{E&e)V4%=@?{dz=PrFtA4lU#G%^>dv8cropz7s~3`L15H z0e;<1O53osZUpv+@>7t4nWj-*Ph-?Kr!wyt;tgd;g@0q_Cp7Y(z8_0)FCZJ!331NV z0S@a>b(QGpb?$SW66)iV+<7d?`1$EE>f4#$e$5{PjDX=a#Lq5VoHE2uf6|&%~!1vP9Og|+G zTE8YImE8f_1Qd%ZWNGqVO-g)n_U;CW_>2Vyjcuu&Gsu=`5X<0$W0vrLp1@7xK-E(yb{lj!%&WLQAFrCwFu!9S$33Hr&gm?OAHL|q_p{>d>0~ovbkzu7vGPcB5)G{nsMJYu0m?? zTRq?(B_0Eh*=fmA1&QB6BY3q|*UVGQ=&`qU;!9W@+{pudPHNCs@WGaBF@ zYta;WSy0nE95bJPB^U-e=1~SiL&~xS;;`2-m0mXe|t*a zI<1J3Ne7yTie=l(Cv|dCU)|(tG(+Q@=?eE^3bDF7ksoPv4rq2~%?!n4-AnjcCfG*C zD|DDmqE41du*kQ37dMVu(9!vok%Z<#(3R)t_BL^g+w!kHH-8GX4^smOozLX+PoPI0 zVC;03=TeeTyKqx2L`YwDj6Z1Reny33g|~=`LjoBHznVt+li(c zM;Ft!Ln^^^T1V-{fleL}zr2s3DBI^vpDdY_&gu)FRsAU-4i=c7+%EVwn^?`t8h$HY z3m?U1ZhO7`@mGHNHzrhBfu7;~4{g)U)|mx&xvWCbGBnM&6zFL~#7V<3QO}1ZxL7MukR2K9kro(^~6NRMG#=&FoMJrLmBfk_uS=b_$LNJAb9Oxr1 zPiVOPr4(UmP3c`B9vy$%E+}7hAgxJ$^!X@BsR%3&k9rB)Y(Lq2B=(1J>+=RJoBBPu zxP%i_xOO|G6s{gxjmQceH1dX+OxE|MNd9beRu_^Kz~2d^hJa6yQ`bM^#x7&GU0Mq> z@E@maQZ;DW&$qXVl4Y)iRu`(59d{|zHRBS!&TdKXA#?{@T4PecN8$~o!wHp2Y;5c9 z2mDVIc7MKCZ`9t|B)aM|$sEx4M(wDBq?s{Cf3xq)RLw1^yuE4J zl_x|(^ep9$-tn8x#=k*@&%6DV^mrEQ5AOQ|nAVTWl%Ckuq5Xo>qk_pp$DdUIMD*D$ z9_)1=mW`D0jH1-zHqH6>uqvCMM6-5PIF{CABXriUL|_y-vZnpfq|KnRl&<`Q!cf~l ztUGA@z#*U0`FgA`V=mj>`Q;-n9tbK;3c8bjMS+m8q?&Yy*#u zDHS;H%qjyfTl?`nU{&oNHR>y8zr$Xi>Sp$Z@1BEqv=Hz+o-wJuT~@2xpSRk{`;}HF zkI-XaW_>&V5ykpSQROP3*&c@=GXx2$d_-|I**z(--45$>Pr6!#*;lq_EO_~RjD5oc zu5!?zSxsRwJj&8OZU9L*!~H8$_JPw+UZ^vJm6u{j6fuGI{u}Zl;N01=Q}1zOMayTm%;GROAReEx&A^Q;JSFm-7@+hq#GK z$g-pbP-9{b9M-P))oj&y9$xzE6uCR&VRkwp=k=G9;1D$XVv<2&rLk`}70VWm(|sYO zM{7D7mU(oqstb4pA_=DhrxXlUD#|>%BzrV5E`r!DM=HdJs!=`qbI zscr3pM3AOEVD#oaVl2JbwNP^FPMH1lw;1N1!Wu_mgDpD4A{lAgmwOlzSe+2?>L@rdhU&Dx+f^+I^dn;47|%uE=HS_MYnxA;uV&$6`^c})Uz6NAs-C{n{b-xa6m`9b2Ff8hB zSGRiaounOFpK0^=-*sbUN8coX73`o%^K9EM2=0W%-R<(DCgh9qAm}V~ceOV{;NNB^ z$IrsA--syGW7D_(&+L;cHO;oLnczo2n!{MgQ5NX0s}A-vBSqjEwY|-OW)6kdsE$*8 zY^>B!qPQ_%UwoR2Uj$#Q@oGf?5QVDVEWT_|b0U*ye_3awy9ms`xMZdA^_~&cdHajj zx2*O$VwtH$172>9Nlr1{VZXr{YB+WZPVtsBe zzN$J>7`;6EU<4vxob*46Zlf2BM8eK_e{xx0u@k}>uUQcB> zg};!X*Be*qvcYw0?3Hp-tP{jHCimX!aWUaIT#{o_)yzQnqMH@&3U;r$kPn+LeBF>OTqUr3b)F;bN)~CHT%C7G*;N{!a~j(Cd-)1b7Mb% z8ogP8=6lXEkwt4_^%Mzr1?!bAkGhi6y*O?8!@$S70)FR%Co-YGxbN0QnUTs*onp_a zIAS$7o&g;;^fUq-C(1e`FCM|)3Twk3-+gUf2u`8zJ0G5L1_Z=`QS{7gZ&jZCIFNUn zd`HzcaaS_UbWw|j<8=JdJq}Syuc0~C8ou`{9j|4LHD;zFEE4bK(MnTQJw8hG+ZeF= z{g|4{KjE3D>^Yv(4Y%x@G%GiE!3ZAm%dgd$(jUR%ycj5Mf!6GL%Pk*O)M##`gnuyV zvvU&NR=^L)sQ6gs+HAjoU#_S72W%c2YM68fVS}vQ642RQXFRx`6TQ)$$=vZ$^BG%* z6a02#;9Vx`8|q4ZZDad(Sd&^9@WqKcg+_ zwm3|_WrDPBYJEa^t1hqxCU{I|AU}yvekzs6C=9#n`on&FAuD8T#64bpi8*BTQZ`Pc zeGjC%C+E36W(a9alY$)^pi({3PUra?x*bvjRi6a#<-0e|S;hf}2c9LturtQ7QSvPtB{I-}_XJluPEf{r^fh{-@%bd2y z&P|BV=&)!p82 zlfB~Cn5n+og1G~(D@D>jv8<@OxI7ST?yUF@ONkV5JP_>EbTh8uJ-STU(%=8((|Xx9 zZIdkLs|mR{6&t}%E^x-xnjB3b?;mjyMcb_j=bcc^5{dp5_m2c|nD|o;&3ksd?ZEu$ zAJ@SmON(W&q_vVoGgfu{_wrF>yVl{qQ%l~DoMm&=HU&L|{a>aQBh5C=c#=AZsimzk zSEyJtC!sU`5uN6?bCvD|$$?6}}3$bWHled@ROfFqSkQ)FrXWWi6uJyM6l#UW_?` z#$9E_A#_S6pDlrwhDblkc-NPepNkPg9{hd3P8}G4wzNfFdW8w8*$?Uv%NOCfO@~*! zm7sBEkF=`gWkk)f{R5PmN@(Oo0hKn%|@J(UX+1~ zJI1#gM9-fbCnX<0T3vTj#Zc_1JY)HRxFnE8@jtqK==5y+#|s;aR=s5)$S*b~B@VT* zqMURMKGgIv(pY(TjQxg~5FH#~A8`NEwbfVo`nH>&ezspKNhu)jm0Bq0W#MnR(Rq*C z#^vUxoMmN*XQ~tCW8P`O$1>AD`mKJ-`lEMDxb>7SsL0TgXN;-w7Z-x?fVpYD0`w14 zASJ?heQxD>8!K<&OHe2B;UEZY?PjmI%VLZKQH z$RF5-4${U@Db}hW_y9%ihwRL8%kdmtU^o}tThh+jmayH$Eg;)1nO%QKaY+Ah%aGCM zU^}j$a0LJ8S7nuG+8LkS&9nOZOWvD>!clR*JF?{HoiC0X>El$sVSMLtgb5Ke$OY^3 z!h8>LB{kQ-K<5gLchCG%L8p!AJB)*9oJ4Y*do<&ed5t>W2dQmDL!SaiUZm$wt9f3s zHR@gohH;@{%6%yL4CXD}=zw^sV7K_&h~Ac_8LNfy1?Tr`(*>T_0~u6%dS!$}T5j`t z4xX_{FeA{kWINTSWJEM+*13!yTc5-b80Q>8h>x&FJ;|w(K(wzHKJQhT`s%4L_`}l_ z_C{&iqe&5Mrf4~z`Z=yBuom8EF zzqPR-x2o#N+JWu-aQ;MQZ%H@6M~l4Kb~xwiRz0!LKj+vBXd>?Xlr(q~U~1+V3FgU& zGL1{QYpUA)d9PkyNyC=6?Rnf>VL}5N6dyAQ_mOUy;CYGeyuSAm^nL6p)IiFwh;1J< zJr>8AjK8HBZd5QfK1Z>RSiVpovhdXJ-)}i4CQ4R(fi#`IM)oo>q9&Wc>RP9nwnJER2xn`Vv5S5z!Y3K)XnALS9b!NRAyWUf5E~dq77U$} zE3LF`_&f^dZnw2sr)M7XLR7UMe@#jv!P?2LtyMO*o`O?VKrB20+wyYU_Gj%Gk;Hq^ zF+PIO1AIPu6O;V6U|Wa}lMxre-Yy#vS2-Nv#}AA`FCVgK8WY9muV}`We=F>=TF^S? zr}Bap4)x=Cqr%CFSG<~)q0IAJPf@|W@!AXp1dADGBF5P+e1CG}WbUwCReWcvF6dy| zZE6j9ieLS0{WcX{UrU&U@I&5Q9(gWbzq$ndH)B-GewKcvbntBG?SH%z|J|QZ&Cem_=nB zf){`Z^zH^K-Bx@98@YPgg?S$ts6hb+ezAgF%@VbZOB`x9`3l&;hD3AJeR3$`WuThW#R6=Fk}yxG>Rh#C2qHFT-QC`~!8{XkSq| zYbxz|wro0fO8?k$rtRO|^CCv@Dop|XQyg1(QG^rqA>|TYc2FCxbBiY3lQw9li5q>~ zOSpAm=T1eT^06&CquTb(ThWAD_uhSEZx%ITIh84dAY=F;>L%5qcwPrGLX<8RQ_%p>i^)14iz-Y)%^C+iLm01@fd z6v=~x^3R_)y*wQra?{JYQF6lwN+j7qJzN$Zei#Vowp)^<2{R>pa)t?HaHTnN- z3TdIIUP;H(57z?3sB^Z&UgR{0X;280G%wp|^#J4IY7d0+nZK((LMoH;?D2Y@t9#d& zIZU%xU#5YbrdemF-j2prHvj$Byp=x&?-b|wA#!9ZOEiP-WHjTb+C>njUQC7u^Ba#K zUp-A~o~7{*TB>ff?xrH-#-9&7rKVDnxU$&`Qkkyw9JHp2^wLXh?8rzPC%f7%Q1Yqt zQMkg(uuDV(Ng+4HFHdz?U`L!lP1c~`bn6E5yjgVXkn5BLk-jmU!nJ+ZEI#4uFMS3E zzlq}u7@}cc*M`Y!Q8Het+9=nku$qKaH+nOoLijn}z$bMWSE6xyClIXXbYe@Ttu?Np z$)SFvNhnsR=r@+4(k`7Igh(Y^Jb1CkMLyPQ08lw**nVf(+O$9+I^hb-)`+D&S}*l6N|s%{ zkwakHqCoh@2mHtkgW*&s)z*3P+s*-vpc!AojiB&NmEIiejQ_G`cvSvhP0|q15Zn@V zpYV|Ahe?7B76KiY^Pl(f^fXLt7LcY3Eb{cTDpv)(7Eww|YX%Z&|0TulL@>U8C@tGB zq0uzFPsyJ8vY)H~yA)Q1_|R*)(2zRZA)@4rp!%Ygf3_;DaMKV?p#m)hX`in!BmVX= zi1nQ#$F30^iOiZeYzxvl59cMDByb1=9o=Q#BWdjx2t72%nJ77_II54@#2P+g84F|Y zaJ$*xKl@NJB)y+Qy@z^nW*>8|}fBbqe9uqdf?KDtcC%r^ukMe539M(@6J;o{l1wEo&A=p9>f+@s@G5%0X(9$*yMFFdUWj$cP6kaZtM zzv`6OD01@bj-k5_(YyCRLdJcbjg63zi+MzCx+jx9Czif<1;aP>5;i7y>b{{;s%3BJ zJzKej=jQ^u`~WmL(&+XNh~t=LaE<3G+s;4Q9OqUM$$xbJtpPi?Wi!sluR_T5ifB$6V85zhlTV(c)0>x)0}mf(p6DZnx}7j9*T%2JlSeYGZ~u0S=yCq900>&rOWI$s+tfA$eseEhYmKf6H}Oo>Uu-MC5qHr-zrL^{dXti2GYG#SvIRs@P0G;meP$qhNepq7zVKWw$OHW z>Lde94%YaYx4`{1wX19p5OrVcc44Fk;S!!gA}e%dBpP}>lh_lg2udb5&%HRN6{rx= z-2-UiKmNLWpmK5};1_9=wN1M~^RVW0TqxsUdNbH3+2J)nvu!gjDR2f}DI{{*rSYuc z7Wph@Xbs0p9`^yaXwC2jcRvzyqfpBIr8Ku6(IfS z9xMrvhLD6ze(F86ldUS0x!V9kh$aEDdb@|bUqQx;9!yo*KHMlSda@ieB%m~UvvI)q zY{BCe>deO~Ut16D03vp(y^gp!_IoXiB1$6Q`w$n~;0hroPnyAFU z?ny`M);4$~Ef@_(DCmjF!dUZ!?CgHMRO@0!RSVMhMO|CQF2&% z5!89^i#O&Su)>8%%T?~%K6m4W`dly3L|Y59TSpF`*)eDhg$H#U2c6S2EIFwm_szzV zwJ#3}r_<79&jg{v6@6CDVs&)nIG9H%xeQk#PXQ6zfc>8#dkP#exU2Sm0&(Rq`f*0T zRS8BnbwTE69pz}Jy2}YbSXWQ5d$Xl{G(D$qfa2Obd2?wMKE(Mi+DG_IBY~9pa8g zf>+A)3XB}%lR9N}EUzaQYlPO-(m{`&C1cz%F?XY3xFFFF$$vg$`)e6IPGmW8%hR{~ zjgM4Wn)B#^$n7Vl;j3E?&7VNSfZ(K%o_&re+(*&NySFPBkM3PpIHEG z=K{X&+9;Zlwt=U<8z8KGsm87?o(FELz7~zgU1ouhGAfwf#&`|8jhlLgZRhm=^VfZE z%=or$=!15(W7loJ{d9R{;{$M0v8Zw8cBs4i(>xHj^dp4l_1%=%q$0mF=g!~v>#a?H z8r5ZG)2%OKWcZw0^NrsNc-t&^&zW=W<{zb(_i(EU>=p)wJEhL{SQY_1HI-h0@C)@h zZNC!4P`&$}dHiaD=KP`nqzfg%)xXTENJBGT5Au$`@1-Lr<>)`9PuDH5>RCckZpVME zikepNe8J56Lei7_0I2ppFP@Fm_0owKxtKRA|41l9)XU48LQE~{o(q&C4pe!eU?NfE zlJURl05ZoMp7%J?tiHhQPq-%(Tok`$qC9JUy6IUqg-)-T-u1i<6|v<8uiI#{gI}?3 z1SKD~Vl^h&9>=I+n;q0&N+EkiSftd2t(e6(NQT(ac=R;8$Av$qn4<83~ed>*J`b9PSucCu#( z#BYQ;C9omFmnFepiI@~Vm!&KuY)dTd@ASP@eZ_mhcTfo+)DkOJL5_**!9zfCjGFuIq7HTWW6J}~VC?c_@Fz-kc@{s%w z`*fR5m7NhB+tF9BY*=-2l<tMR$q@*` z48gAvP3MEhFjFB~L&_@=cn<;>)cDn*eBQ<)oCHm3Bpsm2yf14iqOEGQY{vE)JZKqC z7UKJ=O^^SHF!_INvHsLi<7m2Jdb$UF{~kC0yHDf)`JR!Ew$BUmuDcF>sOvOzbRo=| z7wH_qK2ed+b?9IlyV3QOgFZix;}Oz^WFBMc3Ak>D#aVilnvi zSI`s>jOK=lVFxagRDB+r9Q5rMtJ>7w^}c%>ZvfuTTy^+mO;lm|>=$=Lyb+~vkO5%75%p6SbJW?57O*rk_XE6Br49!ZTv#py;}kl z{gz)`E^P0oVt`ShKwDy*p>QFq#+1Q^C+O6aLd@$qDv97zFIN!dWI^c=!@eEWd=Q`K zxjVl)n*6567N2=Yfs(4F9^I&+>ii{dh5%Rlg_zvV46gQ^zL$s1l)7wl*Gv>eGMy$wtH#t`6Xy?nL8bIeEAZ;RBM9RE;ik&m!}b)TLSeC&HsVwmiJlD|5sn z5$5;RW}>@luFuPr?ivxmP0vE|+$iz}3#b^b`7?3ss)|171zkM(hxn zZF5MP0=(_uX@U@hb0avbGblly*6Zj?I?f)G>-84TwH=3rCWaBtL2TO-%d)EodI>=n}MJ-WhMweB`~^r3@ZEQS`GWr1Bk%FXj{h$X5jjOMO##x1%uf=zo`Q z={v4}DQQZ)JM=$<7X9x#gRBf49YgSC5Rbif&11Bj4g(E!Yu%w3RaD;reURE#=v3iC zqc(Mf8uk;k9RakmTIvlK)~>`A)6r7PwBL{!_+dp5bz!`--D?;n6KxJ@dRW+2*~4sF zRN0Q(PzASLDf}<6-}FXsv}QhGo}rqd3o#-^!w)+hg8hz?eAl*Y6-=*RHI+? z)J#JK8s1jcp9KT%mqoR|zT*mJ*tReM%k1@D++ZBYmZ3+}Wbet%B`ZgNfE4MWS3NAW zPLQvtM8R%WgF^4`bWWVvwL5-Y4)>INf1SfnxaxY}4d;B)cII|+P=%tU0gVye)0Bph z(KUM4@oUX@pf|_tn_r;38Z5r6ZmsSsCx=^bn&S1DH-am2)3j>}b!5UPD|{=a{%G9C zTnP^Db6T2l$(*-|d_*_X3wXGi6{%#)lg zEq%VjXS|!e!_miSpNabp5rlnt=av>wN4R&$LTtNZy;935y!PYphVf97SP~$GaH;pR z!U|jF$w-P^!SD@rSA~w_SQBoY#g$NhCzL_{aFd*;ihs=!qIFpF^$kAi&4At)E3Scp z0@JCUeRz|T4NeNEo{5*S%}rhx2#l0IGAC;z&XEK2I*&Tfl|z#}dNw6Q9=ZILLOQ{# z?GYWG@{Q{FPTKtkft*0-ci1cg=R(_Q7Ec*uKjok$bPf zWutVS|9OC_r(gJDc4^6V8$3t1gkqBJ0bNz<=AOc3kzVx2Hd?O;uKC_I~ht zK6z)W^;}N<+EBGVH%uU;U(rhT4h2+CztSe?rD>6a>uZk`iEqy~lA+Hlx@MLOpnuZc zgvgW(G<*Mk{vdO$?kzD0(*`BLHRK%w1TW3EYa1DUhHo(P5GpL#*qIbUAqiJ0CxZ7s&V$x0 z25Vr|7q#ic8_jm~=|F~5btjbUl7|%Y)}^Y_F_Y#p1E1u1?g(ZC04GAwuWF+NxIB)D z%xc+cZ#mb+!p5ddN$zx=d>SfU1+HOgGcbOg+%f)2>3VeukwN;#_R}Occ;-A1o?qUP z_Bq&KFkWE#%*`?xDNNy1ANPMY$@y@W-K6N_R`(;OWWh=J@Z5#X$^P+DEae$`)Bduc zecC47juOrZ?0Rr~hY}5&aGxe!icj#%({J2VJZZ^&M#mmA7HOZ;bPv7WjfEMR;uC(n zM|pR&$pp&@Xs*(R!m8OG!cE6EJ_2;W)f?(sf6!G$wfVlgCR+Y?>^M=?NFRs!Y*CSB zVQn*6z9t+8KgT7BFDb+THZQnH{$jA!#**THywa|8$@_ilUFrCa$ICUY!x z(Q&kjgO3N(dq+Mzwko$#NO!4zib;5~xl50EvveM_Hju?*2zgbK&FQA_r{7kIbV*aF zUkSoFTt{Y_h~I{>t<1~Wzkug@3)!|NR8D*0nGuiv+SlJPR! zZEZ#`u{x43cmhDs0b2TO#4BA%CyOa`E>Q9TH?ny~xF?l8p*InMlAhL6U8C*M0Hp#N ztqlrIQsU(YD|74e*IqGYN%6>VI>fMV6nYzH!W>@Tk8X8gra!=3^D*Rv2jr=j?B_xM zY~^d9wv!j|JzTPmD2tzPplKgX#Mv22D0YjdXz4!R)F)@^#cV{t#Sg( z&$0+-cGX>V-agBO4b)q|GYOw72h9TKnIpL}P@^E)gmjjt)h;4`fe==c|AIV3v00aS zuQnu|X`PUV+%j1gx58UKLZHKaDZFLiE`};uWdYHjy9)v#OK+NADTJ1AVcrGV5zp5h zF+nB9lp+#aAv`w`L8E_EG*gyN{YOw1@;?agzeQpGe_%8&A@ZJh z6n%6lJ=5*{S9-Kvv<|=3J|h7vLb9Fp_h%*V%~@uDcTBh=b(*cj$oTgnUI?!{pD@oF zZYtr4Vb0Cyt%B7R*)v^Agb52uz*6H!#|It$7klp+)?^l~4Lb~09C1WJQNS`2kSaxb zQ7jB4fFgvNs7NOu(o2YqaS(w~dX0e80Fhoo5-fle=^>B^Q6Q8+hzSXSgoHOtJ9Dmc z=6%0&etf^?7ta;A$bQydYwuO>duQ^)YlEq&C&#b+ictgobo3x=njUu31Oouo$4L<^ z?*B6T2uw@lM0~E`YeS*Y0{`U3_PsK1bZdkS-Mbv$9o=-tKo-Z%4mf!w&USipb*f+!Cs{4 z=u+32<1+pkj+aGL+RV1n)2J=eCn>df5^cPw+{!ZpE6=s%dJ(d$aK0dq`Q|#`M4{o`4Wp9*hg*$RX zcUc(%>eC25cy23{Sn98|>NOs=oZOv>`#76Bo||tYzgdPSO@*(nPpUaT}E3{ zohD<>ndcp%v@mQyi^Gs;tpQ#2GqQ#=_6C>;Y8XzN^y3RPVwXPWl9_(8jSx#f40Dnk zap#@5+l5QD`~26R7cDmW)q9a_3dH;a_X@DT9@ExC8%oOjV!SVp6@K$4NcWZ9pMop* z$rdIxeQX|RbeqodmRtH1E*?{4V=ypJ{`0!KaQdsZh$nGp;Dl*H#tHwiYUjxlifgmk zcw`T~OQ|BSE@s1)?egwG3~%MrHowWl{T;`1P+xR*V#~;k4aKQ9k>awrvmwN}Q)r%B zDG?Mkv0D8lBdW{02I?Y6TEf)5cp0d!<`SC*6IA;KsdpH~^fAVHo9Eq+>Q6a+ekalu z^F!KZ#5|;fcM#g5_F@ga5&8N-7Wvj!4$Mxn0gcEA7j>aLx|3Vn>p9@pTYd+ zG(>#9`$(CxnfQNRYPuGpa~V=>G0Po6@up>vaf$s0-yC2ZG6DCCoxE$6_>w-}X=K)I zJ!PEu{lSyd2{8|iVi*^v+fF74(fE+NkTIXXl`D&9r<{5ydKyy9IluRf-Zosf@9SUG zut*U;?3U>TOWc*0-P?eGwZDq)3K8B`5bfBMPqv%;ob&g;ys5iiu+ww#%mVDx{?EK7x>)za$`lWg^ zZ9Mj^+MSW%#cdC8A30t!{s8vjPh0Gw$MOB9Q(%p7Fo{l{WQl~uw64FMy~{ZJ?Lh2e zXXv@1T_$1U?@fa7HK9J{1Ne%x|r_Ws4^VNV* z1tINMy-oV)C-__|euQ@?w&B{YIhVd{H~w1TSg;H#)#Urk#67Q@_zsM(@5Dj42R1!( zbAdm3d-X<34OZ!PAyy4U5t=b4*YwF*h=Z{*CR2rRQ&%QqRzLoRe-A4hu{Nlh*ya`3 zZrjGIiJ{4`6;2b3b-Kkk_R-N~#2cNHBW5PtA*u^ZIFp2=2l72Hh0#83LxtQDNvMuP z#R_>}bhf9optupx535F;Pj-x%(l`Cl4FfTAns}XHG9?27_VL5zSjFzXn@iUEo?PyN zo2~i#b?B+MJ*jU+YnlCnMdkl;ar)f9pCQDv64O4oeo$?ZU$sy4D-*lAsddxHNw;&) z9^LO>o$`JsrTjy{o~zFfTAH2S;i=p>7_U!kc<3oQ?ile|IC_u#=G==nXPhpZc0}x( zlze|%>FfinrEMYURLLP#a&i@HgAa*!W>s5^PO3tx10;ivRNws#WbwSF}C z>E&x9qW0JMNRT1v#cYGbUg_@-QjQ+mDf4`YYnrq{%md4|mW~zO`obMH>Gwel+~qw-vCcX}^orM^1X@ z{9gKKdA38s`;Exn7YWo);p;#_N1Hx*dsH|HCAs6AnrD{Go=jd}j^c4Mk29}pZmek- zC@)vOuIW^Q^-YKjY{)gvL1|gNL*EgH9Qx+hZ}rB}3Te$@%EtA`R-F~`=;zB9<^3_b zbHW1b$FR0ya`d-b5hY*W0iL%F7`vCYl#mbIdz(ai$GOFM_T(yBWwSo?Tg+hm>kfWZ z5@n{oCZK6(DjYa?#u9ZX=8MY0i{}tg9plq3C{0Fzlo7w`F?PK03K*t&Z8NGtXDo>J zysAp-E539YUi+nre2BYWsUA9X5s?(GRJ~-j*4`h%*jya|!O7bG_Xc#88T|lpgWUWj z`PepN9e{VRvJth@&!o#VOryL&hqZqf=I+tNFy2)AH`jl-6 z!ShY~L(gjry9qI*gRop5{N0mOo$oVyg$DLcu-4y+25K9cyeBhcOOIduBEA8=^c|!w z2e{%oxLV!IGr~IYj2>~ygihvR{mtB=b?Vh`Z8l54rVO5zcU}*g;u+IrhvrsWW#KU@ z^OGa0v4}lR59Q}ouC8s>g?ri5dW62=)Y;f*^@!~=oW6hJ&aSMQDMYj!Xu^!g&TZ&JJVc znhp*WuTXkjoklR~OPzyfby~~VRARTj&rMRvIrqHK9N<8x$sY`SH>E^#cifcnbvpLn zatq!)BI;Ranu5&ncU>^!v*Wvf2kB3?8uQ73<&t)*QSW9YNG?C@lr zTO}dcCq`bS1G==#%apuQ!xHZ2D34suvUCd>^a}utgq&wo`x0-j_e>o*Y>7i^r)LzY zUOl@dwGX%)Ih>MT?^;!ad>MXamD)(kyIas9LZAVoCbdNRSXH_lo1O zv8h&(-i8BuHR&3a?svjU04)i;3w+5GHOFZ^TC9Mq8`UA^yE@QW2#TnHjVXi>jlI&Dqq!D zSwZwEo_hf=poQ{A;walmEm!sdwJz2U*1*+;fydy`CC$cI5BZP^Il_^5UX_vRBCA<$ zTNNE!!KSZ=E8&_h8)e_6m&zg$BVH`4dnoY{FIY0iDYn4a62SnDsZCCo(e1#}Vxyo; zV>rVqip}PtV=wM<``A_=Wpv^^>l62RS{=W{`08RRc;jr9zd@t1AHV;Y5)c<=$4#r# z(r>JFn0rQDy3y$*`g(Ew-HKZBjGG)1IT$`%EDX?L$1KmMZ+)QZ3JF&| zsMuo?=fkS}@k`e(L2*|$8q(TIVD;p~7Qv0cfkgq>4w_hM!Y;Q_p}Avh1VjRMZL{!& z^$uHZ!^a*wz7;RmI5ITqys1aIv7b&cWWo{|HrD-reDN*o68s$w>oz(!8p?aR&Ee@=kCN?7EM*8CvnFJtVuJRO4{7BBl^`{B<;8! zeBcGmxh39%d~&!Lf7f*)HUN7ok^ee(9HZV}Lia1Nf;H6%S&-=W#+zH_b@G?T zhc|_DR87zL(wZ4lsq?Qjpo&P|pJpm=-@bQ;weQDnoxiv=|NhW;;U)mhxfGpJP6{V) zE|5jz_bxTf8}lZ=FN10=zS{X!g}5#p8lLwMF-y?*RRexDQ4Wc58Sp!0ono}F0oe%1 z@1w1#^#eLXtRyZwTWN{GvVXEWk#WePXz#fO&RVgHLLT6)l`$F@uMB+Xb1yc*UoqN8 z$EUa}`+{bI!c$bUnzq(4K*}_f@$QLmXx+mUn3B{3NvO!*=<~{l+>fbY1V#zoyR{-V zXXQa&97!Wkzx4%MJ!kJB`)RMC(UJ(&dBJdbEue3hE*oHeyAPEPsS@td|ZL*x^t~@vd zV;cjaGJ0Gme9?G!TGN^Xi6*+k$e47?XU+Lzk#082!Og?|xG#E8wDH|EHa*$iX4M(F z9~jHq9?SO#x(&s&#^RCShN!W+{D$UH)zvIc36n^hR;YGm<~D|?^qy7`>XLuT1$r9$ zi6@iZrq&<5piQv{S3kRecn)Q2X6u3{3CUH-p9)#rboMdonUFMeesoPiH@og2F2dyk zc&i8-nGj@&t{R*VcHv{WMlytHp*QkkVQdT?J3l41y$yqjmqT5*G zpFp^m#&-Ood=pgMyWyO!sDQ38=KZw}`>eGm!~JN1D}}Bn;{w*-xIuw$&dA}O$*jqt z1>uyw<`C?9hnlMRk?^0>O0^DHz>SjL1%&&v$&NLGyRcPm_rx|32n5C|l5=Ca;E*g; z`5QLuMQ7z98nA$iIe~BBY|If5jM;)Y`_U4E3#l0Bneua=>g|c9sgS{!q$K9XJE!yxmp~m% zq6(#9?p z1XMT0rJOt^{f-5@h_h$AedHeXg11phYXUr|VFmZ@OmMzWOwo=T zUTP{!q8TKSIM%zy>FP^kQi>xb&675NuqW%5ix5@_4^tF>ApZwR@88LYUthZk5O1RI z=Bxn~y(RWkij8V#|1>-%ngn>MwOAZ?0IFHz!Ov`&6itteO)-oLpjCxA#PCR@SLah$ z01Tj4XQS9$8+h_8KM6M|n%!;28-_l(nnEMlpw+6Tp%88y6aO|1P*?9=sMQNkIHeez z0lkF9z6UDF%kR@C;Y4*_ zqz%Ivb8=pr%sers6O#4H!1|3??=CBo+8CQp9qKd~_dr?|GYk$ZNeVQX$zODrO$Ae` z{9Axqw}*`sP{r4xRNhz15y)}Wms-)vrQG2sasHkU!abnM*Q40S4YZ$>C%l{1TdpZj z*^am@jnYv)&U!B6wo^+s6uWHv;<9 z!Td8DpD}BL#t2^tO1W;ehXQ85C7gJnnt}|w#-q{C5=u7h8;Q3my-i_5G;p|Pz>;3Z z@uzidi7q^5h&qhPJcr6!MmZ=z+%p1Q3ba$MMSAz*pms-_rbtncrBG0d7~WFIkxH;L z%b5=P!*{$J@&E|SFY5Z7CAuf~&V#9MrRC1&`?!uezE*dKF|kbx46LSi%&jka~)WaailI%Z-a{3n5yR zs>5ek`5>%jzQ*}jWUfnLml3t�>kQ3H^@o5P={(fKnWo6Zw7fkwi*Z5C^ z@~OXMe;Z9M z55MI`tHw`a#y##S1=Ux*4_&7q1;KuhoT!25so>Z{*M$?72_H+rs;L=()3B9bgiAHR zDJ$DMHInv9i5%|HExCEv+56f?^pwFABZ-0~j&CzJs4Rxrll=GPP#gAI;U`_DnCU-G zR$p*l@GVt&iq2eXIS~;jSY)%Fc^SI8@PE^K3n`cj~CrFJh`RK1P#DG+0p!Mzb@*Y4YhI zzgL`JO~J)OfZrLy-42$iF)Bb9-^JrvSId&GnNU9l#;$6-!FCMAaj%Gj!#>x8v^H6z)urS^$vrolN)4(mo=_baEG5?9YF93f#oN`m)+&i zQ6K%lbu4v4at^83txQc&qJ#0#8v?n<_1NQTHVI8i`P|3sy4bI~;di?&IUd)xudGSEiPKaj}2go4--)hHKu`HuhG(*Ol%G8|wVtZ4t)R z;&pjQfZUPWBq!ibP_ffigYl5s=3BMOd?7@$s(VdaGI1+Eg20jCjg}gRE~<@f2}n3T zX%)1E1Z(mNCBBQm3I0OknN1#UROgsnK&BA9}84*AC$s=jkC;c zU{jaxnQru;j3W~+QXyUqQ}Sf36~#&FOWg|eVhTq(aKGb1%|yDv8sE;Dw^U+S|B=_u zJ=O4tnL@8a@Ry5Wqp`N=1#SU zH!nJK+n`3`0m4h*k1O`%U4{tz;0n8Y5HWj}lG(lV%#SD)?w-ITu1c#l*#Dda z-L#M5@46@CGE?1HKtBZ*taJN|f&!Yv_}02)j-e2D8`2qkY+xoaPNeOc= z?etA7@0nlsOt~`ik{L3t8)_%}A6|sHi1m)UFMKV*f5r;`$(eW^C!%S7Q>+eP>GH$i zt5m?f`j4h8fM5M!Ar$cHL@Gtr@2#bTb#|MEgmLzsk=uEI@X-UMDvfl3X^Qt8BPmeC zJmp^Y$&pu?vL@bzf{PmqSmyAZ48U+boen@89gP^6grIZ9W=SLE1y5wH|hnF6&e8U!L76VY;sH>oN5deuqFt!~C*li>xn27DpFBsy2O zsJ6ke_=+li$Xu+Ufm+|1r)^I{L}e2Mw zNyg$!j~b3P8G}>i<}Y7gZHX?px7OB}oqdXjU0kE0xYTd`_)6t0&b!V6*`A8NXK{es2@6sy)+ z>`jX8T9$0=P15GimGT$uJEzNRTuvm)F|oD^Ro$S3{agby6Yp3Vl^Hd880169SZ+z& zZNe%LSAn9|KoFk7%oAV`gvw7VVg%FLuAIe_mGzHhFdcYhl{u!#^Vbae*3QUnd^qIg z{^iqC^t@}phjXRO8<>nOwsEA7n?h>xVhTtKbD;XFLf{O^d`AUum`r z{*!Ncoi&LDXjI%+_SSKU^Rcv+k#Mys*+4%lhgO*p$ATIgaw6-KENY9q>Qw;u2@$#9 zSwtyfke;PTE3w1ff9dp@45%cG2XZ?bOx5>?Qa*U9mgCG z7f&R$x+(BCu%){Cdajf_^$-VW9_wY$J&%eu3KCXe*cS+&BxIHa4Zo@}>^Aws&K}q) zd=}kN`uh5j`2XI=*yEqmt_<-0-VEgJ&$N&*%l0Qv->=q<6p~M=rI@yATuw2|ZXUXv znol|+lWjY4WTzM~bHD%|JcbK*zJ1Cc{V?7fUb&$wmPDTU@vqNlHd zocu3#yRu)`=h)g2fhT>go2S@iTaCQRsD3z3oA!BY*%f+ZU6QH8!1Bf}Nw~GX@DyVz zSq7c|rmS04MT4#=-9dVvUA^BK-0F7BYZ@ptUP~}A+vku~Q*d`x{DrjQ7@eTGD{4_g zwKq#5s>8g8ZBwAxqO2DgZFg!^ZB+IsLMVLS$HRU4rC!28NF)I#VD~RRMj@QuLj<132YPfR8i|}%KNHjzxDFGxid5APAYF>|f8n-~-+hmQ zA$;u;4)jut3XpF+Q$eBQ>cF3nD;4u#DNG;>tR=D2Ps|8)#SkIPV5Do0()Rn2d1RZ$ zNprz(zGM5fo!k>u;zL-a&loNq1qL({%uwQBc;&#S{E^2Tt{oKCx#r{osdo2z5zWUM zTk`sJ9HY4EI>d#PQHL7XVAA9A}u0usX1htrum@lk_m*v<$fQI6#WA-mouZ9)|4F zlQl8hR4+d{T#aH@hhzMX4b0}bP%7nIw50}5gnmcX3Wj*_S28MHC0xUXqf>6 zeskAhGG>2z9vAMnKN3j{l^)QNt+JV-KT9-lW|7BW^oTBl{$!)2cZ9CM6GQHN+3Rwc zAak73`Kt@z?^kkytj?xc!*wKMgk@^%vljhEbx#Ic=F$v%<6}Y1PYfM_zw0^jH5Sj^ zy&=|MIlR2nr(+~gDlw32)Sw>mj~oS4W>Dy9Q0&O8~0_Bl&a8Vm#X zrL}}e@8*vu^T#!e{jA0uOKKe5%W``z`AAA{)rXQ-5nG!c{+ctW9_Dtrwl`cRF{cL- zc^0KPrPL^;v7*CTHSqY0cxF%m4AV|M~1YfxeJ(Df@@v_o;wiv>31U%Bp-8 z!mLV6xO^gurpj$RmvaJOb>fT6m4PK2+Z+Ov4HaXB`pm+;bfB*f$;7ERo(|RYDcLCr z%vZwz7NsC5w$AmFw-JE05cJNgb+$$IIgZ1xQkcXvt?ZC3p#^X@AO4(AzQY4dHhCBA z6w$opF=$!ZaW1WHrq|2^s(vNX=fU*^af_zzb9(0^i>u6y(u&NrRStP8*#Lj-etj>k z3GlYQ%o~8wx>&-q;Q9Ux7}Xl`0`P8x10PmAOGEMT`|y#AjVP5nqlJ9Q)!9#lHMxFr z4LQ_`MnYj)5)vBXFKoI>^11j^SHt-?6*Ex*@($iLHt>PMn(4DxYFSr8Y1|dO4Q;L} z5VoYzQr_*>G!?b95jN?LcS~vV{kDm&vOn;)Ll7a!*DgM=1Y^jeNjtuv|$ zjKGJ}s;ZEwW?iach8-8Si1dpL}uL2l?#{ zcCEa?FXdv`yQy7c17#?%Nzu+_TF&g$ye}eU#H>1ypw9l0tGp6iS2Zwh?8g%lU0sJD z2Zp8th9l**sjqC=Ed~KbtZ-P1amG?Geqb>yAO@pg$x3huGtKYL`#Psq13DTzr0u267>>#_WLzgrUZ&NLk?iuN02tqU&2SG~=M@t7hiPvdS zoyUyiak5DAc()LP>6zwQX>`L@bw4r6?R*I`FvpD6LKr(f_4ViCN)_pH6NrINfw`=v zb(LF)M&nsfvi5|^Xa=H#(lORt zgI(W-f?aj*vo;=cESzr)MKiiikQj-3w-XjB?)bXsnXMJS81;gA?K$uL6Y(NcGKWN@ zMdOa0PxAR@Yg2nv_tiW{<|=G!W3rrKGm~gNHx^MAbG{L3HKJP-6Z-I7r!lN)nDfo< zxM`@B$pA_jCN;cX6y)gP69YcxX%%8?m{v;PV}T-%N}pl#uei+AcIqbf?o0F9FFlef z@B^=AdpsLC+EPmq2)Py`k41BiTaYae!{zrGqP_IVPKT5Kd@^VCH7#}FiO!6^>Zz%93zi((R+N+kr z>A99GLkiMlc*X)`yi2l& zom&QH1tl~~tcvVnrtDH=2WdKy2wkjHTVK$_UzB)efi^eeyTJ~7g^mVWG=)tv8qiD! zeIcziDxy?2LFwHzb$n*uNPrT&8V@a4BP_ktNaf`AczJwO9Z`1q{KAh?X1Gd3#bmKJ zQx5g`K}+w=4f8B0Wij|rkLo=93Ua%oM?n;(rj_#}zsvif zH03&iX}*1zkWQULRI%qv)j;GZt}nZoI)I;FsH>fqqMEV75#7Rx%g8q4dkFO8N?n7% z5>d>4F2AyPhOP!fG%WG+nYJf7K#)?~EidjYu#e7YWP%XY^XcU2a{7o@6l3&BMc^QR zx3EkZXuI_qdxdeBDxQks-bh2&T7jvcwTJ-~aU-xH+m4#>v3c<&>uH@z!tm0%q|rQ{ z#s#oJ((WOU(4k>vnpcvqUmY{HLM?JIYbfn;X-jLVKd^5S;&um|uit2!TRf3|jbRVL`$Z}U z`@UTIQJbS2lz+nj(K0=U*nKgwMVgZs3VpfuJlsPGmsYe1O5e}yufdU`zFYg$<7PN9 zs;yBCb&VIm1rvlZzl@2rrpDoZqb=qjt*;BP$wJ z0n94eVR-W1zuAqe-h)MVode#Rw%)lT@nkBJP>M1kXBI&_l~(gE%slN>)|~TGuJNgK zLSWTzG0yK=xC1f5)m(7T*((EywJ3@>E|uDJ%q|SgxH{nXY;+8!30P_dMwYcDn)QUc zCrS!Iv(M%+hxv)@o~2s_>z1XA>plazH8Drv?zN5i1c%lRvO}arV9$;0#BL2WTCOIQ zF-;!_QuLIQWzYO!(z!o;Bfmq}yx~XG-xmI7nt0o#|NK}?t7S&WIm@PQ2R!$7b^<(w z=B%V0((xW}Hze*U;8(5qqQTj8z%c7mT{I{-V%tTeK27*7HtR0hdlCrHQ#cF(JyA;n zEQJ4v1@wi44p!F^E@xMRoj%cpZB-epoO2oyj?TJ+k6!>XwN4eUw@P~kop+*8giZ7s zr-~zTZrT~jz-<@CtACmhEtogvv{)Kaij{VS?d$>Y;In7soQ9Ex(50aBLnT#O&W1ye z^Qw)BXO}x(8r!2MW|@8BhOtF>^~$(u zyesnErzpdB)FNAhrJA)3N#|5XkqNh`_i+iexpk#SX~TL_*=7?3cfQZCGhy5Ho-XPk ztw&UZ&@bBLFQqfdiE`KC@}xsp%%RgjJk^SXzx$Vkx7K5#D%I2^~a#MO`b zp$5V+OK!cQP1PaJdYyNA(mhaluB$6l&5222TXnAk&;R0f3MOmnxUZK9ug(PRTHb(M zjQRRV&h>;a-5jo*%*mxzbMptIArf;$oIm}k2|f_TC$A@x9jCr^QNEGmbIXk`Zv>7m zg944LT-Scv+Rs{hN0S$N7{IU95Eon#))j$*0uR$G7TKEIXV9g(AfaPYM3BqEy7H5& zuM1L34Lug^@MZz0V)@D3hdFO!rqTs!TTC^z1Sp!i;i`@mxccyCgsuoxO)#yN?p;E+ z%Vxu#;*?g-`v?f0aGea{TnBHV<=@(qpL}GV41f zKOcfk#CCOn)uaeXce_U4_5_*hQTn_<0%1K1v5{45k`3Y~ce*CVQJnYKE!Jofj!*2BxWsX~OJ6UAlWLCmbH`W1=EUwJ4069;nqepoL*G6eh9c zh0w3Hm@rbb%Z9Vs{GoXGUzMLd2b*t;B+79yWi>W4O}}L>0+aZi0I@HHXKpeET&oFpL@McW@Npd(f-UOUkEUU zilq@^p?ZxBAD0bbfH&T%?lm*|$TVoJt<$+&bsZjLRSsR|nWlVpaUDFpSPgLW9_|wi&L#pLYF#YumW8V5`)B|qJhg!< z3xXEY%P9`oWy6oNY~b9H-XBsV6Z(#ba7tSQ;S8;USLO;Tt!i69fe?p^Qq(LirV`;@ z2y_v9kiBr7tCB8cCm>~X^C?itvc5Z8@!L_?&ngukisH`!_xZlHk(WA3(3^8!K|Ybx z(Rxr8W8W{SsI@WY`?IUB6qHi16Og5?S8?U2-n_Gcf%0LS5`6FmqN>AI*eMcp!>f2` zb?piD)x6d>NbTXb>j1^yIurnoltIx_fILtk-``iKc-x=3!PcYsjNEx0KjTX;tpv*U zHfU(6BU3_It=%o%&UFi3MkekPFiijI;`#ByHCYlX+b!9h6fl1+Z}fntI-Ks7CjUrs zsR1##T3U$@OqtLAHQht9Ap@+Ya<8wkih~qX%k-Ppv^ZA$@+THR{6PM1ac}O`2gYhV zLw}?kp3GL4KF-o}@%}y**2?W-BZWy9m8V4ldqgQ)&pE^uQjHD%@>*cFC`nyCKZF^e zNFFA@kv0==nSlO`WOl5F5D#y1tOhnm;FJeWITrB5m&8GHjm)VZwwSJvBIDaW4F_9d zX^)3<1Xoh%Ue|)U2=Y~G*P~QSb(K@E@}Ccvx#rz}8Ml?UP>xfA^V_&e5*7yUm@eSs z(X+Wh9D6}fu6y-+tN;|0kzuG=4JYs27v;}{OrSC4iFZcRAv4|9%MJ)!YsFR?EYvOc zNkiH(&iP$_*RF<9N{#P@+UMb~`l6QjThqCWn?9q6z8dulY)8IKxPo|^(mUeSjlNeB z*R>7^d4D9`D(7_wJp|n{=IA_)&czvp6~7$?x~J+L1IuF-5{Vb&QI2w!1AZlqb_P|G zHiFj4y_hJY8&f@Fex=RmNk1Q=U6Y>)9@<3+tKj5AFdVEs_n3CS8fIEKb)E?#m1B?7 zLx=A-VQ5fGbieleuwoLM;1+5dB?FnfF(+7Q2+y6_QnE)(pZe2gPQIpzuxE~|NlNe5 z+U323e#)gMB92Rph6lD0n~T)1%#3%6m>rWJh^Wz$zQi`VI`gRWyH%OXGmrBL^t*|- z_VF>Y(taV+uRAX%CX=KsQ|X;rPbkIBT;t-qKXytN+k?dtPYtZ_uin5)8=Uu4G;yM6 z&#)gc2{n0lYG5uwAy$!jjExt+{B;PG-uO)IZ`LpNetPBpjt9{1Gv!n=zM-}39&m({ z`Qj^0KPEFT{+?lRHF|($t%%XqpsU5PoWD6=jrK3GOUnM<_pT-^=DeR0O$ESMd7u>M z><=2SNp3SRpRT9!t9M~^iuY5m{NMuSTHCbuFt8vZTbMq{u>N82P9A{TH~T#6t}rjd zC2CIKI`*sF^*IET0CA(4K?R1DCg2$1E4qXXPG>hxE6b@I_EwUkly8CrfVxz0N}{4o zf_?U$(aVJic?;J!Tz<`kr^Gpj44y7tQG;jbH!d{yTyw?ybOJSe3rrJSohyGO;rCFY z0rqKQnVxxGY(ttK7NUZ~U*h%T`*k&*E7B&`OvrY)6P=(H&8^bZ35+?gc;f9#YOOw0 z2}`Y4$&ox6>bhu?KbF|zF6JF&9lPC|mtlUrfx?^+E$@LB*z(H#6~Egq5`#oVLL0!(PMFxnTf4k;5E#t8{51$gGo=-q2Nc^+s0!N-^9gs* z)hw4-=Qhx>=*n6*g&R`axf+e~>UuAvD&dmHhswdd$16xg=Y+?e&ux;~ZIMQ7{oaDM z5Xi=2SPG*yi*tWUJPOE>9;mMUeWz}MM7c4Q2s=cfzycJEgbdD4N6EDq<5|cOGO-3` zOdyowz=-kzVgl`q4WuOEY00VZ2;1@=g) z?ek8{t(yQ|h6A54Ej$cV*=LqCQ)72Q*>O<;uw>@&YQombbBkkJ3R~)e~Bo zoPo@eE>7~!q-^IdpgwyNJ(*d4juZIQFA1uwzTr#ecgZlzPh?SU$fAvA@_`#l^vG(s zc*rSXiLC|kN2c`dp`A%M`S3&d*{mH8F6~^~<<&$t`tk;XJ^(A(t!DP};#Y3+FOV(b zBa_;xP|hP0Ww7<9q#u7j%B+9B0C}kMyh5#oSBvFuX1@Lo@(Hp3O3M$z?x(#hch?ko z(n|A865fPAVxp3A3|;F;cT!pNeF2q_@VYqP(32A)^bRIPFk4z#Z5#yPGY4itHvry7 z#EWZ2PKQ|fgBCptE!di3XR=?Jh{f|_yx;PycKDEQ&v4s;#6ToHx+cZJA{_8bpXpcg zI&F;vKhIk>KCB6?#q=lKN#H0#z?uDWoA;Sgyi+8uhd2hSb1YWc+xYSH!)Zjvhhir* z^t#oCw^BVWGv>~a-)-hFR(Dl3KOx?)yPasV+Cp}->o-imMfAeqki>I~iGGnj>OX}V zC+J62?o^KJAvqW|{Zc^!j%6Fp8ATdBHLosCn_muIQEcS935ZW|`YHlyHO!deZl^D! z11)a0K+ZQE(HEHBB2KhPK1H!Szv+uhQkzU#TwkMlPn7o+o&lYE98c|C(;HJXuu{1ysoKFtBDoB^&&D;RVy zcFM_~kyjgO)CZuM;NvPZYQYsFybsu{e1sj-0`n2U&y0G6UN@+~Ry?8B>~y705Btkp z`TT>J6}*Jsro);T8%H}*G&!|bjWlgyJ zK$;JrPhyg#=2pWuW=?M{))i<8bNFFs;{n#0Qk*TWvg{A+FJ2>`7oUt$M~le_1owh7KWRiJC5Cod;uHnG1%_7VU<~} zB#hVW1h2C`ZBZ&iATUf#=Cd^^*)d1RQ9Q*hGe&-+t#L1i5xU%_x>kw?cLvciBUS1H zm8QVS9ZnM^ZXxLA1Rb>L23WjdHvRva= zyj5?dEm|-%hv32kLSHs_c@8@c5JtD6u%ED64=RyOYk3E&!*m6Bn@}CphA~1LKT%w~ zq99Uw>2nS_=Ig66$i&hNAF)MGcG%in98jj;;w)q2Os2mVhhPL-{BFFskzjesZ?Pa+ zUSmT*!F&x#bv?UhJ4<3&AJ{e;YaC2X?(2SZfSTjl;`&Q``^sLHv(o5R&Y)i)EQhBS zYU19{o>?Nv{g{gCCS6O`vuMlU<+5WwM&p-tI*cfe@J-XMN)rN9L{#?hLc=KMBp)!r zIX1b1-N07R#ab~y`Z4NC?M?w_ibru#HINiePTs8)k>Xg6)OgxYZwJZ0UdUVCC}>a< zr^XCubL51BNq^L>a*ZEsEThy0Gl)?3w_LQ^7cMCys1!Ao_RF8Amb54pDVcqD?9Kvq z-uFdFNC?8SLyjd^;b|Ja9YCGDu-^TIn!|KOg%c;Fc+WVc7pPe6fMPp>jvz zBXc`cm5-)0&o#W?Vn24i-m!|SY-3hF(7pA(<#O!vt+ek4x@)G^j zB;rzJMN(HZT!s@tS3fpKBpWqthVx84i+}Gad@uqyhsc1*_Iq(z1>8PmR(LWye7mHZ zJ_gD+UPxO%k;m$49^gz*;@FX3^8CG#T)~w^`=lNa;w7^&)Bw?=$4_9p0}xWAQpKr8 zQ-(wTa3E6LXw0sESlAGXH0L-kcQx|`_tFWH)9K_MyBq}+o8k3+059I%2)DaKsL3TH zciU{}MA{Q-weCE_X@@H}<;f$a`XXz56bfCsercCP$;Upj6fuJ%6vjw1rsf{4rglx3 zI83HA)dGb$-Ea>i-)bC^9K02`)}iT>7ABw|4I9)_yYe+*%p@Nd@fKEY(qc^y0oDQ9 z;F#cWYGe0|F!3lDIF4xP5?RLY;~bhefe(dCyK9Cv37ScN%c!|x+n-ISnv{H0@5}UG z)zmf_&UEjT%Rz+F`+Zv9L;)^_k8w8` z>)2rN{DwL?hN@RP{PwLoxxcC2^2-Yn8FM|4VMA_mFRQx!`5y*FUui=g(r?b#-uZ2) zLzuJQD^a#Ze7wnRRv|7>VPZ~{$JXqv_%cqY(7;AaXi+FgzFf4L`{x*i}0738E z5r^F1ldSp!Yv5x3`zYnMV6TGr_`Y{9#?Nv~*EGeHDrWpktL*z^2kKPFYoMqT_84sk zrPMH&#gMJ~RpI2$noZ;Y>WaxK_b3`{VC0a=vvy=8rB3>&(fnLiqw?IO;~V?4B!?B<>c*v^#=OG$ z4<&bGSd)}RO)B9*nKReqkXCG(B4{z}VcZ&j(m^4RB-vvJeYI&!y_T$xduf33xs*op z{dpQ8n5-wPC|KNH_QL-3-BSDKQ~RFWJxlt9yDnYHY4V?{zeeafYk z?wsyHG~+QL!p?2xIo{b6qyM&HcF*$9_a$~LUo}$t@f(rSpI&x%<<+#ovk$oh4zg9|LH89|n>0j03&rH$m zU*RVTj6+;*9p?_hxIRp==QaUE3pKf6q$)C87W8!-JGF!WJa?((2h% zp>8F#yM<3SaD}5%jmko(p3a=~x{UB$U(L2qW@_>xnVKmx!qsl;VA!RX9a}1ETb%@4 z4VO#6VU@XCojTYW*Q!?%-x@975;uTTUQ8amX7RsSRD1Wfd8fF9-?P5op0u~`NDQgz z1F9odWsRQ~TpR(ek$B&q8E%$42h%@Tt)GVVg4CxttVH8W?SR`+xDxpJ(^# ze$(EK)YJo9xVd|$^C(A{Y4rGfY9{*~FkGW!P!{Cm>= zgJAxv75(+ezcTw*X8$08e^1(f5X@i3^IsqSmD#^C`v(d9d(!@cVE(HW{q@PeGW%C% z{~&>XPuhPF%wNXyUmyOJ*}pRT2MPRp(*A>B{;L)J^~wLAGP_CGDI4+mfxXKY0gny| z7$BnqiZ=hhq;g9kpIeuzU1(%$czN2d!nMoWY$Lsa^Sagl%vtZYkpD+zWjyGCp86m+w#)o5 zV#k9sd-|d~zt5+h{r#2N&mPGXv~vZilJ+&*`|??IFRSH-<5o;I&)Qb~PTKD)Ztf8Y zK7HTZbBi2|`>mLG0wJtJoIqew|68Pr3!ncFd+#0BRGPjI2L^&&Oo4q{bZn68^y~Rp_qKUm_R&J~2 z^T_PBlY1|cqs|HnWu{l|V4+Azu{!qqUb(6j3g;FG!UB-?)UFRs{rsFJA1Wh+Z~v*? zdJe(8-qU>YTUl(cCvHtvBd?IAfLVB#ee*)8i0pFw^q9X3!^D~pX!v;HKnjqRqm~6( zCWGIbIQ}Fqnc0=B$Y}2Kj`!V-KKg7~R0XSsMa%LwKd{&p;(ntt=R{iA8#}x`OZY+l z=(@Z%)zvG}f+dP-Q~}>TAL#J=wo0R{@hk-P*@y4ivtdl4{><;}G-?yC z-ruE>UzT8c^f**4X*+7Kk6l|*K=0T+(5C+?q*RT~CB%ww_b-%E5|84-#9x62%1WWH zah}j7AUB5_f^!6eI-p_#&oby(EbRQrGT`0`JAZ9vy-x*OOkCn&EfVp^FS%lyk839J z@8w?6U99;bYaiJ{;N(GsiS5mHVO*e-Pjao zUnL1ifKSQXje=gpB+yr~-Z>dAy?dOv`tbS>t-jyxpz_Gd^ST#7->%Bbbcrd77Z$z7 z>nt?8gWi3<7N`H=h%zA*(%?#l*eu)pG4WAVCbuVu-ixN{ zVX=55cS-B;X(FvCuWA0;H=&-0sAN&k(j}ZHtVn>vs5`WIS3riuqjt|$YlpQ7*J}P32vOlWJ z#f|Q-=Yj(MM5clChFD>&o5jhAvL{UrJ(Jri^jy4@K1>=aX?-(Ld&zp}GG5ShZi5j~s3&vT}Kl;B4yYqJfvw0)^B`C&NkIEQds) zKFL!O-_#8!y+iFmLMpPU`~fU~W%1V|+;Ff!BDljiO#4l=^0<(SS<1yXJMNC?^@H{6v14-Y6(mgFaaDCwc5k7~}&bqBIeKZLxIP{Bcaee~LQjTHS?LxI`!X}51I zwvf%A6`RG--S3Ii9QO(vq~-)QK5p;m0u#I?Gj8S`5l z=Y1%mQaUnVjM0rXnw4FAc$4hP&{pDLD#JFzSB6p_@jSQ}4irmT-aB4UJ>dK~M~9od zx(3Zkp+J)U1ZuT+7Xz{PHaAQ&mm-DLz$!m^q@l`75P{BRe07>JM7EcTDAfY&`OSv<6WWQVpFF^XS5RjQ! zo;R&QQ&m#E;QT}r`hdfYHHXtxpQbF(4v8k(;k4ie1J_xi^p)iUI^_eLl`FiU0=d8t zt9@YBb?X{P|J)xKkUUnhmb%t=y0n&ontIqo=X}05QEx60@uJ7)+TyGM&P?$H%APxy zRh8M(R)Z_9DEsCEx>W6}-ZI+mt^e!dbET7Ly<=BcllvPJc9E+~WRgzcBnrZ>e1E4_a~@T%eg%i%LAXnlF`d@ z6_udB0V1+mh*eM3sbbtw=uGuWL3l4+x$y|}PkRxv6m(`7^^r%_ON@#COtF3iM>h4% zg41qRK7mbnJ<1B~q@m+>j*n)dpMh`kgZe#2Um~CVW6tBB9UKlLNE;vC5j?Ri{Q zkpCni`il8h@Y6&?Xd3lO^vgxT`?F+CA%q$H?2gF9T)Mk-GA}J2{Y{uEFG!!kx9=vT zA(}`@OAR3Ju?5$wI8^4)s|p~Va_We_BCP%C@B+!Pcd^iz^zN9ri|=Qbn^-7Ce=`z* z%?f`+Ki1@2Lyh{k_qQm{yb^%TIDrz_MWpiWnf}q!076q>PqvI%rROR{XU0MQnoSc_ zXBJ`be2UAbM%@CM5e#6l^SEBbkluSZOyv<#VBuU2hynLsk3{qxkU5b0SI(*ZC^(Gv zTGxAvvhj~^T{xD)wSwwv0yA4j#gZ)cTP7}C)e&yY?{g$udBP>zWpE}Ncb(-jx?L8j zRTJ$59BwpQ6OJyb(m#8UzCz(dSYM%=0qakXxcCl0r|gz7+3gkY|8c8{YXux`nVCh4 z{i9*+&-Vx<`iwA-df{W_o^?`xZT0^7w75=70`bw2+^#ewM@*Y- zpz=YegDfV;CE;Rg^~&0|L1^omB|Xr83IZ54rop<6oZn(^`TawZf9}1vE908;fA=7a znOyjGiOLtt&%c=iq>~jHRvgkL4&#bUD9Nw+_^WEY$&0V3oJMNtIdam6p=W5Y0wBE; zdHyl;og8nfr9qQa`qZ*G?LvRB6Zdm$dEV;4jp6Cr9jYwlEJlPR!Op$mF@Sq*p;f(> zCZCx-MQFd&)Y`93|0M5!J$!lZ ze8^C_ir-os7%EJugr<~R*nkSt=`0IO%y*o|B7@#5$i8Nc;(4Pj5Irhcj85YAkji#6 z;j2{xNZ=v3(8eP>nMW1<%e>BfP71O*&r2NEbt#(RKrCu4?_?R-E%E9uL;cbfR3UL{ z*j!1hv`Q%8Hn5TDL@;ZRc1e2Z0IiO<7gtV!;bnvcIgL|BOQPCvA=;)fh%4O!VnBE) zE#SBDI@l&TU6`Y2yWsf#i&6Tk*JUFOd_m!sdZ|TU{wr8mAIYIb{n-U1G2FL0q@0<3cdo(Q;`RSV)7nl!@op03z1=lTR%;kfM#<0F-I> z?G$DA9`ApJ;*O0$oMdC$QOw#gX~1Ll^2(fQaLqAu#GEgJ5CXUsg53`)qXGdB@ED3u zM_G7Q9I)NhFVV7x}(IQ_BMBP=xy8 z0i)&3h4gC~9`d{X!dL##3#{Z5dy{yr7kdIL5uKZl+8j8^9y@3^*naoZ-hlOrCIYJt znx%Lpr>WlLt>U`f6jVMjdqjN2)+W~RM@!C&cfGJ(6YzDfony!S9UWFmH@=vd*7;Uc z>xn%%A*E#Yc_lO6-iHvc<)W`%T09q0Ug3)pUI8o2;;dctv7U-i*(?#c&=b21IqxJ8 zHisinug`s;n3s%>!ym}$24$DhTdkdff(m713rFAD{TaLefFJ(j&CQ*#@7HrbX14eP z+#2`}n|b=-=v=TOvpEeJ+wJ^xUMFc+Ev6ND68GuTC!eAE_~I9Nx%O`^>GY)2f99+H z_|An7mFc28lA|-)MHeB2eT;C-4og!Oi&dNBR9E}y$ziuMSmq3w{Pn{v@(j7o>C^8A z)x{{NBA;hAh2D=nhv%mU$aSg}=?7sUX!J2864~Qvr}@`F?}x+~$KIR*tK{BqTVURo z_dbSO0b9L#^;Yp!D(S+oEnBwK_Vw8p`Hh+$i9-m(oOd}T(T0g_f-pss#I4tU{q5yr z{<3u%Up$hu{a@-Q*Jvmo`yomD>w9xHGY|;x_>u=j;XtMATZN>is1!frtC0LB_2jx(H-T{X?c-@F1~&zt-pPyp3KN&vQ8>Uum4)Qnlmuiv zO$tDGIJ$liGp(1OYc}!hq6K!Jclj_qJv~lw#_oD17yq^Sc8rSc_`zMLzH~!HGN<^e8sLZ9ieY!d=0))yucwo}fga!=r9sGZN{$O9n1Js{&QX& zK+^;eFWgEQoo?jz*AC>7Pfy5T0j?4XLq8o1wtXFo ziJ$ai&5q6h%Mv?K9T`j1XQwYY8>?(>-gTxtG#DZDm5Kq^}vS5yzDrIrC@ z>71LbxH2Zi>H#atIVDNnZHMiH7M+@#<67R6<{22Ch%JAl9-Pxx7`TUM+ z^@K-KV>D;4H`_XycVlpDN;OX4Y((qm{nZRnN`a{gcq%*8)gv5!#)yfJuT< zgr$1NsnjfXl);&|ui)1K%1d1`D(#1_dFU^_Yu%bPFCI@t*r=}!HSC9fOcSj%zMM6> zpB0@QT9B0DVK_PJAULdK6=h)kmT+NvmSSi!V`i_gfRwp0OwWUq$<1r&JeJVmDYnkh zzGmRA;S z+`=AKGe!?{q#}o^_3LZm&g)0&)zc)3?gV@0N+{V!4J11>T_O^6mNZiykVXA28=#3s zDAV1WhIxZ?jfqs{-AP^bTLdLu8Z?p^UKex+31rP4-wH&PB#y zyuGup@~>UJ>ME)GhNIy#<)@KY$&5vXS>|Ni*5=o0Rv_grt2F zeqRDl@&dvONuE=~qdjD3wH!P4M99#KRH5M9vIsJee6!(*&N)h##eVAOVcE2@dP{vz zCGV&vHlduJQA|91cm0clu+Cj(`O(8U66`r@R##*Bv%*TSV|z^FT-)86hE^gCKKrZ; z#b>oan-AW-$||?g@ahdMgS}0~rb%|KvRGX+&ty10aZ|Ob%tp$2!oTR3(n824T zBnm2T!W*11q`{pPcf<(7(oB+Go@K}T?G#|Hfb9*P_g+@Ag_9&X-4w@*ekOeeOF1XTS22sDK%(RGAZA1ZBsBdpG1Tv!7t&Eo^Q!ty+vN&0*a?fy9txS*nBBBjUm=$nWYFrz8{ zFoGYf<=tn%1gTnEyP*Cn#oUNdFU@>G7`#V9LL!#WA@b9Of0Zi6jy{WhiQX~k=gN+n z>I3M>0=zhL9v#KcmyL~6oJR!TJf^cm>1GtO!v&vlWwnN9_Ze})!BV%d2W|fN%FA1$ zDlT&xhV?eS;g|Bs7{{3}y^5Wrs=>By#VL8Xu?noIaa`mDpY|*(7*$(AiZ^rLir1X! zaA|pYns%i!?5~q^f9(w+7uZ)ICD8+K9x3^b&j!tj!$ZzWNW8~i1im$XXq^#-Jf8t6A_h2P@ zhZe;1oDrYH#Gks9b$g9VEM5AA@|4m|)P}3{?sZysLGkQdcd~A9&XVBVjG(7I_3@7m zi!FC-q$wFkQ8aFKtrR%VZD5VMwGutVDP(%ragTKwBL)Tc%7>;klRihft5z#qku-fS zU#-w}H@LHA+9Sq;l#B3?^QkvA-gxDgPHipC98YU%0;8EFG)XXMq$CnOJgE{HD9S}U zVooY^yBZUNnc<2Ye@ZXw0i?-z39d(VD#pCl1<%mh!e2tbUMo{c(xkJGDfA99 z32n#v&};?;G8@~uT<&Ita>W&h9;JP>yd9wdHB@0zi&H?-5E_M|AyHUJ6 zn=6DGq)#D2X3sZwr87sF{Sw$S>@TbbQ8q&pY!Z(G z#_;z7nXXC9?gp;-3}h1yzb1iIx61NOH$|WB-N#B`^n$&hIWENH&d6CscH%iviLr;} zd_X1UrS~haO{!UC3@hd9*&r`5Gm%S-@gHxE2CHZLL;A0uaT=r*Lhh*)q%X)86|B=* zej_KC<6vurRcJqwH;Al-NWqFt8kOF>6QNHuQMW|-7Ovb>gT5e}HeWqh6RdCP5JvL) zaPs#ktb&yhd*8|UP!(i3KV=rHPtQ%VrX;%I$umqRN@qS@{Zwzs`f8@1dAr3=#*^hU*5vCy<_nFe zp9_7P1%K<=TUvBi6937?#S}P8#WUFXss5ZmYOht4eAls)xQO{cO6O@QL*zx=VcFoP z3(}|SIfTQ*69;Y7Bv&g#gdvds14qF=Xep3J{bowB3>{XVl5f4l$W?b#yw@#iqD4iNHk)!C)sw+K$2%56@ zKeFKpSi$;2#{T-Tn+k(_-z#m|2_UO~4?j^Fk6~EqUHe+>L#~|x1COtgQLl*u0ZWVB z=lri#-WHNdZ|D~630B>+JnpDG-?@PHR5&-ys?k@-*;*ctp0V6UJyT4_?gOSF@U(}d)#(O6&c4EMWjN0jeYPaQ=BARo`Zm-8n zV#Q$Y-G#4rpvp^^v|GjLMwcPWA-A|g@;Ed;TOlkZ}VBC*;} zFy-+dxIy~WyQ{H&et9wn=E25Yx1AAj)w3leu4fPN%wV_Cbv2@k$#XT&>ErvZw7=(o z3|IOU*trM3o3pCV2!yjQM&xTH2nJ(o(dQfafS6Hjd0{-TAes-RIXyBTD+mt*cZfFz ze4O0_5RjL3xbBrDyU0xXcw1XG^NRSY+TJqs`19E{IDK}shl@#tbSKeh?%lh0{!dvE z&1Qb`Z|11$zqWZw_RR&bnx2kvOP z3S7-9XT6kxeWZcNWa8oQDMIncD%=YppGn0734)t~u^&kWvI(Nbn}MxSA0{OS=(PAG zE2wn|24~fxPkGY30>$|RY=ujSUe|Y;(0>bT7EbyPeJ~&Z6VpUFY{dT-*H`MUGMeAM zk9&J*S97!3HgYqvCVQ zg!t;0LJf!Dt*NLrJN2Kq5j3{UrRCoXb7?F9!TPu;9sXo^`u+O@Jply?m0`(sAp-*g z{wP{#OheeShTEQa4e62N31-JfQA6nu%AL?f4Ph=N!TPkzyFYBMmOtci7dv#ukt8Ks z|IjJz(O1db^_SBhINX1cv^|*OJZ_S&M_fMQj7y{j%Y6(^uDHXP`_zDGC9oBu=E@je zZwJ|PX_{6^NI?o_8#{6CrEa4;R7w4raHleKA|#Z;j&C4a{QOGHv&8G<0=s7$7jXD~GU~QyNd@tCr87TeEiUOZLv-F0-CU+twp| zvr>E7Py+-g{bkp!OK^?O#Hc*x&kwibffJN%n;-!oSX=BrJ~nWs$F+9)_H<>XL6Sv= z)#+Ps$1;$0Bn%enpI0GtqOuyia1rOFpEo2{M6ak(16CMt^wBy8*=EY)T7tRCYFbkW zCeNMV@Lw&jy*@n8&7hMK+8M|``t4;5pxEK4%Nt^0znOu6j}iblDvC=0p{R> zcSNZ^+HRiy{7J9k^Q7fnv>;&DZr{HB5ZZ@s&%Sd29)v0nEdtF>nVSyaQ?Q0puPm}u zI!rFHn&Etx66Ul{KXb)OBQ@Qw^>T7qm>PzuaSDCBD$JO^m%;#WQJ(k0EX`F-(_>S2 zGUlief=l#W6RppFl#Nclb(mEV#%1l=yLWGfnwPaA<_Kyawm?cWtSNPU^Somth$d;b zFUVHAYnwIV>N6w{7@H*PS`zcudr9MpwnWWc0Gb-a5xYg4HU|M=w6F3a z+zZ?q)yK}XEpeUFQ^;4;#h>hwkkb#hLLmYs&R|NN8y*#VUZSnj z^emMv#+z73Z9~Ek0@L;IA@Fx<+@_`zWl2Z8chxawXKhfLU9Q5g9OQ-V0<$2zJ}6)+ zB+vbr1D{HpGB}it48m+Niy;m^*eU9a@kL=Ets{+^)hFQe4K)3KOH`HD1=mo4*V?x1Cpkj z21(@+sW1aWmdLN`w+1T<3(oA#qIMVMLarv=wxl5JUee@NDsyM)9c_{rZ19$M=i2q_ z(+SLtx;;vDTi%me8w#x25&QT6O18-Lb@?iZMlqTrBfhA+VwQg9C4nfcKb#YXX!cJl z!3O#k&9Wgy^W^W_=0J!JJBB=EG;RvTpAN~odx=XR)eEt<2*B!kQw`1KqjcW~7%a(=v>FP0jT zxfwdgxE&zX>9}lep^k&gl=---A)-xv23;O8Br?X?o8%p8IJ2fm&&-ZEaPQu|wUdn! ztsoq&4825yHxa8M+dB>=P=zL|{AmLr310bS>9Jg*Zu5)$4o{cjFijOa#H^IYik4{-7O|@8^ON;y1sQZdX=pjz4y# z6IAEY)`LX))#1R2_LI9dawdC9>Oji54uWUT(OeeY30PC7x)^2p#YvjtLpPW_#+~}mKrv3^r1Z9WpfZ~e-IRWs#BeIsiw#GkGr0zM9>G7YD=fwf)$39` z>DLuk3YdlY8_v$q0z(jp-S4;hijPYC`fCh`KOU!B<-Y`iHyYyqHa>58mwAKQ!7b*Q zHd+r_ejF@Hq{26mdF3%^BcDA z*E~1Y1C)`<2D8j0;_#)xmERTyG$jf4J}#jZj;vfTN@`aO%H4lmwyZ@pURe^MuWx6P zxcB6{X{9AmFZ95%z4qyUd!?8IQuD_y^(d`ZYj*XAUvo(ct!d!aGo`x2)VvT;$WP=1 z{XN0lf)j3O+``_@+JPEOvTIMlovxk&f8PYACo&_c!+m@82HynJrS|WxE~B^WbEe)s zBM=B>yPtG9Cr(w!?Q%Zga`s1Kr4d2gQb|9M76`#Oi1YK^CVh^d%e>>(wl!d1p#Nec zZJZOXrj1I#aXRxk%5zOiOcO(o^L7Nj8-hgAUIw_CIN<{ci&d4$I|gB)CecL^d^VeX z>`)k}#2nPZu>6*hBZ05EwMw;Btl-I$C;2x$!qV+Z0z7Or=B%HGZP9DghQ|+!dvy{Y zvM-E-{e|=bj8bxAK(71CVW*xITR#pIcy-`wo^+*^>Bb5!vD{LZTDkA$Z-e=_Lr5&Y zR|VGm87IA!Vd}%;+>F#0={ZRS8P*vIZ8YHf9{f4tqz!OD^!Vqh2c6)t*&DiK`4r;Uw4CfCnS&$_R za8iDxou3pI-dx`nLFP;c2vI7|>(jrO(T}+p&O+FQdol!qB2Wy%{CZ2Z778aJF-s0( zjn34o6Cc`^1VrDS=rtVByl}2IEw>T)DDLNkPh{F&R0!~MHv2ih{PK&s7-6{1=cdd= z7a?oCmd{gOU$Wd6=^<1_7-re)v^%=73@CZkRqxCEikTU#nPCp&+w{rw6(WT_59u>x z-8cNpA`-0(GxD6XS^4`kZeB-ulM9!#I!cS}U7}Q%cH+%zhw54g50JbFjTAc~HmV)u z^OaMg*zq%Ro1{2I8WF({tqE4^QM$4bf?tGK%HaCCfLzj|+xo93FDc)YAy{-s)vP2_ zt&KtMtm+Vb#^z5ZMQUAkpNtO zN#xcR!)IOC9aV$FyN+U#>tZSC34(&~SIEp(bgpXe1=Vqvp4nV(C8@j}*+O*R&VEqj zq1kohQ+WLaaLNS<8aXz1_a}I@^fnau570)5H&<>SOLVwb9iM|z(uh)0iMOg4zr2p8 z%Jr&Ny|VFhbs@n)XC0>O@ezq1Za%0?7at5E*pS+W0=U+hTJCKEy<^2ymeiJc;?lYN+;3%AT!PqEn77&5?}Sc0+oHnf)QP%gSFeI>G9F_d z209R0r}!Yq#9-btg~n;`=mj2KwNQGhz`etCdq;1LKKYjCwm#?1atu0nvS@hhIs+h% z=fWbUx9vgh-hTxP2zSd{A+!7ka&6MLktd*dUm0 zqTa7mCw7{AiVzyGPSNM`ptKymnFMk?jxUE?U*l9OI5}&{^N{AqXd4M!^3vYSsc@*i z8{)3%-hP6JD=Y`K=9YdaDPc+QwB_F0D7>;Wa>awLhRD^RzNE6VfyWtCL@0qUTR9TJ z3kv>vLvc*QcYSX8k3&7b5`)bB^?O2!l2w31s*~3#YV~?KK2nUq&Mwf(NzM-mGM7fJ zKcFu+=({g7lE}3|;=44S+vSKVt4}pp=YL}ui&GW=+4f_f0~VkK4!tEx^>Yesk=SEiJsb& zUiYJY`ly)PdZ7BXP~0ZfNc3eICY1xYT_7WAglcx~tn-C`9WDy}B)evf5>y2qw=E5N zt>4DdJl)k1#)@r1--Ny2hAE6b%+A59awye&PBkv?x3)ZVt`g73SPEn z0-QB5a@zp!fd%ExZ3-yCd_0SA6^FKkB<%(O}Ge7ta+nfH$<<8(_I>UJHo_7o|XZlTY5JL3xbSJ z=Sy4yD<`>4WXTd&l5`FdVYXZTpiB+|zzAEH1 zPwfxH{CJ-MPUN_JTf39S_iErH1O0V7Z1S@GzVawa1SnEzA`9L>ZW|Wv_g&U8xQIr% zu=)PABPP#vA9IAh`XX>Nq0f*$9`+@H&3+Pwh;Yvf6%T_*?X zU0Pd-%+`G~yJD-+UOf+xAuG5#AYBfHW@Flr`KTG#!LHq&^`(gkE#F>ifaHTpTu##I zSLQAECQ)Hbap7ag1Gdyajwv` z+0qRHtf1qWy_%NVT^}`aK@E4i_Ef92SBn83!qV(u%HwOYFWK>x*r7Z&)N|xtkt?Sq zqa+)3Nr2?%+RtC1I1g%K?`Gx)B4gwD0|=gjvWaBmtdd6Is9Jii4#!4}C{&C?-Fz-ZfAQ0@O}i?kj7 z&J?!z-aRsuaD8?x_Nd{=nmzg+TO9Ffm_xr4B}Ud<(9e3-19}09jqQ$2AtI&Akrkh- zL9ak-kub%29zh|84NZV8r`B-ZaMA7a_)3hYw2#*ty1TkCOzJaKCh<_+H#e&_{;UV2 zFIvM=@4QHDbzW~4F5h)Kkd>s$g|ft5jbW*j376zLU6A}~Ow=-qZEzc9yYs6fW>wh< zm`KdsW32n^j<(r7Y&@oMJz-W!HdqgH+jf19=Y((Rt~8?7)gOl`f27LPRtcGk8sJij zyf;yP5fG#u1oeNW&r`~`g?o~54ubG-7pq+7cl%JbE@<=rc$$ zyk(NOlYw>3NQ5l}=|GBGt_2oiI1=pfQi;MPqj*kQSYBxGTu)#fRM9+i=+IGy=3_=g z4;D24eF<=QpgNS%5HSbJIdZWeC)^Uw0lSf2t-ZttH6d5Eu$K&}cI0Y(Hft4jdKH-* zi&6n5eH))g<=b7J#fPyjbW~umAm6r8;DWku>#=>8q3*$~@hyI&Az&p;TE6_I7aOKW zt5?ro{l+0u&m4e-vDfn*#4vO5P45Swg4cLKbK0!(2SL+K@@9to>2{#X!Soi3@!*FP z_pX8r*~>e;eq5#(5*>e}E-TAqPQd!?Zn-U5lDL&P^I(-H9g3VJdyL>%{EUs^2s}tJ z8 zC=4GZxgJfBKybW0ynqc~!bAd`t`E!(6bFv`c6yjyV#14ui;gE~L<@CCf<_te(k<{M zr$6eIXRLk$a*CNcRT^f7TxDZ?wWWTmhsnOHDjS@7 zoZwVp>P4yW-(8YkzkYqc;(<`9^dY3Y?qjxwEBDU$mcnFmuBYHEv#a)@T2R3~e|16> z>(2PFm%14XFOQK;<5M&QX7lcq=k)~}vODnZnpnc91MjX^YtR$kIV{CCko*W>v~ZyFww;w?EcHyD3;NGjUDTM!}$)Em&?oyzAz*6 z*)V}fGt)~Io5b#lmK zDE#fxZS)T=GVvU!x`l^m5<{R5+!@m17+lUWK53Orb!~bUNd$cc7 z2M^~vm{9H|ZBUaCmLa~w6x1ykC4*S_VBOb8d)y|UTfhk}5%W6nGYWx*{qa&&_zQAY z_WA_)w9C;xJyewRBcd<-nWA3;#uz32o}0RXHd{p3@klKb>IMeCD@=Tl5QT|pco@Yq zPA%}V1Xa*=%+CmI?GTLm1%)i9^4DbrC&J_lJ67NsPu>`_W4Ru(8LN-p-49Z?1@t|2 zgCaNAUz;$KC8cL+j;9U(aPatN5%<=FnsgJ2zb9$yb#Owp>WcNr*}-pT;ExEO$kao9 zx?PFuKYMv}-w9_AdJwX)jMwzXWnmQ(p*IB`pVC?h-NcG0$KIn-Sf5WgbUwb>LlNW78+E~A`Fnd!cbc7%|7t|KVgUeT7Q79zp>U&2!p}jF#eyykbiYpe@N6HAO04tzeVd` zPvGwe@n?d9zmpID&BFX)Y9v9{=kMghkAuL!MeA?T`Xl4_6Um1`lNSXrm;vm_fqkcb zz?A(hW`B#>{~~68ixxwI`GOdT1PSvC~2 zpfYhNK{yv;cWLw>($+l2n4Bk2_IzuQ`tRS_Z71JG&J)n;^vL{BlVA3yW)^Qv(9&JF z?q$IdKzwN_^D#04v~8>0l2Lx?tAX$1x3`}uvjyV{qobomvQr7+W?kq4-im_E9p0c**$O5Ln)YSyyxq*M*9~jFY8!sN!_m zK))bD)+FHK0;^g5W?Tffy1J^a#m!dq20ugKou7Iqn@fIbqyRR;Q-hr%oZ!`olOI zk)W|JFV@Z@0w-;lGj*zN%fsJYlW6ObVIZd}va+(4f^Le?Z|zAWtkuPE=6M(V_oA-v z5s1XaZ#P98G;|rtqduxX^4iAEH$Y9My*!`VP4x5cZz=9>5w;k2;4ji>*X!Y|VD{%Y ztl>+c8XsM*FoGXr%;V5#&&Yok>wo)3yRC5%K7g791=?Al4!YVRlP2tkn`9^Y7*0F8 zExK{sMf);ZnR>gs%(dlZ;~u?dcH<@9{g*-##<5*=T?(Uj64xp!IdTYBN^mUpd8RJk zG#`|7`0!!3c0iB>b+w=yK_g-vnD9LcIs){z5G?hXxO6n&v1&wrzIp#GEWXP>A~1*8 z;oLjinR1}RJQdu99agSxU`HU(`_8bKBPGGuW292z!H?gmLkfL?XiRoDJ^~V5s4B=b z?FIv~6`K@i@zox#sNV5a6k!y$#xtvEan@-l*&s}wC;>XK;^lpL`_G1T6C+18dF}dh zLKDjuZTo+e1{_-T#N}d#fj#Td&(*c(ZuFC#m@`gEUHv)kqtNR=vFxh~bp;&oC%nwc zShF^rP*m>nVTSzn^&Btz!aajF_+T*~BCC1>gPOJisJ%T(U~czUFh7AuR`S7on$z!Q zXEq7&bsNz}CFW{4zN0vp)2)N%K!L)HQ$Q!zG0+v&QFw8HI=C!VJj(DFuX3id7MLmo z=ID9XQESj7b^ub3gd+j{?r9@6L@bXs(_(>YAt#5<)O6xoV@C^Iw7zEtaHLhBQ*G|J zE?`vw(`QCes;G9_yR+a09ScpE*&O2To^De%s7-aUBg))y?HWhhlK0yszCDr3YO9{S7)UUhpGR1G8%$58^r}#7L`u`mR@LBU;QjmWNi90j9DP!h}rW1?1~eP|NfE*Q|Q)PjNDTEGiKeGW5V%~q}R zdPw37X*zWkc;rV_0&=k)=k2g4{b!K~?kKVj@ZDL*vU3saT&r2fo??HxcGV7t#ikq} zcIuD_);Cx|BA6w}yq}zc5);T%of16?H)vdxH(?sT8oyO9 z38!a%=XO9Qt<1_i!^$!yQ0$jlLk&pVq z2cS_eA22qbgXQyPK(l3xS(-_Un*eCx9z*Y6B2-&xkne3YtnmxnuGnvsMFA>2M!y6$ zAiuaGWU6Zqcx1?6uxd{>#C$*soat5X85e7=nws*~0wg>~5K<%f#FHPnz<+o0XSwfh zNc$J*Qdu9gFk_vIa@Z#e&3H(>-g6L0VaE!iLRHjI+9OlZ%0)e|SH*G8Clf{DQ`rh! zj#SQ%p^?e*$`%vvfTw0K`!{ce$%9j)GcElJZ6dr{x*m`S|GHF@KJ39@_u(hcva$$` zk-9lgmV^T5c@}b2z83P2xk!EH)Afk3Qce$vYul0Qf?P&d^uwp{0Nb672IvB3vDtNi z2CnX=$%cD?9PCTiieL8vB8?giQ#JW3zd&7_y;wf?{zh0<1urBRVx0i<3ffe4J%1f* zf~RskjkhaFNmxvZ2N;Bi;~}GF1udB;>&Kxnwln(}{b2k&-^d{5*t7ukZ1c&2rHclt zuT`*_Js2?V5%g^p#^i%=)v7tTUGBfag8yj7AV(_sQO$0RUWpB*dsKII!U%`-^mW-T zpTM`JdaG2U^Y=eVI+>ppeVYqbn=^fwGtoJYHTShyflCA|^G3!6_DL1*+4^xsd-BGq zaIsAW5c$AmHk_#Fj#t7CgBH>4VBBNR351&335X&_FI% zDIS`!bwTZNNy>{ZQVzW3T>9M=$a}8?is<>vpwoBT_9OQE`|niF3VX`t{YH&&MgEH4 z;iA2dzqXSSfr-sJV+Y6|XeLvE7e?hqs1aC;SaMxVpkc}7e0c*e>dX6<&jVP8EAI;x zpG=Vv8TFe0;!Osf{}tmNhOA&!BO^XU=kd?m5Bnda=?L_ih!#q7jzykJk+#m{+T^vpWsmoOd9k2yA*tDl0E*Q&T0Jnw95$JzRyo%4st#f#EAZ^G z5*J9f%uVG{6ie}QHv+nvgONt75oWD*8qkbk?2)s$2nNJ@L|_A>4TeRGDj{mtoKWUW zg6lJsEE7E?@l4heZJP%r^$J{)2 zPnq}-c9d$Ilu@=k)tIbhap-X4LpO`eXtN|kfmjtAR>+shgW@_^@mu4h{ckI8=_mxN zTICh0i_Nz^@j`aQDZ(X3*5ZWd(wRv6@+-r%y#nlmNfpE3Mc;424uJ@?cXvAJrhsF$ zj4DrCrnU9>IzR;F^x@{pws)Lku_|SVVA`??4L6=q&& zZCp=uk``7XQg`M=jcDIG%}mvG8kw)MP@_UOj|++V5e(k)yvpe2TAj>w{Mlw?-J8oI z;}u?DLdeGw44ig=aTz9Wt^y?v8zfc48!N4y0t`s4Zv|sjY_~y_d6f0qe$Qprw}VN7 zU_N(lyZ|3O6c538Qdj6D4lu&xss4BVT+rcMYz$$pybETQWg&Drea4ER;43EVhz8N! zw*C9}I{{G8CN9mfQ%L?J5gb7`JxlaId@jbePomGH&*m_ z5CE94tH3+`BdO605UD-OJZ5p|=U-vaf6`f8$%dvH1-sGPVfy+SpVpk5KcKiiI91x& z?o^DbwblNJz$Zt#HhJsd1|3yV$qCsiU^zSD7!lV5g&v#pBp9M71f;|dRmHfy1uhpjE!>k}O(qCvy zYd{}(xDL2@2wIMl7@DIOFU@tBzvTkstOOX0_C)Z%m?5Ko(+T(@2nIr<+M2J`!zmDt z@Krt%uWxITq>S|Vwp3P&5){6mAiNYJfCN;r2bav~`-5@+nNGK?7H)gt zMF)t-6u|zi7uY5@*M>@qj4zJU0)|&0eZKu$J4Jrh8R}LF!X>su1(9pXCIaCOsB1i( z{f|^9Zp*uG^hO8+>XBg=&n&w#A5<{_1#Jp}kxmhlwBg#{8=rSpYxnbedr$9CE5)#f z)@J`^r5@K9^D61wS_>U45~PBP52vhz8F}kJW^xh;z|-eI6mZ?X#FolXS<+};3XSU2 zitOXvJ1qO+%6_Ry;zPBtp({yqcMm3g)gC?emJf}oA8EpZiQPSwc(QtAV6WSjRj|E* znY8j|OI6>_HS5;Bx+3V)B?g1Yx@2Hy@?B2{1M;6b$iINV$qn}lK=dCiTW3og6+g}BvPY>UJ z#aT7=qPA%0#c%-OPKn3aE$~f}RiVOODu%^@!t35^_H|{SUABEwdu3H|aZX40(nHF~ z!XD8%-Bue*{{cP9*4q68lVhxekGe>sPxqqNthv}oGe1~8#66hrVbO4v|4cwz8F$ov zb;IoG0siEqru%g9v*gt2Fr5>h)#eQC(uHM|D{h+wagdX_i z$n+^{v6kjqzX7ir!*By%p^ZkH9*tXASkMYQt0ITyK@zUJlt1M)H|3DIANJKsvMqgY zK%!=*#Oo?kyh3jz=3GxlM~&NVUiE4PdHI;t4m(~Wxn=WO`jHrib=2zD4kXb%*XLxH zuyjj3tAcm@ak5Aid01afL+IuIq{)A2Gm}l_*RF`QkZERBS$XQ(lvTvwox`TTT72ek zLc_{(avml;!q1#4H|aYeh(?!;hS3Md*>e`J=wYl1epbj)#^JVK{nHh>rn{Sms(3H^ z`SY)%U2RQhzP_XJG?&jQu4A?@lQYW-^G@Y6sn1I0CZCnP+(&4poI3vgb-=5u-K`Ij zKl6k{ITB(A%s5~K{4=1h^}QUrn_JEIudA!O;N-Mf^K&)-7P91h{u9q`>L~%8*9RW( z-Ynq-{Wcs)tD=7e*yKWHaXDasR<^AO)4K*s&&nFE;sG<6I*iBaQ!OH)@cy)XtrhR$ z*|QtGR=slj4D73~T1}Df@XYkrdH*Q`uI*wN4g#fWX-U{rkO||DQ1lPy^ItyT6joec z@*ylMWM=xy?7Os=)YRRpXPe{I(_W>%C-2^~#|VJW=gC35Y}~Xcl5#>w_LzKf2!`F5 z*Fco`P3P`k(m$a)-RU(l`}e ze)JgCF^XjUqBk=2YhA1=74cfNCF1$r^`?@=sPdWU@%N=kQy2qpU1{rdF%;# zh}KAIuWZX22_6Np?SwqzMioCkK3+ElOpTM>h(klp#ppRtS+@$YwKq1eX3Yp~dZ7w# zE$xWc7Rw%YnpccnpbmKGJ-73pAU}IH7Fc1Xw+F4!pjuDf!k4a&9HtG;y__4MZg|8S z@Y-l6=RTVe>2xgIAXg|LAi(EI=x%`g5$G9*wkf?rCuW-*iqzisaPW7P>=x!ivhl57NjDFE5k)$*P;JR zVS_T9zcZuCaF|nbS^?t&dk_hRG1_ohfz+Ivx&hRp8t9(?RNF< z;_bTr-*cu!n6 z$Ye4H5C#m4zg}KmUek}jJix|Q6Ri$IuVum*PFE1N$R?hqt*sq_XIC?t>1gyF6;X5p zwZrV5CvykVdV5t9HXtGX0p6EWK07bs25Cu*#*^}e9>bN*sk^vZN$x?t4NDc4TCRFj zf2$%a>MD`+0LNR(N$WPSY_WQ_qG&cgS^4b@?R*oH#`Pz4EK{o=cNQ0y+-z#f2a`M} zeZJX^iL|vnYOeP>(bqC>!lhl)an@SGZ#sL+9Jojg!C|z^(i0CY10U_;ElHVxpD2JS z&0=&yn(58xSL-{zC}BfDu2N!ePA`6FJpzJ3QzS75z4REvhFYjaa14oC$~lz#_b(3y z;4j^Y?)U4csnWWAX+PPg&$m~q>)rc()wP^II!tawk+W($Sv{L_uRVUb+@ESccI7of zT=^4+rQsq%m9JhsaoF^i{?&^FclSlLX)ekKoSbgLJouKIym#*}xogZ;YL>L29A@s# z@a(jdn19@FinO$WCe1tHt7U*AJgB417`7usm*IPbYFmzxH!TQV{c2z!{m}cyA?6D#}0$PhigETAzN^PEUzm zWkD?{SS=xTo7LLuov^C`iE{}2q&(D!*@VgtoWo~Vzr+O`gfYq)g@U+LXoN6y9Rzo$a=`?XLOY{7|z<_T(%*ULa zFSkrM>27>H6yfLJfV8cNB`q!8Q(1>+w}U>K?Tqtg6Gx%!FVEr5qN@n5O_7Z598g(a z6Vtx97Lt@dlarGNUTvXc$$8i>@t-sg;(yYewx3_7{5GqEujs#v)B0dyYTB|Ffk|R1 z`|n2?qw)LLNvk_`0ljefT{?G!1zRf#`sw28m$d?mu817peOi4|R z*a8@5n|8fo{^f?W(qP5cf^gS!9WWg^IlUq6<>lw+>j&C5GiqzsnJ4U6i7xkdgc`k3*Ng=G=r!+}XQBj;)FZGfn2s=)UoG8*%0l}n|7-~7MEPdlbb7 z_qpu5vY$s@=TY6{(sTl>qLJT|1(^<5BQC7fF#zgof%HuHxd1t%bw zz9hA59oG^YrGHo-=AbWPv&MWxXhk0mU5bu2vZG%vCSppv6hm^7OxE?fH8^TL-zFkC z+gwTRZN&NW&yP=1ab@~xl^Qm1AX|No7Vme?z4;tSh+NCKyUtx*h7Dx_)6pW7&F~$I zg7`_u^+T0_ynE-49Yrm{&D>N5UXR;NBGfq7kvc6u0=2x}4j3kDCowLVRp;FruYcXX zE%A}i)o$#09aG_P54OdtV)mTgyLaz%C=6eQfuGTd#0jAjX~|z!t$z{VfeQ1!_V6uV zY5fJUZ<8k1?Jk;D3r(bF%?>%m_`Zg6st&&tQ>gNEXbYVn;QybJ~=3GK-U~Ynw zQxD0FcGxBakSjr}ts>E8YBATP4R*XhkrvGDU{J{P2@Ro3N=iy@ii`=SH`u}PJGPikZ)yflXBB*O z-$bQ@GDQ2UR+g3~fKQEFmL6~Jw?Bgx69-|0a-74Hr1x^nwp|k0NL0pgoqfAmRm`JwD^3t3)e}40`Bf2{E&Bc-F zRoF{B1{ChI7{=<^XSZzG(j&7w6r$(6dGnf<6uA7I%mht3sNz1tz#}#xcr}7BDTuk; z=8y-aY1^??x^k8cb1IWwbWUEr8%{L!i8!s-1eiSaSO9|#tQ;&O^Ul6}`SQ6#Vm7eD zWSq?zEKj_d2(vl%#fr%;DVkV}R99EOgKEvY5be4(!1X|JO~xly7}H3KbQ&p;ckI}) znl$8^B6oK7;QP44Wcy|km%xl!dPCYV z}(BQUL zzk?H)JJs#YqX#|M-P>~jEcdv;6v+rwTfx_t0X{zQjA&m#YTY6%khe|y9nCJu$;qkt zz~xj4t>b=RwyqX9Ercf55aPFcN3UFGK3i|#B&pz8mFekKFBCtxxjAUj!DXTPoQC&pn93*&87MtV0B9~Xj*V71ykTrg8Jc6l zoU`x>bIZds!5Q`>nYzJ9fDcgpxdB64ZUKqkQq+m1uSFcJ*xMxJ)4aNO>q6e+^pe#2 zDtC{L{7n(X;Le2j_$G&)T7&9pYS+>H=_b-|(l*5=3-(n)_I7~4Zc902{0Z-&iKjYp z0s>jl)rnIw~X80}~ zBX~$RN(<5^q0xAl+;a<#t8M{edeQEI^>mz|BS|}{aYSUYg@r|-gBB~b8gbG)$wiS7 z)I`st8)+~>O|s?huqdBRrF7M|bK*d;RAlmWx-U6}|<5A*@(C>Kt{;`O5p{B*V7 z87@Sw31T2iG^l{VGE4(Fd3<_B0K{_eIIs_7oSSi3sbHeO=n3|LAlHCX~$4CK)~8{D(Z6!e*=Tztd6h_o89FT@s2Y#~V!)wj*qVGXBZCq0-; zzEWHHj*gCClManv4glYQl&-Zz`yO;~`zr_p#jK=|K(2_;?MUAE>VD+$!htXIHDmTc z;&W-sgocsYNQ^zvzOS>_yUJQaM(V(>p3kpLd@el8IP%`W(CN;wL)up>BF+*M!PxIM zJN4zQzxw5n)c)NZ{ubm3D7>uS@p#?H=}G_ou1m84Gafh7{HAAkB>A%BY>1vXmzmnT zhOBA03;RmK_E#Zwo3$nX!dE{Vwk>{sevA%)tNe2{M~8dh^aClx97mPSV)EaeXd`_q zz}Iged6P1Co%AbB%0GDwU%`f{D0~I`Rd@4AuzUsME7*5_o$tYhsTBMWIZUs^50Sr` z=zS6_U%~ha_MOJ?LH-Yr{J$h%e31WLr2qF+?*D{>g~(mFfWds41;EcJ|1Kf?3IyVp zEQaZU_zK2Xux}$2zhp5?Y{xIUeg_5r)mifujIUtd#i`$tQO4L3;r6Li+{cE2ODb^Y zaCnjCjA5e8AL;Jw^>F4uT%|pd>!;QqM!i>InV6V(AL)D>Q6~QJ`>9AU6^=ROB!c$A z0WZ?uyL6@FJTw+P(ysyXxCQS1V}$FQ3lHi3P-o%c>B-E1 zBW7~X)Xsdn-WIZiXfXYw0AWyymsp)SbR zfrrcZ!D-Dks}&I5lC0gUt~g|p5=?>_Vh zH{g}zkcK*?jtRR%*2ln+Ef?dThP{XSOx!}~XVFTYzj{P%!~G<|(zGeXzGSB^k_zvo zu@4B>mII1p5SvNSrtj2YsZNWN4?RUJwz%$b>Jy zH2TLo`mbJneISmTS7+bc%3`M{IlH+n)Ml-^#(*mxfx&behQ+ngM4qLr(Owt^1YiDS zQm|wUbe`U*D?pIaenz`TSxwE39F^NbN1seu03(Y;P6fh2T6fUQry&7mo+JR}pU6o^!l|RW<JRWdlO0a`e|731HZE`bS-|J<`B<4n}W#FV{j)bRJnjPE9789RBv zZeIbBYpTW08A%`49?_K;9CtIrzCUitI^^Nec^{=b+gRxcX7`=cJ;inCrfa-{1Ju=- z_|-#mhW>2@-z~TQC=Pb;xHk8nzfqp9v1H;ktu?;SVeXF3Y1`{CWi*a4iBZ3(vw$$BI0jnRVa?}k~8?+AMJh)L47r*f4sG5GA{gu4as zoV6BYcc=E&p1Smdcm7ep_{ZAsscXnfY`R<8MS&dFs-kn1P<^h3KUe+mM|lB;K8F*= ztSmzs8*Seo(j9QmtTjn0fXj=kG^iHmYHcCIT>)#fvDmz6#xS=GeOt)bni2aCqyhx) zL1sBQJGZRI2wEOJYA2?)MT|f1V1Nn^RA9W#yX4$jJ291V2ANM3n08W~Ig5`pN!? z-IL)qI^?l4Eoo3-81taIJ|afEqc1E~b*j+|sv- ztkK=NhjJH0xqVJ3HBJ>Djf#TYkZqxbV9%6|`KTGzj>2ygrk}4YSc-G3 z*yga$vlFhU!-nRl1job#>{`|_si4`Mx)PLR66zN=t|=SNrVQ!wlS#K9VRko{W=(O> zFV=oJ*wVAP=u?CE**ORAg;C1)H-U_z>+6?3f{`^66LixE7kBRkH6ZRqThsUMJayvR zCH_Z67&!NOs_&uALW_UY*82D({E4VTyu&i76 z<>!$g#n8h3EbEfYFHL{_)@js-36i0bq2zCIwW_nMReAgyp-(Q&`tGQ!>4-H3SEIhN zjF4sS+~9uK1+o6L*-%KaH<@?p=tx$1a5gc+C9zK7y;9ESxon`}aMc9nD!|tjPrBe( zcY0)M^sS7~qP6j?OOYR)`B!rO_V0e>S6b_#HZF8>_nMDt__5wMT)6V(vFoG3clPXe zD)fEdRUu{6GDr=_httUfA-$@k8J|y zGCQ$(@1Osj+&^x>I4Q6e>Q$K$O_KcP`FsWYMj$`2B))=uuiO9n6TX7+73{k(!}nmr z!*u`4LnINQ*G2WN@u=H_K|IaP-OYOImewZww8_#6JREHV1x4q~-Z(!@a>AP{_dQyct1E0&S5jEty`qB$}zWHa#UdtA%9} zm2_2~{!8~gpXtMV>f%T@yWbIr7fG$htbept^N*3F(BEJYdmx7KZ!S(>IHHvBpHYh_ z2b0`yzrOxk5Q3H|P5{SjuK6vHYTPI(%!`8?#ec`W*Gnof&^O}NacTs$p>K1Dm_V39 zx?g9`Z^3%Slh#8vv&8dvfaCQmKwlSKmRd2A;?OsK7c$)082h@*dgwv^KQ-oCdHg(P z-M#|)DrfS0P&*S?ezcrRqJBr3^I|>d>o}GC)Bp7nq5OCl)Z&tMOUduJTfKia=xbp3 zZ^^&-Zfv+J%y(no1e~8D5WXAxQttS*4>-OX8)j7DyD`2S`+;ro(b#bD86S-e7s2w; z*v~QkKOh1>sT^i-!|~l1-;Mn!y8X{hDv4puQTInyfzr1?r}idMC{|mFDh7ahQBxL+DA~hA=;TJJ>pHBIyEULXM&FpJL%!Wt>t;BT_Wc||K|Q_9B+GM{wvLYcSMRqq zvMm#*UaKvg$RS0pD0L!j-h+wXD02FimcG6(yC^U)(23G_1Xj$NRQNn>M<0u2)8*~# z-02o6o}f9P@72DIxn!2&kVnaRj=tLSGP|zfS`4^o>XhmCD1_vrNTQY1iQ?jTiyc`q zt*ui_TRpE;w{IDRQPy0fDH~;S>n!Hab?eU0@bB)%56llphf&PJZj|7vBvV29d0ZgR z)59b7epqc9p6l)C>`a3uo5N8vF#*f{vpPPoQxi19!^1U~F5Q`+H*nFRIJwvEud2^) zUn~vfuC@WszLC89PGP6I8d8XA7oq*t#=8me`E&wa*GWx1qU(S(=0UZxrryG7Kmt}8 zuP{bhV&$#cJAGQLeamohs)B`r{+VqxhVam|6-q)p*?vY%&D|%frEOsBBg`9Z02

    nzmLY9I)VOKyZ)adrl1KKvLBRm*tIg>+q@IVUG-UUX< z0?BgR2}7VK?@t%>hv}CS2kEd&H(>y4pb!v= zvE5{3fIPFGlAgXbhu#yWCS2Id3^TTL9^EuUmIDJYHTCqSq9g!+nwrwKJ7-U(@LDOB zMwr!ct!F0s>lSAv4H=SxCG6y*?OVf#vBV)4Z6AXRbWV+XhBUw2ayLGKHaIxgj&pK7 zw4k?mg!l{p!x z8_008YaD?o;l>Gjc(P(M4=0|@bVokeDXvNt<9f!@+AiLKOK_S?7AZt|+{&2isVyCQ z+6kX>PeZXbR;T{uv~0sCZqlP4RHs_D?98dn&Kw=?AR-)n1Q$4%8Y>va<#N%9)|~n= z*x)$x#PcoUNM}b!!Rtps#v2NON!sSF>cq$QPs3F3o~@QDu2l&}LNL^HL-dp>Q;dl? zX#v~gR2cgI1P_zarC_>murr<+scB$fnJ_P)o&49G%27iuni`=LgQ+*hd58=*C5FAP zubNz0T^;i9VYy7KiRMYnf;93jUQ&|fgSdN0(TB~A)6!{!*%rDP8z&2&Dk$kN5giCU z_24R_)iBU2vsO*?tyy(Stf4eUKXY%%DO|Yl=usHi4_M$y5v2EK4 zxE1IH#6G)W2rZtSO2||d*%}PfS9K2e*rt0l_D)Zn3!{%`zNKVj$aQA3EaymBSXzdn z1F8G^?g!hZ`y$Pe&IO>sW=6t2+pc3`))HP_p8H7zU1}n;F<#PpOP35O^B2ANg%1>6 zV&nvN`Lvv;_bEQD@0#)A&f?~tjddqYGN++|3!ISld8fQ)`&2Q`{0RDj%bDB#BCbHw zsO99h*|P2Xx#Ap&<&=P~j`{&}&#R$-`coT3+B!Q81N*cWFMc!F+v)-&^}u(%+Ex>H zOH~wD-cACGIt^xPiy|$|{(i5bl9KbCV=9iQO?>QUyP*)KKQ{oE>J6p(nshe^(q;-< z)lQRO2074M?5WM|BQ5l({<6;hDl$jA5XITfPEPsILnqp_*Nc$0NWMjV$Lw5QnIb_x z+bQ*^&#haxjNTF)vlPQ8O)70=y(zqM%-%e=-YIeWONUg$tJ^1!X~f4)C4wRLi-`gs z7!CC=1)#TY8s4WO;bhMBQ@nHLmd9ZdvKMclrC~hMHNJsL6f#>wmZ{;6!9_yZUtc)(3l(t4i^Y-Jm&p%3Z2ictmuB2=r_;O zw>#f8WI!xTR`s(b#FT;)kXy<%i5`Iu>z^UqQ&I=aYvszj?d)3mrf=E(P^?8_m9#Lp zF`EZs11(XR)$JaC-X+ocUV5ZY?YD4m>2T`x>#$2R;zZ~jOV!(hP3NAL_OHHaDS0~+ zH@XiD84aZ_Jk9_Zz~BRpjV=(S%cHhjVd*muLaUJ%f^P}Gfk|)7IJ~pa!LUQw$_nP3 zpO1)m>ZYI`p(aq+`S%=Xt7&kaWfhgaVB>JjTt8e;_RpF-e}!$Y)=NrBk%l?pGj;s9 zgI<#zKM;HfvsAcq4{prN^hxryxxu-(gHah=tC~llP>{_>9$d_?y~E3DaZOeg1cN-D zRn00f>D8M(3e#FDx9?o0zo|(mtufDQva~`-aY(!U!@xNA?M-0~RSA9Jlq*@rUeZDq zB9gaBRLgSAnb!ymA5Vi>`8(1MPEW9+SmLXJ9Jw1P6!XWbX93aKw7JW8G}*(_f+%UV zl-Q0O-}D`0?;rZ(DW)gm3?Z@k;hS9%S<#N0E3)L-ptEx{9@BgDd(zAIn>GDW+jE&# z!rHp#4E^u;eM`BXAbMCgwD0pB(JyB6^ADss_qHDsH#e_{jd{K0GOy85t=3}x>q6s* z#LdLzNGgkF`><*f^!<055o;Y>ntIArvoc*;>2F_}h~^u-PB0GcTkRgval2=5MLEIA zGV83maq!}R2eqZ87osBX;KxK=h>SW8uKz8|2XNX>BTa8EzBflv*-RE^_h2X2B+yt% zI~4}auU90(RPoq)nB(9%6YC-h{ z&pGsGZ`Qb{)@RuqbV!@bKJ5AWy~*3DQzM&_0RY&88KK1Wej_BaHh zp28U<%S3aD3zSaU)}GGCHKrYGa8xrdli3$9T~d9`DUFqB#IqH4=mF7REG2;HohsWx zC#&a=0!D%p5a3r!qlAbNg8uqjMst(V8^LF78kfieJL=`_3Z@gN4Mo=v3`vb5xgOIs zc5LF%zyDKI{{o@w$4bj2{KZpNj#AaC40-%MA-8&ab*Wrzhs=&+7gOU7HohYn%+Jjg zAHR1^5B^HNy4P(F#z7*N8<~{;aO=_(qqpvR_B=dl&160o=o&TH*3nk*yeFh*d)kKD zrJS1dFnjZvnA$q~Uj2#5ZpoV3dYeWCWp=;0)1urdUni$<+_D#l#9|Bt$-X^nId2WI zCxCOIM&h|$KeC-MxCQ8lXE(RBkkj7IGG4ZzpUmb4VEY5S+8aMBK8MZNN!OG~$_QK*6<#fqF~^ z!eyv;TKV;sFF2n$jc)fvV&kEgq5k#dyThL^V7kmYEhG7`!M6CbMr?o2mkZ4CByw1jFj;?8;YlbN0xx**-I`v){ds1{X-A!sLJ*Fn)i&RgV02vx{p+ zzgwt7XePZ(b=D0`~*_VT1ivpM-r zlTYuo+8z>B84}4hoV0*Ee)rq5GpE8{t`RqL50q`p{s9*=y?f_aWlW6^|C&q1y-%>@(4&^>5sm2dkBmF9*eReKeqJSs)i=O?` zhyAM0-qncBC53v#>P=Qm?C{rD1XQcJ*kDWTEukN#mipa4^W^xmB3Ez?#S#sFX*o(00~dG9)+n_&Y+L&4srHX zwj^+SH>zqZUc4n?t?VFDMaOS363SuM!k-ht{PV1MO;+b^6mX-khiT{dZiMM8-UX~~RNAu1T%q5C$$;mS)bvm%q^ztRIZxfkE9lG6m$G)4y>Pp#@11SgsGPWVE9P`{vv<&V#rZ7} ztHz*?wUG&=xlax3;wTj);E(Hjr}#znNV7narCE1}f9J?_nbHc@L4c<2tK;u3UVN`P?V4GohvQw(Of4HP zuiL^Wv||st@b-?*t)m(2nmSRb>&2)Ak|;Az8c;Za1xIl0f>COcy|E0BoScd?dz91H z8K5+c_sKr-K8bWU1QBf#j4smDD$2(Sa`o-B55gZ@AvA#EN-D)T|x0*LfARPg!mb@{FzLJFQDTEDTqjFf; zo#*^=I6Y6hAwHddEb@kHxd z-rm2fOsKwA?u_8`rv)6j9Q9s1CoRoFkWKRTI9z)nDk`MLaCE;Ld8^tz%gI5uch(x5 zKY!lnAW|5ntck^1iD4|gULTuSN2%_1C8s7Ba{FIZ z8q?_Vc_0x46w-WDIg1@XU*7yV#Qq{<_|Tt)8_ii5Y_&8nC}{WfMH}nJlWH>DJVqb% zF?;K2YkOVnl|ry(pnv8yO{-Cds@ucf_Ic0bFyalK>N$JrwojBQ>Ft~%#pB?7feU<^ z@B&Bd?AF3A?zQ>p?eJ2Ngpo21r{f{3&`(K8F%rOaDAB@h2+MLPXj;B@nWfb%6_tjr z*NZo7LFM(gT0vF;YTN#T>4240M%)B5`@dUsO9Y8CDp zv~Knk?mSC%IzL8y{CFdwK<6=@$LtjywmGh>H=lJHiZ1u)v?%z$G{X8jhEAC%y#2sH zc&vsfAW&{(%0LLu<)Bo1GmnzlMYN`;5e-}xg9Lf?Ij-H~LLk>^Kp|XFadCc8QIQa- z+$psIbfGEh{+jw1cQ%zTa?}Evx+zzfm4s(WJ?yNyCfC+ii?;QJ(Q013Qf(R)z|2bK#5mUf z?R{C3!4+63SPk11p!#8;uCe(T&v5m&nKji;q`Z}r-_orS4rhmGZm8K6q$L!?nzWfr`>rzA%O~POVpnO9I4<39G!x;_5q%&o^RNnpO1Bpj)t)o}=~g%JyY(lu+Ra8uo*+Io zKoNP5{??5eGOYm1L_aXx8+?2(jKZKHsYy`L@56>UlM9)dz5}kZ$Y%HK$mr-C+Dn5k zt=9c}zz8U6Zzk{>X!+waA_^6i+??_zP;Bl?lfZmC*;%k$vtElMbfbVW@#sD z_f4^!y|~3=g&<&7&4&VIy~A|0YH6QZUA`#BN+E#ZGrDV`JelO{mpF69KsvXua7`9( zur*8oVb6oI{~od|kM2H(mRY?RfS{%YK_f8NVob&D%mbc@bl1D-JEI+PO7-P9CRVrhSK*g2!$sV_+m2Wx}x1JCP z1F}jlkg@BR^MWMioxRsuX`$YeP%*GGv0~n`x*gh&veHSuP&4sL83m-G=?bqIn+&gZ;oU4b}92_$%BjPSC=8R->E^<0O%qqCaag z65S`)AX@r*noAU-vL1O(?jv+mmTtrxY%F{&6W8GpMXXIq!i!d=Y@>)&NpyrR6{$Tl z3*Ej8moJ|}%lL0drLh`+M8Hrls1uLhy=&KWlPKNE3(FriSw5}zhI%(X(aebuy+OV_%?D`#c|c! z)t!utYR|-q>}d%HL?X-nz|~6-#i^u_klGxNMswK*XvlG2_wIa!=UqHKf+f~7ezDBa z4mXBu9-RhTImU|6yhI3*Eus50+pNc&W*4?IT@nvqldtL3H4aj;+Us==-_6zRsLV4S z%1wxDD1WDo4;_9r;p3fUTkAza-0(>an%j2*oHZVAfN!tB$4ecB6Vg@Ef{sp3Xnr~s%1p=6 z0}Ge_uGbS!(>oRHpx8C%m>>|vxpcqD*YWJwu_N7eCQJ|P$jHo^-|L-y;o`+PSGXRT zI}0A9q-;rfI>Ue2mB%|h57L4HuKKIV16X|D-kz*AlWv!#y7Jn&!U8H&C2 z0;t7e8i$|ie(Y73J=4Br7joy$K>65ic}xJI`UQnT$J#VA&Rr? zMDQLSDZ(8K9Vt0E3Y}R@6SPu!v^g~;<%#Z{F-4XoCv>csK9VipQF0l~YQx(Z!8?19v0CvUw5HrKGj5BzwpJ z;qtKnPDrJ8&PXoij+d4>Y5@Tdka(Kdiw^TEFHI)DoOVay(en85vmT5lt{w~Q&ye$# zw)Vb(!n(_wyyJyb1W1-4+fg>)bUl)pIyKH{)vPyA51gq*u80Z}Ewb~%KI$_zHr|6p zOY^>sEv)UXjIBoZ0EDyI>^;5%m)Qf2;ikJ`VxlE}plPGU>DD?2wZm;t=P?XK)ZsV_ za^j|%n>TMhS-e%_bj7;Aam2N;fFlkq+&*ll3u-`5!v$Khxt51AuQmP2l&Bgg#I-8D z@J_UDTWHeo0UYWYqBxHfT9*;Xsq5rgqF}J(@{&memM3A#l=(Y?DFcy|hELJSirS0>ps z>3RSgd4CY0KWM>C7K4CA&(dL^yMgic+!23B2P!P?&#tfaWXyYw)WB(UvJ3Fx_SZ7F zwXO<@Sv^MX}L2uUsoubT+6%bP3 zBsgNdUtk*?X3UXF2hLhFh`?|~wR!W--S@AVRY7l2oBFsVcfsr#kNpXO&>KNfNJo)k zKA=YB6$1fO9xxJGC)4#?c=yi&-RM>Q``49d;SGh{CboDF98gE}y4Ke0)d-b;#N**n zmu=JH;+9!sfTeRw0AMyYUhhKe8ncIPo#|&mxg{v|{;Y4|!N1f&|M@G0wMr{KsAqrJ zh*n#r1U{A~)dUL-1KSrqLuxzmslqK*Xg+h5egKL?Mlo0leGi=U+=aO_lYtBOB+$U3 zwWBxh%j23d)nw812m+FhTXWG)+J$92JVkMgg#2upU(-2rBQLBF60rOTfkPvl0whIq z;q-UwxHhhlT@k7>b_3Lgjb1}b2nFGG(jZkeI=rky`=ofCFSFP+VeHtkH*oa{0bSFF zR!a4Qex8~LTEqx&#wX9`p7=9L z@5}8oFJm<|Cu|)JOJn#n8qBWg}}QdB?bzz3jS4x0(GH0prG$9bf?j1*J_<2?h(!lHTDy_0u=LrCDd3G z2jIFD1!3J&Dcw`UI+L}ie?zOcsH3hek{X+`J+gWsXH{ZXHo(!RG(Din2%8(Zywnw9`7;CF!5CN3e`DD&x@>wNrTw;zK zoHeKtxddJdVSX-x7R^J&8|-i}lf-W?5`ZJ%qels%+~${c-Bo!|Tu(dNsjaPT9ER&? zKg0P%joN5YpdzIsQxzo}gsHwnmc=rl!csbW4+Xv`D4hK7bcQ%7Nr|1RHqmfO;S7H` z)smSuEo4QI#Ht)db@fR&HtxB6g$vcGiT4?hmeB*Q*~aA5IvE<+c@dyy1jh}ihuuSt zi;GLTe}7}&IrdXO&&=BUyxPC|2dW@}mo@Hafy90fvT4&Mv<%mG?uH<${ohd&%z{6_`<_v zIMXJ*e*GFY6H0EfR62Lhbn2Z=x1O|e=8qL}eeB+u(wH+vTH5F|HkH6E)_!{7Q-M_( zhF%*_z=h5vg|#*(jiJ%G&6*HgzG}%*fg7S-w)m7U3FvS&jjBA>HkfeFc0KkHYak1{ z#Qy4q_v`WtY+Yze9)$rlY04CDZ)qsmBbh^|kGX>AQJ^xT$BM8ioGHXhC#%gWY>_tx z2WL~5g!FWGrVGD70<@XA`f9^rMN`hn# zVm59uZGjBEtE($uIxeePnepwc- z0loj~^dw4SxGVnZg@#n<#Rfpy)9ii^Rjvz!IXUenlizXw^*wt3H8gqmpTqV*-}~cd zI#93)iF8%@QW5z6Z+`hF?&vjs+ScDfdJH-y=wGld{kM?#>Y~^98}7m&u>W3RwM;-Q z8gABzjwAv5X2)>T&};lITYd|DwH$hl-(^$BZ=quj1$}+5Gq>P(jBE-)ukokN@%-zX z)qgSDVSHF`2>R-N`S<5A3-{KYDjSbi3^4-|a(AhUCNaVY* zA;|V`miX1*@ZH#OBQf8N@!i;01~lZM_-O3cvC}7+@srA7fc=k&CqJqD<^21TSLY{{ z-vFeay6*qgZj6KVVV$oom@F)?`NdPqWqp*>ZL_DIb~G~bJ~H>&GHYQX_U3y9!SE|m z#%~SwP?>Hge>L{si-HPF`;64zQA@iFwKS^iCe7bbfN_L6hjnJ*yx&o=vV)4%!Gg_2 zzoX1i4b_Co`L1JsLtTg}3w5E(nv)m)hMFkV14=n5Cu@F3_2uAdsJ__!ng2T~k9_qS z9(MRYr(Pe9U&IZ~0vH0E!wiL=vBvLJwfgQ;D=z+*b64vtM0d=OXox8G+ezt2Wv@eh za#x&i2ccZO$7i_V>xV)iBI;fJ2;qh4i274SE-$NxV_g}WTDnHK?57tZGDYB>Z7#rh zX=X1z$A!()FS~^Hq4+?XPNg29dL)jIDClO<*>@=bZh28Cgt``g@{~{E`ra)n9Ex`T zsljrOe}uSMRYdEer+n0O)HCWSmW{|W;w96T_9M>ZS9(Dl1qFrB6$C6NM*Z{h<_Yt* zifN5n#>|+9v7k@d?r(v%lkEcU`Iq3r`9B2_KiCCp(Yud)+@7K9!?(8f+SPuh@K`F` zyrjNw8(p|HeU}t3ex?2RY1?6&>N)VN5^|X6m%B2<(FC#}^IdkUx3{-$9VIKP#*f|C zu2aN<3+0~KmYsEVb)ioMD5kp3AHNd!kjkmXCZ^Nfa?fJ2pm(i8U+->9U^<=o*P}-( z9tJhRU!7Ks!6+?S;x>|9tsYynD`#LcquTUC)FXUr7g94BAP~Yk6|oPBRpsT5w7KF z-iYX^iO3&aA3hwCua7hxj9TEoq!C0#3AnzguR(yu&cd2JF@ea{rnwMDT zM7IRE#|I!xjz+}Cx4gUwu+kDY&B-HCx%yjz5l@?RYOv%wJ@Om93SValZtTGIi>hR81AagQLU~URiPk!>oZ>29h;xaF_9BFB3p|i8dEk~iHOcnE%H`iKE zP}m3#aL)?w8#lbz`0-_}u|)T0&IYBP5(D%_K}dxPJ0SpRMLJb%KaFX=7epOQC3Lv0 zTl*}-RDi0#u!u<=bo04giJJLEFuetC3r8~91y{exTB5gDgWY^%pVekA<6Z8Psl48{xj zyCMDkm1A>LJ_&pU(QNdCXo1Cl+*<&;stQ}TInQ2n1Y74%B?-ET96Tp*SBQw^iCTSj z?&}0w8QhyuZD_wDdQ#eUAtP!8zL7Xj_~kOHJ7f1gzoG|k3(mp#OC7A4lbM@Z) zr4{wdLx%l(no_`>1~>+ejAkKp+T{wsUngVO(iIKGn67YEB17GGF=1pgz;_+lde@dF>h z|3}e$FHpX)_`>3+J72ll?@i=C{)C_I{72DzFHpX)_`>4nhF`hb?@i=C{e+)L^AqW> zoCiNQp5crzFw*tNu@U4Jv1$-;u zTLIq+_*THT0=^aSt$=R@d@JBv0pAMvR=~Fcz7_DTfNuqSE8trJ-wOCvz_$Xv74WTq sZv}iS;9CLT3iwvQw}N3?0g;U}v|NI}b4C9H+LyF;mC4G4<<>|3AGf(eZ2$lO literal 0 HcmV?d00001 diff --git a/content/terraform-cdk/v0.21.x/img/terraform-platform.png b/content/terraform-cdk/v0.21.x/img/terraform-platform.png new file mode 100644 index 0000000000000000000000000000000000000000..cf4caf56ed51e746e5e5ed0f25bb9b68da9fa193 GIT binary patch literal 60946 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 U+p||-$TB#_q*P;*1OkU$uD|37k07mv4B9J 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

    B+?fImzLIf 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 ZqqbfNj(d6sK>MHz=PqmJpRxS?{{t4U0w(|f literal 0 HcmV?d00001 From f2251ef8e327c6f246e9847e37cf9565ec95bbc5 Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Fri, 23 May 2025 12:36:56 +0200 Subject: [PATCH 2/7] Update CDKTF CLI flag changes for upcoming release --- .../docs/cdktf/cli-reference/commands.mdx | 166 +++++++++--------- 1 file changed, 86 insertions(+), 80 deletions(-) diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx index 7f4e4426b5..ebdf330db0 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx @@ -150,36 +150,38 @@ cdktf deploy [stacks...] Deploy the given stacks Positionals: - stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --auto-approve Auto approve [boolean] [default: false] - --outputs-file Path to file where stack outputs will be written as JSON [string] - --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] - --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] - --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] - --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply - but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply but does + not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] - --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one - variable. [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more - than once to include more than one variables file. [array] [default: []] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] + supported by remote / cloud backend [number] [default: -1] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one variable. + [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to + include more than one variables file. [array] [default: []] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -236,32 +238,34 @@ cdktf destroy [stacks..] Destroy the given stacks Positionals: - stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --auto-approve Auto approve [boolean] [default: false] - --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] - --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one - variable. [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more - than once to include more than one variables file. [array] [default: []] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one variable. + [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to + include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -316,31 +320,32 @@ cdktf diff [stack] Perform a diff (terraform plan) for the given stack Positionals: - stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] + stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply - but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply but does + not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. - [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more - than once to include more than one variables file. [array] [default: []] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to + include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/plan#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -650,24 +655,25 @@ cdktf output [stacks..] Prints the output of stacks Positionals: - stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --outputs-file Path to file where stack outputs will be written as JSON [string] - --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] -➜ + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ### `--outputs-file` From 610798bac52248cc8b52cd1007e2ede9467e06a8 Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Mon, 2 Jun 2025 15:37:11 +0200 Subject: [PATCH 3/7] Revert "Update CDKTF CLI flag changes for upcoming release" This reverts commit dedfbf6027dabb345fed5db3de6132439edf6740. --- .../docs/cdktf/cli-reference/commands.mdx | 166 +++++++++--------- 1 file changed, 80 insertions(+), 86 deletions(-) diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx index ebdf330db0..7f4e4426b5 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/cli-reference/commands.mdx @@ -150,38 +150,36 @@ cdktf deploy [stacks...] Deploy the given stacks Positionals: - stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at - the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --auto-approve Auto approve [boolean] [default: false] - --outputs-file Path to file where stack outputs will be written as JSON [string] - --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] - --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] - --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] - --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply but does - not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply + but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] - --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one variable. - [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to - include more than one variables file. [array] [default: []] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform - [boolean] [default: false] - -h, --help Show help + supported by remote / cloud backend [number] [default: -1] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one + variable. [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more + than once to include more than one variables file. [array] [default: []] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -238,34 +236,32 @@ cdktf destroy [stacks..] Destroy the given stacks Positionals: - stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at - the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --auto-approve Auto approve [boolean] [default: false] - --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] - --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one variable. - [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to - include more than one variables file. [array] [default: []] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform - [boolean] [default: false] - -h, --help Show help + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one + variable. [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more + than once to include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -320,32 +316,31 @@ cdktf diff [stack] Perform a diff (terraform plan) for the given stack Positionals: - stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] + stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at - the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply but does - not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply + but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to - include more than one variables file. [array] [default: []] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform - [boolean] [default: false] - -h, --help Show help + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. + [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more + than once to include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/plan#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -655,25 +650,24 @@ cdktf output [stacks..] Prints the output of stacks Positionals: - stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at - the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --outputs-file Path to file where stack outputs will be written as JSON [string] - --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform - [boolean] [default: false] - -h, --help Show help + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard + out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + -h, --help Show help [boolean] +➜ ``` ### `--outputs-file` From 0e3eb3d44fb64c5feb86a654801dfc9c1c348234 Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Mon, 2 Jun 2025 15:39:46 +0200 Subject: [PATCH 4/7] update CLI flags --- .../docs/cdktf/cli-reference/commands.mdx | 166 +++++++++--------- 1 file changed, 86 insertions(+), 80 deletions(-) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx index 7f4e4426b5..ebdf330db0 100644 --- a/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/cli-reference/commands.mdx @@ -150,36 +150,38 @@ cdktf deploy [stacks...] Deploy the given stacks Positionals: - stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Deploy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --auto-approve Auto approve [boolean] [default: false] - --outputs-file Path to file where stack outputs will be written as JSON [string] - --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] - --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] - --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] - --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply - but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply but does + not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] - --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one - variable. [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more - than once to include more than one variables file. [array] [default: []] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] + supported by remote / cloud backend [number] [default: -1] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one variable. + [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to + include more than one variables file. [array] [default: []] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -236,32 +238,34 @@ cdktf destroy [stacks..] Destroy the given stacks Positionals: - stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Destroy stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --auto-approve Auto approve [boolean] [default: false] - --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] - --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --auto-approve Auto approve [boolean] [default: false] + --ignore-missing-stack-dependencies Don't check if all stacks specified in the command have their dependencies included as well [boolean] [default: false] + --parallelism Number of concurrent CDKTF stacks to run. Defaults to infinity, denoted by -1 [number] [default: -1] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one - variable. [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more - than once to include more than one variables file. [array] [default: []] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack or stacks to apply. Use this option more than once to set more than one variable. + [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to + include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for all targeted stacks [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/apply#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -316,31 +320,32 @@ cdktf diff [stack] Perform a diff (terraform plan) for the given stack Positionals: - stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] + stack Diff stack which matches the given id only. Required when more than one stack is present in the app [string] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply - but does not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --refresh-only Select the "refresh only" planning mode, which checks whether remote objects still match the outcome of the most recent Terraform apply but does + not propose any actions to undo any changes made outside of Terraform. [boolean] [default: false] --terraform-parallelism Forwards value as the `-parallelism` flag to Terraform. By default, the this flag is not forwarded to Terraform. Note: This flag is not - supported by remote / cloud backend [number] [default: -1] - --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. - [array] [default: []] - --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more - than once to include more than one variables file. [array] [default: []] - --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] - --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] + supported by remote / cloud backend [number] [default: -1] + --var Set a value for one of the input variables in the stack. Use this option more than once to set more than one variable. [array] [default: []] + --var-file Load variable values from the given file, in addition to the default files terraform.tfvars and *.auto.tfvars. Use this option more than once to + include more than one variables file. [array] [default: []] + --no-color Disables terminal formatting sequences in the output. [boolean] [default: false] + --migrate-state Pass this flag after switching state backends to approve a state migration for the targeted stack [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ~> **Note:** The `parallelism` flag has a different behavior than the [terraform parallelism flag](/terraform/cli/commands/plan#parallelism-n). To set the custom terraform parallelism flag, please use the `--terraform-parallelism` flag instead. @@ -650,24 +655,25 @@ cdktf output [stacks..] Prints the output of stacks Positionals: - stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] + stacks Get outputs of the stacks matching the given ids. Required when more than one stack is present in the app [array] [default: []] Options: - --version Show version number [boolean] + --version Show version number [boolean] --experimental-provider-schema-cache-path An experimental schema cache that can be used to improve the speed of cdktf get and convert. Supported using the env - CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] + CDKTF_EXPERIMENTAL_PROVIDER_SCHEMA_CACHE_PATH. [string] [default: false] --disable-plugin-cache-env Dont set TF_PLUGIN_CACHE_DIR automatically. This is useful when the plugin cache is configured differently. Supported using the env - CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] - --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] - --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard - out at the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY - -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] - -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] - --outputs-file Path to file where stack outputs will be written as JSON [string] - --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] - --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] - -h, --help Show help [boolean] -➜ + CDKTF_DISABLE_PLUGIN_CACHE_ENV. [boolean] [default: false] + --log-level Which log level should be written. Only supported via setting the env CDKTF_LOG_LEVEL [string] + --log-file-directory The directory path where CDKTF should create `cdktf.log` and print logs at the `debug` level. If not set, CDKTF writes logs to standard out at + the level specified in `CDKTF_LOG_LEVEL`. Only supported via setting the env CDKTF_LOG_FILE_DIRECTORY + -a, --app Command to use in order to execute cdktf app [required] [default: "npx ts-node main.ts"] + -o, --output Output directory for the synthesized Terraform config [required] [default: "cdktf.out"] + --outputs-file Path to file where stack outputs will be written as JSON [string] + --outputs-file-include-sensitive-outputs Whether to include sensitive outputs in the output file [boolean] [default: false] + --skip-synth Skip synthesis of the application, assume the synthesized Terraform code is already present and up to date [boolean] [default: false] + --skip-provider-lock Block `terraform provider lock` from being run for any reason. Warning: This may cause issues when used with HCP Terraform + [boolean] [default: false] + -h, --help Show help ``` ### `--outputs-file` From 95db01c9d3679e763397f01d3e9cf343f2345e36 Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Wed, 4 Jun 2025 10:38:18 +0200 Subject: [PATCH 5/7] fix broken links --- .../terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx | 2 +- .../v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx | 2 +- .../v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx | 2 +- .../v0.20.x/docs/cdktf/examples-and-guides/examples.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx index 7334b7723b..0c84666780 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx @@ -150,7 +150,7 @@ func NewDatasourcesStack(scope constructs.Construct, name string) cdktf.Terrafor ## Remote State Data Source -The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/settings/backends/configuration). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. +The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/backend). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. The following example uses the global `DataTerraformRemoteState` to reference a Terraform Output of another Terraform configuration. diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx index d4b956e095..7079b74b5c 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx @@ -169,7 +169,7 @@ You can pass input variables to `cdktf diff`, `cdktf deploy`, and `cdktf destroy - Environment variable: `TF_VAR_imageId=ami-abcde123` - `--var` CLI option: `cdktf deploy --var='imageId=ami-abcde123'` - `--var-file` CLI option: `cdktf deploy --var-file=/path/to/variables.tfvars` -- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/docs/configuration/variables#variable-definitions-tfvars-files) for details. +- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/language/values/variables#variable-definitions-tfvars-files) for details. ## Local Values diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx index 58499ac5be..ef9bec8d11 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx @@ -38,7 +38,7 @@ There is no way to collect custom user input for templates at the moment. These variables contain correct versions of the packages that are depending on the CDKTF CLI. The package names are provided in the correct format for the given platform. We recommend using these variables as they are provided without adding any custom logic, since the package name and their version schema follow specific conventions. -Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/cdktf-cli/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. +Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/%40cdktf/cli-core/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. ```typescript cdktf_version: string; diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx index 585f9f8b15..e37b17077f 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx @@ -45,7 +45,7 @@ Follow these hands-on tutorials: #### Backends -Each CDK for Terraform project can specify a [backend](/terraform/language/settings/backends/configuration) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. +Each CDK for Terraform project can specify a [backend](/terraform/language/backend) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. | Example | Description | Complexity | | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | From 335946d6e6731f77bd5c3f58f3f6ab7e014a5cb3 Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Wed, 4 Jun 2025 11:27:28 +0200 Subject: [PATCH 6/7] fix links in correct version --- .../terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx | 2 +- .../v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx | 2 +- .../v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx | 2 +- .../v0.21.x/docs/cdktf/examples-and-guides/examples.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx index 7334b7723b..0c84666780 100644 --- a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/data-sources.mdx @@ -150,7 +150,7 @@ func NewDatasourcesStack(scope constructs.Construct, name string) cdktf.Terrafor ## Remote State Data Source -The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/settings/backends/configuration). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. +The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/backend). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. The following example uses the global `DataTerraformRemoteState` to reference a Terraform Output of another Terraform configuration. diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx index d4b956e095..7079b74b5c 100644 --- a/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/concepts/variables-and-outputs.mdx @@ -169,7 +169,7 @@ You can pass input variables to `cdktf diff`, `cdktf deploy`, and `cdktf destroy - Environment variable: `TF_VAR_imageId=ami-abcde123` - `--var` CLI option: `cdktf deploy --var='imageId=ami-abcde123'` - `--var-file` CLI option: `cdktf deploy --var-file=/path/to/variables.tfvars` -- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/docs/configuration/variables#variable-definitions-tfvars-files) for details. +- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/language/values/variables#variable-definitions-tfvars-files) for details. ## Local Values diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx index 58499ac5be..ef9bec8d11 100644 --- a/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/create-and-deploy/remote-templates.mdx @@ -38,7 +38,7 @@ There is no way to collect custom user input for templates at the moment. These variables contain correct versions of the packages that are depending on the CDKTF CLI. The package names are provided in the correct format for the given platform. We recommend using these variables as they are provided without adding any custom logic, since the package name and their version schema follow specific conventions. -Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/cdktf-cli/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. +Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/%40cdktf/cli-core/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. ```typescript cdktf_version: string; diff --git a/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx b/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx index 585f9f8b15..e37b17077f 100644 --- a/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx +++ b/content/terraform-cdk/v0.21.x/docs/cdktf/examples-and-guides/examples.mdx @@ -45,7 +45,7 @@ Follow these hands-on tutorials: #### Backends -Each CDK for Terraform project can specify a [backend](/terraform/language/settings/backends/configuration) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. +Each CDK for Terraform project can specify a [backend](/terraform/language/backend) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. | Example | Description | Complexity | | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | From 614a009a4f8b6d2e9859d00c38a55a335dadc56f Mon Sep 17 00:00:00 2001 From: Mutahhir Hayat Date: Wed, 4 Jun 2025 11:27:36 +0200 Subject: [PATCH 7/7] Revert "fix broken links" This reverts commit 1d64c64f85f00785b114c56f1017eb3eea1ba571. --- .../terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx | 2 +- .../v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx | 2 +- .../v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx | 2 +- .../v0.20.x/docs/cdktf/examples-and-guides/examples.mdx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx index 0c84666780..7334b7723b 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/data-sources.mdx @@ -150,7 +150,7 @@ func NewDatasourcesStack(scope constructs.Construct, name string) cdktf.Terrafor ## Remote State Data Source -The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/backend). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. +The [`terraform_remote_state` data source](/terraform/language/state/remote-state-data) retrieves state data from a remote [Terraform backend](/terraform/language/settings/backends/configuration). This allows you to use the root-level outputs of one or more Terraform configurations as input data for another configuration. For example, a core infrastructure team can handle building the core machines, networking, etc. and then expose some information to other teams that allows them to run their own infrastructure. Refer to the [Remote Backends page](/terraform/cdktf/concepts/remote-backends) for more details. The following example uses the global `DataTerraformRemoteState` to reference a Terraform Output of another Terraform configuration. diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx index 7079b74b5c..d4b956e095 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/concepts/variables-and-outputs.mdx @@ -169,7 +169,7 @@ You can pass input variables to `cdktf diff`, `cdktf deploy`, and `cdktf destroy - Environment variable: `TF_VAR_imageId=ami-abcde123` - `--var` CLI option: `cdktf deploy --var='imageId=ami-abcde123'` - `--var-file` CLI option: `cdktf deploy --var-file=/path/to/variables.tfvars` -- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/language/values/variables#variable-definitions-tfvars-files) for details. +- Auto-loaded configuration files: We auto-load `*.auto.tfvars` and `terraform.tfvars` files found in the current working directory. Refer to the [Terraform documentation](/terraform/docs/configuration/variables#variable-definitions-tfvars-files) for details. ## Local Values diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx index ef9bec8d11..58499ac5be 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/create-and-deploy/remote-templates.mdx @@ -38,7 +38,7 @@ There is no way to collect custom user input for templates at the moment. These variables contain correct versions of the packages that are depending on the CDKTF CLI. The package names are provided in the correct format for the given platform. We recommend using these variables as they are provided without adding any custom logic, since the package name and their version schema follow specific conventions. -Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/%40cdktf/cli-core/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. +Reference the [built-in templates](https://github.com/hashicorp/terraform-cdk/tree/main/packages/cdktf-cli/templates) for examples of how you can use version variables. The following example shows some of the variables in TypeScript. ```typescript cdktf_version: string; diff --git a/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx b/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx index e37b17077f..585f9f8b15 100644 --- a/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx +++ b/content/terraform-cdk/v0.20.x/docs/cdktf/examples-and-guides/examples.mdx @@ -45,7 +45,7 @@ Follow these hands-on tutorials: #### Backends -Each CDK for Terraform project can specify a [backend](/terraform/language/backend) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. +Each CDK for Terraform project can specify a [backend](/terraform/language/settings/backends/configuration) that defines where and how Terraform operations are performed, where Terraform [state snapshots](/terraform/language/state) are stored, etc. | Example | Description | Complexity | | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | ---------- |