From 5bfc45aaba97efb2f101f08d9116dfeee0ed61e9 Mon Sep 17 00:00:00 2001 From: Elad Ben-Israel Date: Fri, 5 Jul 2024 00:53:51 +0300 Subject: [PATCH] feat(tf): `tf.Element` --- tf/README.md | 19 +++++++++++++ tf/element.test.w | 11 ++++++++ tf/element.test.w.tf-aws.snap.md | 38 ++++++++++++++++++++++++++ tf/element.w | 15 +++++++++++ tf/provider.test.w.tf-aws.snap.md | 45 +++++++++++++++++++++++++++++++ 5 files changed, 128 insertions(+) create mode 100644 tf/element.test.w create mode 100644 tf/element.test.w.tf-aws.snap.md create mode 100644 tf/element.w create mode 100644 tf/provider.test.w.tf-aws.snap.md diff --git a/tf/README.md b/tf/README.md index fc708760..594b45f9 100644 --- a/tf/README.md +++ b/tf/README.md @@ -185,9 +185,28 @@ class DnsimpleProvider { Use `DnsimpleProvider.getOrCreate(scope)` to get the provider instance. +## `tf.Element` + +Just a blog of JSON that goes into the Terraform output: + +```js +bring tf; + +new tf.Element({ + provider: [ + { aws: { } }, + { aws: { alias: "server_function" } }, + { aws: { alias: "global", region: "us-east-1" } } + ] +}); +``` + +The above example will add a `provider` section to the output Terraform with a set of providers. + ## Maintainers * [Elad Ben-Israel](@eladb) +* [Chris Rybicki](@Chriscbr) ## License diff --git a/tf/element.test.w b/tf/element.test.w new file mode 100644 index 00000000..19e82c14 --- /dev/null +++ b/tf/element.test.w @@ -0,0 +1,11 @@ +bring util; +bring "./element.w" as e; + +if util.env("WING_TARGET").startsWith("tf") { + new e.Element({ + provider: [ + { foo: "bar" }, + { baz: "qux" } + ] + }); +} \ No newline at end of file diff --git a/tf/element.test.w.tf-aws.snap.md b/tf/element.test.w.tf-aws.snap.md new file mode 100644 index 00000000..67d15d35 --- /dev/null +++ b/tf/element.test.w.tf-aws.snap.md @@ -0,0 +1,38 @@ +# `element.test.w.tf-aws.snap.md` + +## main.tf.json + +```json +{ + "//": { + "metadata": { + "backend": "local", + "stackName": "root", + "version": "0.20.3" + }, + "outputs": { + } + }, + "provider": [ + { + "foo": "bar" + }, + { + "baz": "qux" + } + ], + "terraform": { + "backend": { + "local": { + "path": "./terraform.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.31.0" + } + } + } +} +``` diff --git a/tf/element.w b/tf/element.w new file mode 100644 index 00000000..dc27b5f2 --- /dev/null +++ b/tf/element.w @@ -0,0 +1,15 @@ + +bring "cdktf" as cdktf; + +pub class Element extends cdktf.TerraformElement { + config: Json; + + new(config: Json) { + super(); + this.config = config; + } + + pub toTerraform(): Json { + return this.config; + } +} diff --git a/tf/provider.test.w.tf-aws.snap.md b/tf/provider.test.w.tf-aws.snap.md new file mode 100644 index 00000000..5cb18933 --- /dev/null +++ b/tf/provider.test.w.tf-aws.snap.md @@ -0,0 +1,45 @@ +# `provider.test.w.tf-aws.snap.md` + +## main.tf.json + +```json +{ + "//": { + "metadata": { + "backend": "local", + "stackName": "root", + "version": "0.20.3" + }, + "outputs": { + } + }, + "provider": { + "aws": [ + { + } + ], + "dnsimple": [ + { + "token": "dnsimple_token" + } + ] + }, + "terraform": { + "backend": { + "local": { + "path": "./terraform.tfstate" + } + }, + "required_providers": { + "aws": { + "source": "aws", + "version": "5.31.0" + }, + "dnsimple": { + "source": "dnsimple/dnsimple", + "version": "1.6.0" + } + } + } +} +```