container-superposition 0.1.1
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 +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
# Terraform Overlay
|
|
2
|
+
|
|
3
|
+
Adds Terraform CLI with HashiCorp language server and linting for Infrastructure as Code.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Terraform CLI** - Latest version of Terraform/OpenTofu
|
|
8
|
+
- **tflint** - Terraform linter for best practices
|
|
9
|
+
- **VS Code Extension:** HashiCorp Terraform (hashicorp.terraform)
|
|
10
|
+
- Syntax highlighting
|
|
11
|
+
- Terraform language server (terraform-ls)
|
|
12
|
+
- IntelliSense and autocomplete
|
|
13
|
+
- Validation and formatting
|
|
14
|
+
|
|
15
|
+
## Getting Started
|
|
16
|
+
|
|
17
|
+
### Initialize Terraform
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
# Create main.tf
|
|
21
|
+
cat > main.tf << 'EOF'
|
|
22
|
+
terraform {
|
|
23
|
+
required_version = ">= 1.0"
|
|
24
|
+
required_providers {
|
|
25
|
+
aws = {
|
|
26
|
+
source = "hashicorp/aws"
|
|
27
|
+
version = "~> 5.0"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
provider "aws" {
|
|
33
|
+
region = "us-east-1"
|
|
34
|
+
}
|
|
35
|
+
EOF
|
|
36
|
+
|
|
37
|
+
# Initialize
|
|
38
|
+
terraform init
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Basic Commands
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
# Format code
|
|
45
|
+
terraform fmt
|
|
46
|
+
|
|
47
|
+
# Validate configuration
|
|
48
|
+
terraform validate
|
|
49
|
+
|
|
50
|
+
# Plan changes
|
|
51
|
+
terraform plan
|
|
52
|
+
|
|
53
|
+
# Apply changes
|
|
54
|
+
terraform apply
|
|
55
|
+
|
|
56
|
+
# Destroy resources
|
|
57
|
+
terraform destroy
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Backend Configuration
|
|
61
|
+
|
|
62
|
+
### Local Backend (Default)
|
|
63
|
+
|
|
64
|
+
```hcl
|
|
65
|
+
# No configuration needed - state stored in terraform.tfstate
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### S3 Backend (AWS)
|
|
69
|
+
|
|
70
|
+
```hcl
|
|
71
|
+
terraform {
|
|
72
|
+
backend "s3" {
|
|
73
|
+
bucket = "my-terraform-state"
|
|
74
|
+
key = "project/terraform.tfstate"
|
|
75
|
+
region = "us-east-1"
|
|
76
|
+
encrypt = true
|
|
77
|
+
dynamodb_table = "terraform-locks"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Initialize with backend:**
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
terraform init
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### GCS Backend (Google Cloud)
|
|
89
|
+
|
|
90
|
+
```hcl
|
|
91
|
+
terraform {
|
|
92
|
+
backend "gcs" {
|
|
93
|
+
bucket = "my-terraform-state"
|
|
94
|
+
prefix = "project"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Azure Blob Storage Backend
|
|
100
|
+
|
|
101
|
+
```hcl
|
|
102
|
+
terraform {
|
|
103
|
+
backend "azurerm" {
|
|
104
|
+
resource_group_name = "tfstate-rg"
|
|
105
|
+
storage_account_name = "tfstatestore"
|
|
106
|
+
container_name = "tfstate"
|
|
107
|
+
key = "project.terraform.tfstate"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Terraform Cloud
|
|
113
|
+
|
|
114
|
+
```hcl
|
|
115
|
+
terraform {
|
|
116
|
+
cloud {
|
|
117
|
+
organization = "my-org"
|
|
118
|
+
|
|
119
|
+
workspaces {
|
|
120
|
+
name = "my-workspace"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Authenticate:**
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
terraform login
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Provider Configuration
|
|
133
|
+
|
|
134
|
+
### AWS
|
|
135
|
+
|
|
136
|
+
```hcl
|
|
137
|
+
provider "aws" {
|
|
138
|
+
region = var.aws_region
|
|
139
|
+
|
|
140
|
+
# Optional: Profile from ~/.aws/credentials
|
|
141
|
+
profile = "default"
|
|
142
|
+
|
|
143
|
+
# Optional: Assume role
|
|
144
|
+
assume_role {
|
|
145
|
+
role_arn = "arn:aws:iam::ACCOUNT_ID:role/TerraformRole"
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Authentication:**
|
|
151
|
+
|
|
152
|
+
- Environment variables: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`
|
|
153
|
+
- AWS CLI profile (recommended)
|
|
154
|
+
- IAM role (for EC2/ECS)
|
|
155
|
+
|
|
156
|
+
### Google Cloud
|
|
157
|
+
|
|
158
|
+
```hcl
|
|
159
|
+
provider "google" {
|
|
160
|
+
project = var.project_id
|
|
161
|
+
region = var.region
|
|
162
|
+
|
|
163
|
+
# Optional: Service account
|
|
164
|
+
credentials = file("service-account-key.json")
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Authentication:**
|
|
169
|
+
|
|
170
|
+
- `GOOGLE_APPLICATION_CREDENTIALS` environment variable
|
|
171
|
+
- `gcloud auth application-default login`
|
|
172
|
+
- Service account key file
|
|
173
|
+
|
|
174
|
+
### Azure
|
|
175
|
+
|
|
176
|
+
```hcl
|
|
177
|
+
provider "azurerm" {
|
|
178
|
+
features {}
|
|
179
|
+
|
|
180
|
+
subscription_id = var.subscription_id
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Authentication:**
|
|
185
|
+
|
|
186
|
+
- `az login`
|
|
187
|
+
- Service principal
|
|
188
|
+
- Managed identity (for Azure VMs)
|
|
189
|
+
|
|
190
|
+
## Secret Management
|
|
191
|
+
|
|
192
|
+
### Environment Variables
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# Export secrets (add to .env, never commit)
|
|
196
|
+
export AWS_ACCESS_KEY_ID="..."
|
|
197
|
+
export AWS_SECRET_ACCESS_KEY="..."
|
|
198
|
+
export TF_VAR_db_password="secret123"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Variable Files
|
|
202
|
+
|
|
203
|
+
**variables.tf:**
|
|
204
|
+
|
|
205
|
+
```hcl
|
|
206
|
+
variable "db_password" {
|
|
207
|
+
description = "Database password"
|
|
208
|
+
type = string
|
|
209
|
+
sensitive = true
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**terraform.tfvars** (add to .gitignore):
|
|
214
|
+
|
|
215
|
+
```hcl
|
|
216
|
+
db_password = "secret123"
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### External Secret Stores
|
|
220
|
+
|
|
221
|
+
```hcl
|
|
222
|
+
# AWS Secrets Manager
|
|
223
|
+
data "aws_secretsmanager_secret_version" "db_password" {
|
|
224
|
+
secret_id = "prod/db/password"
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
resource "aws_db_instance" "example" {
|
|
228
|
+
password = data.aws_secretsmanager_secret_version.db_password.secret_string
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Common Workflows
|
|
233
|
+
|
|
234
|
+
### Multi-Environment Setup
|
|
235
|
+
|
|
236
|
+
**Directory structure:**
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
terraform/
|
|
240
|
+
├── modules/
|
|
241
|
+
│ └── vpc/
|
|
242
|
+
│ ├── main.tf
|
|
243
|
+
│ ├── variables.tf
|
|
244
|
+
│ └── outputs.tf
|
|
245
|
+
├── environments/
|
|
246
|
+
│ ├── dev/
|
|
247
|
+
│ │ ├── main.tf
|
|
248
|
+
│ │ └── terraform.tfvars
|
|
249
|
+
│ └── prod/
|
|
250
|
+
│ ├── main.tf
|
|
251
|
+
│ └── terraform.tfvars
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
**Using modules:**
|
|
255
|
+
|
|
256
|
+
```hcl
|
|
257
|
+
module "vpc" {
|
|
258
|
+
source = "../../modules/vpc"
|
|
259
|
+
|
|
260
|
+
environment = "dev"
|
|
261
|
+
cidr_block = "10.0.0.0/16"
|
|
262
|
+
}
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Linting with tflint
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# Initialize tflint
|
|
269
|
+
tflint --init
|
|
270
|
+
|
|
271
|
+
# Run linter
|
|
272
|
+
tflint
|
|
273
|
+
|
|
274
|
+
# With AWS rules
|
|
275
|
+
tflint --enable-rule=terraform_deprecated_syntax
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
### Format and Validate
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
# Format all .tf files recursively
|
|
282
|
+
terraform fmt -recursive
|
|
283
|
+
|
|
284
|
+
# Validate configuration
|
|
285
|
+
terraform validate
|
|
286
|
+
|
|
287
|
+
# Check for security issues (requires external tool)
|
|
288
|
+
# tfsec .
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Best Practices
|
|
292
|
+
|
|
293
|
+
1. **Use remote state** - Collaborate safely with team
|
|
294
|
+
2. **Enable state locking** - Prevent concurrent modifications
|
|
295
|
+
3. **Encrypt state** - Protect sensitive data
|
|
296
|
+
4. **Use modules** - Reusable, maintainable code
|
|
297
|
+
5. **Pin provider versions** - Avoid breaking changes
|
|
298
|
+
6. **Separate environments** - Use workspaces or directories
|
|
299
|
+
7. **Use .gitignore** - Exclude `.terraform/`, `*.tfstate`, `*.tfvars`
|
|
300
|
+
8. **Variables for secrets** - Never hardcode credentials
|
|
301
|
+
9. **Run `terraform plan`** - Always review before apply
|
|
302
|
+
10. **Use `terraform-docs`** - Auto-generate documentation
|
|
303
|
+
|
|
304
|
+
## Example .gitignore
|
|
305
|
+
|
|
306
|
+
```gitignore
|
|
307
|
+
# Terraform files
|
|
308
|
+
.terraform/
|
|
309
|
+
*.tfstate
|
|
310
|
+
*.tfstate.*
|
|
311
|
+
.terraform.lock.hcl
|
|
312
|
+
terraform.tfvars
|
|
313
|
+
override.tf
|
|
314
|
+
override.tf.json
|
|
315
|
+
|
|
316
|
+
# Crash logs
|
|
317
|
+
crash.log
|
|
318
|
+
crash.*.log
|
|
319
|
+
|
|
320
|
+
# Secrets
|
|
321
|
+
*.pem
|
|
322
|
+
*.key
|
|
323
|
+
service-account*.json
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Troubleshooting
|
|
327
|
+
|
|
328
|
+
### terraform command not found
|
|
329
|
+
|
|
330
|
+
Rebuild container:
|
|
331
|
+
|
|
332
|
+
- **VS Code:** `Cmd+Shift+P` → "Dev Containers: Rebuild Container"
|
|
333
|
+
|
|
334
|
+
### State lock errors
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
# Force unlock (use with caution)
|
|
338
|
+
terraform force-unlock LOCK_ID
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Provider authentication issues
|
|
342
|
+
|
|
343
|
+
```bash
|
|
344
|
+
# AWS
|
|
345
|
+
aws sts get-caller-identity
|
|
346
|
+
|
|
347
|
+
# GCP
|
|
348
|
+
gcloud auth application-default print-access-token
|
|
349
|
+
|
|
350
|
+
# Azure
|
|
351
|
+
az account show
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
### Backend initialization
|
|
355
|
+
|
|
356
|
+
```bash
|
|
357
|
+
# Reconfigure backend
|
|
358
|
+
terraform init -reconfigure
|
|
359
|
+
|
|
360
|
+
# Migrate state
|
|
361
|
+
terraform init -migrate-state
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## OpenTofu Alternative
|
|
365
|
+
|
|
366
|
+
To use OpenTofu (open-source Terraform fork):
|
|
367
|
+
|
|
368
|
+
1. Update `devcontainer.patch.json`:
|
|
369
|
+
|
|
370
|
+
```json
|
|
371
|
+
{
|
|
372
|
+
"features": {
|
|
373
|
+
"ghcr.io/devcontainers/features/terraform:1": {
|
|
374
|
+
"version": "latest",
|
|
375
|
+
"installOpenTofu": true
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
2. Use `tofu` command instead of `terraform`
|
|
382
|
+
|
|
383
|
+
## Related Overlays
|
|
384
|
+
|
|
385
|
+
- **aws-cli** - AWS resource management
|
|
386
|
+
- **gcloud** - Google Cloud resource management
|
|
387
|
+
- **azure-cli** - Azure resource management
|
|
388
|
+
- **kubectl-helm** - Kubernetes deployments
|
|
389
|
+
- **pulumi** - Alternative IaC tool with programming languages
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"ghcr.io/devcontainers/features/terraform:1": {
|
|
5
|
+
"version": "latest",
|
|
6
|
+
"tflint": "latest",
|
|
7
|
+
"terragrunt": "none"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
"customizations": {
|
|
11
|
+
"vscode": {
|
|
12
|
+
"extensions": ["hashicorp.terraform"]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for Terraform overlay
|
|
3
|
+
# Confirms Terraform and tflint are installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Cleanup on exit
|
|
8
|
+
cleanup() {
|
|
9
|
+
if [ -n "$TEMP_DIR" ] && [ -d "$TEMP_DIR" ]; then
|
|
10
|
+
rm -rf "$TEMP_DIR"
|
|
11
|
+
fi
|
|
12
|
+
}
|
|
13
|
+
trap cleanup EXIT
|
|
14
|
+
|
|
15
|
+
echo "🔍 Verifying Terraform overlay..."
|
|
16
|
+
echo ""
|
|
17
|
+
|
|
18
|
+
# Check terraform is installed
|
|
19
|
+
echo "1️⃣ Checking Terraform CLI..."
|
|
20
|
+
if command -v terraform &> /dev/null; then
|
|
21
|
+
terraform version | head -1
|
|
22
|
+
echo " ✅ Terraform CLI found"
|
|
23
|
+
else
|
|
24
|
+
echo " ❌ Terraform CLI not found"
|
|
25
|
+
exit 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
# Check tflint is installed
|
|
29
|
+
echo ""
|
|
30
|
+
echo "2️⃣ Checking tflint..."
|
|
31
|
+
if command -v tflint &> /dev/null; then
|
|
32
|
+
tflint --version
|
|
33
|
+
echo " ✅ tflint found"
|
|
34
|
+
else
|
|
35
|
+
echo " ❌ tflint not found"
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Test basic terraform functionality
|
|
40
|
+
echo ""
|
|
41
|
+
echo "3️⃣ Testing Terraform functionality..."
|
|
42
|
+
TEMP_DIR=$(mktemp -d)
|
|
43
|
+
cd "$TEMP_DIR"
|
|
44
|
+
|
|
45
|
+
cat > main.tf << 'EOF'
|
|
46
|
+
terraform {
|
|
47
|
+
required_version = ">= 1.0"
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
output "test" {
|
|
51
|
+
value = "Terraform working"
|
|
52
|
+
}
|
|
53
|
+
EOF
|
|
54
|
+
|
|
55
|
+
if terraform init > /dev/null 2>&1 && terraform validate > /dev/null 2>&1; then
|
|
56
|
+
echo " ✅ Terraform init and validate successful"
|
|
57
|
+
else
|
|
58
|
+
echo " ❌ Terraform init/validate failed"
|
|
59
|
+
exit 1
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
echo ""
|
|
63
|
+
echo "✅ Terraform overlay verification complete"
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "container-superposition",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Solution-ready devcontainer templates and features with guided initialization",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/scripts/init.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"container-superposition": "./dist/scripts/init.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"init": "tsx scripts/init.ts",
|
|
13
|
+
"init:build": "npm run build && node dist/scripts/init.js",
|
|
14
|
+
"test": "vitest run",
|
|
15
|
+
"test:watch": "vitest",
|
|
16
|
+
"test:smoke": "bash scripts/test.sh",
|
|
17
|
+
"docs:generate": "tsx docs/generate-docs.ts",
|
|
18
|
+
"format": "prettier --write \"**/*.{ts,js,json,md,yaml,yml}\"",
|
|
19
|
+
"format:check": "prettier --check \"**/*.{ts,js,json,md,yaml,yml}\"",
|
|
20
|
+
"clean": "rm -rf dist",
|
|
21
|
+
"prepublishOnly": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"keywords": [
|
|
24
|
+
"devcontainer",
|
|
25
|
+
"development-containers",
|
|
26
|
+
"docker",
|
|
27
|
+
"vscode",
|
|
28
|
+
"codespaces",
|
|
29
|
+
"templates",
|
|
30
|
+
"scaffolding"
|
|
31
|
+
],
|
|
32
|
+
"author": "veggerby",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"repository": {
|
|
35
|
+
"type": "git",
|
|
36
|
+
"url": "https://github.com/veggerby/container-superposition.git"
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"dist/",
|
|
40
|
+
"templates/",
|
|
41
|
+
"features/",
|
|
42
|
+
"overlays/",
|
|
43
|
+
"tool/**/*.json",
|
|
44
|
+
"tool/**/*.yml",
|
|
45
|
+
"tool/**/*.yaml",
|
|
46
|
+
"tool/**/README.md",
|
|
47
|
+
"docs/**/*.md",
|
|
48
|
+
"!docs/generate-docs.ts",
|
|
49
|
+
"!**/*.tgz",
|
|
50
|
+
"README.md",
|
|
51
|
+
"LICENSE"
|
|
52
|
+
],
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@inquirer/checkbox": "^5.0.4",
|
|
55
|
+
"@inquirer/prompts": "^8.2.0",
|
|
56
|
+
"boxen": "^7.1.1",
|
|
57
|
+
"chalk": "^5.6.2",
|
|
58
|
+
"commander": "^12.1.0",
|
|
59
|
+
"js-yaml": "^4.1.1",
|
|
60
|
+
"ora": "^8.2.0"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@types/js-yaml": "^4.0.9",
|
|
64
|
+
"@types/node": "^20.19.33",
|
|
65
|
+
"@vitest/ui": "^4.0.18",
|
|
66
|
+
"prettier": "^3.4.2",
|
|
67
|
+
"tsx": "^4.7.0",
|
|
68
|
+
"typescript": "^5.3.3",
|
|
69
|
+
"vitest": "^4.0.18"
|
|
70
|
+
},
|
|
71
|
+
"engines": {
|
|
72
|
+
"node": ">=20.0.0"
|
|
73
|
+
}
|
|
74
|
+
}
|