本节书摘来自异步社区《Puppet实战手册》一书中的第1章,第1.4节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.4 利用Git管理配置清单
把Puppet配置清单存放在版本控制系统Git或Subversion中管理(推荐Git),所有Puppet管理的机器都从仓库取出配置,这是一个非常好的想法。它有以下几个优点。
可以取消对配置清单的更改并回滚至以前任意一个版本。
可以使用新的分支(branch)来测试新功能。
如果有多人需要修改配置清单,可以分别独立在自己的工作副本上进行,然后再合并所有的修改。
可以使用git log功能查看谁在什么时候做了什么修改。
准备工作
本节将导入现有的清单文件到Git仓库。如果读者已经在上一节创建了puppet目录,就使用它;否则,就使用当前的清单目录。
本书将使用流行的GitHub服务作为本书的Git服务器。不强制读者这么做,读者也可以很容易地运行自己的Git服务器,但GitHub的确简化了很多事情。如果读者已经在使用Git并有一台合适的服务器,就可以放心地使用自己的。
需要注意的是,目前GitHub只提供公开的免费仓库(也就是说,每个人都可以看到仓库里的Puppet配置清单)。当配置清单中有机密数据(如密码)时,使用GitHub就不是一个好主意。使用本书中的示例来玩一玩,做些实验还可以,但在生产环境中使用时,需要考虑使用私有的GitHub仓库来代替。
参照下面的步骤导入配置清单。
1. 首先,在服务器上安装Git。
ubuntu@cookbook:~/puppet$ sudo apt-get install git
2. 其次,需要一个GitHub账号(免费的开源项目,或支付少量费用创建私有仓库)和一个仓库。按照github.com的说明创建并初始化仓库(repository),确保勾选了github.com的版权说明Initialize this repository with a README。
3. 授权SSH密钥来读/写仓库。
操作步骤
现在,将配置清单添加到Git仓库。复制仓库并移动配置清单文件到仓库中,操作步骤如下。
1. 首先,将puppet目录改名。
mv puppet puppet.import
2. 在服务器上克隆GitHub上的仓库到puppet目录(使用在GitHub上创建的仓库URL,可以在GitHub页面上获取)。
ubuntu@cookbook:~$ git clone
git@github.com:bitfield/cookbook.git puppet
Cloning into 'puppet'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
3. 将puppet.import目录下所有文件移动到puppet目录。
ubuntu@cookbook:~$ mv puppet.import/* puppet/
4. 添加并提交新的文件至GitHub仓库,如果有必要,设置Git详细认证资料。
ubuntu@cookbook:~$ cd puppet
ubuntu@cookbook:~/puppet$ git status
# On branch master
# Untracked files:
# (use "git add < file>..." to include in what will be committed)
#
# manifests/
nothing added to commit but untracked files present (use "git add" to track)
ubuntu@cookbook:~/puppet$ git add manifests/
ubuntu@cookbook:~/puppet$ git config --global user.name "John Arundel"
ubuntu@cookbook:~/puppet$ git config --global user.email
"john@bitfieldconsulting.com"
ubuntu@cookbook:~/puppet$ git commit -m "Importing"
[master a063a5b] Importing
Committer: John Arundel < john@bitfieldconsulting.com>
2 files changed, 6 insertions(+)
create mode 100644 manifests/nodes.pp
create mode 100644 manifests/site.pp
5. 最后,将变更推送至GitHub。
ubuntu@cookbook:~/puppet$ git push -u origin master
Counting objects: 6, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 457 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
To git@github.com:bitfield/cookbook.git
6d6aa51..a063a5b master -> master
工作原理
Git会跟踪文件的变更,并存储完整的变更历史记录。仓库的历史记录由多个提交组成。一次Git提交包含使用git commit命令提交时仓库的状态和注释。
现在,已经将Puppet配置清单文件添加到仓库并创建了第一条提交。这个提交更新了仓库的历史,但仅保存在本地工作副本中。如果要将副本的变化同步到GitHub上,还需要运行git push命令推送所有变更。
更多参考
现在,有一个中心Git仓库来管理Puppet配置清单,这样就可以在不同地方检出它的副本,修改并提交变更。比如,有一个工作团队,团队中每一个成员都可以将这个仓库复制至本地,并通过GitHub同步他们的修改。
使用Git控制Puppet的配置清单后,还需要使用一种简单、可扩展的方式将清单文件分发至大量的机器。下一节讲解如何来实现这些。