Terraform utilities
This Wing library includes some useful utilities to work with Terraform.
Prerequisites
Installation
npm i @winglibs/tf
tf.Resource
Represents an arbitrary Terraform resource.
tf.Resource
can only be used when compiling your Wing program to atf-*
target.
It takes a terraformResourceType
and attributes
properties, as well as all the properties of the TerraformResource
class from CDKTF.
bring tf;
let role = new tf.Resource({
terraformResourceType: "aws_iam_role",
attributes: {
inline_policy: {
name: "lambda-invoke",
policy: Json.stringify({
Version: "2012-10-17",
Statement: [
{
Effect: "Allow",
Action: [ "lambda:InvokeFunction" ],
Resource: "*"
}
]
})
},
assume_role_policy: Json.stringify({
Version: "2012-10-17",
Statement: [
{
Action: "sts:AssumeRole",
Effect: "Allow",
Principal: { Service: "states.amazonaws.com" }
},
]
})
}
}) as "my_role";
let arn = role.getStringAttribute("arn");
test "print arn" {
log(arn);
}
Now, we can compile this to Terraform:
wing compile -t tf-aws
And the output will be:
{
"resource": {
"aws_iam_role": {
"my_role": {
"//": {
"metadata": {
"path": "root/Default/Default/my_role",
"uniqueId": "my_role"
}
},
"assume_role_policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"states.amazonaws.com\"}}]}",
"inline_policy": {
"name": "lambda-invoke",
"policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Action\":[\"lambda:InvokeFunction\"],\"Resource\":\"*\"}]}"
}
}
}
},
"provider": { "aws": [ { } ] },
"terraform": {
"backend": {
"local": {
"path": "./terraform.tfstate"
}
},
"required_providers": {
"aws": {
"source": "aws",
"version": "5.31.0"
}
}
}
}
tf.Provider
Represents an arbitrary Terraform provider.
tf.Provider
can only be used when compiling your Wing program to atf-*
target.
It takes name
, source
, version
, and attributes
properties:
bring tf;
new tf.Provider({
name: "dnsimple",
source: "dnsimple/dnsimple",
version: "1.6.0",
attributes: {
token: "dnsimple_token",
}
}) as "DnsimpleProvider";
Now, we can compile this to Terraform:
wing compile -t tf-aws
And the output will be:
{
"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"
}
}
}
}
You can create a singleton provider like so:
class DnsimpleProvider {
pub static getOrCreate(scope: std.IResource): tf.Provider {
let root = nodeof(scope).root;
let singletonKey = "WingDnsimpleProvider";
let existing = nodeof(root).tryFindChild(singletonKey);
if existing? {
return unsafeCast(existing);
}
return new tf.Provider(
name: "dnsimple",
source: "dnsimple/dnsimple",
version: "1.6.0",
) as singletonKey in root;
}
}
Use DnsimpleProvider.getOrCreate(scope)
to get the provider instance.
tf.Element
Just a blob of JSON that goes into the Terraform output:
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
License
This library is licensed under the MIT License.
API Reference
Table of Contents
- Classes
- Structs
Resource (preflight class)
No description
Constructor
new(props: ResourceProps): Resource
Properties
Name | Type | Description |
---|---|---|
connection | any? | No description |
count | any? | No description |
dependsOn |
| No description |
forEach | ITerraformIterator? | No description |
lifecycle | TerraformResourceLifecycle? | No description |
provider | TerraformProvider? | No description |
provisioners |
| No description |
terraformGeneratorMetadata | TerraformProviderGeneratorMetadata? | No description |
terraformMetaArguments |
| No description |
terraformResourceType | str | No description |
cdktfStack | TerraformStack | No description |
fqn | str | No description |
friendlyUniqueId | str | No description |
Methods
Signature | Description |
---|---|
addMoveTarget(moveTarget: str): void | Adds a user defined moveTarget string to this resource to be later used in .moveTo(moveTarget) to resolve the location of the move. |
| No description |
getBooleanAttribute(terraformAttribute: str): IResolvable | No description |
| No description |
| No description |
getNumberAttribute(terraformAttribute: str): num | No description |
| No description |
| No description |
getStringAttribute(terraformAttribute: str): str | No description |
| No description |
hasResourceMove(): any? | No description |
importFrom(id: str, provider: TerraformProvider?): void | No description |
interpolationForAttribute(terraformAttribute: str): IResolvable | No description |
static isTerraformResource(x: any): bool | No description |
moveFromId(id: str): void | Move the resource corresponding to "id" to this resource. |
moveTo(moveTarget: str, index: any?): void | Moves this resource to the target resource given by moveTarget. |
moveToId(id: str): void | Moves this resource to the resource corresponding to "id". |
toHclTerraform(): any | No description |
toMetadata(): any | No description |
toTerraform(): any | Adds this resource to the terraform JSON output. |
addOverride(path: str, value: any): void | No description |
static isTerraformElement(x: any): bool | No description |
overrideLogicalId(newLogicalId: str): void | Overrides the auto-generated logical ID with a specific ID. |
resetOverrideLogicalId(): void | Resets a previously passed logical Id to use the auto-generated logical id again. |
Provider (preflight class)
No description
Constructor
new(props: ProviderProps): Provider
Properties
Name | Type | Description |
---|---|---|
alias | str? | No description |
fqn | str | No description |
metaAttributes |
| No description |
terraformGeneratorMetadata | TerraformProviderGeneratorMetadata? | No description |
terraformProviderSource | str? | No description |
terraformResourceType | str | No description |
cdktfStack | TerraformStack | No description |
friendlyUniqueId | str | No description |
Methods
Signature | Description |
---|---|
static isTerraformProvider(x: any): bool | No description |
toHclTerraform(): any | No description |
toMetadata(): any | No description |
toTerraform(): any | Adds this resource to the terraform JSON output. |
addOverride(path: str, value: any): void | No description |
static isTerraformElement(x: any): bool | No description |
overrideLogicalId(newLogicalId: str): void | Overrides the auto-generated logical ID with a specific ID. |
resetOverrideLogicalId(): void | Resets a previously passed logical Id to use the auto-generated logical id again. |
Element (preflight class)
No description
Constructor
new(config: Json): Element
Properties
Name | Type | Description |
---|---|---|
cdktfStack | TerraformStack | No description |
fqn | str | No description |
friendlyUniqueId | str | No description |
Methods
Signature | Description |
---|---|
toTerraform(): Json | No description |
addOverride(path: str, value: any): void | No description |
static isTerraformElement(x: any): bool | No description |
overrideLogicalId(newLogicalId: str): void | Overrides the auto-generated logical ID with a specific ID. |
resetOverrideLogicalId(): void | Resets a previously passed logical Id to use the auto-generated logical id again. |
toHclTerraform(): any | No description |
toMetadata(): any | No description |
ResourceProps (struct)
No description
Properties
Name | Type | Description |
---|---|---|
attributes | Json? | No description |
connection | any? | No description |
count | any? | No description |
dependsOn |
| No description |
forEach | ITerraformIterator? | No description |
lifecycle | TerraformResourceLifecycle? | No description |
provider | TerraformProvider? | No description |
provisioners |
| No description |
terraformGeneratorMetadata | TerraformProviderGeneratorMetadata? | No description |
terraformResourceType | str | No description |
ProviderProps (struct)
No description
Properties
Name | Type | Description |
---|---|---|
attributes | Json? | The provider-specific configuration options. @default {} |
name | str | The name of the provider in Terraform - this is the prefix used for all resources in the provider. @example "aws" |
source | str | The source of the provider on the Terraform Registry. @example "hashicorp/aws" |
version | str | The version of the provider to use. @example "2.0" |