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 做更多事”,更示范了如何把个人经验沉淀为团队乃至社区的基础设施生产力。