![7f5232e80473058aa6ef1cb1470bc6df94fe51b1](https://i-blog.csdnimg.cn/blog_migrate/c70ace6980e8c39113da4b8e16d18475.png)
**
前言
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
本书不仅讲解了Puppet的基础知识,而且深入探讨了Puppet的所有强大功能,详细展示了如何解决现实中的各种问题和应用场景。每一步操作都完整地展示了需要录入的命令,并且每一个技巧都有完整的代码示例。
本书带领读者从Puppet的基本知识开始,完整、专业地讲解Puppet的最新和最先进的功能、社区的最佳实践、优秀的配置清单(manifest)的编写、扩展性和性能,以及通过添加定制的提供者(provider)和资源(resource)来扩展Puppet的方法。
本书还包含来自生产系统环境的真实示例,以及一些世界上最大的Puppet用户群所使用的技巧。书中会展示利用Puppet来做事的不同方法,并指出这些方法的优点和缺点。
本书的组织结构使读者在任何时候都可以深入到某个技巧进行尝试,而无须通读全书。每个主题都有提供更多信息的链接和参考阅读,读者可以根据自己的需要进一步自己探索。无论读者的Pupept经验水平如何,从简单的工作流程提示到更高级的高性能Puppet架构,这里都有合适的内容。
作为一名DevOps顾问,我极力去编写这种对我日常工作有帮助的书。我希望它能激励每一名读者去学习、去尝试,并将自己最新的创意快速运用到这个令人激动和快速发展的领域中。
第1章展示了第一次安装Puppet的方法,包括安装Puppet的指令、创建第一个清单、配合Puppet使用版本控制、基于Git构建分布式Puppet架构、编写脚本让Puppet清单生效、自动运行Puppet、用Rake来引导机器和部署变更,以及使用Git钩子(hook)实现清单的自动语法检查。
第2章涵盖了编写优秀的Puppet代码的方方面面,包括如何使用Puppet社区风格、通过puppet-lint检查清单、用模块的方式组织清单、采用标准的命名和风格规范、使用内联模板、使用选择器和case语句、字符串操作,以及采用迭代器、条件语句和正则表达式。
第3章深入探讨Puppet,提高代码质量和可用性的特殊功能细节,包括数组和定义、根据依赖关系排序资源、继承节点和类、传递参数给类、覆盖参数、从环境变量中读取信息、编写可复用的清单、使用标签(tag)和运行阶段。
第4章处理一些系统管理员最常见的任务,包括管理配置文件、使用Augeas、从代码片段和模板生成文件、管理第三方软件仓库、使用GnuPG加密Puppet中的机密数据,以及从源代码构建软件包。
第5章阐释了什么是虚拟资源,以及它们如何帮助用户管理不同机器上的用户和软件包的不同组合,并展示了如何使用Puppet的资源调度和审计功能。
第6章专注于可能需要Puppet管理的某些特定的应用程序,包括Apache和Nginx、MySQL及Ruby的完整技巧。
第7章通过Vagrant和EC2实例扩展Puppet的能力(在云上的虚拟机和在桌面系统上)来管理虚拟机。此外,还展示了如何用HAProxy设置负载均衡,如何利用iptables设置防火墙,如何利用NFS设置网络文件系统,如何利用Heartbeat设置高可用服务。
第8章着眼于Puppet周边已经成熟的工具,包括Hiera、Facter和rspec-puppet,还介绍了一些高级主题,包括编写自己的资源类型、提供者和外部节点分类器(ENC)。
第9章涵盖了Puppet报告自己做了些什么的信息和系统的状态的方法,包含报告、日志、调试消息、依赖关系图、测试和空运行(dry-running)清单,以及Puppet常见错误消息的排查指南。
目录
**[第1章 Puppet基础设施
1.1 简介](https://yq.aliyun.com/articles/92961)**
1.2 安装Puppet
1.3 创建一个配置清单
1.4 利用Git管理配置清单
1.5 创建去中心化Puppet架构
1.6 编写papply脚本
1.7 使用cron运行Puppet
1.8 利用Rake部署变更
1.9 利用Rake引导Puppet运行
1.10 利用Git钩子自动进行语法检查
**[第2章 Puppet语言和风格
2.1 简介](https://yq.aliyun.com/articles/93041)**
2.2 使用社区推荐的Puppet风格
2.3 使用puppet-lint检查配置清单
2.4 使用模块
2.5 使用标准的命名约定
2.6 使用内联模板
2.7 数组中多个元素的遍历
2.8 编写功能强大的条件语句
2.9 在if语句中使用正则表达式
2.10 使用选择器和case语句
2.11 使用in运算符
2.12 使用正则表达式进行替换