第1章 Ansible 1.1源码剖析 1
0 h: n$ n2 |: A; B2 n0 L! [. y( V1.1 Ansible 1.1的环境搭建 1
. L! j& Z/ x% R+ F& |4 f+ l1.1.1 Ansible 1.1测试环境搭建 1
# k9 u8 @* \: V# y) `1.1.2 Ansible 1.1调试环境搭建 5, H0 |+ H5 D$ G/ X* t
1.2 Ansible 1.1的基本使用 9
* I# z' q6 }- i7 G. A1.2.1 Ansible 1.1模块说明 9
; H- O9 ~* W0 X) }) Q' p& S- R1.2.2 Ansible 1.1的常用模块 10
$ e# x# Z2 R% f; ]+ r1.2.3 编写Ansible 1.1的Playbook 29* D% |$ q8 n- |; k
1.2.4 小结 316 d) j( O# w6 B# A( A) ~# b
1.3 Ansible 1.1源码概览 31, j, s I0 f0 L- E4 {' `' h2 `
1.3.1 非源码文件与目录 31
/ w; S( N+ S1 e' t% H0 i1.3.2 源码文件 32+ ]; C" Q: l9 e& c
1.3.3 小结 45; r1 R8 M) P8 N; F8 `
1.4 Ansible 1.1底层通信代码解析 46
( ]; p% Q+ t: G7 F- i$ z" g; R1 a1.4.1 本地连接插件 460 d& N2 |2 L5 \1 }/ i5 d
1.4.2 基于paramiko模块连接插件 53
* N! s/ ?4 j" I' {, g1.4.3 基于SSH命令连接插件 61
1 Q& X7 A7 m* j+ p% C( \7 z- k1.4.4 小结 68: ^$ x3 T% p2 f8 m1 ?- q9 l) ^" r
1.5 ping模块的执行流程 68* K: _( ^. s! ]+ l$ w
1.5.1 ansible命令 68* N: e( I6 v2 s0 g
1.5.2 runner目录下的核心源码 71
0 `+ _5 @+ Z6 c5 t; A9 H$ ?6 T1.5.3 ping模块的运行流程 84) W9 y/ E9 c) W: Z2 A3 ?& M' m9 B d
1.6 copy模块的执行流程 944 s9 `7 \; v+ `) a% u. u
1.6.1 copy模块的动作插件 94, |! B( x# h( t0 s* m
1.6.2 copy模块遗留问题的解决 96: N1 Z- ?2 A( f! @3 L& x- [! S( X
1.6.3 Ansible模块的核心步骤小结 991 k8 }8 W" G! x
1.7 本章小结 100
# v1 X1 R9 I- U b第2章 Ansible 1.9.6源码剖析 101$ L1 V1 t5 W' }: R. u: r e% s
2.1 Ansible 1.1和Ansible 1.9.6源码对比 101
+ E( r( J, ~, Q1 N, e2.2 快速上手Ansible 1.9.6 102. \$ f( U( f& {( J. f9 x6 i
2.2.1 搭建Ansible 1.9.6测试环境 102! E1 }, s- P% F, L
2.2.2 Ansible 1.9.6中的部分模块剖析 103
" a% r$ Z3 J' v8 W9 L+ [2.2.3 Ansible 1.9.6中Playbook的常用语法 125, _( P, b; V" F. y3 I
2.3 再探Ansible 1.9.6源码 134; W% C9 j- D. d% J% l4 u
2.3.1 cache模块 134
) \- f) g1 S$ q: R6 H8 K2 l9 d) C6 p2 X/ a8 k2.3.2 shell_plugins插件 138$ C$ p5 H' P. E) d) |* {8 x6 _0 W
2.3.3 filter_plugins插件 142
/ ?$ ]( Z; A1 B/ L% R7 u2.3.4 lookup_plugins插件 145
3 i0 f h% K& \2.3.5 辅助模块代码 148
1 e9 A( Y( C3 T, H) k4 G2 K2.4 追踪Ansible 1.9.6的模块运行机制 155
8 W0 W- u3 ]/ A- W& h2.4.1 inventory目录 155# e3 {+ I. L8 F1 j# d9 z5 l$ F
2.4.2 Runner类及其方法 157" i! }; q! A! ]! s) ~
2.5 解析Playbook的运行逻辑 171: R( ?- _ Q2 j+ y3 k! ?* Z
2.5.1 准备测试的Playbook项目 171% N. N0 W; n$ Q
2.5.2 相关类基础 1746 P( g; s$ c8 b5 ?/ t( R
2.5.3 追踪ansible-playbook命令的运行流程 187
C( t r& p' B) T; A( U# A2.6 本章小结 2003 b& C8 r' j {* B% U7 q
第3章 Ansible 2常用模块与Playbook语法 2015 K. f) O& E7 w; o3 ^
3.1 快速上手Ansible 2 201. ^& W% l4 l! I
3.2 Ansible 2的命令行使用 203
: R* y7 U+ G1 m# A$ j% ?3.2.1 Ansible 2支持的常见选项 203$ D& ]( d4 n! `3 I4 @$ q2 S) v9 [
3.2.2 Ansible 2中的常用模块及其源码解析 215, X6 D$ T9 n- ~7 L
3.2.3 Ansible 2模块的学习建议 241
, c& o4 H( ]$ m( X" f2 x" u1 C3.3 Ansible 2中的Playbook语法 243( c8 X7 K, l9 \7 P- p
3.3.1 变量 243 @9 Q- p) K; H' _$ B+ r) f8 x
3.3.2 条件判断 2488 U: V! L, t, F+ [+ s
3.3.3 循环语句 251
0 ^( o q( T1 y* }2 j" V' h5 j3.3.4 等待语句 256# v3 X1 S& g: n/ e7 p7 y; Z
3.4 本章小结 260
4 X3 @: z2 d: g! S) ?第4章 Ansible 2核心源码剖析 2614 A0 C; B! \4 b! ]4 Y( L! u W
4.1 Ansible 2.8核心源码初探 261
# M6 A: C$ n/ }$ g. T4.1.1 日志打印 261
/ R$ y! |8 U/ g2 z6 ^& n- d4 B4.1.2 默认配置 262
& G+ e( f$ a: m2 a( Q( k4.1.3 inventory文件解析 270
& x3 I7 m2 H( G# k* o4.1.4 模板渲染 289) [- X( t9 {8 p
4.1.5 插件 303 java8.com
4.2 Ansible 2.8模块运行的核心流程分析 305
$ o C# F* a# p f+ f4.2.1 命令入口 306- D( ~ Q* k4 q- ~
4.2.2 核心运行模块 3082 e* \' H7 x1 t7 o2 m# ^
4.2.3 流程总结 354/ L7 t7 B9 N" n" P v
4.3 Ansible 2.8中Playbook的执行流程追踪 3551 f) l5 D; f+ ]% S0 F) I1 D e4 ]
4.3.1 Playbook命令执行入口 355( P k/ L4 ]3 g( e# Q2 U5 x
4.3.2 核心代码追踪 356, [# d1 P. J) X t. ?% [' ^) J" h
4.3.3 Playbook中部分语法的源码解析 363& e$ s+ V3 k+ D+ M
4.4 本章小结 371
0 x6 e, |3 a* ]9 g第5章 Ansible源码的演进跟踪 3728 c3 I& a8 H6 b, |
5.1 Ansible 1.1到Ansible 1.2的演进之路 372
/ l' Z+ C* o I2 y. v, l5.2 Ansible 2.8中的部分Bug溯源 391& ^# h6 R4 J+ Y, _/ p5 P
5.2.1 Ansible 2.8中的ChangeLog 391
) ^' }. t6 H b! R6 k; Q3 R9 }5.2.2 Ansible 2.8中的Bug复现及其修复过程 394
8 v( B; u$ M9 D3 C8 t8 Y9 y5.3 如何更深入地学习Ansible源码 416
! Q5 p' Y o7 ~" j, j3 }! r! L第6章 Playbook项目实战 417# l8 y5 e' a% m' \7 W
6.1 ceph-ansible项目介绍 417
1 _( U W9 _) r6 S6.2 ceph-ansible实战 418: \$ ?! W( F- S/ s0 o& N& i- y' c
6.2.1 使用ceph-ansible部署Ceph集群 418
$ e' f5 R. K2 l* ]& Y- H. K' H- J6.2.2 ceph-ansible的其他功能 4257 t: F6 u! C- Q
6.3 一个真实场景的改造 429* u% D5 q5 A, D, C# L5 A2 h9 l
6.3.1 业务需求 429
3 z) ]8 x, w2 v1 l6.3.2 手工实现 4305 E0 B9 R, \7 i" o" O4 m
6.3.3 改造ceph-ansible 4333 N2 s6 ?/ B. o$ {* J* w7 B& {: \
6.4 ceph-ansible项目源码探索 446
: r1 U, Y' T1 s+ D( s$ A6.4.1 追踪ceph-mon服务的搭建过程 446
& Y& Z' s# ]0 {- Z, }6.4.2 在CentOS 7下部署Ceph集群的简化版Playbook 469
$ i* r) V8 T$ b) k& m6.4.3 小结 479
* k9 N! p. u; E7 f1 u+ w* M
4 u+ K/ l9 M; S, |