agentic-dev 0.2.11 → 0.2.13

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 (276) hide show
  1. package/README.md +72 -54
  2. package/bin/agentic-dev.mjs +162 -11
  3. package/lib/github.mjs +246 -0
  4. package/lib/orchestration-assets.mjs +249 -0
  5. package/lib/scaffold.mjs +89 -0
  6. package/package.json +8 -19
  7. package/.dockerignore +0 -8
  8. package/.env.example +0 -50
  9. package/.gitignore +0 -16
  10. package/AGENTS.md +0 -86
  11. package/SDD_SKILL.md +0 -589
  12. package/compose.yml +0 -206
  13. package/infra/compose/.env.dev.example +0 -28
  14. package/infra/compose/.env.prod.example +0 -29
  15. package/infra/compose/README.md +0 -35
  16. package/infra/compose/dev.yml +0 -125
  17. package/infra/compose/prod.yml +0 -126
  18. package/infra/terraform/README.md +0 -34
  19. package/infra/terraform/aws/data/.terraform.lock.hcl +0 -25
  20. package/infra/terraform/aws/data/README.md +0 -18
  21. package/infra/terraform/aws/data/main.tf +0 -147
  22. package/infra/terraform/aws/data/outputs.tf +0 -14
  23. package/infra/terraform/aws/data/variables.tf +0 -57
  24. package/infra/terraform/aws/data/versions.tf +0 -10
  25. package/infra/terraform/aws/domain/.terraform.lock.hcl +0 -25
  26. package/infra/terraform/aws/domain/README.md +0 -20
  27. package/infra/terraform/aws/domain/env/dev.tfvars.example +0 -6
  28. package/infra/terraform/aws/domain/env/prod.tfvars.example +0 -7
  29. package/infra/terraform/aws/domain/main.tf +0 -149
  30. package/infra/terraform/aws/domain/outputs.tf +0 -29
  31. package/infra/terraform/aws/domain/variables.tf +0 -58
  32. package/infra/terraform/aws/domain/versions.tf +0 -10
  33. package/infra/terraform/openstack/README.md +0 -38
  34. package/infra/terraform/openstack/dev/.terraform.lock.hcl +0 -24
  35. package/infra/terraform/openstack/dev/README.md +0 -18
  36. package/infra/terraform/openstack/dev/main.tf +0 -49
  37. package/infra/terraform/openstack/dev/providers.tf +0 -15
  38. package/infra/terraform/openstack/dev/terraform.tfvars.example +0 -54
  39. package/infra/terraform/openstack/dev/variables.tf +0 -210
  40. package/infra/terraform/openstack/dev/versions.tf +0 -10
  41. package/infra/terraform/openstack/modules/environment_host/main.tf +0 -143
  42. package/infra/terraform/openstack/modules/environment_host/outputs.tf +0 -25
  43. package/infra/terraform/openstack/modules/environment_host/templates/docker-host-user-data.sh.tftpl +0 -40
  44. package/infra/terraform/openstack/modules/environment_host/variables.tf +0 -145
  45. package/infra/terraform/openstack/modules/environment_host/versions.tf +0 -7
  46. package/infra/terraform/openstack/prod/.terraform.lock.hcl +0 -24
  47. package/infra/terraform/openstack/prod/README.md +0 -18
  48. package/infra/terraform/openstack/prod/main.tf +0 -49
  49. package/infra/terraform/openstack/prod/providers.tf +0 -15
  50. package/infra/terraform/openstack/prod/terraform.tfvars.example +0 -55
  51. package/infra/terraform/openstack/prod/variables.tf +0 -210
  52. package/infra/terraform/openstack/prod/versions.tf +0 -10
  53. package/infra/terraform/openstack/server/.terraform.lock.hcl +0 -45
  54. package/infra/terraform/openstack/server/README.md +0 -47
  55. package/infra/terraform/openstack/server/main.tf +0 -161
  56. package/infra/terraform/openstack/server/outputs.tf +0 -30
  57. package/infra/terraform/openstack/server/providers.tf +0 -30
  58. package/infra/terraform/openstack/server/templates/server-user-data.sh.tftpl +0 -50
  59. package/infra/terraform/openstack/server/variables.tf +0 -233
  60. package/infra/terraform/openstack/server/zz_aspace.auto.tfvars.example.json +0 -29
  61. package/pnpm-workspace.yaml +0 -2
  62. package/scripts/dev/audit_sdd_build_ast.py +0 -277
  63. package/sdd/01_planning/01_feature/INDEX.md +0 -16
  64. package/sdd/01_planning/01_feature/README.md +0 -76
  65. package/sdd/01_planning/01_feature/alerts_feature_spec.md +0 -55
  66. package/sdd/01_planning/01_feature/auth_feature_spec.md +0 -57
  67. package/sdd/01_planning/01_feature/catalog_feature_spec.md +0 -61
  68. package/sdd/01_planning/01_feature/fulfillment_feature_spec.md +0 -58
  69. package/sdd/01_planning/01_feature/health_feature_spec.md +0 -52
  70. package/sdd/01_planning/01_feature/inventory_feature_spec.md +0 -60
  71. package/sdd/01_planning/01_feature/order_feature_spec.md +0 -63
  72. package/sdd/01_planning/01_feature/shipping_feature_spec.md +0 -55
  73. package/sdd/01_planning/01_feature/support_feature_spec.md +0 -53
  74. package/sdd/01_planning/01_feature/user_feature_spec.md +0 -54
  75. package/sdd/01_planning/02_screen/INDEX.md +0 -13
  76. package/sdd/01_planning/02_screen/README.md +0 -41
  77. package/sdd/01_planning/02_screen/admin_screen_spec.pdf +0 -0
  78. package/sdd/01_planning/02_screen/assets/README.md +0 -16
  79. package/sdd/01_planning/02_screen/assets/example/README.md +0 -13
  80. package/sdd/01_planning/02_screen/landing_screen_spec.pdf +0 -0
  81. package/sdd/01_planning/02_screen/mobile_screen_spec.pdf +0 -0
  82. package/sdd/01_planning/02_screen/web_screen_spec.pdf +0 -0
  83. package/sdd/01_planning/03_architecture/INDEX.md +0 -9
  84. package/sdd/01_planning/03_architecture/README.md +0 -25
  85. package/sdd/01_planning/03_architecture/architecture_document_structure.md +0 -77
  86. package/sdd/01_planning/03_architecture/backend/README.md +0 -10
  87. package/sdd/01_planning/03_architecture/frontend/README.md +0 -12
  88. package/sdd/01_planning/03_architecture/infra/README.md +0 -10
  89. package/sdd/01_planning/03_architecture/tech-research/README.md +0 -4
  90. package/sdd/01_planning/03_architecture/templates_system_architecture.md +0 -84
  91. package/sdd/01_planning/04_data/INDEX.md +0 -4
  92. package/sdd/01_planning/04_data/README.md +0 -10
  93. package/sdd/01_planning/04_data/templates_data_modeling.md +0 -119
  94. package/sdd/01_planning/05_api/README.md +0 -12
  95. package/sdd/01_planning/05_api/templates_api_contract.md +0 -90
  96. package/sdd/01_planning/06_iac/README.md +0 -11
  97. package/sdd/01_planning/06_iac/templates_runtime_and_cicd_baseline.md +0 -46
  98. package/sdd/01_planning/07_integration/README.md +0 -11
  99. package/sdd/01_planning/07_integration/templates_frontend_api_integration.md +0 -46
  100. package/sdd/01_planning/08_nonfunctional/README.md +0 -7
  101. package/sdd/01_planning/09_security/README.md +0 -7
  102. package/sdd/01_planning/10_test/README.md +0 -12
  103. package/sdd/01_planning/10_test/templates_test_strategy.md +0 -60
  104. package/sdd/01_planning/INDEX.md +0 -19
  105. package/sdd/01_planning/README.md +0 -17
  106. package/sdd/02_plan/01_feature/README.md +0 -34
  107. package/sdd/02_plan/01_feature/_feature_todo_template.md +0 -29
  108. package/sdd/02_plan/02_screen/INDEX.md +0 -19
  109. package/sdd/02_plan/02_screen/README.md +0 -39
  110. package/sdd/02_plan/02_screen/_screen_todo_template.md +0 -60
  111. package/sdd/02_plan/03_architecture/README.md +0 -23
  112. package/sdd/02_plan/03_architecture/architecture_document_governance.md +0 -40
  113. package/sdd/02_plan/03_architecture/build_ast_runtime_tree_governance.md +0 -53
  114. package/sdd/02_plan/03_architecture/repository_governance.md +0 -39
  115. package/sdd/02_plan/03_architecture/runtime_and_structure_governance.md +0 -38
  116. package/sdd/02_plan/03_architecture/templates-hexagonal-template-architecture.md +0 -9
  117. package/sdd/02_plan/03_architecture/toolchain_governance.md +0 -98
  118. package/sdd/02_plan/04_data/README.md +0 -5
  119. package/sdd/02_plan/05_api/README.md +0 -5
  120. package/sdd/02_plan/06_iac/README.md +0 -11
  121. package/sdd/02_plan/06_iac/dev_runtime_delivery.md +0 -36
  122. package/sdd/02_plan/06_iac/template_runtime_delivery.md +0 -50
  123. package/sdd/02_plan/07_integration/README.md +0 -5
  124. package/sdd/02_plan/07_integration/frontend_live_integration.md +0 -31
  125. package/sdd/02_plan/08_nonfunctional/README.md +0 -5
  126. package/sdd/02_plan/08_nonfunctional/repository_hygiene.md +0 -26
  127. package/sdd/02_plan/09_security/README.md +0 -5
  128. package/sdd/02_plan/10_test/README.md +0 -11
  129. package/sdd/02_plan/10_test/regression_verification.md +0 -39
  130. package/sdd/02_plan/10_test/templates/README.md +0 -8
  131. package/sdd/02_plan/10_test/templates/ui_parity_web_contract.template.yaml +0 -23
  132. package/sdd/02_plan/10_test/verification_strategy.md +0 -43
  133. package/sdd/02_plan/99_generated/from_planning/ui_parity/.gitkeep +0 -1
  134. package/sdd/02_plan/README.md +0 -40
  135. package/sdd/03_build/01_feature/README.md +0 -20
  136. package/sdd/03_build/01_feature/domain/README.md +0 -3
  137. package/sdd/03_build/01_feature/domain/account_and_access.md +0 -20
  138. package/sdd/03_build/01_feature/domain/catalog_and_inventory.md +0 -20
  139. package/sdd/03_build/01_feature/domain/ordering_and_fulfillment.md +0 -21
  140. package/sdd/03_build/01_feature/domain/support_and_observability.md +0 -21
  141. package/sdd/03_build/01_feature/domain_surfaces.md +0 -28
  142. package/sdd/03_build/01_feature/service/README.md +0 -3
  143. package/sdd/03_build/01_feature/service/admin_surface.md +0 -15
  144. package/sdd/03_build/01_feature/service/landing_surface.md +0 -13
  145. package/sdd/03_build/01_feature/service/mobile_surface.md +0 -14
  146. package/sdd/03_build/01_feature/service/web_surface.md +0 -14
  147. package/sdd/03_build/02_screen/README.md +0 -25
  148. package/sdd/03_build/02_screen/_screen_build_template.md +0 -26
  149. package/sdd/03_build/02_screen/admin/README.md +0 -5
  150. package/sdd/03_build/02_screen/landing/README.md +0 -5
  151. package/sdd/03_build/02_screen/mobile/README.md +0 -5
  152. package/sdd/03_build/02_screen/web/README.md +0 -5
  153. package/sdd/03_build/03_architecture/README.md +0 -10
  154. package/sdd/03_build/03_architecture/architecture_document_governance.md +0 -30
  155. package/sdd/03_build/03_architecture/build_ast_runtime_tree_governance.md +0 -24
  156. package/sdd/03_build/03_architecture/repository_governance.md +0 -18
  157. package/sdd/03_build/03_architecture/toolchain_governance.md +0 -36
  158. package/sdd/03_build/06_iac/README.md +0 -3
  159. package/sdd/03_build/06_iac/dev_runtime_delivery.md +0 -10
  160. package/sdd/03_build/06_iac/template_runtime_delivery.md +0 -49
  161. package/sdd/03_build/07_integration/README.md +0 -3
  162. package/sdd/03_build/07_integration/frontend_live_integration.md +0 -11
  163. package/sdd/03_build/08_nonfunctional/README.md +0 -3
  164. package/sdd/03_build/08_nonfunctional/repository_hygiene.md +0 -10
  165. package/sdd/03_build/10_test/README.md +0 -9
  166. package/sdd/03_build/10_test/regression_verification.md +0 -16
  167. package/sdd/03_build/10_test/verification_harness.md +0 -11
  168. package/sdd/03_build/README.md +0 -35
  169. package/sdd/03_verify/01_feature/README.md +0 -5
  170. package/sdd/03_verify/01_feature/domain_verification.md +0 -14
  171. package/sdd/03_verify/01_feature/service_verification.md +0 -22
  172. package/sdd/03_verify/02_screen/README.md +0 -6
  173. package/sdd/03_verify/02_screen/_screen_verify_template.md +0 -20
  174. package/sdd/03_verify/02_screen/admin/README.md +0 -4
  175. package/sdd/03_verify/02_screen/landing/README.md +0 -4
  176. package/sdd/03_verify/02_screen/mobile/README.md +0 -4
  177. package/sdd/03_verify/02_screen/web/README.md +0 -4
  178. package/sdd/03_verify/03_architecture/README.md +0 -10
  179. package/sdd/03_verify/03_architecture/architecture_document_governance.md +0 -15
  180. package/sdd/03_verify/03_architecture/build_ast_runtime_tree_governance.md +0 -28
  181. package/sdd/03_verify/03_architecture/repository_governance.md +0 -16
  182. package/sdd/03_verify/03_architecture/toolchain_governance.md +0 -58
  183. package/sdd/03_verify/06_iac/README.md +0 -3
  184. package/sdd/03_verify/06_iac/dev_runtime_delivery.md +0 -10
  185. package/sdd/03_verify/06_iac/template_runtime_delivery.md +0 -42
  186. package/sdd/03_verify/07_integration/README.md +0 -3
  187. package/sdd/03_verify/07_integration/frontend_live_integration.md +0 -16
  188. package/sdd/03_verify/08_nonfunctional/README.md +0 -3
  189. package/sdd/03_verify/08_nonfunctional/repository_hygiene.md +0 -14
  190. package/sdd/03_verify/10_test/README.md +0 -9
  191. package/sdd/03_verify/10_test/regression_verification.md +0 -16
  192. package/sdd/03_verify/10_test/ui_parity/README.md +0 -4
  193. package/sdd/03_verify/10_test/ui_parity/loop_runs/.gitkeep +0 -0
  194. package/sdd/03_verify/10_test/ui_parity/reference/.gitkeep +0 -0
  195. package/sdd/03_verify/10_test/ui_parity/staged_runs/.gitkeep +0 -0
  196. package/sdd/03_verify/10_test/verification_harness.md +0 -17
  197. package/sdd/03_verify/README.md +0 -22
  198. package/sdd/05_operate/01_runbooks/.gitkeep +0 -1
  199. package/sdd/05_operate/01_runbooks/README.md +0 -4
  200. package/sdd/05_operate/02_delivery_status/README.md +0 -4
  201. package/sdd/05_operate/02_delivery_status/service_status.md +0 -16
  202. package/sdd/05_operate/README.md +0 -12
  203. package/sdd/99_toolchain/01_automation/.gitkeep +0 -1
  204. package/sdd/99_toolchain/01_automation/README.md +0 -76
  205. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_proof_results.py +0 -132
  206. package/sdd/99_toolchain/01_automation/agentic-dev/analyze_route_gap.py +0 -85
  207. package/sdd/99_toolchain/01_automation/agentic-dev/assets/repo-contract.template.json +0 -75
  208. package/sdd/99_toolchain/01_automation/agentic-dev/bootstrap_frontend_parity.sh +0 -84
  209. package/sdd/99_toolchain/01_automation/agentic-dev/init_frontend_parity.sh +0 -33
  210. package/sdd/99_toolchain/01_automation/agentic-dev/init_repo_contract.sh +0 -51
  211. package/sdd/99_toolchain/01_automation/agentic-dev/repo-contract.json +0 -76
  212. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_frontend_target.py +0 -52
  213. package/sdd/99_toolchain/01_automation/agentic-dev/resolve_repo_contract.py +0 -56
  214. package/sdd/99_toolchain/01_automation/agentic-dev/run_frontend_target.sh +0 -100
  215. package/sdd/99_toolchain/01_automation/agentic-dev/run_repo_phase.sh +0 -140
  216. package/sdd/99_toolchain/01_automation/agentic-dev/validate_json_schema.py +0 -39
  217. package/sdd/99_toolchain/01_automation/agentic-parity-harness-design.md +0 -291
  218. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/dashboard.png +0 -0
  219. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/login.png +0 -0
  220. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/queue.png +0 -0
  221. package/sdd/99_toolchain/01_automation/assets/admin_screen_capture/support.png +0 -0
  222. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/home.png +0 -0
  223. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/login.png +0 -0
  224. package/sdd/99_toolchain/01_automation/assets/landing_screen_capture/workspace.png +0 -0
  225. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/dashboard.png +0 -0
  226. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/fulfillment.png +0 -0
  227. package/sdd/99_toolchain/01_automation/assets/mobile_screen_capture/login.png +0 -0
  228. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/dashboard.png +0 -0
  229. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/login.png +0 -0
  230. package/sdd/99_toolchain/01_automation/assets/web_screen_capture/orders.png +0 -0
  231. package/sdd/99_toolchain/01_automation/build_asset_recipes.py +0 -10
  232. package/sdd/99_toolchain/01_automation/build_screen_spec_pdf.py +0 -427
  233. package/sdd/99_toolchain/01_automation/capture_screen_assets.mjs +0 -148
  234. package/sdd/99_toolchain/01_automation/harness-layout.md +0 -34
  235. package/sdd/99_toolchain/01_automation/parity-execution-tooling-design.md +0 -319
  236. package/sdd/99_toolchain/01_automation/playwright_exactness_manifest.py +0 -21
  237. package/sdd/99_toolchain/01_automation/run_playwright_exactness.py +0 -87
  238. package/sdd/99_toolchain/01_automation/screen_spec_manifest.py +0 -321
  239. package/sdd/99_toolchain/01_automation/spec_asset_builder.py +0 -274
  240. package/sdd/99_toolchain/01_automation/ui-contract-projection.md +0 -79
  241. package/sdd/99_toolchain/01_automation/ui-parity/README.md +0 -60
  242. package/sdd/99_toolchain/01_automation/ui-parity/cli/extract-reference-pages.mjs +0 -2
  243. package/sdd/99_toolchain/01_automation/ui-parity/cli/materialize-reference-assets.mjs +0 -58
  244. package/sdd/99_toolchain/01_automation/ui-parity/cli/normalize-reference-assets.mjs +0 -2
  245. package/sdd/99_toolchain/01_automation/ui-parity/cli/route-gap-report.mjs +0 -187
  246. package/sdd/99_toolchain/01_automation/ui-parity/cli/run-proof.mjs +0 -50
  247. package/sdd/99_toolchain/01_automation/ui-parity/cli/scaffold-contract.mjs +0 -62
  248. package/sdd/99_toolchain/01_automation/ui-parity/cli/upload-parity1.mjs +0 -2
  249. package/sdd/99_toolchain/01_automation/ui-parity/contracts/collector-metadata.schema.json +0 -33
  250. package/sdd/99_toolchain/01_automation/ui-parity/contracts/proof-result.schema.json +0 -76
  251. package/sdd/99_toolchain/01_automation/ui-parity/contracts/route-gap-report.schema.json +0 -95
  252. package/sdd/99_toolchain/01_automation/ui-parity/core/capture-runner.mjs +0 -55
  253. package/sdd/99_toolchain/01_automation/ui-parity/core/load-adapter.mjs +0 -25
  254. package/sdd/99_toolchain/01_automation/ui-parity/core/load-contract.mjs +0 -81
  255. package/sdd/99_toolchain/01_automation/ui-parity/core/paths.mjs +0 -23
  256. package/sdd/99_toolchain/01_automation/ui-parity/core/proof-runner.mjs +0 -255
  257. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-artifact-layout.md +0 -23
  258. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-proof-interface.md +0 -60
  259. package/sdd/99_toolchain/01_automation/ui-parity/interfaces/ui-parity-route-gap-interface.md +0 -82
  260. package/sdd/99_toolchain/01_automation/ui-parity/runtime/playwright-runtime.mjs +0 -16
  261. package/sdd/99_toolchain/01_automation/ui-parity/runtime/static-runtime.mjs +0 -6
  262. package/sdd/99_toolchain/02_policies/.gitkeep +0 -1
  263. package/sdd/99_toolchain/02_policies/build-ast-governance-policy.md +0 -22
  264. package/sdd/99_toolchain/02_policies/compose-runtime-baseline-policy.md +0 -24
  265. package/sdd/99_toolchain/02_policies/convention-storage-policy.md +0 -26
  266. package/sdd/99_toolchain/02_policies/main-push-before-dev-deploy-policy.md +0 -27
  267. package/sdd/99_toolchain/02_policies/regression-verification-policy.md +0 -22
  268. package/sdd/99_toolchain/03_templates/.gitkeep +0 -1
  269. package/sdd/99_toolchain/03_templates/asset_recipe_manifest.example.py +0 -38
  270. package/sdd/99_toolchain/03_templates/generated_assets/README.md +0 -11
  271. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-lockup.svg +0 -3
  272. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-mark.svg +0 -3
  273. package/sdd/99_toolchain/03_templates/generated_assets/example-brand-wordmark.svg +0 -3
  274. package/sdd/99_toolchain/03_templates/playwright_exactness_manifest.example.py +0 -21
  275. package/sdd/99_toolchain/README.md +0 -23
  276. package/sdd/README.md +0 -21
