tfts 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -5
- package/dist/cli/main.d.ts +1 -0
- package/dist/cli/main.js +1 -0
- package/dist/cli/main.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,15 +1,178 @@
|
|
|
1
1
|
# tfts
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A TypeScript SDK for defining Terraform infrastructure as code. Drop-in replacement for CDKTF.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
bun add tfts
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### Create configuration file
|
|
14
|
+
|
|
15
|
+
Create `cdktf.json` in your project root:
|
|
16
|
+
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"language": "typescript",
|
|
20
|
+
"app": "bun run main.ts",
|
|
21
|
+
"terraformProviders": ["hashicorp/google@~>6.0"]
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Generate provider bindings
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
bunx tfts get
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Define your infrastructure
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
// main.ts
|
|
35
|
+
import { App, TerraformStack, TerraformOutput } from "tfts";
|
|
36
|
+
import { GoogleProvider } from "./.gen/providers/hashicorp/google/provider.js";
|
|
37
|
+
import { ComputeInstance } from "./.gen/providers/hashicorp/google/resources/compute-instance.js";
|
|
38
|
+
|
|
39
|
+
class MyStack extends TerraformStack {
|
|
40
|
+
constructor(scope: App, id: string) {
|
|
41
|
+
super(scope, id);
|
|
42
|
+
|
|
43
|
+
new GoogleProvider(this, "google", {
|
|
44
|
+
project: "my-project",
|
|
45
|
+
region: "us-central1",
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const instance = new ComputeInstance(this, "vm", {
|
|
49
|
+
name: "my-instance",
|
|
50
|
+
machineType: "e2-micro",
|
|
51
|
+
zone: "us-central1-a",
|
|
52
|
+
bootDisk: {
|
|
53
|
+
initializeParams: {
|
|
54
|
+
image: "debian-cloud/debian-11",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
networkInterface: [{ network: "default" }],
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
new TerraformOutput(this, "instance-ip", {
|
|
61
|
+
value: instance.networkInterface.get(0).networkIp,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const app = new App();
|
|
67
|
+
new MyStack(app, "my-stack");
|
|
68
|
+
app.synth();
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Synthesize and deploy
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
bunx tfts synth
|
|
75
|
+
cd cdktf.out/stacks/my-stack
|
|
76
|
+
terraform init
|
|
77
|
+
terraform apply
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## CLI Commands
|
|
81
|
+
|
|
82
|
+
| Command | Description |
|
|
83
|
+
|---------|-------------|
|
|
84
|
+
| `tfts get` | Generate provider bindings from `cdktf.json` |
|
|
85
|
+
| `tfts synth` | Synthesize Terraform JSON configuration |
|
|
86
|
+
|
|
87
|
+
## Core Concepts
|
|
88
|
+
|
|
89
|
+
### App & Stack
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
const app = new App();
|
|
93
|
+
new MyStack(app, "production");
|
|
94
|
+
new MyStack(app, "staging");
|
|
95
|
+
app.synth();
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Variables & Outputs
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const region = new TerraformVariable(this, "region", {
|
|
102
|
+
type: "string",
|
|
103
|
+
default: "us-central1",
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
new TerraformOutput(this, "url", {
|
|
107
|
+
value: instance.selfLink,
|
|
108
|
+
sensitive: true,
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### References
|
|
113
|
+
|
|
114
|
+
Resource attributes automatically create Terraform references:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
const bucket = new StorageBucket(this, "bucket", { name: "my-bucket" });
|
|
118
|
+
new ComputeInstance(this, "vm", {
|
|
119
|
+
metadata: { bucket: bucket.name }, // Creates ${google_storage_bucket.bucket.name}
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Functions
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
import { Fn } from "tfts";
|
|
127
|
+
|
|
128
|
+
Fn.join("-", ["hello", "world"]);
|
|
129
|
+
Fn.lookup(myMap, "key", "default");
|
|
130
|
+
Fn.base64encode("hello");
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Backends
|
|
134
|
+
|
|
135
|
+
```typescript
|
|
136
|
+
import { GcsBackend, S3Backend, RemoteBackend } from "tfts";
|
|
137
|
+
|
|
138
|
+
new GcsBackend(this, { bucket: "my-tf-state", prefix: "prod" });
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Migrating from CDKTF
|
|
142
|
+
|
|
143
|
+
### Automated (using ast-grep)
|
|
4
144
|
|
|
5
145
|
```bash
|
|
6
|
-
|
|
146
|
+
# Rewrite imports
|
|
147
|
+
ast-grep --pattern 'from "cdktf"' --rewrite 'from "tfts"' --lang ts -U .
|
|
148
|
+
|
|
149
|
+
# Update package.json
|
|
150
|
+
npm remove cdktf
|
|
151
|
+
npm add tfts
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Manual
|
|
155
|
+
|
|
156
|
+
1. Update `package.json`:
|
|
157
|
+
|
|
158
|
+
```diff
|
|
159
|
+
- "cdktf": "^0.20.0"
|
|
160
|
+
+ "tfts": "^0.3.0"
|
|
7
161
|
```
|
|
8
162
|
|
|
9
|
-
|
|
163
|
+
2. Update imports in all `.ts` files:
|
|
164
|
+
|
|
165
|
+
```diff
|
|
166
|
+
- import { App, TerraformStack } from "cdktf";
|
|
167
|
+
+ import { App, TerraformStack } from "tfts";
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
3. Regenerate provider bindings:
|
|
10
171
|
|
|
11
172
|
```bash
|
|
12
|
-
|
|
173
|
+
tfts get
|
|
13
174
|
```
|
|
14
175
|
|
|
15
|
-
|
|
176
|
+
## License
|
|
177
|
+
|
|
178
|
+
MIT
|
package/dist/cli/main.d.ts
CHANGED
package/dist/cli/main.js
CHANGED
package/dist/cli/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
|