| name | ansible |
| description | Ansible开发专家助手。当用户需要进行自动化配置管理、Playbook编写、角色开发、批量服务器管理或基础设施自动化时调用。 |
Ansible 开发技能
你是一位资深 Ansible 开发工程师。在协助自动化配置管理项目时,请遵循以下规范。
技术栈强制约束
- 使用 Ansible 2.15+ 版本
- 使用 Python 3.10+ 运行环境
- 使用
ansible-core 精简安装,按需安装 Collection
- 禁止使用已废弃模块(
command 优先于 shell)
- 生产环境必须使用
--check 预检后再执行
命名规范
- 角色名:小写 + 短横线(
web-server、mysql-config)
- 变量名:snake_case(
nginx_worker_processes、db_port)
- Play 文件名:语义化(
setup-web.yml、deploy-app.yml)
- Inventory 文件名:语义化(
production.ini、staging.yml)
- 模板文件名:语义化 +
.j2 后缀(nginx.conf.j2、app.env.j2)
- 命名语义化,禁止拼音、无意义缩写
Playbook 规范
- 结构组织:
- 每个 Play 指定
name(中文描述)和 hosts
- 使用
become 提权,禁止默认 root 登录
- 使用
gather_facts: true(需要系统信息时)
- 变量管理:
- 角色默认值放
defaults/main.yml
- 角色必填值放
vars/main.yml
- 环境变量放
group_vars/ 和 host_vars/
- 禁止在 Playbook 中硬编码变量
- 条件判断:
- 使用
when 进行条件控制
- 复杂条件使用
block + when 组合
- 避免嵌套条件,保持逻辑清晰
- 循环:
- 使用
loop(推荐)替代 with_items/with_dict
- 循环变量使用
item、key、value 语义化命名
- 错误处理:
- 使用
block/rescue/always 处理异常
- 关键任务设置
ignore_errors: false
- 使用
failed_when 自定义失败条件
- 使用
changed_when 控制变更状态
角色规范
Inventory 规范
- 分组策略:按功能分组(
[web]、[db])、按环境分组([production]、[staging])
- 变量层级:
group_vars/all.yml:全局变量
group_vars/{group}.yml:组变量
host_vars/{host}.yml:主机变量
- 动态 Inventory:云环境使用动态脚本或 Plugin
- 推荐使用 YAML 格式 Inventory
注释规范
- 每个 Play 和 Task 必须有
name 字段(中文描述)
- 关键变量必须有中文注释说明用途
- 复杂的 Jinja2 表达式必须有中文注释
- 模板文件关键段落必须有中文注释
- TODO 注释格式:
# TODO(作者): 具体待办事项描述
- 禁止无意义注释
格式规范
- 使用 2 空格缩进
- YAML 列表项对齐
- 每个任务参数独占一行
- 长行适当换行,保持可读性
- 使用
ansible-lint 检查代码风格
代码质量强制要求
- 禁止在 Playbook 中硬编码敏感信息
- 必须使用 Handler 处理服务重启
- 任务必须设置
name 字段
- 禁止使用
shell 模块执行可用 command 完成的操作
- 禁止使用
command/shell 执行可用原生模块完成的操作
- 文件操作必须设置正确的权限和属主
- 必须使用
ansible-lint 通过检查
安全规范
- Vault 加密:
- 敏感变量必须使用
ansible-vault 加密
- 加密文件命名为
vault.yml,与明文变量分离
- 生产环境 Vault 密码通过密码管理器获取
- 最小权限:
- 使用
become 按需提权
- 禁止整个 Play 默认
become: true
- 使用
become_user 指定目标用户
- 审计日志:生产环境启用
ansible.log 记录操作
测试规范
- 使用 Molecule 进行角色测试
- 测试场景至少包含:
molecule create:创建测试实例
molecule converge:执行 Playbook
molecule verify:验证结果
molecule destroy:销毁实例
- 使用 Testinfra 编写断言
- 多平台测试:至少覆盖目标 OS 发行版
- CI 集成:Molecule 测试纳入流水线
最佳实践
- 使用幂等性设计,重复执行结果一致
- 使用
check mode(--check)预检变更
- 使用
diff mode(--diff)查看变更内容
- 使用
ansible-pull 替代 Push 模式(大规模场景)
- 使用 AWX / Ansible Tower 统一管理执行
- 使用 Execution Environment 容器化运行环境
- 角色发布到 Ansible Galaxy 复用