@@ -1,49 +0,0 @@
1
- module "environment_host" {
2
- source = "../modules/environment_host"
3
-
4
- availability_zone = var.availability_zone
5
- create_network = var.create_network
6
- network_name = var.network_name
7
- subnet_name = var.subnet_name
8
- subnet_cidr = var.subnet_cidr
9
- create_router = var.create_router
10
- router_name = var.router_name
11
- external_network_id = var.external_network_id
12
- network_id = var.network_id
13
- subnet_id = var.subnet_id
14
- service_allowed_cidrs = var.service_allowed_cidrs
15
- ssh_allowed_cidrs = var.ssh_allowed_cidrs
16
- name = var.name
17
- image_name = var.image_name
18
- flavor_name = var.flavor_name
19
- keypair_name = var.keypair_name
20
- assign_floating_ip = var.assign_floating_ip
21
- floating_ip_pool = var.floating_ip_pool
22
- exposed_tcp_ports = var.exposed_tcp_ports
23
- repo_clone_url = var.repo_clone_url
24
- repo_ref = var.repo_ref
25
- compose_file = "infra/compose/prod.yml"
26
- compose_env_filename = ".env.prod"
27
- compose_env_content = var.compose_env_content
28
- deploy_compose_on_boot = var.deploy_compose_on_boot
29
- }
30
-
31
- output "network_id" {
32
- description = "Effective network id used by the PROD host"
33
- value = module.environment_host.network_id
34
- }
35
-
36
- output "subnet_id" {
37
- description = "Effective subnet id used by the PROD host"
38
- value = module.environment_host.subnet_id
39
- }
40
-
41
- output "router_id" {
42
- description = "Created router id when create_router=true"
43
- value = module.environment_host.router_id
44
- }
45
-
46
- output "instance" {
47
- description = "PROD host summary"
48
- value = module.environment_host.instance
49
- }
@@ -1,15 +0,0 @@
1
- provider "openstack" {
2
- auth_url = var.auth_url
3
- region = var.region
4
- endpoint_type = var.interface
5
- insecure = var.insecure
6
-
7
- user_name = var.auth_type == "password" ? var.username : null
8
- password = var.auth_type == "password" ? var.password : null
9
- tenant_name = var.auth_type == "password" ? var.project_name : null
10
- user_domain_name = var.auth_type == "password" ? var.user_domain_name : null
11
- project_domain_name = var.auth_type == "password" ? var.project_domain_name : null
12
-
13
- application_credential_id = var.auth_type == "application_credential" ? var.application_credential_id : null
14
- application_credential_secret = var.auth_type == "application_credential" ? var.application_credential_secret : null
15
- }
@@ -1,55 +0,0 @@
1
- auth_url = "https://keystone.example.com:5000/v3"
2
- region = "RegionOne"
3
- interface = "public"
4
- auth_type = "password"
5
- username = "prodops"
6
- password = "change-me"
7
- project_name = "service-prod"
8
- user_domain_name = "Default"
9
- project_domain_name = "Default"
10
- insecure = false
11
-
12
- create_network = true
13
- network_name = "templates-prod-net"
14
- subnet_name = "templates-prod-subnet"
15
- subnet_cidr = "10.250.20.0/24"
16
- create_router = true
17
- router_name = "templates-prod-router"
18
- external_network_id = "public"
19
-
20
- service_allowed_cidrs = ["0.0.0.0/0"]
21
- ssh_allowed_cidrs = ["203.0.113.10/32"]
22
-
23
- name = "templates-prod"
24
- image_name = "ubuntu-22.04"
25
- flavor_name = "m1.large"
26
- keypair_name = "prodops"
27
- assign_floating_ip = true
28
- floating_ip_pool = "public"
29
- repo_clone_url = "git@github.com:your-org/templates.git"
30
- repo_ref = "main"
31
- deploy_compose_on_boot = true
32
- compose_env_content = <<-ENV
33
- PROD_POSTGRES_DB=template
34
- PROD_POSTGRES_USER=template
35
- PROD_POSTGRES_PASSWORD=template
36
- PROD_POSTGRES_PORT=25432
37
- PROD_SERVER_HTTP_PORT=28000
38
- PROD_SERVER_WORKERS=4
39
- PROD_SERVER_APP_NAME=Template Server PROD
40
- PROD_SERVER_ENVIRONMENT=production
41
- PROD_SERVER_API_PREFIX=/api/v1
42
- PROD_SERVER_DATABASE_BACKEND=postgres
43
- PROD_SERVER_POSTGRES_URL=postgresql+psycopg://template:template@postgres:5432/template
44
- PROD_SERVER_JWT_SECRET=change-me
45
- PROD_SERVER_ACCESS_TOKEN_TTL_MINUTES=120
46
- PROD_SERVER_CORS_ORIGINS=https://landing.example.com,https://web.example.com,https://mobile.example.com,https://admin.example.com
47
- PROD_CLIENT_LANDING_PORT=23000
48
- PROD_CLIENT_WEB_PORT=23001
49
- PROD_CLIENT_MOBILE_PORT=23002
50
- PROD_CLIENT_ADMIN_PORT=24000
51
- PROD_CLIENT_LANDING_VITE_API_BASE_URL=https://api.example.com/api/v1
52
- PROD_CLIENT_WEB_VITE_API_BASE_URL=https://api.example.com/api/v1
53
- PROD_CLIENT_MOBILE_VITE_API_BASE_URL=https://api.example.com/api/v1
54
- PROD_CLIENT_ADMIN_VITE_API_BASE_URL=https://api.example.com/api/v1
55
- ENV
@@ -1,210 +0,0 @@
1
- variable "auth_url" {
2
- description = "OpenStack Keystone auth URL"
3
- type = string
4
- }
5
-
6
- variable "region" {
7
- description = "OpenStack region name"
8
- type = string
9
- default = "RegionOne"
10
- }
11
-
12
- variable "interface" {
13
- description = "OpenStack endpoint interface"
14
- type = string
15
- default = "public"
16
- }
17
-
18
- variable "auth_type" {
19
- description = "OpenStack auth type (password or application_credential)"
20
- type = string
21
- default = "password"
22
- }
23
-
24
- variable "username" {
25
- description = "OpenStack username"
26
- type = string
27
- default = ""
28
- }
29
-
30
- variable "password" {
31
- description = "OpenStack password"
32
- type = string
33
- default = ""
34
- sensitive = true
35
- }
36
-
37
- variable "project_name" {
38
- description = "OpenStack project name"
39
- type = string
40
- default = ""
41
- }
42
-
43
- variable "user_domain_name" {
44
- description = "OpenStack user domain"
45
- type = string
46
- default = "Default"
47
- }
48
-
49
- variable "project_domain_name" {
50
- description = "OpenStack project domain"
51
- type = string
52
- default = "Default"
53
- }
54
-
55
- variable "application_credential_id" {
56
- description = "OpenStack application credential id"
57
- type = string
58
- default = ""
59
- }
60
-
61
- variable "application_credential_secret" {
62
- description = "OpenStack application credential secret"
63
- type = string
64
- default = ""
65
- sensitive = true
66
- }
67
-
68
- variable "insecure" {
69
- description = "Disable TLS certificate validation"
70
- type = bool
71
- default = false
72
- }
73
-
74
- variable "availability_zone" {
75
- description = "Optional availability zone for the PROD host"
76
- type = string
77
- default = ""
78
- }
79
-
80
- variable "create_network" {
81
- description = "Create a dedicated PROD network and subnet"
82
- type = bool
83
- default = true
84
- }
85
-
86
- variable "network_name" {
87
- description = "PROD network name"
88
- type = string
89
- default = "templates-prod-net"
90
- }
91
-
92
- variable "subnet_name" {
93
- description = "PROD subnet name"
94
- type = string
95
- default = "templates-prod-subnet"
96
- }
97
-
98
- variable "subnet_cidr" {
99
- description = "PROD subnet CIDR"
100
- type = string
101
- default = "10.250.20.0/24"
102
- }
103
-
104
- variable "create_router" {
105
- description = "Create a router and attach the created subnet to the external network"
106
- type = bool
107
- default = true
108
- }
109
-
110
- variable "router_name" {
111
- description = "PROD router name"
112
- type = string
113
- default = "templates-prod-router"
114
- }
115
-
116
- variable "external_network_id" {
117
- description = "External network id used by the router gateway"
118
- type = string
119
- default = ""
120
- }
121
-
122
- variable "network_id" {
123
- description = "Existing network id to reuse when create_network=false"
124
- type = string
125
- default = ""
126
- }
127
-
128
- variable "subnet_id" {
129
- description = "Existing subnet id to reuse when create_network=false"
130
- type = string
131
- default = ""
132
- }
133
-
134
- variable "service_allowed_cidrs" {
135
- description = "CIDR list allowed to reach published application ports"
136
- type = list(string)
137
- default = ["0.0.0.0/0"]
138
- }
139
-
140
- variable "ssh_allowed_cidrs" {
141
- description = "CIDR list allowed to reach SSH on the PROD host"
142
- type = list(string)
143
- default = ["0.0.0.0/0"]
144
- }
145
-
146
- variable "name" {
147
- description = "PROD host name"
148
- type = string
149
- default = "templates-prod"
150
- }
151
-
152
- variable "image_name" {
153
- description = "OpenStack image name"
154
- type = string
155
- default = "ubuntu-22.04"
156
- }
157
-
158
- variable "flavor_name" {
159
- description = "OpenStack flavor name"
160
- type = string
161
- default = "m1.large"
162
- }
163
-
164
- variable "keypair_name" {
165
- description = "OpenStack keypair name"
166
- type = string
167
- default = ""
168
- }
169
-
170
- variable "assign_floating_ip" {
171
- description = "Allocate and associate a floating IP"
172
- type = bool
173
- default = false
174
- }
175
-
176
- variable "floating_ip_pool" {
177
- description = "Floating IP pool name"
178
- type = string
179
- default = ""
180
- }
181
-
182
- variable "exposed_tcp_ports" {
183
- description = "TCP ports exposed by the PROD stack"
184
- type = list(number)
185
- default = [28000, 23000, 23001, 23002, 24000]
186
- }
187
-
188
- variable "repo_clone_url" {
189
- description = "Optional repository clone URL for boot-time deployment"
190
- type = string
191
- default = ""
192
- }
193
-
194
- variable "repo_ref" {
195
- description = "Git ref used for boot-time deployment"
196
- type = string
197
- default = "main"
198
- }
199
-
200
- variable "compose_env_content" {
201
- description = "Full .env.prod content used for compose boot deployment"
202
- type = string
203
- default = ""
204
- }
205
-
206
- variable "deploy_compose_on_boot" {
207
- description = "Clone the repo and run docker compose on first boot"
208
- type = bool
209
- default = false
210
- }
@@ -1,10 +0,0 @@
1
- terraform {
2
- required_version = ">= 1.6.0"
3
-
4
- required_providers {
5
- openstack = {
6
- source = "terraform-provider-openstack/openstack"
7
- version = "~> 2.1"
8
- }
9
- }
10
- }
@@ -1,45 +0,0 @@
1
- # This file is maintained automatically by "terraform init".
2
- # Manual edits may be lost in future updates.
3
-
4
- provider "registry.terraform.io/hashicorp/random" {
5
- version = "3.8.1"
6
- constraints = ">= 3.6.0"
7
- hashes = [
8
- "h1:Eexl06+6J+s75uD46+WnZtpJZYRVUMB0AiuPBifK6Jc=",
9
- "zh:08dd03b918c7b55713026037c5400c48af5b9f468f483463321bd18e17b907b4",
10
- "zh:0eee654a5542dc1d41920bbf2419032d6f0d5625b03bd81339e5b33394a3e0ae",
11
- "zh:229665ddf060aa0ed315597908483eee5b818a17d09b6417a0f52fd9405c4f57",
12
- "zh:2469d2e48f28076254a2a3fc327f184914566d9e40c5780b8d96ebf7205f8bc0",
13
- "zh:37d7eb334d9561f335e748280f5535a384a88675af9a9eac439d4cfd663bcb66",
14
- "zh:741101426a2f2c52dee37122f0f4a2f2d6af6d852cb1db634480a86398fa3511",
15
- "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
16
- "zh:a902473f08ef8df62cfe6116bd6c157070a93f66622384300de235a533e9d4a9",
17
- "zh:b85c511a23e57a2147355932b3b6dce2a11e856b941165793a0c3d7578d94d05",
18
- "zh:c5172226d18eaac95b1daac80172287b69d4ce32750c82ad77fa0768be4ea4b8",
19
- "zh:dab4434dba34aad569b0bc243c2d3f3ff86dd7740def373f2a49816bd2ff819b",
20
- "zh:f49fd62aa8c5525a5c17abd51e27ca5e213881d58882fd42fec4a545b53c9699",
21
- ]
22
- }
23
-
24
- provider "registry.terraform.io/terraform-provider-openstack/openstack" {
25
- version = "3.4.0"
26
- constraints = ">= 3.3.0"
27
- hashes = [
28
- "h1:MVSoVvhjbu7s1pfYfsiYED8A++XfAoyOlSX1x9PW68E=",
29
- "zh:11b3c88e24197a29b13cf5ab41771944bd16707b561645323e8cbb4f1da00b7b",
30
- "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7",
31
- "zh:2dc60dbbbb822fbb1e7b17e3b89e3e6a7a8fe54a716d4477d2fa40f836c4de0f",
32
- "zh:68f851e333f0ab2367e9b2680739d47e4151ca9f803934ef265f6fa70a28e6e0",
33
- "zh:6995b0bcae5a291d7b0a4d3a5df109eb97f8d1d34be6eb27768fe29b5e0d8def",
34
- "zh:7b68bf81891a0445c543629d4d160226a6f2d5e8e5ee4baf21e0221412437d17",
35
- "zh:8f117b8b17280598a92c6202b183a77168fe573397cfb597b9c2028da281846d",
36
- "zh:b0a23b990eb9260e9616fd8471f11b37485f92df0e5eef46cd286f87396b0e0a",
37
- "zh:baa5052ab3207f3a996c1fd715935d79a4e1c57d3d24e3c549b6c20ea9307e38",
38
- "zh:c012cbda058aa7b76b718074fd73829ecd4009ad98e3dafe496e5f26099625c0",
39
- "zh:c1c95e5dbe546a935a62c63814aef04718b58dd4258e5da40d681b43322924e9",
40
- "zh:c720bdbdf432041f99572bac40d24659239b989cbf1540f92ebb441900ac8bae",
41
- "zh:c92ac802a3dd1abbf9c9ccf0aba1f261fe9f8c2e7fafc196c7119b73c25a0772",
42
- "zh:fd4faf25ee72acef4ab12c93ea9c7a5ccb41315e8851609e08b37d3c91ea6584",
43
- "zh:ff347392412fc7950635e2c1c5bb878d88b661c1c5ba052edd290d971a14028f",
44
- ]
45
- }
@@ -1,47 +0,0 @@
1
- # Template OpenStack Server Terraform
2
-
3
- 이 스택은 template repo의 backend compute를 Aspace/OpenStack 경로로 올리기 위한 generic baseline이다.
4
-
5
- 구성 범위:
6
-
7
- - `Neutron`: app network + subnet + router
8
- - `Nova`: backend compute instance 1대
9
- - `Floating IP`: backend public reachability
10
- - `Security Group`: backend ingress / SSH ingress
11
-
12
- 핵심 계약:
13
-
14
- - `terraform apply` 한 번으로 backend compute 인스턴스가 올라간다.
15
- - repo/source 정보(`service_name`, `phase`, `backend_repo_url`, `backend_repo_ref`)는 aspace repo onboarding auto tfvars가 채운다.
16
- - OpenStack provider 인증값(`auth_url`, `username`, `password`, `project_name` 등)은 aspace 또는 openrc에서 주입한다.
17
- - application environment는 `backend_env` map으로 주입하고, template는 최소 generic env만 기본값으로 제공한다.
18
-
19
- 권장 aspace 등록:
20
-
21
- ```yaml
22
- deployments:
23
- - phase_pattern: dev
24
- engine: terraform
25
- path: infra/terraform/openstack/server
26
- stack: infra/terraform/openstack/server
27
- lifecycle_profile: stateful
28
- tf_vars:
29
- external_network_name: public
30
- backend_image_name: ubuntu-24.04-noble-amd64
31
- instance_flavor_name: m1.small
32
- backend_ingress_cidrs: ["0.0.0.0/0"]
33
- ssh_ingress_cidrs: ["0.0.0.0/0"]
34
- ssh_keypair_name: template-dev-terminal
35
- ssh_public_key: "ssh-ed25519 AAAA..."
36
- prechecks:
37
- - terraform fmt -check -recursive
38
- - terraform validate
39
- auto_approve: true
40
- ```
41
-
42
- 수동 검증:
43
-
44
- ```bash
45
- terraform -chdir=infra/terraform/openstack/server init -backend=false
46
- terraform -chdir=infra/terraform/openstack/server validate
47
- ```
@@ -1,161 +0,0 @@
1
- resource "random_password" "jwt" {
2
- count = var.jwt_secret_key == "" ? 1 : 0
3
- length = 40
4
- special = false
5
- }
6
-
7
- locals {
8
- phase = lower(var.phase)
9
- stack_name = "${var.service_name}-${local.phase}"
10
- app_network_name = var.app_network_name != "" ? var.app_network_name : "${local.stack_name}-net"
11
- app_subnet_name = var.app_subnet_name != "" ? var.app_subnet_name : "${local.stack_name}-subnet"
12
- effective_jwt_secret = var.jwt_secret_key != "" ? var.jwt_secret_key : random_password.jwt[0].result
13
- power_state = lower(var.desired_state) == "stopped" ? "shutoff" : "active"
14
- runtime_root = "/opt/${var.service_name}"
15
- common_tags = merge(
16
- {
17
- Name = local.stack_name
18
- Service = var.service_name
19
- Phase = local.phase
20
- ManagedBy = "terraform"
21
- ManagedVia = "aspace"
22
- Cloud = "openstack"
23
- },
24
- var.tags,
25
- )
26
- backend_env_lines = concat(
27
- [
28
- "APP_NAME=${var.application_name}",
29
- "DEBUG=${local.phase == "prod" ? "false" : "true"}",
30
- "JWT_SECRET_KEY=${local.effective_jwt_secret}"
31
- ],
32
- [for key, value in var.backend_env : "${key}=${value}"]
33
- )
34
- }
35
-
36
- data "openstack_images_image_v2" "backend" {
37
- name = var.backend_image_name
38
- most_recent = true
39
- }
40
-
41
- data "openstack_compute_flavor_v2" "backend" {
42
- name = var.instance_flavor_name
43
- }
44
-
45
- data "openstack_networking_network_v2" "external" {
46
- name = var.external_network_name
47
- external = true
48
- }
49
-
50
- resource "openstack_networking_network_v2" "app" {
51
- name = local.app_network_name
52
- admin_state_up = true
53
- }
54
-
55
- resource "openstack_networking_subnet_v2" "app" {
56
- name = local.app_subnet_name
57
- network_id = openstack_networking_network_v2.app.id
58
- cidr = var.app_subnet_cidr
59
- ip_version = 4
60
- dns_nameservers = var.dns_nameservers
61
- }
62
-
63
- resource "openstack_networking_router_v2" "app" {
64
- name = "${local.stack_name}-router"
65
- external_network_id = data.openstack_networking_network_v2.external.id
66
- enable_snat = true
67
- }
68
-
69
- resource "openstack_networking_router_interface_v2" "app" {
70
- router_id = openstack_networking_router_v2.app.id
71
- subnet_id = openstack_networking_subnet_v2.app.id
72
- }
73
-
74
- resource "openstack_networking_secgroup_v2" "backend" {
75
- name = "${local.stack_name}-backend"
76
- description = "Template backend ingress"
77
- delete_default_rules = true
78
- }
79
-
80
- resource "openstack_networking_secgroup_rule_v2" "backend_http" {
81
- for_each = toset(var.backend_ingress_cidrs)
82
- direction = "ingress"
83
- ethertype = "IPv4"
84
- protocol = "tcp"
85
- port_range_min = var.backend_port
86
- port_range_max = var.backend_port
87
- remote_ip_prefix = each.value
88
- security_group_id = openstack_networking_secgroup_v2.backend.id
89
- }
90
-
91
- resource "openstack_networking_secgroup_rule_v2" "backend_ssh" {
92
- for_each = toset(var.ssh_ingress_cidrs)
93
- direction = "ingress"
94
- ethertype = "IPv4"
95
- protocol = "tcp"
96
- port_range_min = 22
97
- port_range_max = 22
98
- remote_ip_prefix = each.value
99
- security_group_id = openstack_networking_secgroup_v2.backend.id
100
- }
101
-
102
- resource "openstack_networking_secgroup_rule_v2" "backend_egress" {
103
- direction = "egress"
104
- ethertype = "IPv4"
105
- remote_ip_prefix = "0.0.0.0/0"
106
- security_group_id = openstack_networking_secgroup_v2.backend.id
107
- }
108
-
109
- resource "openstack_compute_keypair_v2" "terminal" {
110
- count = trimspace(var.ssh_public_key) != "" ? 1 : 0
111
- name = trimspace(var.ssh_keypair_name) != "" ? trimspace(var.ssh_keypair_name) : "${local.stack_name}-terminal"
112
- public_key = trimspace(var.ssh_public_key)
113
- }
114
-
115
- resource "openstack_networking_port_v2" "backend" {
116
- name = "${local.stack_name}-backend"
117
- network_id = openstack_networking_network_v2.app.id
118
- security_group_ids = [openstack_networking_secgroup_v2.backend.id]
119
-
120
- fixed_ip {
121
- subnet_id = openstack_networking_subnet_v2.app.id
122
- }
123
- }
124
-
125
- resource "openstack_compute_instance_v2" "backend" {
126
- name = "${local.stack_name}-backend"
127
- image_id = data.openstack_images_image_v2.backend.id
128
- flavor_id = data.openstack_compute_flavor_v2.backend.id
129
- key_pair = length(openstack_compute_keypair_v2.terminal) > 0 ? openstack_compute_keypair_v2.terminal[0].name : null
130
- config_drive = true
131
- user_data = templatefile("${path.module}/templates/server-user-data.sh.tftpl", {
132
- runtime_root = local.runtime_root
133
- service_name = var.service_name
134
- backend_container_image = var.backend_container_image
135
- backend_container_name = var.backend_container_name
136
- backend_port = var.backend_port
137
- backend_repo_url = var.backend_repo_url
138
- backend_repo_ref = var.backend_repo_ref
139
- backend_repo_subdir = var.backend_repo_subdir
140
- backend_env_text = join("\n", local.backend_env_lines)
141
- })
142
- power_state = local.power_state
143
- metadata = local.common_tags
144
-
145
- network {
146
- port = openstack_networking_port_v2.backend.id
147
- }
148
-
149
- depends_on = [openstack_networking_router_interface_v2.app]
150
- }
151
-
152
- resource "openstack_networking_floatingip_v2" "backend" {
153
- count = var.associate_floating_ip ? 1 : 0
154
- pool = var.external_network_name
155
- }
156
-
157
- resource "openstack_networking_floatingip_associate_v2" "backend" {
158
- count = var.associate_floating_ip ? 1 : 0
159
- floating_ip = openstack_networking_floatingip_v2.backend[0].address
160
- port_id = openstack_networking_port_v2.backend.id
161
- }
@@ -1,30 +0,0 @@
1
- output "backend_instance_id" {
2
- value = openstack_compute_instance_v2.backend.id
3
- description = "Server compute instance id."
4
- }
5
-
6
- output "backend_fixed_ip" {
7
- value = try(openstack_networking_port_v2.backend.all_fixed_ips[0], "")
8
- description = "Server fixed IP address."
9
- }
10
-
11
- output "backend_public_ip" {
12
- value = try(openstack_networking_floatingip_v2.backend[0].address, "")
13
- description = "Server floating IP."
14
- }
15
-
16
- output "backend_origin_url" {
17
- value = try(openstack_networking_floatingip_v2.backend[0].address, "") != "" ? "http://${openstack_networking_floatingip_v2.backend[0].address}:${var.backend_port}" : "http://${try(openstack_networking_port_v2.backend.all_fixed_ips[0], "")}:${var.backend_port}"
18
- description = "Reachable backend origin URL."
19
- }
20
-
21
- output "app_network_id" {
22
- value = openstack_networking_network_v2.app.id
23
- description = "App network id."
24
- }
25
-
26
- output "generated_jwt_secret" {
27
- value = local.effective_jwt_secret
28
- description = "Effective JWT secret."
29
- sensitive = true
30
- }
@@ -1,30 +0,0 @@
1
- terraform {
2
- required_version = ">= 1.5.0"
3
-
4
- required_providers {
5
- openstack = {
6
- source = "terraform-provider-openstack/openstack"
7
- version = ">= 3.3.0"
8
- }
9
- random = {
10
- source = "hashicorp/random"
11
- version = ">= 3.6.0"
12
- }
13
- }
14
- }
15
-
16
- provider "openstack" {
17
- auth_url = var.auth_url
18
- region = var.region
19
- endpoint_type = var.interface
20
- insecure = var.insecure
21
-
22
- user_name = var.auth_type == "password" ? var.username : null
23
- password = var.auth_type == "password" ? var.password : null
24
- tenant_name = var.auth_type == "password" ? var.project_name : null
25
- user_domain_name = var.auth_type == "password" ? var.user_domain_name : null
26
- project_domain_name = var.auth_type == "password" ? var.project_domain_name : null
27
-
28
- application_credential_id = var.auth_type == "application_credential" ? var.application_credential_id : null
29
- application_credential_secret = var.auth_type == "application_credential" ? var.application_credential_secret : null
30
- }