oh-my-agent-commandcode 0.0.0-stage → 20.38.3
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 +35 -2
- package/filter-test-output.sh +52 -0
- package/mods/oma.ts +347 -0
- package/package.json +30 -4
- package/skills/_shared/conditional/experiment-ledger.md +28 -0
- package/skills/_shared/conditional/exploration-loop.md +22 -0
- package/skills/_shared/conditional/quality-score.md +33 -0
- package/skills/_shared/core/anti-ai-prose.md +191 -0
- package/skills/_shared/core/api-contracts/README.md +28 -0
- package/skills/_shared/core/api-contracts/template.md +90 -0
- package/skills/_shared/core/clarification-protocol.md +23 -0
- package/skills/_shared/core/code-intelligence.md +46 -0
- package/skills/_shared/core/collaboration-policy.md +28 -0
- package/skills/_shared/core/common-checklist.md +28 -0
- package/skills/_shared/core/context-budget.md +22 -0
- package/skills/_shared/core/context-loading.md +34 -0
- package/skills/_shared/core/difficulty-guide.md +26 -0
- package/skills/_shared/core/execution-policy.md +31 -0
- package/skills/_shared/core/lessons-learned.md +33 -0
- package/skills/_shared/core/prompt-structure.md +18 -0
- package/skills/_shared/core/quality-principles.md +11 -0
- package/skills/_shared/core/session-metrics.md +35 -0
- package/skills/_shared/core/skill-routing.md +39 -0
- package/skills/_shared/core/test-approach.md +54 -0
- package/skills/_shared/core/vendor-detection.md +52 -0
- package/skills/_shared/runtime/memory-protocol.md +118 -0
- package/skills/_shared/runtime/result-contract.md +64 -0
- package/skills/_shared/ui-interaction-quality.md +133 -0
- package/skills/oma-academic-writing/SKILL.md +181 -0
- package/skills/oma-academic-writing/resources/abstract-guide.md +51 -0
- package/skills/oma-academic-writing/resources/academic-verb-tiers.md +42 -0
- package/skills/oma-academic-writing/resources/anti-ai-checklist.md +52 -0
- package/skills/oma-academic-writing/resources/hedging-guide.md +132 -0
- package/skills/oma-academic-writing/resources/sentence-structure-reference.md +151 -0
- package/skills/oma-architecture/SKILL.md +203 -0
- package/skills/oma-architecture/resources/api-evolution.md +41 -0
- package/skills/oma-architecture/resources/checklist.md +42 -0
- package/skills/oma-architecture/resources/execution-protocol.md +115 -0
- package/skills/oma-architecture/resources/methodology-selection.md +92 -0
- package/skills/oma-architecture/resources/migration-patterns.md +28 -0
- package/skills/oma-architecture/resources/output-templates.md +111 -0
- package/skills/oma-architecture/resources/stakeholder-synthesis.md +80 -0
- package/skills/oma-backend/SKILL.md +202 -0
- package/skills/oma-backend/resources/checklist.md +45 -0
- package/skills/oma-backend/resources/error-playbook.md +97 -0
- package/skills/oma-backend/resources/execution-protocol.md +39 -0
- package/skills/oma-backend/resources/orm-reference.md +61 -0
- package/skills/oma-backend/variants/node/api-template.ts +315 -0
- package/skills/oma-backend/variants/node/snippets.md +475 -0
- package/skills/oma-backend/variants/node/stack.yaml +21 -0
- package/skills/oma-backend/variants/node/tech-stack.md +33 -0
- package/skills/oma-backend/variants/python/api-template.py +378 -0
- package/skills/oma-backend/variants/python/snippets.md +199 -0
- package/skills/oma-backend/variants/python/stack.yaml +18 -0
- package/skills/oma-backend/variants/python/tech-stack.md +45 -0
- package/skills/oma-backend/variants/rust/api-template.rs +635 -0
- package/skills/oma-backend/variants/rust/snippets.md +471 -0
- package/skills/oma-backend/variants/rust/stack.yaml +20 -0
- package/skills/oma-backend/variants/rust/tech-stack.md +36 -0
- package/skills/oma-backend/variants/stack.schema.json +73 -0
- package/skills/oma-brainstorm/SKILL.md +166 -0
- package/skills/oma-brainstorm/resources/triz-lite.md +117 -0
- package/skills/oma-coordination/SKILL.md +171 -0
- package/skills/oma-db/SKILL.md +201 -0
- package/skills/oma-db/resources/anti-patterns.md +177 -0
- package/skills/oma-db/resources/checklist.md +67 -0
- package/skills/oma-db/resources/document-templates.md +107 -0
- package/skills/oma-db/resources/error-playbook.md +50 -0
- package/skills/oma-db/resources/examples.md +170 -0
- package/skills/oma-db/resources/execution-protocol.md +127 -0
- package/skills/oma-db/resources/iso-controls.md +98 -0
- package/skills/oma-db/resources/migration-playbook.md +93 -0
- package/skills/oma-db/resources/query-tuning.md +57 -0
- package/skills/oma-db/resources/vector-db.md +159 -0
- package/skills/oma-debug/SKILL.md +146 -0
- package/skills/oma-debug/resources/bug-report-template.md +327 -0
- package/skills/oma-debug/resources/checklist.md +31 -0
- package/skills/oma-debug/resources/common-patterns.md +734 -0
- package/skills/oma-debug/resources/debugging-checklist.md +364 -0
- package/skills/oma-debug/resources/error-playbook.md +94 -0
- package/skills/oma-debug/resources/execution-protocol.md +40 -0
- package/skills/oma-design/SKILL.md +135 -0
- package/skills/oma-design/resources/asset-strategy.md +34 -0
- package/skills/oma-design/resources/checklist.md +63 -0
- package/skills/oma-design/resources/data-grid.md +48 -0
- package/skills/oma-design/resources/design-md-spec.md +107 -0
- package/skills/oma-design/resources/design-tokens.md +53 -0
- package/skills/oma-design/resources/error-playbook.md +18 -0
- package/skills/oma-design/resources/execution-protocol.md +95 -0
- package/skills/oma-design/resources/external-design-skills.md +130 -0
- package/skills/oma-design/resources/getdesign-fetcher.md +104 -0
- package/skills/oma-design/resources/product-interface-review.md +59 -0
- package/skills/oma-design/resources/redesign-protocol.md +52 -0
- package/skills/oma-design/resources/stitch-integration.md +244 -0
- package/skills/oma-dev-workflow/SKILL.md +375 -0
- package/skills/oma-dev-workflow/resources/affected-checks.py +58 -0
- package/skills/oma-dev-workflow/resources/api-workflows.md +58 -0
- package/skills/oma-dev-workflow/resources/database-patterns.md +107 -0
- package/skills/oma-dev-workflow/resources/i18n-patterns.md +63 -0
- package/skills/oma-dev-workflow/resources/release-coordination.md +240 -0
- package/skills/oma-dev-workflow/resources/tooling-profiles.md +217 -0
- package/skills/oma-dev-workflow/resources/troubleshooting.md +78 -0
- package/skills/oma-dev-workflow/resources/validation-pipeline.md +246 -0
- package/skills/oma-docs/SKILL.md +77 -0
- package/skills/oma-docs/resources/commands.md +76 -0
- package/skills/oma-explanation/SKILL.md +212 -0
- package/skills/oma-explanation/resources/document-structure.md +115 -0
- package/skills/oma-explanation/resources/draft-format.md +199 -0
- package/skills/oma-explanation/resources/html-contract.md +102 -0
- package/skills/oma-frontend/SKILL.md +227 -0
- package/skills/oma-frontend/resources/angular-rules.md +110 -0
- package/skills/oma-frontend/resources/checklist.md +76 -0
- package/skills/oma-frontend/resources/error-playbook.md +125 -0
- package/skills/oma-frontend/resources/execution-protocol.md +46 -0
- package/skills/oma-frontend/resources/snippets.md +354 -0
- package/skills/oma-frontend/resources/specialized-visual-implementation.md +193 -0
- package/skills/oma-frontend/resources/tailwind-rules.md +83 -0
- package/skills/oma-frontend/resources/tech-stack.md +156 -0
- package/skills/oma-hwp/SKILL.md +166 -0
- package/skills/oma-hwp/config/hwp-config.yaml +35 -0
- package/skills/oma-hwp/resources/balanced-tables.ts +39 -0
- package/skills/oma-hwp/resources/execution-protocol.md +145 -0
- package/skills/oma-hwp/resources/flatten-tables.ts +101 -0
- package/skills/oma-hwp/resources/package.json +13 -0
- package/skills/oma-hwp/resources/troubleshooting.md +70 -0
- package/skills/oma-hwp/resources/tsconfig.json +10 -0
- package/skills/oma-hwp/resources/turndown-plugin-gfm.d.ts +9 -0
- package/skills/oma-image/SKILL.md +142 -0
- package/skills/oma-image/config/image-config.yaml +70 -0
- package/skills/oma-image/resources/checklist.md +18 -0
- package/skills/oma-image/resources/execution-protocol.md +117 -0
- package/skills/oma-image/resources/invocation.md +105 -0
- package/skills/oma-image/resources/prompt-tips.md +71 -0
- package/skills/oma-image/resources/vendor-matrix.md +90 -0
- package/skills/oma-market/SKILL.md +142 -0
- package/skills/oma-market/resources/checklist.md +12 -0
- package/skills/oma-market/resources/error-playbook.md +12 -0
- package/skills/oma-market/resources/execution-protocol.md +60 -0
- package/skills/oma-market/resources/frameworks/pestel.md +101 -0
- package/skills/oma-market/resources/frameworks/porters-5f.md +90 -0
- package/skills/oma-market/resources/frameworks/swot.md +61 -0
- package/skills/oma-market/resources/intent-rules.md +35 -0
- package/skills/oma-market/resources/output-laws.md +53 -0
- package/skills/oma-mobile/SKILL.md +168 -0
- package/skills/oma-mobile/resources/checklist.md +77 -0
- package/skills/oma-mobile/resources/error-playbook.md +198 -0
- package/skills/oma-mobile/resources/execution-protocol.md +47 -0
- package/skills/oma-mobile/resources/screen-template.dart +331 -0
- package/skills/oma-mobile/resources/screen-template.swift +239 -0
- package/skills/oma-mobile/resources/screen-template.tsx +179 -0
- package/skills/oma-mobile/resources/tech-stack.md +69 -0
- package/skills/oma-mobile/variants/README.md +45 -0
- package/skills/oma-mobile/variants/flutter/api-template.dart +461 -0
- package/skills/oma-mobile/variants/flutter/snippets.md +1353 -0
- package/skills/oma-mobile/variants/flutter/stack.yaml +21 -0
- package/skills/oma-mobile/variants/flutter/tech-stack.md +201 -0
- package/skills/oma-mobile/variants/kotlin-android/api-template.kt +182 -0
- package/skills/oma-mobile/variants/kotlin-android/snippets.md +871 -0
- package/skills/oma-mobile/variants/kotlin-android/stack.yaml +32 -0
- package/skills/oma-mobile/variants/kotlin-android/tech-stack.md +159 -0
- package/skills/oma-mobile/variants/react-native/api-template.ts +531 -0
- package/skills/oma-mobile/variants/react-native/snippets.md +1014 -0
- package/skills/oma-mobile/variants/react-native/stack.yaml +22 -0
- package/skills/oma-mobile/variants/react-native/tech-stack.md +192 -0
- package/skills/oma-mobile/variants/stack.schema.json +68 -0
- package/skills/oma-mobile/variants/swift-ios/api-template.swift +165 -0
- package/skills/oma-mobile/variants/swift-ios/snippets.md +1028 -0
- package/skills/oma-mobile/variants/swift-ios/stack.yaml +25 -0
- package/skills/oma-mobile/variants/swift-ios/tech-stack.md +174 -0
- package/skills/oma-observability/SKILL.md +225 -0
- package/skills/oma-observability/resources/anti-patterns.md +555 -0
- package/skills/oma-observability/resources/boundaries/cross-application.md +348 -0
- package/skills/oma-observability/resources/boundaries/multi-tenant.md +290 -0
- package/skills/oma-observability/resources/boundaries/release.md +372 -0
- package/skills/oma-observability/resources/boundaries/slo.md +225 -0
- package/skills/oma-observability/resources/checklist.md +123 -0
- package/skills/oma-observability/resources/examples.md +448 -0
- package/skills/oma-observability/resources/execution-protocol.md +166 -0
- package/skills/oma-observability/resources/incident-forensics.md +348 -0
- package/skills/oma-observability/resources/intent-rules.md +307 -0
- package/skills/oma-observability/resources/layers/L3-network.md +281 -0
- package/skills/oma-observability/resources/layers/L4-transport.md +299 -0
- package/skills/oma-observability/resources/layers/L7-application/crash-analytics.md +359 -0
- package/skills/oma-observability/resources/layers/L7-application/mobile-rum.md +278 -0
- package/skills/oma-observability/resources/layers/L7-application/waf.md +246 -0
- package/skills/oma-observability/resources/layers/L7-application/web-rum.md +350 -0
- package/skills/oma-observability/resources/layers/mesh.md +368 -0
- package/skills/oma-observability/resources/matrix.md +177 -0
- package/skills/oma-observability/resources/meta-observability.md +605 -0
- package/skills/oma-observability/resources/observability-as-code.md +666 -0
- package/skills/oma-observability/resources/signals/audit.md +310 -0
- package/skills/oma-observability/resources/signals/cost.md +303 -0
- package/skills/oma-observability/resources/signals/logs.md +263 -0
- package/skills/oma-observability/resources/signals/metrics.md +478 -0
- package/skills/oma-observability/resources/signals/privacy.md +351 -0
- package/skills/oma-observability/resources/signals/profiles.md +245 -0
- package/skills/oma-observability/resources/signals/traces.md +360 -0
- package/skills/oma-observability/resources/standards.md +214 -0
- package/skills/oma-observability/resources/transport/collector-topology.md +308 -0
- package/skills/oma-observability/resources/transport/otlp-grpc-vs-http.md +256 -0
- package/skills/oma-observability/resources/transport/sampling-recipes.md +297 -0
- package/skills/oma-observability/resources/transport/udp-statsd-mtu.md +167 -0
- package/skills/oma-observability/resources/vendor-categories.md +352 -0
- package/skills/oma-orchestration/SKILL.md +302 -0
- package/skills/oma-orchestration/config/cli-config.yaml +92 -0
- package/skills/oma-orchestration/resources/memory-schema.md +232 -0
- package/skills/oma-orchestration/resources/subagent-prompt-template.md +30 -0
- package/skills/oma-orchestration/scripts/parallel-run.sh +6 -0
- package/skills/oma-orchestration/scripts/spawn-agent.sh +5 -0
- package/skills/oma-orchestration/scripts/verify.sh +20 -0
- package/skills/oma-orchestration/templates/backend-task.md +19 -0
- package/skills/oma-orchestration/templates/debug-task.md +16 -0
- package/skills/oma-orchestration/templates/frontend-task.md +18 -0
- package/skills/oma-orchestration/templates/mobile-task.md +18 -0
- package/skills/oma-orchestration/templates/qa-task.md +16 -0
- package/skills/oma-orchestration/templates/tasks-example.yaml +15 -0
- package/skills/oma-pdf/SKILL.md +162 -0
- package/skills/oma-pdf/config/pdf-config.yaml +27 -0
- package/skills/oma-pdf/resources/execution-protocol.md +127 -0
- package/skills/oma-pm/SKILL.md +157 -0
- package/skills/oma-pm/resources/error-playbook.md +75 -0
- package/skills/oma-pm/resources/examples.md +439 -0
- package/skills/oma-pm/resources/execution-protocol.md +62 -0
- package/skills/oma-pm/resources/iso-planning.md +110 -0
- package/skills/oma-pm/resources/plan-phase-protocol.md +66 -0
- package/skills/oma-pm/resources/task-template.json +86 -0
- package/skills/oma-qa/SKILL.md +141 -0
- package/skills/oma-qa/resources/checklist.md +339 -0
- package/skills/oma-qa/resources/error-playbook.md +98 -0
- package/skills/oma-qa/resources/execution-protocol.md +169 -0
- package/skills/oma-qa/resources/iso-quality.md +82 -0
- package/skills/oma-qa/resources/verify-ship-protocol.md +116 -0
- package/skills/oma-recap/SKILL.md +245 -0
- package/skills/oma-recap/resources/output-formats.md +83 -0
- package/skills/oma-refactor/SKILL.md +184 -0
- package/skills/oma-refactor/resources/definition.md +108 -0
- package/skills/oma-refactor/resources/governance.md +33 -0
- package/skills/oma-refactor/resources/hotspots.py +44 -0
- package/skills/oma-refactor/resources/measurement.md +93 -0
- package/skills/oma-scholar/SKILL.md +276 -0
- package/skills/oma-scholar/config/scholar-config.yaml +79 -0
- package/skills/oma-scholar/resources/api-endpoints.md +174 -0
- package/skills/oma-scholar/resources/checklist.md +92 -0
- package/skills/oma-scholar/resources/execution-protocol.md +224 -0
- package/skills/oma-scholar/resources/fallback-providers.md +143 -0
- package/skills/oma-scholar/resources/setup-openalex.md +85 -0
- package/skills/oma-scholar/resources/sidecar-spec.md +341 -0
- package/skills/oma-scholar/resources/upstream-spec-cache.md +972 -0
- package/skills/oma-scm/SKILL.md +103 -0
- package/skills/oma-scm/resources/cm-operations.md +56 -0
- package/skills/oma-scm/resources/codeowners-playbook.md +45 -0
- package/skills/oma-scm/resources/conventional-commits.md +108 -0
- package/skills/oma-scm/resources/merge-risk.md +76 -0
- package/skills/oma-scm/resources/onboarding-risk-signals.md +71 -0
- package/skills/oma-search/SKILL.md +125 -0
- package/skills/oma-search/resources/checklist.md +36 -0
- package/skills/oma-search/resources/error-playbook.md +66 -0
- package/skills/oma-search/resources/examples.md +80 -0
- package/skills/oma-search/resources/execution-protocol.md +86 -0
- package/skills/oma-search/resources/intent-rules.md +47 -0
- package/skills/oma-search/resources/trust-registry.md +53 -0
- package/skills/oma-security/SKILL.md +172 -0
- package/skills/oma-security/resources/artex.md +108 -0
- package/skills/oma-security/resources/ci.md +134 -0
- package/skills/oma-security/resources/cisco-source.md +108 -0
- package/skills/oma-security/resources/deepsec-config.md +45 -0
- package/skills/oma-security/resources/deepsec-matchers.md +35 -0
- package/skills/oma-security/resources/deepsec-scanning.md +45 -0
- package/skills/oma-security/resources/deepsec-setup.md +41 -0
- package/skills/oma-security/resources/findings-contract.md +408 -0
- package/skills/oma-security/resources/mcp-scanning.md +122 -0
- package/skills/oma-security/resources/skill-scanning.md +106 -0
- package/skills/oma-security/resources/validation.md +71 -0
- package/skills/oma-skill-creation/SKILL.md +84 -0
- package/skills/oma-skill-creation/resources/prompt-evaluation.md +36 -0
- package/skills/oma-skill-creation/resources/ssl-lite-template.md +108 -0
- package/skills/oma-skill-creation/resources/validation-checklist.md +101 -0
- package/skills/oma-slide/SKILL.md +277 -0
- package/skills/oma-slide/resources/animation-patterns.md +245 -0
- package/skills/oma-slide/resources/assets/deck-stage.js +514 -0
- package/skills/oma-slide/resources/assets/viewport-base.css +257 -0
- package/skills/oma-slide/resources/canva-integration.md +203 -0
- package/skills/oma-slide/resources/checklist.md +46 -0
- package/skills/oma-slide/resources/design-doctrine.md +260 -0
- package/skills/oma-slide/resources/fixed-stage.md +232 -0
- package/skills/oma-slide/resources/generation-protocol.md +393 -0
- package/skills/oma-slide/resources/native-pptx.md +84 -0
- package/skills/oma-slide/resources/selection-index.json +461 -0
- package/skills/oma-slide/resources/style-presets.LICENSE +10 -0
- package/skills/oma-slide/resources/style-presets.md +520 -0
- package/skills/oma-tf-infra/SKILL.md +201 -0
- package/skills/oma-tf-infra/resources/checklist.md +53 -0
- package/skills/oma-tf-infra/resources/cost-optimization.md +574 -0
- package/skills/oma-tf-infra/resources/error-playbook.md +68 -0
- package/skills/oma-tf-infra/resources/examples.md +38 -0
- package/skills/oma-tf-infra/resources/execution-protocol.md +129 -0
- package/skills/oma-tf-infra/resources/iso-42001-infra.md +229 -0
- package/skills/oma-tf-infra/resources/multi-cloud-examples.md +241 -0
- package/skills/oma-tf-infra/resources/policy-testing-examples.md +332 -0
- package/skills/oma-translation/SKILL.md +229 -0
- package/skills/oma-translation/resources/anti-ai-patterns.md +104 -0
- package/skills/oma-translation/resources/lang/_template.md +73 -0
- package/skills/oma-translation/resources/lang/en.md +123 -0
- package/skills/oma-translation/resources/lang/ja.md +274 -0
- package/skills/oma-translation/resources/lang/ko.md +228 -0
- package/skills/oma-translation/resources/lang/zh.md +285 -0
- package/skills/oma-translation/resources/style-skills.md +104 -0
- package/skills/oma-translation/resources/translation-rubric.md +126 -0
- package/skills/oma-video/SKILL.md +229 -0
- package/skills/oma-video/config/video-config.yaml +60 -0
- package/skills/oma-video/resources/checklist.md +26 -0
- package/skills/oma-video/resources/execution-protocol.md +122 -0
- package/skills/oma-video/resources/existing-media.md +185 -0
- package/skills/oma-video/resources/hyperframes-authoring/README.md +44 -0
- package/skills/oma-video/resources/hyperframes-authoring/demo.md +31 -0
- package/skills/oma-video/resources/hyperframes-authoring/explainer.md +10 -0
- package/skills/oma-video/resources/hyperframes-authoring/shorts.md +10 -0
- package/skills/oma-video/resources/motion-principles.md +81 -0
- package/skills/oma-video/resources/mpt/driver.py +301 -0
- package/skills/oma-video/resources/prompt-tips.md +75 -0
- package/skills/oma-video/resources/script-schema.md +81 -0
- package/skills/oma-video/resources/sound-design.md +127 -0
- package/skills/oma-video/resources/strudel/package.json +11 -0
- package/skills/oma-video/resources/strudel/page.html +87 -0
- package/skills/oma-video/resources/strudel/render.mjs +295 -0
- package/skills/oma-video/resources/vendor-matrix.md +124 -0
- package/skills/oma-voice/SKILL.md +249 -0
- package/skills/oma-voice/config/voice-config.yaml +30 -0
- package/skills/oma-voice/resources/audio-processing.md +119 -0
- package/skills/oma-voice/resources/checklist.md +47 -0
- package/skills/oma-voice/resources/execution-protocol.md +215 -0
- package/skills/oma-voice/resources/prompt-tips.md +43 -0
- package/skills/oma-voice/resources/voice-matrix.md +51 -0
- package/skills/oma-voice/resources/voicestudio.md +87 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# TF Infra Agent: Execution Protocol
|
|
2
|
+
|
|
3
|
+
## Preparation
|
|
4
|
+
Use the task's scope, existing project conventions, and acceptance criteria. Follow `../../_shared/core/execution-policy.md` when it has not already been supplied. Read only references needed by the selected operation; consult lessons or recovery guides for an observed issue. Expand planning depth only when the change requires it.
|
|
5
|
+
|
|
6
|
+
## Step 1: Analyze
|
|
7
|
+
|
|
8
|
+
1. **Identify Cloud Provider**: Detect from `provider.tf`, backend config, or existing resources
|
|
9
|
+
2. Scan existing Terraform files for naming conventions, module patterns, and state configuration
|
|
10
|
+
3. Identify required services, resource dependencies, and security constraints
|
|
11
|
+
4. Load domain-specific references:
|
|
12
|
+
- `multi-cloud-examples.md` when creating compute, OIDC, or secret resources
|
|
13
|
+
- `cost-optimization.md` when sizing or cost review is needed
|
|
14
|
+
- `policy-testing-examples.md` when setting up policy enforcement or tests
|
|
15
|
+
- `iso-42001-infra.md` when AI governance, continuity, or architecture documentation is required
|
|
16
|
+
5. List assumptions and unknowns
|
|
17
|
+
|
|
18
|
+
## Step 2: Plan
|
|
19
|
+
|
|
20
|
+
1. Define resource naming using project conventions and `locals` block:
|
|
21
|
+
|
|
22
|
+
| Resource Type | Pattern | Examples |
|
|
23
|
+
|--------------|---------|----------|
|
|
24
|
+
| Compute | `{prefix}-{service}` | `fs-dev-api`, `fs-prod-web` |
|
|
25
|
+
| Database | `{prefix}-db` | `fs-dev-db`, `fs-prod-postgres` |
|
|
26
|
+
| Storage | `{prefix}-{purpose}` | `fs-dev-assets`, `fs-dev-tfstate` |
|
|
27
|
+
| IAM Role/SA | `{prefix}-{role}` | `fs-dev-api-role`, `fs-dev-deployer` |
|
|
28
|
+
| Network | `{prefix}-{type}` | `fs-dev-vpc`, `fs-dev-subnet` |
|
|
29
|
+
|
|
30
|
+
2. Plan file structure following project patterns:
|
|
31
|
+
```
|
|
32
|
+
apps/infra/
|
|
33
|
+
├── provider.tf # Provider configuration
|
|
34
|
+
├── versions.tf # Version constraints
|
|
35
|
+
├── variables.tf # Input variables
|
|
36
|
+
├── locals.tf # Local values and naming
|
|
37
|
+
├── backend.tf # State backend
|
|
38
|
+
├── compute.tf # Compute resources
|
|
39
|
+
├── database.tf # Databases
|
|
40
|
+
├── storage.tf # Object storage
|
|
41
|
+
├── networking.tf # VPC, subnets, LB, CDN
|
|
42
|
+
├── messaging.tf # Queues and messaging
|
|
43
|
+
├── iam.tf # IAM roles and policies
|
|
44
|
+
├── cicd-auth.tf # OIDC/workload identity
|
|
45
|
+
├── security.tf # Security groups, WAF, secrets
|
|
46
|
+
├── outputs.tf # Output values
|
|
47
|
+
└── terraform.tfvars # Variable values (gitignored)
|
|
48
|
+
```
|
|
49
|
+
3. Plan module interfaces following composability principles:
|
|
50
|
+
```
|
|
51
|
+
modules/
|
|
52
|
+
├── vpc/ # Reusable VPC module
|
|
53
|
+
│ ├── main.tf
|
|
54
|
+
│ ├── variables.tf
|
|
55
|
+
│ ├── outputs.tf
|
|
56
|
+
│ └── README.md
|
|
57
|
+
├── database/ # Reusable database module
|
|
58
|
+
└── compute/ # Reusable compute module
|
|
59
|
+
```
|
|
60
|
+
- Expose required variables only; provide sensible defaults for optional
|
|
61
|
+
- Export essential outputs only
|
|
62
|
+
- Document all inputs/outputs in README.md
|
|
63
|
+
- Version modules using Git tags or Terraform Registry
|
|
64
|
+
4. Choose an environment separation strategy:
|
|
65
|
+
- Prefer directory-per-environment (`envs/dev`, `envs/prod`) with isolated state backends for team setups
|
|
66
|
+
- CLI workspaces only for lightweight, same-config variants (shared backend is a blast-radius risk)
|
|
67
|
+
- Consider Terragrunt when many environments share identical module wiring
|
|
68
|
+
5. Identify security requirements (IAM, encryption, network boundaries)
|
|
69
|
+
6. Estimate cost impact for new resources (run Infracost when available)
|
|
70
|
+
|
|
71
|
+
## Step 3: Implement
|
|
72
|
+
|
|
73
|
+
1. Create/modify .tf files in dependency order (provider → backend → networking → compute → outputs)
|
|
74
|
+
2. Use `locals` for environment-specific naming and tags
|
|
75
|
+
3. Apply consistent tags: Environment, Project, Owner, CostCenter
|
|
76
|
+
4. Use `for_each` over `count` for resource collections
|
|
77
|
+
5. Set `depends_on` for explicit resource ordering where needed
|
|
78
|
+
6. Design composable modules with:
|
|
79
|
+
- Required variables only, sensible defaults for optional
|
|
80
|
+
- Essential outputs only
|
|
81
|
+
- Documented inputs/outputs
|
|
82
|
+
7. Run `terraform validate` and `terraform fmt`
|
|
83
|
+
8. Run `terraform plan` and review output
|
|
84
|
+
|
|
85
|
+
## Infrastructure Testing Levels
|
|
86
|
+
|
|
87
|
+
| Level | Tool | Purpose |
|
|
88
|
+
|-------|------|---------|
|
|
89
|
+
| Unit | `terraform validate` | Syntax, variable types |
|
|
90
|
+
| Static Analysis | TFLint, Checkov, Trivy (`trivy config`) | Best practices, security |
|
|
91
|
+
| Module Tests | `terraform test` (TF >= 1.6, `.tftest.hcl`) | Module logic via plan/apply assertions |
|
|
92
|
+
| Integration | Terratest | Resource creation verification |
|
|
93
|
+
| Compliance | OPA/Sentinel | Organizational policy enforcement |
|
|
94
|
+
| E2E | Custom scripts | Full workflow validation |
|
|
95
|
+
|
|
96
|
+
See `policy-testing-examples.md` for native `terraform test`, Terratest, and CI/CD integration examples.
|
|
97
|
+
|
|
98
|
+
## Step 4: Verify
|
|
99
|
+
|
|
100
|
+
1. Run `checklist.md` self-verification
|
|
101
|
+
2. Use applicable `../../_shared/core/common-checklist.md` sections for cross-domain checks
|
|
102
|
+
3. Confirm:
|
|
103
|
+
- `terraform validate` passes
|
|
104
|
+
- `terraform plan` shows expected changes only
|
|
105
|
+
- No secrets in .tf files
|
|
106
|
+
- All resources tagged
|
|
107
|
+
- IAM follows least privilege
|
|
108
|
+
- Cost impact acceptable
|
|
109
|
+
4. For AI systems: verify IAM, logging, encryption, monitoring, and retention controls documented
|
|
110
|
+
5. For continuity: verify RTO/RPO, failover, backup, and restore documented
|
|
111
|
+
|
|
112
|
+
## Output Format
|
|
113
|
+
|
|
114
|
+
When creating new infrastructure, provide:
|
|
115
|
+
1. Cloud provider identified from context
|
|
116
|
+
2. Complete HCL code blocks for each resource
|
|
117
|
+
3. Required variable definitions with types and descriptions
|
|
118
|
+
4. Outputs for resource IDs and endpoints
|
|
119
|
+
5. Migration notes if importing existing resources
|
|
120
|
+
6. Cost estimation considerations
|
|
121
|
+
7. For AI systems: infrastructure control notes covering access, logging, encryption, monitoring, and retention
|
|
122
|
+
8. For continuity-sensitive systems: RTO/RPO, failover, backup, and restore notes
|
|
123
|
+
9. For architecture documentation requests: stakeholder/concern/view/rationale notes
|
|
124
|
+
|
|
125
|
+
When reviewing terraform plan, provide:
|
|
126
|
+
1. Summary of changes (add/change/destroy counts)
|
|
127
|
+
2. Risk assessment for destructive changes
|
|
128
|
+
3. Provider-specific considerations
|
|
129
|
+
4. Confirmation checklist before apply
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# TF Infra Agent - ISO/IEC 42001 / ISO 22301 / ISO/IEC/IEEE 42010 Guide
|
|
2
|
+
|
|
3
|
+
Use this file when the task involves AI systems and the user wants infrastructure controls or audit-friendly recommendations aligned with ISO/IEC 42001, continuity and recovery guidance aligned with ISO 22301, or infrastructure architecture documentation guidance aligned with ISO/IEC/IEEE 42010.
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
This guide is for:
|
|
8
|
+
|
|
9
|
+
- **infrastructure controls** that support AI governance
|
|
10
|
+
- **continuity and recovery controls** for infrastructure resilience
|
|
11
|
+
- **architecture description guidance** for infrastructure decisions
|
|
12
|
+
|
|
13
|
+
It does **not** replace:
|
|
14
|
+
|
|
15
|
+
- organizational policy
|
|
16
|
+
- model governance
|
|
17
|
+
- human oversight design
|
|
18
|
+
- AI risk management process ownership
|
|
19
|
+
|
|
20
|
+
Those belong primarily to PM, QA, backend, or security governance work.
|
|
21
|
+
|
|
22
|
+
## What TF Infra Agent Should Cover
|
|
23
|
+
|
|
24
|
+
For AI systems, focus on infrastructure controls such as:
|
|
25
|
+
|
|
26
|
+
- IAM and least privilege
|
|
27
|
+
- service-to-service identity
|
|
28
|
+
- network segmentation and private connectivity
|
|
29
|
+
- encryption at rest and in transit
|
|
30
|
+
- secrets management
|
|
31
|
+
- centralized logging and audit trails
|
|
32
|
+
- monitoring and alerting
|
|
33
|
+
- backup and retention
|
|
34
|
+
- environment isolation
|
|
35
|
+
- change traceability in CI/CD and Terraform state
|
|
36
|
+
- continuity and failover design
|
|
37
|
+
- architecture views, dependencies, and decision rationale
|
|
38
|
+
|
|
39
|
+
## Recommended Control Areas
|
|
40
|
+
|
|
41
|
+
### 1. Access Control
|
|
42
|
+
|
|
43
|
+
Implement:
|
|
44
|
+
|
|
45
|
+
- least-privilege IAM roles
|
|
46
|
+
- workload identity / OIDC for CI/CD
|
|
47
|
+
- separation of admin, deployer, runtime, and read-only roles
|
|
48
|
+
- scoped access to model endpoints, vector stores, object stores, and databases
|
|
49
|
+
|
|
50
|
+
Avoid:
|
|
51
|
+
|
|
52
|
+
- shared admin roles
|
|
53
|
+
- long-lived keys
|
|
54
|
+
- wildcard permissions to AI-related data or services
|
|
55
|
+
|
|
56
|
+
### 2. Network Boundaries
|
|
57
|
+
|
|
58
|
+
Implement:
|
|
59
|
+
|
|
60
|
+
- private subnets for sensitive workloads
|
|
61
|
+
- VPC/VNet/VCN peering or private service endpoints
|
|
62
|
+
- restricted egress where feasible
|
|
63
|
+
- ingress limited to approved paths such as ALB, API Gateway, or internal load balancers
|
|
64
|
+
|
|
65
|
+
Use stronger isolation when:
|
|
66
|
+
|
|
67
|
+
- prompts or training data contain sensitive data
|
|
68
|
+
- model outputs affect business-critical actions
|
|
69
|
+
- cross-region or cross-tenant exposure is a concern
|
|
70
|
+
|
|
71
|
+
### 3. Encryption and Secrets
|
|
72
|
+
|
|
73
|
+
Implement:
|
|
74
|
+
|
|
75
|
+
- provider-managed KMS or customer-managed keys where required
|
|
76
|
+
- encrypted storage for object stores, DBs, queues, and state backends
|
|
77
|
+
- TLS for internal and external traffic where supported
|
|
78
|
+
- secrets in cloud secret managers, not in Terraform variables committed to git
|
|
79
|
+
|
|
80
|
+
### 4. Logging and Auditability
|
|
81
|
+
|
|
82
|
+
Implement:
|
|
83
|
+
|
|
84
|
+
- centralized audit logs for IAM, network, storage, and runtime services
|
|
85
|
+
- immutable or retention-locked log targets where needed
|
|
86
|
+
- request tracing across gateways, application services, and data stores
|
|
87
|
+
- Terraform plan/apply evidence in CI/CD logs
|
|
88
|
+
|
|
89
|
+
For AI-related systems, especially capture evidence around:
|
|
90
|
+
|
|
91
|
+
- who changed infrastructure
|
|
92
|
+
- who can access model-serving paths
|
|
93
|
+
- where prompts, embeddings, or outputs are stored
|
|
94
|
+
- whether logging retention matches policy
|
|
95
|
+
|
|
96
|
+
### 5. Monitoring and Alerting
|
|
97
|
+
|
|
98
|
+
Implement:
|
|
99
|
+
|
|
100
|
+
- uptime and health monitoring
|
|
101
|
+
- resource utilization metrics
|
|
102
|
+
- security event alerting
|
|
103
|
+
- data egress anomaly alerting where available
|
|
104
|
+
- alerting for failed backups, replication, or logging pipelines
|
|
105
|
+
|
|
106
|
+
If the AI system is production-critical, recommend:
|
|
107
|
+
|
|
108
|
+
- SLO-aligned alerting
|
|
109
|
+
- model endpoint availability monitoring
|
|
110
|
+
- queue/backlog monitoring for ingestion pipelines
|
|
111
|
+
- vector or search cluster health checks if present
|
|
112
|
+
|
|
113
|
+
### 6. Retention, Backup, and Recovery
|
|
114
|
+
|
|
115
|
+
Implement:
|
|
116
|
+
|
|
117
|
+
- backup policies for stateful systems
|
|
118
|
+
- snapshot retention and lifecycle rules
|
|
119
|
+
- archival tiers for logs and historical data
|
|
120
|
+
- restore procedures and periodic recovery validation
|
|
121
|
+
|
|
122
|
+
For AI systems, think about:
|
|
123
|
+
|
|
124
|
+
- prompt / output retention requirements
|
|
125
|
+
- embedding index rebuild strategy
|
|
126
|
+
- backup of canonical data stores rather than only derived indexes
|
|
127
|
+
|
|
128
|
+
### 7. Environment and Tenant Isolation
|
|
129
|
+
|
|
130
|
+
Implement:
|
|
131
|
+
|
|
132
|
+
- separate environments by account/project/subscription/compartment when practical
|
|
133
|
+
- isolated state backends per environment
|
|
134
|
+
- tagging/labeling for ownership and cost attribution
|
|
135
|
+
- tenant-aware segmentation when AI data is multi-tenant
|
|
136
|
+
|
|
137
|
+
## 8. ISO 22301 Continuity View
|
|
138
|
+
|
|
139
|
+
For infrastructure continuity, recommend improvements around:
|
|
140
|
+
|
|
141
|
+
- critical service identification
|
|
142
|
+
- RTO / RPO assumptions
|
|
143
|
+
- backup scope and retention
|
|
144
|
+
- restore verification
|
|
145
|
+
- redundancy and failover
|
|
146
|
+
- cross-region or cross-zone strategy
|
|
147
|
+
- dependency mapping
|
|
148
|
+
- manual fallback and degraded-mode assumptions
|
|
149
|
+
|
|
150
|
+
Examples of infra-focused suggestions:
|
|
151
|
+
|
|
152
|
+
- multi-AZ or multi-zone deployment for critical paths
|
|
153
|
+
- warm standby or replicated storage for essential services
|
|
154
|
+
- tested snapshot restore workflow
|
|
155
|
+
- documented dependency chain for identity, DNS, storage, and network services
|
|
156
|
+
- alerting for failed replication or backup jobs
|
|
157
|
+
|
|
158
|
+
## 9. ISO/IEC/IEEE 42010 Architecture View
|
|
159
|
+
|
|
160
|
+
Use 42010 as an architecture description guide, not as a control checklist.
|
|
161
|
+
|
|
162
|
+
Capture:
|
|
163
|
+
|
|
164
|
+
- stakeholders
|
|
165
|
+
- concerns
|
|
166
|
+
- architecture views
|
|
167
|
+
- interfaces and dependencies
|
|
168
|
+
- constraints
|
|
169
|
+
- rationale and tradeoffs
|
|
170
|
+
|
|
171
|
+
For infrastructure work, useful views include:
|
|
172
|
+
|
|
173
|
+
- context view
|
|
174
|
+
- deployment / runtime view
|
|
175
|
+
- network boundary view
|
|
176
|
+
- identity and trust view
|
|
177
|
+
- resilience / recovery view
|
|
178
|
+
- observability view
|
|
179
|
+
|
|
180
|
+
Useful documentation prompts:
|
|
181
|
+
|
|
182
|
+
- Who needs this architecture description?
|
|
183
|
+
- What concerns are they trying to answer?
|
|
184
|
+
- Which infrastructure elements and interfaces matter?
|
|
185
|
+
- What tradeoffs were chosen and why?
|
|
186
|
+
- What dependencies create operational risk?
|
|
187
|
+
|
|
188
|
+
## Review Questions
|
|
189
|
+
|
|
190
|
+
When applying ISO/IEC 42001 / ISO 22301 / ISO/IEC/IEEE 42010 thinking, ask:
|
|
191
|
+
|
|
192
|
+
- Can access to AI-related data paths be audited?
|
|
193
|
+
- Are model-serving and data-serving paths protected with least privilege?
|
|
194
|
+
- Are logs centralized, retained, and protected against tampering?
|
|
195
|
+
- Are backups, retention, and restore procedures defined?
|
|
196
|
+
- Are continuity objectives such as RTO / RPO explicit?
|
|
197
|
+
- Are failover paths and critical dependencies visible?
|
|
198
|
+
- Is network exposure minimized?
|
|
199
|
+
- Is CI/CD access ephemeral and traceable?
|
|
200
|
+
- Is there clear ownership for each critical resource?
|
|
201
|
+
- Are the stakeholders, concerns, and architecture rationale documented clearly?
|
|
202
|
+
|
|
203
|
+
## Output Pattern
|
|
204
|
+
|
|
205
|
+
When relevant, add a short section like:
|
|
206
|
+
|
|
207
|
+
```md
|
|
208
|
+
## ISO/IEC 42001 / ISO 22301 / 42010 Notes
|
|
209
|
+
- Access control:
|
|
210
|
+
- Network boundary:
|
|
211
|
+
- Encryption:
|
|
212
|
+
- Logging / auditability:
|
|
213
|
+
- Monitoring / alerting:
|
|
214
|
+
- Backup / retention:
|
|
215
|
+
- Continuity / RTO / RPO:
|
|
216
|
+
- Failover / dependency view:
|
|
217
|
+
- Stakeholders / concerns / views:
|
|
218
|
+
- Gaps:
|
|
219
|
+
- Recommended Terraform changes:
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Guardrails
|
|
223
|
+
|
|
224
|
+
- Do not claim ISO/IEC 42001 compliance from Terraform alone
|
|
225
|
+
- Do not claim ISO 22301 compliance from backup settings alone
|
|
226
|
+
- Do not expand this skill into full AI governance process design
|
|
227
|
+
- Do not turn 42010 into paperwork without architectural value
|
|
228
|
+
- Keep suggestions concrete and infra-implementable
|
|
229
|
+
- If the gap is organizational rather than infrastructural, say so explicitly
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
# Multi-Cloud Resource Examples
|
|
2
|
+
|
|
3
|
+
Detailed HCL examples for AWS, GCP, Azure, and Oracle Cloud.
|
|
4
|
+
|
|
5
|
+
## AWS Examples
|
|
6
|
+
|
|
7
|
+
### ECS Fargate Service
|
|
8
|
+
```hcl
|
|
9
|
+
resource "aws_ecs_service" "api" {
|
|
10
|
+
name = "${local.prefix}-api"
|
|
11
|
+
cluster = aws_ecs_cluster.main.id
|
|
12
|
+
task_definition = aws_ecs_task_definition.api.arn
|
|
13
|
+
desired_count = var.api_min_instances
|
|
14
|
+
launch_type = "FARGATE"
|
|
15
|
+
|
|
16
|
+
network_configuration {
|
|
17
|
+
subnets = aws_subnet.private[*].id
|
|
18
|
+
security_groups = [aws_security_group.api.id]
|
|
19
|
+
assign_public_ip = false
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
load_balancer {
|
|
23
|
+
target_group_arn = aws_lb_target_group.api.arn
|
|
24
|
+
container_name = "api"
|
|
25
|
+
container_port = 8000
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### OIDC for GitHub Actions
|
|
31
|
+
```hcl
|
|
32
|
+
# Since 2023-07 AWS validates GitHub's OIDC IdP via its trusted root CA library,
|
|
33
|
+
# so the thumbprint is ignored — but the AWS provider still requires the field.
|
|
34
|
+
# Fetch it dynamically instead of hardcoding a value that goes stale.
|
|
35
|
+
data "tls_certificate" "github" {
|
|
36
|
+
url = "https://token.actions.githubusercontent.com/.well-known/openid-configuration"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
resource "aws_iam_openid_connect_provider" "github" {
|
|
40
|
+
url = "https://token.actions.githubusercontent.com"
|
|
41
|
+
client_id_list = ["sts.amazonaws.com"]
|
|
42
|
+
thumbprint_list = [data.tls_certificate.github.certificates[0].sha1_fingerprint]
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
resource "aws_iam_role" "github_actions" {
|
|
46
|
+
name = "${local.prefix}-github-actions"
|
|
47
|
+
assume_role_policy = jsonencode({
|
|
48
|
+
Version = "2012-10-17"
|
|
49
|
+
Statement = [{
|
|
50
|
+
Effect = "Allow"
|
|
51
|
+
Principal = { Federated = aws_iam_openid_connect_provider.github.arn }
|
|
52
|
+
Action = "sts:AssumeRoleWithWebIdentity"
|
|
53
|
+
Condition = {
|
|
54
|
+
StringEquals = { "token.actions.githubusercontent.com:aud" = "sts.amazonaws.com" }
|
|
55
|
+
StringLike = { "token.actions.githubusercontent.com:sub" = "repo:${var.github_repo}:*" }
|
|
56
|
+
}
|
|
57
|
+
}]
|
|
58
|
+
})
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Secrets Manager
|
|
63
|
+
```hcl
|
|
64
|
+
data "aws_secretsmanager_secret_version" "db_password" {
|
|
65
|
+
secret_id = "${local.prefix}/db-password"
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## GCP Examples
|
|
70
|
+
|
|
71
|
+
### Cloud Run Service
|
|
72
|
+
```hcl
|
|
73
|
+
resource "google_cloud_run_v2_service" "api" {
|
|
74
|
+
name = "${local.prefix}-api"
|
|
75
|
+
location = var.region
|
|
76
|
+
project = var.project_id
|
|
77
|
+
|
|
78
|
+
template {
|
|
79
|
+
service_account = google_service_account.api.email
|
|
80
|
+
|
|
81
|
+
scaling {
|
|
82
|
+
min_instances = var.api_min_instances
|
|
83
|
+
max_instances = var.api_max_instances
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
containers {
|
|
87
|
+
image = "${var.region}-docker.pkg.dev/${var.project_id}/${local.prefix}/api:${var.image_tag}"
|
|
88
|
+
|
|
89
|
+
resources {
|
|
90
|
+
limits = { cpu = "2", memory = "1Gi" }
|
|
91
|
+
cpu_idle = true
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
ports { container_port = 8000 }
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
vpc_access {
|
|
98
|
+
connector = google_vpc_access_connector.main.id
|
|
99
|
+
egress = "ALL_TRAFFIC"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Workload Identity Federation
|
|
106
|
+
```hcl
|
|
107
|
+
resource "google_iam_workload_identity_pool" "github" {
|
|
108
|
+
workload_identity_pool_id = "github-pool"
|
|
109
|
+
display_name = "GitHub Actions Pool"
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
resource "google_iam_workload_identity_pool_provider" "github" {
|
|
113
|
+
workload_identity_pool_id = google_iam_workload_identity_pool.github.workload_identity_pool_id
|
|
114
|
+
workload_identity_pool_provider_id = "github-provider"
|
|
115
|
+
|
|
116
|
+
attribute_mapping = {
|
|
117
|
+
"google.subject" = "assertion.sub"
|
|
118
|
+
"attribute.repository" = "assertion.repository"
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
# GitHub has a shared issuer: restrict tokens to your organization/repository.
|
|
122
|
+
# Prefer immutable numeric owner/repository IDs when configured by the project.
|
|
123
|
+
attribute_condition = "assertion.repository_owner == '${var.github_org}' && assertion.repository == '${var.github_repo}'"
|
|
124
|
+
oidc {
|
|
125
|
+
issuer_uri = "https://token.actions.githubusercontent.com"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Secret Manager
|
|
131
|
+
```hcl
|
|
132
|
+
data "google_secret_manager_secret_version" "db_password" {
|
|
133
|
+
secret = "db-password"
|
|
134
|
+
version = "latest"
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Azure Examples
|
|
139
|
+
|
|
140
|
+
### Container Apps
|
|
141
|
+
```hcl
|
|
142
|
+
resource "azurerm_container_app" "api" {
|
|
143
|
+
name = "${local.prefix}-api"
|
|
144
|
+
container_app_environment_id = azurerm_container_app_environment.main.id
|
|
145
|
+
resource_group_name = azurerm_resource_group.main.name
|
|
146
|
+
revision_mode = "Single"
|
|
147
|
+
|
|
148
|
+
template {
|
|
149
|
+
min_replicas = var.api_min_instances
|
|
150
|
+
max_replicas = var.api_max_instances
|
|
151
|
+
|
|
152
|
+
container {
|
|
153
|
+
name = "api"
|
|
154
|
+
image = "${azurerm_container_registry.main.login_server}/${local.prefix}/api:${var.image_tag}"
|
|
155
|
+
cpu = 1.0
|
|
156
|
+
memory = "2Gi"
|
|
157
|
+
|
|
158
|
+
env {
|
|
159
|
+
name = "DATABASE_URL"
|
|
160
|
+
value = "postgresql://..."
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Federated Credentials
|
|
168
|
+
```hcl
|
|
169
|
+
# azuread provider >= 3.0: `application_object_id` was removed; use the
|
|
170
|
+
# application's resource ID via `application_id`.
|
|
171
|
+
resource "azuread_application_federated_identity_credential" "github" {
|
|
172
|
+
application_id = azuread_application.github.id
|
|
173
|
+
display_name = "github-actions"
|
|
174
|
+
description = "GitHub Actions OIDC"
|
|
175
|
+
audiences = ["api://AzureADTokenExchange"]
|
|
176
|
+
issuer = "https://token.actions.githubusercontent.com"
|
|
177
|
+
subject = "repo:${var.github_repo}:ref:refs/heads/main"
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Key Vault
|
|
182
|
+
```hcl
|
|
183
|
+
data "azurerm_key_vault_secret" "db_password" {
|
|
184
|
+
name = "db-password"
|
|
185
|
+
key_vault_id = azurerm_key_vault.main.id
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Oracle Cloud Examples
|
|
190
|
+
|
|
191
|
+
### Container Instances
|
|
192
|
+
```hcl
|
|
193
|
+
resource "oci_container_instances_container_instance" "api" {
|
|
194
|
+
compartment_id = var.compartment_id
|
|
195
|
+
display_name = "${local.prefix}-api"
|
|
196
|
+
|
|
197
|
+
containers {
|
|
198
|
+
image_url = "${oci_artifacts_container_repository.api.repository_url}:${var.image_tag}"
|
|
199
|
+
display_name = "api"
|
|
200
|
+
|
|
201
|
+
environment_variables = {
|
|
202
|
+
"DATABASE_URL" = "postgresql://..."
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Vault
|
|
209
|
+
```hcl
|
|
210
|
+
data "oci_secrets_secretbundle" "db_password" {
|
|
211
|
+
secret_id = oci_vault_secret.db_password.id
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Secrets and Terraform State
|
|
216
|
+
|
|
217
|
+
The secret data-source reads above keep credentials out of `.tf` files, but the
|
|
218
|
+
fetched values still persist in plaintext in the plan artifact and state file.
|
|
219
|
+
Always treat state as sensitive (encrypted backend, restricted access), and on
|
|
220
|
+
newer Terraform prefer patterns that never touch state:
|
|
221
|
+
|
|
222
|
+
- **Terraform >= 1.10**: `ephemeral` resources/variables — read secrets without
|
|
223
|
+
persisting them to plan or state.
|
|
224
|
+
- **Terraform >= 1.11**: write-only arguments (`*_wo` + `*_wo_version`) — pass
|
|
225
|
+
secrets into managed resources without storing them in state.
|
|
226
|
+
|
|
227
|
+
```hcl
|
|
228
|
+
# Terraform >= 1.11 example: password never lands in state
|
|
229
|
+
ephemeral "aws_secretsmanager_secret_version" "db_password" {
|
|
230
|
+
secret_id = "${local.prefix}/db-password"
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
resource "aws_db_instance" "main" {
|
|
234
|
+
# ...
|
|
235
|
+
password_wo = ephemeral.aws_secretsmanager_secret_version.db_password.secret_string
|
|
236
|
+
password_wo_version = 1 # bump to rotate
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Provider support for write-only arguments varies by resource; fall back to the
|
|
241
|
+
data-source pattern plus state hygiene when unavailable.
|