关于 specsfy-specialist-ansible
用于编写和审查 Ansible playbook、role 与 inventory 的专业技能,面向自动化主机配置的团队。重点关注幂等性、密钥保护、执行范围控制,以及在共享或生产环境变更前进行验证。
主要功能
- 01幂等 playbook 与 role 设计
- 02检查 inventory 和变量优先级
- 03使用 Vault 或外部查找保护密钥
- 04限制主机执行范围并控制发布
- 05语法、lint、check mode 与重复运行验证
适用场景
- 01使用 Ansible 配置主机
- 02在共享环境执行前审查自动化
- 03在临时环境测试 role 幂等性
- 04分批应用生产环境变更
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ promovaweb/ specsfy --skill specsfy-specialist-ansible安装后在 Claude Code 中输入/specsfy-specialist-ansible确认已加载。
附带文件agents/openai.yamlreferences/standards.md
详细介绍
Ansible
适用场景
- 当项目包含 playbook、role、
inventory、ansible.cfg或 collections 的requirements.yml/galaxy.yml时触发。 - 在针对共享环境运行现有自动化之前,也触发以检查其是否真正 幂等。
- 不要用于编排集群中已容器化的服务;此时应使用
$specsfy-specialist-docker-swarm;这里的 Ansible 用于主机 配置,而非 Swarm 服务编排。 - 当运行 playbook 是部署流水线中的一个步骤时,与
$specsfy-specialist-delivery-engineering配合使用。
工作流
请先说明计划、汇报进度,并在结束时列出已更改的文件和 已执行的验证。对于公开文本,请遵循使用项目适用的 《共享编辑规范》。
- 进行完整发布或部署时,应在
$specsfy-specialist-deploy的协调下工作,并使用编排器已准备好的SEMVER、镜像和清单。 - 在进行任何会产生影响的执行之前,确认主机、组、目标环境、连接 方法,以及确切的主机范围。
- 使用
./deploy check-hosts以表格形式列出所有主机,并在首次执行远程 task 前确认ping模块。使用./deploy sync-keys仅向deploy用户添加公钥,不删除authorized_keys中的现有条目。 - 检查适用的变量优先级(见
references/standards.md中的表格)以及固定的 collections 和ansible-core版本。 - 使用幂等模块和职责单一的 role 来建模期望状态。
- 使用 Ansible Vault 或外部提供方(从受管保险库中 lookup)保护 secrets;切勿以明文形式存放在仓库中。
- 由 Agent 执行时,应在部署编排器下使用
./deploy run --non-interactive。遵循 已提供的文件、脚本、Vault IDs 和原生配置。若没有外部来源,请指导用户 在人工操作的终端中运行./deploy configure-vault。不要通过对话索取或读取密码。./deploy run命令仍需手动执行,输入内容会被隐藏。 - 验证语法、
ansible-lint、check mode 和 diff,且不要在 输出中泄露 secrets。 - 在可丢弃环境中测试 role,并重复相同的执行,以证明第二次运行不会报告
changed。 - 在生产环境应用时,使用与变更范围相符的序列化(
serial)、限制(--limit) 和停止规则(max_fail_percentage/any_errors_fatal)。
规范
- 创建单独的预检,以在执行会写入的 play 前检查控制器版本、目标系统、Docker 访问权限、manager 角色、registry 登录状态、collections、不可变镜像和 Docker Secrets。
- 当 stack 使用 Cloudflare Tunnel 时,从
vault_cloudflare_tunnel_token创建cloudflare_tunnel_token,并设置no_log: true。stack 只接收 Docker Secret 的名称。 - 将带版本控制的 manifests 复制到主机上的稳定目录,用
docker stack config验证每个 manifest,并按依赖顺序发布 stacks。 - 每次发布后,查询副本,直到达到收敛状态;如果超过限定的重试次数,则以错误结束。不能仅凭 deploy 模块的返回结果就判定成功。
- 如实处理 check mode:检查类 tasks 可以使用
check_mode: false;会更改状态的 tasks 应跳过或支持模拟。即使不部署 stacks,预检也必须有用。 - 使用 FQCN(
ansible.builtin.copy,而不是copy)和声明式模块;只要存在等效的幂等模块,就应避免使用shell/command。 - 为 tasks 和 handlers 起可执行的名称(
name:描述产生的效果,而不是模块);只有 task 确实更改状态时才通知 handler。 - 将
defaults/main.yml(由 role 的使用者配置)、vars/main.yml(内部使用,不应被覆盖)和 secrets(Vault 或外部 lookup)分别放在不同文件中。 - 在
requirements.yml中固定 collections 的版本,并在更新前验证其与已安装ansible-core的兼容性矩阵。 - 仅在需要准确表达命令语义时使用
changed_when/failed_when;绝不能用它们掩盖真实故障,也不能让总是报告变更的shell/command假装具有幂等性。 - 限制权限(仅在需要的 task 上使用
become),并对任何处理 secret 的 task 使用no_log: true,即使该值看起来在日志中无害。 - 当 task 会在主机之间产生副作用时(例如某项服务一次只能重启一台主机),不要依赖偶然的主机顺序或默认并行执行;应在这些情况下显式使用
serial和throttle。
反模式
-
使用不带
creates、removes或显式changed_when的shell/command:即使最终状态完全相同,该 task 每次都会报告changed;这会妨碍在一次执行中判断“实际发生了哪些变化”,并掩盖非幂等的自动化。 -
无条件通知 handler(不在仅于状态发生变化时触发
notify的 task 中):每次执行都会重启服务,包括没有任何变化时,从而造成不必要的服务中断。 -
仅通过通用
group_vars解析生产/预发布环境变量,而不检查实际优先级:命令行中的-e或更具体的host_vars可能会悄无声息地覆盖预期值。 -
Vault 意外解密后被提交,或将 secret 插入
debug:/日志中但未使用no_log:即使源文件已正确加密,secret 仍会泄露到 Git 历史记录或执行输出中。 ## 验证 -
在进行任何实际应用之前,运行
ansible-playbook --syntax-check、ansible-lint和--check --diff(检查模式),并确认 diff 不会暴露机密。 -
在同一目标上连续运行两次:第二次不应报告任何 task 为
changed;这是验证幂等性的实际依据,而不是目视检查代码。 -
测试 handlers(服务确实会在应该重启时重启)、templates(按环境正确渲染)以及部分失败(某台主机在批次中途失败时,
any_errors_fatal、max_fail_percentage的行为符合预期)。 -
在进行任何远程变更之前,明确确认所用的 inventory 和
--limit;绝不能默默默认“在所有主机上运行”。 -
没有完成上述连续两次运行和检查模式验证,就不要声称某个 role“幂等”或“安全”;阅读 playbook 不能代替在可丢弃环境中实际运行。
## 相关 Skills
-
$specsfy-specialist-server-report通过 Ansible 只读采集日志、服务和磁盘使用情况,并按主机生成报告。 -
$specsfy-specialist-deploy协调完整的服务器自动化;此 skill 负责 roles 和 Ansible playbook。 -
$specsfy-specialist-versioning使SEMVER与自动化所传输的镜像和清单保持一致。 -
当由 Ansible 配置的主机加入 Swarm 集群时使用
$specsfy-specialist-docker-swarm;Ansible 准备节点,Swarm 在其中编排服务。 -
当 playbook 执行是包含环境间晋级的流水线步骤时,使用
$specsfy-specialist-delivery-engineering。 -
对于机密管理、凭证轮换和已配置主机加固的审查,使用
$specsfy-specialist-application-security。 -
在应用自动化之前,使用
$specsfy-specialist-debian-server配置 APT、SSH、sysctl、systemd、防火墙和 Docker Engine。
请阅读 references/standards.md,了解 roles 结构、变量优先级、幂等性、运维安全和测试命令;其中包含 Ansible 官方文档的来源。