1. 书籍定位
- 面向读者:已具备 Ansible 与 Python 基础、希望深入定制 Ansible 的高级用户。
- 核心价值:系统讲解如何扩展 Ansible,覆盖 10% 未被官方直接满足的场景,实现“基础设施即代码(IAC)”的深度落地。
2. 结构速览
全书 7 章,层层递进:
| 章节 |
关键词 |
目标 |
| 1. Getting Started |
架构 & 扩展点 |
建立整体认知 |
| 2-3. Modules |
编写、调试、Dry-Run |
掌握自定义模块 |
| 4. API |
Python API |
程序化驱动 Ansible |
| 5. Plugins |
7 类插件 |
深度定制生命周期 |
| 6. Integration |
配置 & 社区贡献 |
分享与协作 |
| 7. Master Guide |
场景实战 |
综合案例落地 |
3. 主要内容提炼
3.1 为什么要扩展 Ansible
- 官方缺口:90% 需求开箱即用,剩余 10% 需自行填补。
- 组织诉求:
- 统一抽象:降低团队学习成本,沉淀公司级“可复用模块/插件”。
- 场景覆盖:硬件审计、多云编排、堡垒机代理、报表生成等。
3.2 四大扩展点
| 扩展点 |
能力 |
典型场景 |
| 自定义 Facts |
采集主机额外信息 |
硬件序列号、业务元数据 |
| 模块 Modules |
执行任意逻辑 |
调用内部 API、软件安装 |
| 插件 Plugins |
生命周期 Hook |
日志、变量解析、连接方式 |
| Python API |
程序化调用 |
动态库存、CI/CD 集成 |
3.3 模块开发实战
- 语言:Bash、Python 均可;Python 推荐用
AnsibleModule 样板。
- 关键特性:
- 支持
check_mode(Dry-Run)。
- 参数校验、错误处理、JSON 输出。
- 文档自动生成(
DOCUMENTATION / EXAMPLES 变量)。
- 案例:
- 用
dmidecode 模块批量收集 BIOS、CPU、主板信息并落盘或送 Elasticsearch。
- 解析复杂参数(字典、列表)实现多环境差异化配置。
3.4 插件深度剖析
- Lookup:读取文件、CSV、INI、DNS 等外部数据源。
- Callback:事件钩子,实时收集结果 → 写日志、Excel 报表、推送到 Elasticsearch。
- Connection:自定义 SSH 代理、Docker、chroot 等连接方式。
- Filter:Jinja2 扩展,如版本比对、IP 校验。
- Vars:动态注入主机/组变量。
- 开发要诀:继承指定基类(如
CallbackModule)、放置目录合规(callback_plugins/ 等)。
3.5 Python API 与自动化
- Runner:单模块执行,适合脚本化运维。
- Playbook:整本剧本执行,支持并发、回调、统计。
- 动态库存:结合 Jinja2 模板 + API 实现“云实例拉起即纳管”。
- 堡垒机穿透:通过
ssh.cfg + ansible.cfg 多级跳转,保障生产安全。
3.6 社区协作与发布
- Galaxy:
- 用 GitHub 仓库分享 Role,打 Tag 做版本管理。
- README、依赖、变量前缀、测试 4 大最佳实践。
- 官方仓库:
- 模块 →
ansible-modules-extras(新)→ ansible-modules-core(核心)。
- 插件 → 直接提 PR 到主仓库。
- 沟通渠道:IRC #ansible、邮件列表(project / devel / announce)。
3.7 实战场景串烧(第 7 章)
- 多环境部署:同一 Playbook,用 Tag 切换 Dev/QE/Prod 配置。
- 角色分层:common → db → web,解耦复用。
- 硬件审计流水线:
- 自定义模块采集 → Callback 写 Elasticsearch → Kibana 可视化。
- 报表自动化:Callback 生成 Excel,含资产清单、部署结果,一键交领导。
4. 阅读收益
- 技术:掌握从模块、插件到二次开发的全链路技能。
- 流程:学会将个人脚本升级为社区共享组件。
- 思维:把“写脚本”升级为“设计可扩展、可演进的自动化平台”。
5. 一句话总结
Extending Ansible 不仅教你“如何让 Ansible 做更多事”,更示范了如何把个人经验沉淀为团队乃至社区的基础设施生产力。