brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
config-as-code-specAI Workspace Infra Config-as-Code and Ansible standards. Use when changing playbooks, roles, inventories, variables, templates, scripts, migration/ restore logic, or CI/CD delivery of Ansible configuration in playbooks, platform-ops-toolkit, or observability.svc.plus. Covers CMDB-first delivery, Vault/OIDC secrets, idempotency, safe cutovers, and IaC handof…
Independent GitHub snapshot · Automated classification · Original documentation governs
本规范适用于 playbooks/ 下的 Ansible 剧本、角色、inventory、变量、模板、脚本及其 CI/CD 调用方式,也适用于调用这些能力的 platform-ops-toolkit 与 observability.svc.plus。目标是让配置交付可追溯、可复用、幂等安全、与 IaC 一致并且密钥零落盘。
“MUST/必须”为强制要求;“SHOULD/应当”为默认要求。偏离 MUST 或 SHOULD 时,必须在 PR 中说明原因、风险和补偿措施。
先阅读 AI Workspace Infra Repository Map,再确认改动属于 playbooks 的执行层、platform-ops-toolkit 的编排层,还是 observability.svc.plus 的独立部署层。不得把主机配置塞进 Terraform、GitOps 或 artifacts 仓库。
roles/。defaults/、tasks/、handlers/、templates/、files/、vars/、meta/、README.md。默认变量放 defaults/main.yml;不可被调用方覆盖的内部常量才放 vars/main.yml。inventory/terraform_cmdb.py,其数据来自 Terraform 输出的 cmdb.json。legacy 或 manual 路径,不得作为 CI/CD 或常规交付默认清单。新机或资源变更后的交付 MUST 在连接前执行并记录:
ansible-inventory -i inventory/terraform_cmdb.py --host <hostname>
ansible-inventory -i inventory/terraform_cmdb.py --graph
ansible -i inventory/terraform_cmdb.py <hostname> -m ping
检查 ansible_host 是否来自当前 Terraform 输出、业务组/环境组是否正确、cmdb_instance_id 是否匹配云侧实例、所需 host_vars 是否完整,以及目标选择器是否只包含预期主机。CMDB 缺失、为空、字段不完整或目标不存在时,动态 inventory MUST 失败退出,不得静默返回空 inventory。
resources/<project>/<env>/<provider>/*.yaml 是非敏感的期望状态声明;它描述项目、环境、服务商和资源参数,不承载密码、Token、私钥或运行时配置。IaC 渲染器从该路径读取声明并输出 CMDB,Ansible 只消费 CMDB 与 Vault,不得反向修改或在 playbooks/ 中维护第二份拓扑。<project>/<env>/<provider> 元组、提交 SHA 和状态标识。环境或服务商改变时创建新的声明路径和独立 state,禁止通过默认值把 UAT、生产或不同云账户混到同一清单。github-actions-<repo>-sit、-uat、-prod。VAULT_ENV_PATH)派生;不得在 playbook、role 或 workflow 中分散硬编码 sit、uat、prod 路径。127.0.0.1)。凭证、目标主机、环境路径和依赖服务端点等必填值缺失时 MUST 通过 assert 或 fail 明确失败;绝对禁止在 Playbook、Ansible defaults/main.yml、模板或角色中硬编码生产域名、IP 或生产数据库 DSN 作为退回 fallback。模板中的依赖服务 URL 必须根据当前环境/主机的核心网络域名配置动态派生。no_log: true,但不得因此隐藏安全的控制流诊断;应暴露状态码、服务状态和失败前置条件,并遮蔽秘密值。git filter-repo 清理历史并记录影响范围;只删除文件不算完成处置。files/ 的可执行脚本中,或实现为 Ansible module,不得内嵌在 task/workflow 中。install、configure、validate,必要时增加 rollback。assert 校验;变量名以角色或领域前缀命名,避免泛化的 port、host、token。groups 与 hostvars 派生,不维护第二份静态节点清单。ansible.builtin.* 全限定模块、显式 changed_when/failed_when,并保持迁移/备份/恢复可重复和可重启。v0.6.0), or pull from controlled internal artifact repositories (GHCR, Vault, or mirror stores).daily-build-YYYY.MM.DD) MUST NOT be hardcoded as default download URLs in deployment playbooks without artifact existence verification or explicit mirror fallbacks.ansible.builtin.get_url to fetch binaries MUST check HTTP status / artifact availability, provide clear failure messaging when release assets are missing (avoiding ambiguous 404 errors), and support alternative mirror/fallback URLs where appropriate.删除、清库、覆盖配置、重建集群、DNS 切换和源机清理等破坏性操作 MUST:使用显式布尔确认变量;任务名标明影响;先做范围断言和备份/快照检查;默认不可执行。
replacement VPS 的交付顺序 MUST 为:备份或逻辑迁移 → 新主机容量与健康检查 → Terraform state 接管 → 刷新 cmdb.json/inventory → Ansible 部署 → 服务健康检查。DNS 切换和旧机删除是最后的独立确认阶段。
当目标磁盘小于源盘时,整机快照恢复不可行;应使用经过验证的数据库、Vault 和业务文件级备份/恢复,不得反复执行必然失败的快照恢复。迁移剧本应保持 source/target 阶段边界,恢复失败时保留回滚点。
环境只能由 Git 事件决定:
| Git event | Environment |
|---|---|
pull_request | sit |
push to main or release/* | uat |
vMAJOR.MINOR.PATCH tag | prod |
.github/scripts/ 的可执行脚本中。inventory/terraform_cmdb.py,不得依赖 runner 的默认 ansible.cfg 或静态生产 inventory。ansible-playbook --syntax-check;部署后执行服务健康检查。合并前 MUST 通过:YAML 语法与 Ansible --syntax-check;修改角色的 README 和变量说明同步更新;新增目标选择器的 CMDB 验证;明文凭证、静态生产节点地址和 Vault password file 检查;legacy/manual inventory 回归确认。服务变更至少有一次可验证 health check;破坏性/迁移变更提供备份、回滚和演练说明。
PR 描述 MUST 包含交付结果与影响范围、Issue/变更单或基础设施变更链接、目标环境与 CMDB 主机/组选择方式、验证命令和结果、回滚方式,以及任何偏离本规范的原因、风险和补偿措施。
inventory.ini 或其他静态生产 inventory。.vault_pass.txt、长期 Vault Token 或 GitHub Secret 保存业务凭证。