container-superposition 0.1.9 → 0.1.10

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 (34) hide show
  1. package/README.md +3 -0
  2. package/dist/tool/cli/args.d.ts.map +1 -1
  3. package/dist/tool/cli/args.js +1 -1
  4. package/dist/tool/cli/args.js.map +1 -1
  5. package/dist/tool/commands/adopt.d.ts.map +1 -1
  6. package/dist/tool/commands/adopt.js +14 -20
  7. package/dist/tool/commands/adopt.js.map +1 -1
  8. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  9. package/dist/tool/questionnaire/composer.js +186 -2
  10. package/dist/tool/questionnaire/composer.js.map +1 -1
  11. package/dist/tool/schema/project-config.d.ts.map +1 -1
  12. package/dist/tool/schema/project-config.js +169 -0
  13. package/dist/tool/schema/project-config.js.map +1 -1
  14. package/dist/tool/schema/types.d.ts +49 -0
  15. package/dist/tool/schema/types.d.ts.map +1 -1
  16. package/docs/README.md +1 -0
  17. package/docs/overlays.md +30 -0
  18. package/docs/specs/019-project-mounts/spec.md +176 -0
  19. package/docs/superposition-yml.md +467 -0
  20. package/overlays/ansible/README.md +163 -0
  21. package/overlays/ansible/devcontainer.patch.json +14 -0
  22. package/overlays/ansible/overlay.yml +18 -0
  23. package/overlays/argocd/README.md +158 -0
  24. package/overlays/argocd/devcontainer.patch.json +9 -0
  25. package/overlays/argocd/overlay.yml +17 -0
  26. package/overlays/argocd/setup.sh +29 -0
  27. package/overlays/argocd/verify.sh +14 -0
  28. package/overlays/task/README.md +47 -0
  29. package/overlays/task/devcontainer.patch.json +9 -0
  30. package/overlays/task/overlay.yml +16 -0
  31. package/overlays/task/setup.sh +29 -0
  32. package/overlays/task/verify.sh +14 -0
  33. package/package.json +1 -1
  34. package/tool/schema/config.schema.json +74 -1
