# cdktf-tf-module-stack
A drop-in replacement for cdktf.TerraformStack that let's you define Terraform modules as construct.
## Available Packages
### NPM
The npm package is available at [https://www.npmjs.com/package/@cdktf/tf-module-stack](https://www.npmjs.com/package/@cdktf/tf-module-stack).
`npm install @cdktf/tf-module-stack`
### PyPI
The PyPI package is available at [https://pypi.org/project/cdktf-tf-module-stack](https://pypi.org/project/cdktf-tf-module-stack).
`pipenv install cdktf-tf-module-stack`
### Nuget
The Nuget package is available at [https://www.nuget.org/packages/HashiCorp.Cdktf.TfModuleStack](https://www.nuget.org/packages/HashiCorp.Cdktf.TfModuleStack).
`dotnet add package HashiCorp.Cdktf.TfModuleStack`
### Maven
The Maven package is available at [https://mvnrepository.com/artifact/com.hashicorp/cdktf-tf-module-stack](https://mvnrepository.com/artifact/com.hashicorp/cdktf-tf-module-stack).
```
<dependency>
<groupId>com.hashicorp</groupId>
<artifactId>cdktf-tf-module-stack</artifactId>
<version>[REPLACE WITH DESIRED VERSION]</version>
</dependency>
```
### Go
The go package is generated into the [`github.com/cdktf/cdktf-tf-module-stack-go`](https://github.com/cdktf/cdktf-tf-module-stack-go) package.
`go get github.com/cdktf/cdktf-tf-module-stack-go/tfmodulestack`
## Usage
### Typescript
```python
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();
```
### Python
```python
from constructs import Construct
from cdktf import App, TerraformStack
from imports.null.resource import Resource
from cdktf_tf_module_stack import TFModuleStack, TFModuleVariable, TFModuleOutput, ProviderRequirement
class MyAwesomeModule(TFModuleStack):
def __init__(self, scope: Construct, ns: str):
super().__init__(scope, ns)
ProviderRequirement(self, "null", provider_version_constraint="~> 2.0")
TFModuleVariable(self, "my_var", type="string", description="A variable", default="default")
resource = Resource(self, "resource")
TFModuleOutput(self, "my_output", value=resource.id)
app = App()
MyAwesomeModule(app, "my-awesome-module")
app.synth()
```
This will synthesize a Terraform JSON file that looks like this:
```json
{
"output": {
"my_output": [
{
"value": "${null_resource.resource.id}"
}
]
},
"resource": {
"null_resource": {
"resource": {}
}
},
"terraform": {
"required_providers": {
"null": {
"source": "null",
"version": "~> 2.0"
}
},
"variable": {
"my_var": {
"default": "default",
"description": "A variable",
"type": "string"
}
}
}
}
```
Please note that the provider section is missing, so that the Terraform Workspace using the generated module can be used with any provider matching the version.