@intentius/behold 0.7.0 → 0.9.0

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.
Files changed (104) hide show
  1. package/AGENTS.md +94 -2
  2. package/README.md +133 -2
  3. package/demos.json +25 -1
  4. package/dist/cli.js +3176 -330
  5. package/example-argo-estate/README.md +71 -0
  6. package/example-argo-estate/app-a/chant.config.ts +18 -0
  7. package/example-argo-estate/app-a/manifests/app.yaml +54 -0
  8. package/example-argo-estate/app-a/package.json +13 -0
  9. package/example-argo-estate/app-a/src/app.ts +35 -0
  10. package/example-argo-estate/app-a/tsconfig.json +1 -0
  11. package/example-argo-estate/app-b/chant.config.ts +18 -0
  12. package/example-argo-estate/app-b/manifests/app.yaml +54 -0
  13. package/example-argo-estate/app-b/package.json +13 -0
  14. package/example-argo-estate/app-b/src/app.ts +34 -0
  15. package/example-argo-estate/app-b/tsconfig.json +1 -0
  16. package/example-argo-estate/control-plane/chant.config.ts +29 -0
  17. package/example-argo-estate/control-plane/package.json +13 -0
  18. package/example-argo-estate/control-plane/src/argo.ts +69 -0
  19. package/example-argo-estate/control-plane/tsconfig.json +1 -0
  20. package/example-argo-estate/package-lock.json +1949 -0
  21. package/example-argo-estate/package.json +10 -0
  22. package/example-carve/README.md +194 -0
  23. package/example-carve/app/chant.config.ts +6 -0
  24. package/example-carve/app/package-lock.json +1075 -0
  25. package/example-carve/app/package.json +13 -0
  26. package/example-carve/app/src/carved.ts +30 -0
  27. package/example-carve/app/tsconfig.json +1 -0
  28. package/example-carve/carve-report.json +872 -0
  29. package/example-carve/legacy-tf/cdn.tf +23 -0
  30. package/example-carve/legacy-tf/compute.tf +63 -0
  31. package/example-carve/legacy-tf/floci-override.tf.disabled +61 -0
  32. package/example-carve/legacy-tf/modules/cdn/main.tf +72 -0
  33. package/example-carve/legacy-tf/naming.tf +10 -0
  34. package/example-carve/legacy-tf/network.tf +119 -0
  35. package/example-carve/legacy-tf/observability.tf +18 -0
  36. package/example-carve/legacy-tf/outputs.tf +16 -0
  37. package/example-carve/legacy-tf/storage.tf +33 -0
  38. package/example-carve/legacy-tf/terraform.tfstate +602 -0
  39. package/example-carve/legacy-tf/versions.tf +40 -0
  40. package/example-flux-estate/README.md +22 -12
  41. package/example-flux-estate/app-a/package.json +2 -2
  42. package/example-flux-estate/app-a/src/app.ts +2 -1
  43. package/example-flux-estate/app-b/chant.config.ts +4 -3
  44. package/example-flux-estate/app-b/package.json +2 -2
  45. package/example-flux-estate/app-b/src/app.ts +5 -3
  46. package/example-flux-estate/control-plane/package.json +2 -2
  47. package/example-flux-estate/control-plane/src/flux.ts +10 -2
  48. package/example-flux-estate/package-lock.json +17 -17
  49. package/example-k8s/README.md +16 -2
  50. package/example-k8s/base/deployment.yaml +21 -0
  51. package/example-k8s/base/kustomization.yaml +3 -0
  52. package/example-k8s/base/service.yaml +12 -0
  53. package/example-k8s/chant.config.ts +10 -0
  54. package/example-k8s/overlays/dev/kustomization.yaml +6 -0
  55. package/example-k8s/package-lock.json +18 -18
  56. package/example-k8s/package.json +3 -3
  57. package/example-writes/package-lock.json +14 -14
  58. package/example-writes/package.json +3 -3
  59. package/package.json +9 -6
  60. package/web/app.js +1027 -42
  61. package/web/carve-steps.js +610 -0
  62. package/web/carve-steps.test.js +233 -0
  63. package/web/demos.js +71 -0
  64. package/web/demos.test.js +83 -0
  65. package/web/icons/cncf/argo.svg +1 -0
  66. package/web/icons/cncf/flux.svg +1 -0
  67. package/web/icons/cncf/helm.svg +1 -0
  68. package/web/icons/k8s/c-role.svg +1 -0
  69. package/web/icons/k8s/cm.svg +1 -0
  70. package/web/icons/k8s/crb.svg +1 -0
  71. package/web/icons/k8s/crd.svg +1 -0
  72. package/web/icons/k8s/cronjob.svg +1 -0
  73. package/web/icons/k8s/deploy.svg +1 -0
  74. package/web/icons/k8s/ds.svg +1 -0
  75. package/web/icons/k8s/ep.svg +1 -0
  76. package/web/icons/k8s/group.svg +1 -0
  77. package/web/icons/k8s/hpa.svg +1 -0
  78. package/web/icons/k8s/ing.svg +1 -0
  79. package/web/icons/k8s/job.svg +1 -0
  80. package/web/icons/k8s/limits.svg +1 -0
  81. package/web/icons/k8s/netpol.svg +1 -0
  82. package/web/icons/k8s/ns.svg +1 -0
  83. package/web/icons/k8s/pod.svg +1 -0
  84. package/web/icons/k8s/psp.svg +1 -0
  85. package/web/icons/k8s/pv.svg +1 -0
  86. package/web/icons/k8s/pvc.svg +1 -0
  87. package/web/icons/k8s/quota.svg +1 -0
  88. package/web/icons/k8s/rb.svg +1 -0
  89. package/web/icons/k8s/role.svg +1 -0
  90. package/web/icons/k8s/rs.svg +1 -0
  91. package/web/icons/k8s/sa.svg +1 -0
  92. package/web/icons/k8s/sc.svg +1 -0
  93. package/web/icons/k8s/secret.svg +1 -0
  94. package/web/icons/k8s/sts.svg +1 -0
  95. package/web/icons/k8s/svc.svg +1 -0
  96. package/web/icons/k8s/user.svg +1 -0
  97. package/web/icons/k8s/vol.svg +1 -0
  98. package/web/index.html +285 -85
  99. package/web/json-view.js +334 -0
  100. package/web/json-view.test.js +218 -0
  101. package/web/layout-store.js +278 -0
  102. package/web/layout-store.test.js +388 -0
  103. package/web/panel.js +28 -0
  104. package/web/theme.js +114 -6