@@ -0,0 +1,467 @@
1
+ # Authoring `superposition.yml`
2
+
3
+ `superposition.yml` (or `.superposition.yml`) is the **canonical input** for all
4
+ container-superposition generation and regeneration flows. Commit it to your repository to
5
+ guarantee reproducible devcontainer builds across your team and CI.
6
+
7
+ ## Overview
8
+
9
+ - `init` always writes `superposition.yml` as its primary output.
10
+ - `regen` reads only the project file — `superposition.json` is an output-only receipt.
11
+ - `doctor` validates the project file against the last-generated manifest and reports drift.
12
+ - Repos without a project file should run `cs migrate` once to create one from their manifest.
13
+
14
+ ## File discovery
15
+
16
+ The tool searches the repository root for `superposition.yml` then `.superposition.yml`. If both
17
+ exist, it fails with an error — keep only one.
18
+
19
+ ---
20
+
21
+ ## Reference
22
+
23
+ ### `stack`
24
+
25
+ ```yaml
26
+ stack: plain # or compose
27
+ ```
28
+
29
+ | Value | Description |
30
+ | --------- | --------------------------------------------------- |
31
+ | `plain` | Single-image devcontainer (no Docker Compose) |
32
+ | `compose` | Multi-service devcontainer backed by Docker Compose |
33
+
34
+ Required. Always set this explicitly.
35
+
36
+ ---
37
+
38
+ ### `baseImage`
39
+
40
+ ```yaml
41
+ baseImage: bookworm # default
42
+ ```
43
+
44
+ | Value | Image |
45
+ | ---------- | -------------------------------------------------- |
46
+ | `bookworm` | `mcr.microsoft.com/devcontainers/base:bookworm` ⭐ |
47
+ | `trixie` | `mcr.microsoft.com/devcontainers/base:trixie` |
48
+ | `alpine` | `mcr.microsoft.com/devcontainers/base:alpine` |
49
+ | `ubuntu` | `mcr.microsoft.com/devcontainers/base:ubuntu` |
50
+ | `custom` | Uses `customImage` — see below |
51
+
52
+ ---
53
+
54
+ ### `customImage`
55
+
56
+ ```yaml
57
+ baseImage: custom
58
+ customImage: ghcr.io/myorg/my-base:latest
59
+ ```
60
+
61
+ Only valid when `baseImage: custom`. Specifies the exact Docker image to use as the base.
62
+
63
+ ---
64
+
65
+ ### `containerName`
66
+
67
+ ```yaml
68
+ containerName: My Project
69
+ ```
70
+
71
+ Sets the `name` field in `devcontainer.json`. Used by VS Code to label the container.
72
+
73
+ ---
74
+
75
+ ### `overlays`
76
+
77
+ ```yaml
78
+ overlays:
79
+ - nodejs
80
+ - postgres
81
+ - grafana
82
+ - docker-sock
83
+ ```
84
+
85
+ Flat list of overlay IDs to include. This is the **preferred** way to declare overlays.
86
+ Dependency resolution runs automatically: if you select `grafana`, `prometheus` is added
87
+ because it is declared as `requires`.
88
+
89
+ See `docs/overlays.md` for the full overlay catalogue.
90
+
91
+ ---
92
+
93
+ ### `preset`
94
+
95
+ ```yaml
96
+ preset: web-api
97
+ presetChoices:
98
+ language: nodejs
99
+ database: postgres
100
+ ```
101
+
102
+ Expands a preset (meta-overlay) into a fixed set of overlays. Use `cs list --presets` to
103
+ browse available presets. `presetChoices` passes parameter values to the preset.
104
+
105
+ ---
106
+
107
+ ### `env`
108
+
109
+ Declare runtime environment variables once. The generation pipeline routes them to the correct
110
+ devcontainer artifact based on `stack`.
111
+
112
+ ```yaml
113
+ env:
114
+ # String shorthand — target is auto-detected
115
+ APP_NAME: my-app
116
+
117
+ # Long form — explicit routing target
118
+ DB_URL:
119
+ value: postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/app
120
+ target: auto # default: plain→remoteEnv, compose→docker-compose environment
121
+ DEBUG:
122
+ value: 'true'
123
+ target: remoteEnv # always devcontainer.json remoteEnv
124
+ API_SECRET:
125
+ value: ${API_SECRET}
126
+ target: composeEnv # always docker-compose devcontainer environment (compose only)
127
+ ```
128
+
129
+ #### Routing table
130
+
131
+ | `target` | `stack: plain` | `stack: compose` |
132
+ | ---------------- | ----------------------------- | ------------------------------------------------------ |
133
+ | `auto` (default) | `devcontainer.json remoteEnv` | `docker-compose.yml services.devcontainer.environment` |
134
+ | `remoteEnv` | `devcontainer.json remoteEnv` | `devcontainer.json remoteEnv` |
135
+ | `composeEnv` | ❌ Error | `docker-compose.yml services.devcontainer.environment` |
136
+
137
+ #### `${VAR}` references
138
+
139
+ Values can reference variables from the root `.env` file using `${VAR}` or
140
+ `${VAR:-default}` syntax. These are resolved at generation time and written into the
141
+ appropriate output file.
142
+
143
+ ---
144
+
145
+ ### `mounts`
146
+
147
+ Declare filesystem mounts once. All mounts default to `devcontainer.json mounts[]` (`target: auto`).
148
+ Use `composeVolume` to route explicitly to docker-compose volumes on a compose stack.
149
+
150
+ ```yaml
151
+ mounts:
152
+ # String shorthand (escape hatch)
153
+ - 'source=${localWorkspaceFolder}/../libs,target=/workspace/libs,type=bind,readonly'
154
+
155
+ # Structured list form (preferred)
156
+ - source: ${HOME}/.codex
157
+ destination: /home/vscode/.codex
158
+ cached: true
159
+ # target: auto (default)
160
+
161
+ # Explicit target override
162
+ - source: certs
163
+ destination: /certs
164
+ type: volume
165
+ target: devcontainerMount
166
+
167
+ # Compose-only target
168
+ - source: ./logs
169
+ destination: /workspace/logs
170
+ target: composeVolume
171
+
172
+ # Raw-value fallback for advanced/custom cases
173
+ - value: './custom-src:/custom-dest:ro'
174
+ target: composeVolume
175
+ ```
176
+
177
+ #### Routing table
178
+
179
+ | `target` | `stack: plain` | `stack: compose` |
180
+ | ------------------- | ---------------------------- | ---------------------------------------------------- |
181
+ | `auto` (default) | `devcontainer.json mounts[]` | `devcontainer.json mounts[]` |
182
+ | `devcontainerMount` | `devcontainer.json mounts[]` | `devcontainer.json mounts[]` |
183
+ | `composeVolume` | ❌ Error | `docker-compose.yml services.devcontainer.volumes[]` |
184
+
185
+ Use `devcontainerMount` when you want the same explicit `devcontainer.json mounts[]` routing regardless of stack.
186
+ Use `composeVolume` when you explicitly want compose volume routing.
187
+
188
+ Mounts declared here are applied **before** `customizations.devcontainerPatch` and
189
+ `customizations.dockerComposePatch`, so patch overrides are respected.
190
+
191
+ #### Mount spec formats
192
+
193
+ Structured entries are rendered into the correct target syntax automatically. You can still use
194
+ raw strings (or `value`) when needed:
195
+
196
+ ```yaml
197
+ mounts:
198
+ # devcontainer.json style (works with auto/devcontainerMount on any stack)
199
+ - 'source=${localWorkspaceFolder}/../shared,target=/workspace/shared,type=bind'
200
+
201
+ # Docker Compose short syntax (use with composeVolume on a compose stack)
202
+ - value: './local-data:/workspace/data'
203
+ target: composeVolume
204
+
205
+ # Docker named volume (devcontainer style)
206
+ - 'source=my-cache,target=/root/.cache,type=volume'
207
+ ```
208
+
209
+ ---
210
+
211
+ ### `shell`
212
+
213
+ Declarative shell profile customizations. This is intended for aliases and shell snippets.
214
+
215
+ Use top-level `env` for environment variables (`export`-style values), not `shell`.
216
+ `shell` is for interactive shell UX (aliases, completions, snippets).
217
+
218
+ ```yaml
219
+ shell:
220
+ aliases:
221
+ k: kubectl
222
+ kgp: kubectl get pods
223
+ snippets:
224
+ - source /etc/profile
225
+ # Shell-specific commands must be guarded — shell-init.sh is sourced by
226
+ # both ~/.bashrc and ~/.zshrc, so unguarded bash-only syntax causes errors
227
+ # in zsh and vice versa. Use $BASH_VERSION / $ZSH_VERSION to guard:
228
+ - '[ -n "$BASH_VERSION" ] && complete -C ''/usr/local/bin/aws_completer'' aws'
229
+ ```
230
+
231
+ Generation behavior:
232
+
233
+ - Writes `.devcontainer/scripts/shell-init.sh` with aliases/snippets
234
+ - Adds a postCreate hook that idempotently manages a marked block in:
235
+ - `~/.bashrc`
236
+ - `~/.zshrc`
237
+ - The managed block sources the generated `shell-init.sh`
238
+
239
+ > **Note:** `shell-init.sh` is sourced by **both** `~/.bashrc` and `~/.zshrc`.
240
+ > Keep `snippets` shell-agnostic, or guard shell-specific commands with
241
+ > `$BASH_VERSION` / `$ZSH_VERSION` checks (see example above).
242
+
243
+ ---
244
+
245
+ ### `customizations`
246
+
247
+ Inline patches applied during generation. These are the same patches that can be placed in
248
+ `.devcontainer/custom/` — `superposition.yml` lets you keep them in the project file instead.
249
+
250
+ ```yaml
251
+ customizations:
252
+ devcontainerPatch:
253
+ features:
254
+ ghcr.io/devcontainers-extra/features/apt-get-packages:1:
255
+ packages: jq curl
256
+ customizations:
257
+ vscode:
258
+ extensions:
259
+ - eamodio.gitlens
260
+
261
+ dockerComposePatch:
262
+ services:
263
+ devcontainer:
264
+ extra_hosts:
265
+ - 'host.docker.internal:host-gateway'
266
+
267
+ envTemplate:
268
+ POSTGRES_PASSWORD: postgres
269
+ MY_API_KEY: changeme
270
+
271
+ scripts:
272
+ postCreate:
273
+ - npm install
274
+ - npx prisma migrate dev
275
+ postStart:
276
+ - pg_isready -h postgres || true
277
+
278
+ files:
279
+ - path: config/app.yml
280
+ content: |
281
+ database:
282
+ host: postgres
283
+ port: 5432
284
+ ```
285
+
286
+ #### Application order
287
+
288
+ 1. Base template loaded
289
+ 2. Overlays applied in order
290
+ 3. Port offsets applied
291
+ 4. Project `env` applied
292
+ 5. Project `mounts` applied
293
+ 6. `customizations.devcontainerPatch` merged (deepMerge, arrays deduplicated)
294
+ 7. `customizations.dockerComposePatch` merged
295
+ 8. Target-specific patches applied
296
+ 9. Files written
297
+
298
+ ---
299
+
300
+ ### `portOffset`
301
+
302
+ ```yaml
303
+ portOffset: 100
304
+ ```
305
+
306
+ Shifts all overlay-declared host ports by the given integer. Useful when running multiple
307
+ instances of the same stack on one machine (e.g. feature branches in parallel).
308
+
309
+ ---
310
+
311
+ ### `outputPath`
312
+
313
+ ```yaml
314
+ outputPath: ./.devcontainer
315
+ ```
316
+
317
+ Where to write the generated devcontainer files. Default: `./.devcontainer`.
318
+
319
+ ---
320
+
321
+ ### `target`
322
+
323
+ ```yaml
324
+ target: codespaces # local | codespaces | gitpod | devpod
325
+ ```
326
+
327
+ Selects a deployment-target profile that applies environment-specific patches.
328
+
329
+ See [deployment-targets.md](deployment-targets.md) for details.
330
+
331
+ ---
332
+
333
+ ### `minimal`
334
+
335
+ ```yaml
336
+ minimal: true
337
+ ```
338
+
339
+ When `true`, overlays marked with `minimal: true` in their `overlay.yml` are excluded. Useful
340
+ for CI environments where extra tooling is unnecessary.
341
+
342
+ ---
343
+
344
+ ### `editor`
345
+
346
+ ```yaml
347
+ editor: vscode # vscode | jetbrains | none
348
+ ```
349
+
350
+ Selects the editor customization profile:
351
+
352
+ | Value | Effect |
353
+ | ----------- | ---------------------------------------------------------------------------- |
354
+ | `vscode` | Include VS Code extensions and settings from all selected overlays (default) |
355
+ | `jetbrains` | Remove VS Code customizations; add `customizations.jetbrains` block |
356
+ | `none` | Remove VS Code customizations entirely |
357
+
358
+ ---
359
+
360
+ ### `parameters`
361
+
362
+ ```yaml
363
+ parameters:
364
+ POSTGRES_VERSION: '16'
365
+ POSTGRES_PORT: '5433'
366
+ REDIS_PASSWORD: mysecret
367
+ ```
368
+
369
+ Overlay parameter values. Keys correspond to parameter names declared in `overlay.yml`
370
+ `parameters:` sections. Values are substituted for `{{cs.KEY}}` tokens throughout generated
371
+ files.
372
+
373
+ ---
374
+
375
+ ## Complete example
376
+
377
+ ```yaml
378
+ stack: compose
379
+ baseImage: bookworm
380
+ containerName: My Web API
381
+
382
+ overlays:
383
+ - nodejs
384
+ - postgres
385
+ - redis
386
+ - grafana
387
+
388
+ env:
389
+ APP_ENV: development
390
+ NODE_ENV: development
391
+ DATABASE_URL:
392
+ value: 'postgres://postgres:${POSTGRES_PASSWORD:-postgres}@postgres:5432/app'
393
+ target: composeEnv
394
+
395
+ mounts:
396
+ # Bind-mount shared workspace tools (plain and compose auto-routing)
397
+ - 'source=${localWorkspaceFolder}/../tools,target=/workspace/tools,type=bind,readonly'
398
+ # Always inject local SSL certificates into devcontainer.json
399
+ - value: 'source=${localWorkspaceFolder}/.certs,target=/usr/local/share/ca-certificates,type=bind,readonly'
400
+ target: devcontainerMount
401
+
402
+ portOffset: 0
403
+
404
+ target: local
405
+
406
+ customizations:
407
+ envTemplate:
408
+ POSTGRES_PASSWORD: postgres
409
+ REDIS_PASSWORD: ''
410
+ devcontainerPatch:
411
+ features:
412
+ ghcr.io/devcontainers-extra/features/apt-get-packages:1:
413
+ packages: jq httpie
414
+ scripts:
415
+ postCreate:
416
+ - npm install
417
+ postStart:
418
+ - pg_isready -h postgres -U postgres || true
419
+
420
+ parameters:
421
+ POSTGRES_VERSION: '16'
422
+ REDIS_PORT: '6379'
423
+ ```
424
+
425
+ ---
426
+
427
+ ## Legacy fields (deprecated)
428
+
429
+ These category arrays are accepted for backward compatibility but `overlays:` is preferred:
430
+
431
+ ```yaml
432
+ # Deprecated — use overlays: [nodejs, python] instead
433
+ language:
434
+ - nodejs
435
+ - python
436
+
437
+ # Deprecated — use overlays: [postgres, redis] instead
438
+ database:
439
+ - postgres
440
+ - redis
441
+
442
+ # Deprecated — use overlays: [playwright] instead
443
+ playwright: true
444
+
445
+ # Deprecated — use overlays: [azure-cli] instead
446
+ cloudTools:
447
+ - azure-cli
448
+
449
+ # Deprecated — use overlays: [docker-in-docker] instead
450
+ devTools:
451
+ - docker-in-docker
452
+
453
+ # Deprecated — use overlays: [prometheus] instead
454
+ observability:
455
+ - prometheus
456
+ ```
457
+
458
+ ---
459
+
460
+ ## See also
461
+
462
+ - [Overlays catalogue](overlays.md)
463
+ - [Custom patches](custom-patches.md)
464
+ - [Deployment targets](deployment-targets.md)
465
+ - [Presets](presets.md)
466
+ - [Merge strategy](merge-strategy.md)
467
+ - [Workflows and regen](workflows.md)
@@ -0,0 +1,163 @@
1
+ # Ansible Overlay
2
+
3
+ Adds [Ansible](https://www.ansible.com/) tooling for automation, configuration management, and infrastructure provisioning workflows inside your devcontainer.
4
+
5
+ ## Features
6
+
7
+ - **Ansible CLI** — `ansible`, `ansible-playbook`, `ansible-galaxy`, `ansible-vault`, `ansible-doc`
8
+ - **ansible-lint** — Best-practice and style checks for playbooks, roles, and collections
9
+ - **VS Code Extension:** Red Hat Ansible (`redhat.ansible`) — syntax highlighting, autocomplete, and validation powered by the Ansible Language Server
10
+
11
+ ## How It Works
12
+
13
+ Ansible and ansible-lint are installed via the shared `cross-distro-packages` feature during devcontainer creation:
14
+
15
+ - **Debian/Ubuntu**: installs `ansible` (or `ansible-core`) and `ansible-lint` (or `python3-ansible-lint`) via `apt`
16
+ - **Alpine**: installs `ansible` and `ansible-lint` via `apk`
17
+
18
+ No extra services are started — Ansible runs entirely inside the devcontainer and connects to remote hosts (or `localhost`) over SSH or WinRM.
19
+
20
+ **Dependencies:** None required. Combine with cloud CLI overlays (`aws-cli`, `azure-cli`, `gcloud`) for cloud target automation, or `terraform` for hybrid IaC workflows.
21
+
22
+ ## Common Commands
23
+
24
+ ### Inventory & Connectivity
25
+
26
+ ```bash
27
+ # Ping all hosts in the default inventory
28
+ ansible all -m ping
29
+
30
+ # Ping using an explicit inventory file
31
+ ansible all -i inventory/hosts.ini -m ping
32
+
33
+ # Gather facts from a host group
34
+ ansible webservers -m gather_facts -i inventory/hosts.ini
35
+
36
+ # List all hosts in an inventory
37
+ ansible-inventory -i inventory/hosts.ini --list
38
+ ```
39
+
40
+ ### Running Playbooks
41
+
42
+ ```bash
43
+ # Run a playbook against all hosts in inventory
44
+ ansible-playbook playbook.yml
45
+
46
+ # Run with an explicit inventory
47
+ ansible-playbook -i inventory/hosts.ini playbook.yml
48
+
49
+ # Run with extra variables
50
+ ansible-playbook playbook.yml -e "env=production db_host=db.example.com"
51
+
52
+ # Limit execution to a specific host group
53
+ ansible-playbook playbook.yml --limit webservers
54
+
55
+ # Dry-run (check mode) — show changes without applying them
56
+ ansible-playbook playbook.yml --check
57
+
58
+ # Verbose output for debugging
59
+ ansible-playbook playbook.yml -vvv
60
+ ```
61
+
62
+ ### Ansible Galaxy
63
+
64
+ ```bash
65
+ # Install a collection from Galaxy
66
+ ansible-galaxy collection install community.general
67
+
68
+ # Install a role from Galaxy
69
+ ansible-galaxy role install geerlingguy.nginx
70
+
71
+ # Install from a requirements file
72
+ ansible-galaxy install -r requirements.yml
73
+
74
+ # List installed collections
75
+ ansible-galaxy collection list
76
+ ```
77
+
78
+ ### Vault (Secrets Management)
79
+
80
+ ```bash
81
+ # Encrypt a file
82
+ ansible-vault encrypt secrets.yml
83
+
84
+ # Decrypt a file
85
+ ansible-vault decrypt secrets.yml
86
+
87
+ # View an encrypted file without decrypting on disk
88
+ ansible-vault view secrets.yml
89
+
90
+ # Edit an encrypted file in place
91
+ ansible-vault edit secrets.yml
92
+
93
+ # Run a playbook with an encrypted vault
94
+ ansible-playbook playbook.yml --ask-vault-pass
95
+ ```
96
+
97
+ ### Linting
98
+
99
+ ```bash
100
+ # Lint a playbook
101
+ ansible-lint playbook.yml
102
+
103
+ # Lint all playbooks and roles in the current project
104
+ ansible-lint
105
+
106
+ # Show lint violations with profile info
107
+ ansible-lint --profile production playbook.yml
108
+ ```
109
+
110
+ ## Quick Start
111
+
112
+ Create a minimal localhost playbook:
113
+
114
+ ```yaml
115
+ # playbook.yml
116
+ - name: Local test
117
+ hosts: localhost
118
+ connection: local
119
+ gather_facts: false
120
+ tasks:
121
+ - name: Ping localhost
122
+ ansible.builtin.ping:
123
+
124
+ - name: Print a message
125
+ ansible.builtin.debug:
126
+ msg: 'Ansible is working!'
127
+ ```
128
+
129
+ Run and lint it:
130
+
131
+ ```bash
132
+ ansible-playbook playbook.yml
133
+ ansible-lint playbook.yml
134
+ ```
135
+
136
+ ## Use Cases
137
+
138
+ - **Configuration management** — Enforce consistent state across servers (packages, files, services, users)
139
+ - **Application deployment** — Orchestrate multi-step deployments to remote hosts or cloud VMs
140
+ - **Cloud provisioning** — Combine with cloud modules (`amazon.aws`, `azure.azcollection`, `google.cloud`) to provision infrastructure
141
+ - **Kubernetes automation** — Use the `kubernetes.core` collection to manage cluster resources
142
+ - **Local development automation** — Run playbooks against `localhost` to set up or reset dev environments
143
+
144
+ **Integrates well with:**
145
+
146
+ - `aws-cli`, `azure-cli`, `gcloud` — cloud target automation via provider-specific modules
147
+ - `terraform` — use Terraform for infra provisioning, Ansible for configuration of provisioned resources
148
+ - `kubectl-helm` — manage Kubernetes workloads with the `kubernetes.core` Ansible collection
149
+
150
+ ## References
151
+
152
+ - [Ansible Documentation](https://docs.ansible.com/)
153
+ - [ansible-lint Documentation](https://ansible.readthedocs.io/projects/lint/)
154
+ - [Ansible Galaxy](https://galaxy.ansible.com/)
155
+ - [Red Hat Ansible VS Code Extension](https://marketplace.visualstudio.com/items?itemName=redhat.ansible)
156
+ - [Ansible Collections Index](https://docs.ansible.com/ansible/latest/collections/index.html)
157
+
158
+ **Related Overlays:**
159
+
160
+ - [`aws-cli`](../aws-cli/README.md) — AWS CLI for cloud target automation
161
+ - [`azure-cli`](../azure-cli/README.md) — Azure CLI for cloud target automation
162
+ - [`gcloud`](../gcloud/README.md) — Google Cloud SDK for cloud target automation
163
+ - [`terraform`](../terraform/README.md) — Infrastructure provisioning to pair with Ansible configuration management
@@ -0,0 +1,14 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "features": {
4
+ "./features/cross-distro-packages": {
5
+ "apt": "ansible|ansible-core ansible-lint|python3-ansible-lint",
6
+ "apk": "ansible ansible-lint"
7
+ }
8
+ },
9
+ "customizations": {
10
+ "vscode": {
11
+ "extensions": ["redhat.ansible"]
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,18 @@
1
+ id: ansible
2
+ name: Ansible
3
+ description: Automation and configuration management with Ansible and ansible-lint
4
+ category: cloud
5
+ supports: []
6
+ requires: []
7
+ suggests:
8
+ - aws-cli
9
+ - azure-cli
10
+ - gcloud
11
+ - terraform
12
+ conflicts: []
13
+ tags:
14
+ - cloud
15
+ - iac
16
+ - automation
17
+ - ansible
18
+ ports: []