第1章 Puppet初体验 1
1.1 什么是Puppet 1
1.1.1 部署层 2
1.1.2 配置语言与资源抽象层 3
1.1.3 事务层 5
1.2 选择正确的版本 6
1.3 安装Puppet 6
1.3.1 Red Hat Enterprise Linux和Fedora 7
1.3.2 Debian和Ubuntu 8
1.3.3 OpenIndiana 9
1.3.4 Solaris 10和Solaris 11 9
1.3.5 基于源代码安装 9
1.3.6 Microsoft Windows 10
1.3.7 Mac 12
1.3.8 其他平台 15
1.4 配置Puppet 16
1.4.1 site.pp文件 17
1.4.2 防火墙配置 17
1.4.3 启动Puppet master 17
1.5 连接客户端 19
1.6 创建第一个配置项 21
1.7 创建一个模块 23
1.7.1 模块结构 23
1.7.2 init.pp文件 23
1.7.3 应用这个配置项 26
1.8 小结 27
1.9 相关资源 28
第2章 用Puppet构建主机 29
2.1 开始 30
2.1.1 安装Puppet 30
2.1.2 在Kickstart中集成和启动Puppet 30
2.2 配置节点 31
2.2.1 相似主机的处理方法 31
2.2.2 使用外部配置 32
2.2.3 默认节点 32
2.2.4 节点继承 32
2.2.5 变量域 33
2.2.6 Puppet Style Guide 36
2.3 用模块变魔术 36
2.3.1 将模块代码纳入版本控制 38
2.3.2 创建模块来管理SSH服务 40
2.3.3 创建模块来管理Postfix 49
2.3.4 用mysql模块管理MySQL 52
2.3.5 管理Apache与网站 56
2.3.6 用Puppet模块管理Puppet 60
2.4 小结 64
2.5 相关资源 64
第3章 开发和部署Puppet 65
3.1 puppet apply命令和操作模式 65
3.1.1 用Puppet做屏幕输出 65
3.1.2 用Notify测试Puppet行为 66
3.1.3 用puppet apply处理清单文件 66
3.2 前台运行Puppet Master 69
3.3 用Vagrant开发Puppet 71
3.3.1 Vagrant的初始设置 72
3.3.2 启动Vagrant沙箱 73
3.3.3 在Vagrant沙箱中配置Puppet 73
3.3.4 用Vagrant测试Puppet 74
3.3.5 销毁和重建Vagrant沙箱 74
3.4 环境 75
3.4.1 维护模块 76
3.4.2 外部模块开发工具 76
3.4.3 配置Puppet环境 76
3.4.4 复制新环境 77
3.4.5 创建代码库副本 77
3.5 改变开发环境 78
3.6 用Puppet agent测试新环境 80
3.7 环境的分支与合并 82
3.7.1 创建一个中央代码库 82
3.7.2 为模块创建裸代码库 82
3.7.3 作一些修改 83
3.8 通过Git分支创建动态Puppet环境 83
3.9 小结 87
3.10 相关资源 87
第4章 横向扩展Puppet 88
4.1 确定挑战 88
4.2 基于Apache和Passenger运行Puppet master 89
4.2.1 安装Apache和Passenger 89
4.2.2 配置Apache和Passenger 92
4.3 测试Apache中的Puppet master 96
4.4 为多个Puppet master做负载均衡 97
4.4.1 HTTP负载均衡 97
4.4.2 Puppet master工作进程配置 98
4.4.3 详解前端负载均衡器配置 101
4.4.4 测试负载均衡器配置 102
4.5 进一步扩展 108
4.6 其他负载均衡方案 119
4.6.1 基于DNS round robin的负载均衡 119
4.6.2 基于DNS SRV记录的负载均衡 119
4.6.3 使用TCP负载均衡 119
4.6.4 IP任播 122
4.6.5 独立运行模式下的Puppet 122
4.7 测试性能 125
4.8 避免惊群效应 127
4.9 小结 127
4.10 更进一步 127
4.11 相关资源 127
第5章 外部Puppet配置 129
5.1 外部节点分类 129
5.1.1 用外部节点分类脚本配置节点 130
5.1.2 Shell外部节点分类脚本 131
5.1.3 YAML中的参数化类 132
5.1.4 Ruby外部节点分类脚本 132
5.1.5 Perl外部节点分类脚本 134
5.1.6 基于数据库的外部节点分类脚本 135
5.2 用LDAP存储节点配置 136
5.2.1 安装Ruby LDAP库 136
5.2.2 配置LDAP服务器 137
5.2.3 添加Puppet模式 137
5.2.4 在Puppet中配置LDAP 138
5.3 小结 140
5.4 相关资源 140
第6章 导出和存储配置 141
6.1 虚拟资源 141
6.1.1 声明并实例化虚拟资源 142
6.1.2 用realize函数实例化虚拟资源 142
6.1.3 实例化多个虚拟资源 143
6.1.4 关系链语法 143
6.2 初识导出和存储配置 144
6.3 使用导出资源 146
6.3.1 SSH公钥的自动化管理 146
6.3.2 导出负载均衡器的工作进程资源 148
6.3.3 Nagios服务监控自动化 149
6.4 清除过期资源 152
6.5 小结 153
6.6 相关资源 153
第7章 Puppet控制台工具 154
7.1 Foreman 154
7.1.1 安装Foreman 154
7.1.2 从Puppet导入数据 158
7.1.3 连接第一个客户端 159
7.1.4 将Foreman用作ENC 160
7.1.5 Foreman的报告特性 161
7.1.6 用Foreman搜索节点信息 162
7.2 企业版Puppet控制台 163
7.2.1 安装企业版Puppet 163
7.2.2 连接PE客户端和控制台 164
7.2.3 为节点添加类 164
7.2.4 盘点服务 165
7.2.5 实时管理 165
7.3 Puppetboard 166
7.3.1 安装过程 166
7.3.2 控制中心的标签页 167
7.3.3 Puppetboard的未来 169
7.4 小结 169
7.5 相关资源 170
第8章 工具与整合 171
8.1 Puppet Forge与模块工具 171
8.2 从Forge中搜索并安装模块 172
8.3 创建一个模块 174
8.4 管理模块间依赖 176
8.4.1 Puppet librarian 176
8.4.2 r10k 177
8.4.3 Puppet-lint 178
8.5 测试模块 179
8.5.1 spec-puppet 179
8.5.2 TravisCI 184
8.5.3 rspec-system 185
8.6 使用Geppetto开发Puppet模块 188
8.7 小结 191
8.8 相关资源 191
第9章 Puppet的报告系统 192
9.1 报告系统初体验 192
9.2 配置报告系统 194
9.3 报告处理器 194
9.3.1 log 195
9.3.2 tagmail 195
9.3.3 rrdgraph 196
9.3.4 http 196
9.3.5 PuppetDB 197
9.4 自定义报告 197
9.5 其他报告工具 199
9.6 小结 199
9.7 相关资源 199
第10章 扩展Facter和Puppet 200
10.1 编写并发布自定义fact 200
10.1.1 Puppet的自定义fact配置 200
10.1.2 编写自定义fact 201
10.1.3 测试fact 204
10.1.4 外部fact 204
10.2 开发自定义类型、提供者和函数 205
10.2.1 配置Puppet的类型、提供者和函数 205
10.2.2 编写Puppet类型和提供者 206
10.2.3 编写一个解析文件类型和提供者 210
10.2.4 一个更复杂的类型和提供者 213
10.2.5 测试类型和提供者 216
10.2.6 编写自定义函数 216
10.3 小结 219
10.4 相关资源 219
第11章 MCollective 220
11.1 背景介绍 220
11.2 安装和配置MCollective 221
11.2.1 创建并保存证书 222
11.2.2 验证权限 223
11.3 测试 224
11.4 安装MCollective插件 225
11.4.1 Puppet agent插件 226
11.4.2 Facter插件 228
11.4.3 NRPE插件 228
11.5 通过元数据定位主机 230
11.6 附属插件 231
11.7 小结 231
11.8 相关资源 232
第12章 Hiera:分离数据与代码 233
12.1 Hiera能做什么 233
12.2 在旧版Puppet上安装Hiera 235
12.3 Hiera初始配置 235
12.4 Hiera命令行工具 237
12.4.1 创建一个Hiera数据文件 237
12.4.2 执行Hiera查询 237
12.4.3 用Puppet做Hiera查询 238
12.4.4 浏览层次结构数据 238
12.4.5 创建动态层次结构 239
12.4.6 在Hiera查询中使用变量 239
12.4.7 结合Puppet和变量做Hiera查询 240
12.4.8 层次结构组织 240
12.5 复杂数据结构 241
12.5.1 返回结构化数据 241
12.5.2 数组合并 242
12.5.3 散列合并 243
12.6 其他后端 245
12.6.1 文件后端 246
12.6.2 JSON后端 248
12.6.3 MySQL后端 249
12.6.4 gpg后端 251
12.7 Hiera函数的高级用法 254
12.8 模块数据绑定 255
12.9 Hiera实例 257
12.9.1 create-resources()函数 258
12.9.2 将Hiera用作ENC 259
12.10 Hiera-2 260
12.11 小结 260
12.12 相关资源 261