@@ -0,0 +1,602 @@
1
+ {
2
+ "version": 4,
3
+ "terraform_version": "1.9.8",
4
+ "serial": 17,
5
+ "lineage": "00000000-0000-4000-8000-000000000000",
6
+ "outputs": {
7
+ "_fixture_note": {
8
+ "value": "SYNTHETIC. Hand-written for behold's carve demo estate (#254) — never produced by a real terraform apply. The account id is 000000000000 and every ARN, id and hostname in this file is fake. `chant carve advise --state` and `chant carve emit --state` read it as plain JSON, so no terraform binary and no cloud call is involved. The --live tier of the walkthrough replaces it with a state terraform really wrote, by applying legacy-tf into a scratch Floci (see floci-override.tf.disabled).",
9
+ "type": "string"
10
+ },
11
+ "api_function_name": {
12
+ "value": "acme-platform-api",
13
+ "type": "string"
14
+ },
15
+ "vpc_id": {
16
+ "value": "vpc-0a1b2c3d4e5f60718",
17
+ "type": "string"
18
+ },
19
+ "private_subnet_ids": {
20
+ "value": ["subnet-0a1b2c3d4e5f60719", "subnet-0a1b2c3d4e5f6071a"],
21
+ "type": ["list", "string"]
22
+ }
23
+ },
24
+ "resources": [
25
+ {
26
+ "mode": "data",
27
+ "type": "aws_availability_zones",
28
+ "name": "available",
29
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
30
+ "instances": [
31
+ {
32
+ "schema_version": 0,
33
+ "attributes": {
34
+ "id": "us-east-2",
35
+ "names": ["us-east-2a", "us-east-2b", "us-east-2c"],
36
+ "state": "available",
37
+ "zone_ids": ["use2-az1", "use2-az2", "use2-az3"]
38
+ }
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "mode": "data",
44
+ "type": "aws_prefix_list",
45
+ "name": "s3",
46
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
47
+ "instances": [
48
+ {
49
+ "schema_version": 0,
50
+ "attributes": {
51
+ "cidr_blocks": ["52.219.0.0/16"],
52
+ "id": "pl-0000000000000000a",
53
+ "name": "com.amazonaws.us-east-2.s3"
54
+ }
55
+ }
56
+ ]
57
+ },
58
+ {
59
+ "mode": "data",
60
+ "type": "aws_ssm_parameter",
61
+ "name": "assets_cdn_domain",
62
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
63
+ "instances": [
64
+ {
65
+ "schema_version": 0,
66
+ "attributes": {
67
+ "arn": "arn:aws:ssm:us-east-2:000000000000:parameter/acme/platform/prod/assets-cdn-domain",
68
+ "id": "/acme/platform/prod/assets-cdn-domain",
69
+ "name": "/acme/platform/prod/assets-cdn-domain",
70
+ "type": "String",
71
+ "value": "cdn.acme-platform.example.com",
72
+ "with_decryption": true
73
+ }
74
+ }
75
+ ]
76
+ },
77
+ {
78
+ "mode": "managed",
79
+ "type": "aws_cloudwatch_log_group",
80
+ "name": "worker",
81
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
82
+ "instances": [
83
+ {
84
+ "schema_version": 0,
85
+ "attributes": {
86
+ "arn": "arn:aws:logs:us-east-2:000000000000:log-group:/acme/platform/worker",
87
+ "id": "/acme/platform/worker",
88
+ "kms_key_id": "",
89
+ "log_group_class": "STANDARD",
90
+ "name": "/acme/platform/worker",
91
+ "name_prefix": "",
92
+ "retention_in_days": 30,
93
+ "skip_destroy": false,
94
+ "tags": {
95
+ "Component": "worker",
96
+ "Name": "acme-platform-worker"
97
+ },
98
+ "tags_all": {
99
+ "Component": "worker",
100
+ "Environment": "prod",
101
+ "ManagedBy": "terraform",
102
+ "Name": "acme-platform-worker",
103
+ "Team": "platform"
104
+ }
105
+ }
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ "mode": "managed",
111
+ "type": "aws_iam_role",
112
+ "name": "api",
113
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
114
+ "dependencies": ["random_pet.suffix"],
115
+ "instances": [
116
+ {
117
+ "schema_version": 0,
118
+ "attributes": {
119
+ "arn": "arn:aws:iam::000000000000:role/acme-platform-api-gently-mutt",
120
+ "assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}",
121
+ "create_date": "2026-06-14T09:12:44Z",
122
+ "description": "",
123
+ "force_detach_policies": false,
124
+ "id": "acme-platform-api-gently-mutt",
125
+ "managed_policy_arns": [
126
+ "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole",
127
+ "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"
128
+ ],
129
+ "max_session_duration": 3600,
130
+ "name": "acme-platform-api-gently-mutt",
131
+ "name_prefix": "",
132
+ "path": "/",
133
+ "tags": {
134
+ "Component": "api"
135
+ },
136
+ "tags_all": {
137
+ "Component": "api",
138
+ "Environment": "prod",
139
+ "ManagedBy": "terraform",
140
+ "Team": "platform"
141
+ },
142
+ "unique_id": "AROA00000000000000001"
143
+ }
144
+ }
145
+ ]
146
+ },
147
+ {
148
+ "mode": "managed",
149
+ "type": "aws_lambda_function",
150
+ "name": "api",
151
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
152
+ "dependencies": [
153
+ "aws_iam_role.api",
154
+ "aws_s3_bucket.assets",
155
+ "aws_security_group.lambda",
156
+ "aws_subnet.private_a",
157
+ "aws_subnet.private_b",
158
+ "aws_vpc.main",
159
+ "random_pet.suffix"
160
+ ],
161
+ "instances": [
162
+ {
163
+ "schema_version": 0,
164
+ "attributes": {
165
+ "architectures": ["x86_64"],
166
+ "arn": "arn:aws:lambda:us-east-2:000000000000:function:acme-platform-api",
167
+ "environment": [
168
+ {
169
+ "variables": {
170
+ "ASSETS_BUCKET": "acme-platform-assets-prod",
171
+ "LOG_LEVEL": "info"
172
+ }
173
+ }
174
+ ],
175
+ "filename": "build/api.zip",
176
+ "function_name": "acme-platform-api",
177
+ "handler": "index.handler",
178
+ "id": "acme-platform-api",
179
+ "last_modified": "2026-06-14T09:13:02.184+0000",
180
+ "memory_size": 512,
181
+ "package_type": "Zip",
182
+ "publish": false,
183
+ "role": "arn:aws:iam::000000000000:role/acme-platform-api-gently-mutt",
184
+ "runtime": "nodejs22.x",
185
+ "source_code_size": 1048576,
186
+ "tags": {
187
+ "Component": "api"
188
+ },
189
+ "tags_all": {
190
+ "Component": "api",
191
+ "Environment": "prod",
192
+ "ManagedBy": "terraform",
193
+ "Team": "platform"
194
+ },
195
+ "timeout": 15,
196
+ "version": "$LATEST",
197
+ "vpc_config": [
198
+ {
199
+ "ipv6_allowed_for_dual_stack": false,
200
+ "security_group_ids": ["sg-0a1b2c3d4e5f6071b"],
201
+ "subnet_ids": ["subnet-0a1b2c3d4e5f60719", "subnet-0a1b2c3d4e5f6071a"],
202
+ "vpc_id": "vpc-0a1b2c3d4e5f60718"
203
+ }
204
+ ]
205
+ }
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "mode": "managed",
211
+ "type": "aws_network_acl",
212
+ "name": "private",
213
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
214
+ "dependencies": ["aws_subnet.private_a", "aws_subnet.private_b", "aws_vpc.main"],
215
+ "instances": [
216
+ {
217
+ "schema_version": 1,
218
+ "attributes": {
219
+ "arn": "arn:aws:ec2:us-east-2:000000000000:network-acl/acl-0a1b2c3d4e5f6071c",
220
+ "egress": [
221
+ {
222
+ "action": "allow",
223
+ "cidr_block": "0.0.0.0/0",
224
+ "from_port": 0,
225
+ "protocol": "-1",
226
+ "rule_no": 100,
227
+ "to_port": 0
228
+ }
229
+ ],
230
+ "id": "acl-0a1b2c3d4e5f6071c",
231
+ "ingress": [
232
+ {
233
+ "action": "allow",
234
+ "cidr_block": "10.42.0.0/16",
235
+ "from_port": 0,
236
+ "protocol": "tcp",
237
+ "rule_no": 100,
238
+ "to_port": 65535
239
+ }
240
+ ],
241
+ "owner_id": "000000000000",
242
+ "subnet_ids": ["subnet-0a1b2c3d4e5f60719", "subnet-0a1b2c3d4e5f6071a"],
243
+ "tags": {
244
+ "Name": "acme-platform-private"
245
+ },
246
+ "tags_all": {
247
+ "Environment": "prod",
248
+ "ManagedBy": "terraform",
249
+ "Name": "acme-platform-private",
250
+ "Team": "platform"
251
+ },
252
+ "vpc_id": "vpc-0a1b2c3d4e5f60718"
253
+ }
254
+ }
255
+ ]
256
+ },
257
+ {
258
+ "mode": "managed",
259
+ "type": "aws_s3_bucket",
260
+ "name": "assets",
261
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
262
+ "instances": [
263
+ {
264
+ "schema_version": 0,
265
+ "attributes": {
266
+ "acceleration_status": "",
267
+ "arn": "arn:aws:s3:::acme-platform-assets-prod",
268
+ "bucket": "acme-platform-assets-prod",
269
+ "bucket_domain_name": "acme-platform-assets-prod.s3.amazonaws.com",
270
+ "bucket_prefix": "",
271
+ "bucket_regional_domain_name": "acme-platform-assets-prod.s3.us-east-2.amazonaws.com",
272
+ "cors_rule": [],
273
+ "force_destroy": false,
274
+ "hosted_zone_id": "Z2O1EMRO9K5GLX",
275
+ "id": "acme-platform-assets-prod",
276
+ "object_lock_enabled": false,
277
+ "region": "us-east-2",
278
+ "request_payer": "BucketOwner",
279
+ "server_side_encryption_configuration": [
280
+ {
281
+ "rule": [
282
+ {
283
+ "apply_server_side_encryption_by_default": [
284
+ {
285
+ "kms_master_key_id": "",
286
+ "sse_algorithm": "AES256"
287
+ }
288
+ ],
289
+ "bucket_key_enabled": false
290
+ }
291
+ ]
292
+ }
293
+ ],
294
+ "tags": {
295
+ "Name": "acme-platform-assets",
296
+ "Purpose": "static-assets"
297
+ },
298
+ "tags_all": {
299
+ "Environment": "prod",
300
+ "ManagedBy": "terraform",
301
+ "Name": "acme-platform-assets",
302
+ "Purpose": "static-assets",
303
+ "Team": "platform"
304
+ },
305
+ "versioning": [
306
+ {
307
+ "enabled": true,
308
+ "mfa_delete": false
309
+ }
310
+ ],
311
+ "website": []
312
+ }
313
+ }
314
+ ]
315
+ },
316
+ {
317
+ "mode": "managed",
318
+ "type": "aws_s3_bucket_public_access_block",
319
+ "name": "assets",
320
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
321
+ "dependencies": ["aws_s3_bucket.assets"],
322
+ "instances": [
323
+ {
324
+ "schema_version": 0,
325
+ "attributes": {
326
+ "block_public_acls": true,
327
+ "block_public_policy": true,
328
+ "bucket": "acme-platform-assets-prod",
329
+ "id": "acme-platform-assets-prod",
330
+ "ignore_public_acls": true,
331
+ "restrict_public_buckets": true
332
+ }
333
+ }
334
+ ]
335
+ },
336
+ {
337
+ "mode": "managed",
338
+ "type": "aws_s3_bucket_versioning",
339
+ "name": "assets",
340
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
341
+ "dependencies": ["aws_s3_bucket.assets"],
342
+ "instances": [
343
+ {
344
+ "schema_version": 0,
345
+ "attributes": {
346
+ "bucket": "acme-platform-assets-prod",
347
+ "expected_bucket_owner": "",
348
+ "id": "acme-platform-assets-prod",
349
+ "mfa": null,
350
+ "versioning_configuration": [
351
+ {
352
+ "mfa_delete": "",
353
+ "status": "Enabled"
354
+ }
355
+ ]
356
+ }
357
+ }
358
+ ]
359
+ },
360
+ {
361
+ "mode": "managed",
362
+ "type": "aws_security_group",
363
+ "name": "lambda",
364
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
365
+ "dependencies": ["aws_vpc.main", "random_pet.suffix"],
366
+ "instances": [
367
+ {
368
+ "schema_version": 1,
369
+ "attributes": {
370
+ "arn": "arn:aws:ec2:us-east-2:000000000000:security-group/sg-0a1b2c3d4e5f6071b",
371
+ "description": "Egress-only group for the acme-platform API lambda",
372
+ "egress": [
373
+ {
374
+ "cidr_blocks": [],
375
+ "description": "S3 via the regional gateway prefix list",
376
+ "from_port": 443,
377
+ "prefix_list_ids": ["pl-0000000000000000a"],
378
+ "protocol": "tcp",
379
+ "security_groups": [],
380
+ "self": false,
381
+ "to_port": 443
382
+ },
383
+ {
384
+ "cidr_blocks": ["10.42.0.0/16"],
385
+ "description": "SSM interface endpoint, inside the VPC",
386
+ "from_port": 443,
387
+ "prefix_list_ids": [],
388
+ "protocol": "tcp",
389
+ "security_groups": [],
390
+ "self": false,
391
+ "to_port": 443
392
+ }
393
+ ],
394
+ "id": "sg-0a1b2c3d4e5f6071b",
395
+ "ingress": [],
396
+ "name": "acme-platform-lambda-gently-mutt",
397
+ "name_prefix": "",
398
+ "owner_id": "000000000000",
399
+ "revoke_rules_on_delete": false,
400
+ "tags": {
401
+ "Name": "acme-platform-lambda"
402
+ },
403
+ "tags_all": {
404
+ "Environment": "prod",
405
+ "ManagedBy": "terraform",
406
+ "Name": "acme-platform-lambda",
407
+ "Team": "platform"
408
+ },
409
+ "vpc_id": "vpc-0a1b2c3d4e5f60718"
410
+ }
411
+ }
412
+ ]
413
+ },
414
+ {
415
+ "mode": "managed",
416
+ "type": "aws_subnet",
417
+ "name": "private_a",
418
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
419
+ "dependencies": ["aws_vpc.main", "random_pet.suffix"],
420
+ "instances": [
421
+ {
422
+ "schema_version": 1,
423
+ "attributes": {
424
+ "arn": "arn:aws:ec2:us-east-2:000000000000:subnet/subnet-0a1b2c3d4e5f60719",
425
+ "assign_ipv6_address_on_creation": false,
426
+ "availability_zone": "us-east-2a",
427
+ "availability_zone_id": "use2-az1",
428
+ "cidr_block": "10.42.1.0/24",
429
+ "id": "subnet-0a1b2c3d4e5f60719",
430
+ "map_public_ip_on_launch": false,
431
+ "owner_id": "000000000000",
432
+ "tags": {
433
+ "Name": "acme-platform-private-a-gently-mutt",
434
+ "Tier": "private"
435
+ },
436
+ "tags_all": {
437
+ "Environment": "prod",
438
+ "ManagedBy": "terraform",
439
+ "Name": "acme-platform-private-a-gently-mutt",
440
+ "Team": "platform",
441
+ "Tier": "private"
442
+ },
443
+ "vpc_id": "vpc-0a1b2c3d4e5f60718"
444
+ }
445
+ }
446
+ ]
447
+ },
448
+ {
449
+ "mode": "managed",
450
+ "type": "aws_subnet",
451
+ "name": "private_b",
452
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
453
+ "dependencies": ["aws_vpc.main", "random_pet.suffix"],
454
+ "instances": [
455
+ {
456
+ "schema_version": 1,
457
+ "attributes": {
458
+ "arn": "arn:aws:ec2:us-east-2:000000000000:subnet/subnet-0a1b2c3d4e5f6071a",
459
+ "assign_ipv6_address_on_creation": false,
460
+ "availability_zone": "us-east-2b",
461
+ "availability_zone_id": "use2-az2",
462
+ "cidr_block": "10.42.2.0/24",
463
+ "id": "subnet-0a1b2c3d4e5f6071a",
464
+ "map_public_ip_on_launch": false,
465
+ "owner_id": "000000000000",
466
+ "tags": {
467
+ "Name": "acme-platform-private-b-gently-mutt",
468
+ "Tier": "private"
469
+ },
470
+ "tags_all": {
471
+ "Environment": "prod",
472
+ "ManagedBy": "terraform",
473
+ "Name": "acme-platform-private-b-gently-mutt",
474
+ "Team": "platform",
475
+ "Tier": "private"
476
+ },
477
+ "vpc_id": "vpc-0a1b2c3d4e5f60718"
478
+ }
479
+ }
480
+ ]
481
+ },
482
+ {
483
+ "mode": "managed",
484
+ "type": "aws_vpc",
485
+ "name": "main",
486
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
487
+ "dependencies": ["random_pet.suffix"],
488
+ "instances": [
489
+ {
490
+ "schema_version": 1,
491
+ "attributes": {
492
+ "arn": "arn:aws:ec2:us-east-2:000000000000:vpc/vpc-0a1b2c3d4e5f60718",
493
+ "cidr_block": "10.42.0.0/16",
494
+ "default_network_acl_id": "acl-0a1b2c3d4e5f6071d",
495
+ "default_route_table_id": "rtb-0a1b2c3d4e5f6071e",
496
+ "default_security_group_id": "sg-0a1b2c3d4e5f6071f",
497
+ "dhcp_options_id": "dopt-0a1b2c3d4e5f60720",
498
+ "enable_dns_hostnames": true,
499
+ "enable_dns_support": true,
500
+ "id": "vpc-0a1b2c3d4e5f60718",
501
+ "instance_tenancy": "default",
502
+ "main_route_table_id": "rtb-0a1b2c3d4e5f6071e",
503
+ "owner_id": "000000000000",
504
+ "tags": {
505
+ "Name": "acme-platform-gently-mutt"
506
+ },
507
+ "tags_all": {
508
+ "Environment": "prod",
509
+ "ManagedBy": "terraform",
510
+ "Name": "acme-platform-gently-mutt",
511
+ "Team": "platform"
512
+ }
513
+ }
514
+ }
515
+ ]
516
+ },
517
+ {
518
+ "mode": "managed",
519
+ "type": "aws_vpc_endpoint",
520
+ "name": "ssm",
521
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
522
+ "dependencies": [
523
+ "aws_security_group.lambda",
524
+ "aws_subnet.private_a",
525
+ "aws_subnet.private_b",
526
+ "aws_vpc.main",
527
+ "random_pet.suffix"
528
+ ],
529
+ "instances": [
530
+ {
531
+ "schema_version": 1,
532
+ "attributes": {
533
+ "arn": "arn:aws:ec2:us-east-2:000000000000:vpc-endpoint/vpce-0a1b2c3d4e5f60721",
534
+ "id": "vpce-0a1b2c3d4e5f60721",
535
+ "ip_address_type": "ipv4",
536
+ "owner_id": "000000000000",
537
+ "private_dns_enabled": true,
538
+ "requester_managed": false,
539
+ "route_table_ids": [],
540
+ "security_group_ids": ["sg-0a1b2c3d4e5f6071b"],
541
+ "service_name": "com.amazonaws.us-east-2.ssm",
542
+ "state": "available",
543
+ "subnet_ids": ["subnet-0a1b2c3d4e5f60719", "subnet-0a1b2c3d4e5f6071a"],
544
+ "tags": {
545
+ "Name": "acme-platform-ssm"
546
+ },
547
+ "tags_all": {
548
+ "Environment": "prod",
549
+ "ManagedBy": "terraform",
550
+ "Name": "acme-platform-ssm",
551
+ "Team": "platform"
552
+ },
553
+ "vpc_endpoint_type": "Interface",
554
+ "vpc_id": "vpc-0a1b2c3d4e5f60718"
555
+ }
556
+ }
557
+ ]
558
+ },
559
+ {
560
+ "mode": "managed",
561
+ "type": "random_pet",
562
+ "name": "suffix",
563
+ "provider": "provider[\"registry.terraform.io/hashicorp/random\"]",
564
+ "instances": [
565
+ {
566
+ "schema_version": 0,
567
+ "attributes": {
568
+ "id": "gently-mutt",
569
+ "keepers": null,
570
+ "length": 2,
571
+ "prefix": null,
572
+ "separator": "-"
573
+ }
574
+ }
575
+ ]
576
+ },
577
+ {
578
+ "module": "module.cdn",
579
+ "mode": "managed",
580
+ "type": "aws_cloudfront_distribution",
581
+ "name": "this",
582
+ "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
583
+ "instances": [
584
+ {
585
+ "schema_version": 1,
586
+ "attributes": {
587
+ "aliases": ["cdn.acme-platform.example.com"],
588
+ "arn": "arn:aws:cloudfront::000000000000:distribution/E00000000000AA",
589
+ "comment": "acme-platform-assets-gently-mutt",
590
+ "domain_name": "d000000000000a.cloudfront.net",
591
+ "enabled": true,
592
+ "hosted_zone_id": "Z2FDTNDATAQYW2",
593
+ "id": "E00000000000AA",
594
+ "price_class": "PriceClass_100",
595
+ "status": "Deployed"
596
+ }
597
+ }
598
+ ]
599
+ }
600
+ ],
601
+ "check_results": null
602
+ }
@@ -0,0 +1,40 @@
1
+ # The Terraform half of behold's carve demo estate (#254).
2
+ #
3
+ # Everything in this directory is still Terraform-owned. The chant half lives in
4
+ # ../app — the log group and the SSM parameter that came out of here last month.
5
+ #
6
+ # Nothing here has ever been applied to a real AWS account. The committed
7
+ # terraform.tfstate is synthetic (see its `_fixture_note` output and README.md),
8
+ # the account id in it is 000000000000, and every ARN is fake. Values are
9
+ # boring-realistic on purpose: the walkthrough video pauses on the inspect pane.
10
+ #
11
+ # `chant carve advise` parses these files with @cdktf/hcl2json — no terraform
12
+ # binary, no provider download, no network. See ../README.md for the scores this
13
+ # estate is tuned to produce and why each one lands where it does.
14
+
15
+ terraform {
16
+ required_version = ">= 1.6"
17
+
18
+ required_providers {
19
+ aws = {
20
+ source = "hashicorp/aws"
21
+ version = "~> 5.0"
22
+ }
23
+ random = {
24
+ source = "hashicorp/random"
25
+ version = "~> 3.6"
26
+ }
27
+ }
28
+ }
29
+
30
+ provider "aws" {
31
+ region = "us-east-2"
32
+
33
+ default_tags {
34
+ tags = {
35
+ Environment = "prod"
36
+ ManagedBy = "terraform"
37
+ Team = "platform"
38
+ }
39
+ }
40
+ }