|
puppet默认没有使用版本控制。可以在puppet.conf文件中添加一下一行:
config_version = /usr/local/bin/return_version
其中“/usr/local/bin/return_version” 是我自定义的脚本:
#!/bin/bash
date +%Y%m%d%H
so 简单 ^.^
注:puppet的这个版本号是用于与client端通信的信息,可以使用tagmail或者puppet的report功能,在基于webUI的dashboard或者foreman方便查阅自动化情况,通过时间判断是一个不错的办法。
svn的版本控制主要是对puppet部署的配置文件的控制,对于传送文件,使用exec执行客户端命令等操作不能进行回滚操作,需要自定义回滚方法(svn只负责svn服务器本地版本库内的文件系统)
1 安装svn
我使用yum安装:
#yum install subversion mod_dav_svn mod_auth_mysql –y
2 确认是否已安装一下安装包:
openssl-XXX
openssl-devel-XXX
mod_ssl-XXX
mod_auth_mysql-XXX
subversion-XXX
mod_dav_svn-XXX
3 确认模块:
在/etc/httpd/modules(根据你的apache安装目录)
mod_authz_svn.so
mod_dav_svn.so
mod_auth_mysql.so
4 建立并创建svn版本库
#mkdir –p /opt/svn/puppet
#svnadmin create /opt/svn/puppet
5 修改SVN配置文件
#vi /opt/svn/puppet/conf/svnserve.conf(操作权限文件指定)
[general]
auth-access = write
password-db = passwd
authz-db = authz
realm = puppet
#vi /opt/svn/puppet/conf/password(容许访问SVN的用户及密码)
[users]
puppet = testpassword
#vi /opt/svn/puppet/conf/authz(用户对某目录及自动目录的访问权限,下面表示admin组对svn所有目录都有读写权限,admin的成员是puppet)
[groups]
admin = puppet
[/]
@admin = rw
6 启动svn
#svnserve -d –r /opt/svn/
7向版本库提交资源,我设置的路径是puppet模块的主目录(原因见下面的说明,默认为/etc/puppet,我指定到了其他路径,puppet.conf中指定)
#svn import –m “test” /usr/share/svn/modules file:///opt/svn/puppet
8 svn还是需要系统学习的,这里只是一个开端,,为了让大家尽快懂得svn,下面介绍一些会用到的命令包括:
svn add * (将新修改的配置以及新添加的文件纳入版本控制,这是在修改量大的情况下,最简单快速的办法)
svn commit -m "一些更新信息" (将新修改的配置提交到版本库)
svn co file:///home/okooo/apps/svn/puppet tmp(将版本库的内容拷贝一个副本到这次操作的目录下的tmp目录-这个都可以定义,默认就是版本库的名字,本例中是puppet)
svn up (下载一份完整的版本库内容到操作的目录下)
svn cleanup (有些时候在别人修改时候文件被锁定等原因,运行这个命令可以解除锁定)
svn del manifests/node/java.pp(将版本库的某些内容删除,这里是删除java.pp,然后svn commit就会成功删除)
svn diff manifests/node/java.pp (将修改后的java.pp文件和版本库的同名文件对比不同的内容)
svn log (查看更新内容的日志,这个log显示出来的就是上面执行“svn commit -m” 后的内容)
....
因为我们不涉及开发维护,所以svn不需要太熟,但是还是建议掌握所有内容
SVN的hooks
钩子的功能其实我也迷糊了很久,我的理解就是在版本库出现修改时被触发的自定义脚本,这样可以确定很多属性:比如Pre-Commit钩子的作用是 代码提交前是否有写messages,是否有tab,是否有不允许上传的文件,是否有超过限制大小的文件等等,这样可以控制一些不合适的提交。
以下是一个Pre-Commit钩子,用于检查语法错误:
检查puppet的全部.pp配置文件是否有问题,也可以执行:
puppet -v 你的主要配置文件site.pp
#!/bin/sh # SVN pre-commit hook to check Puppet syntax for .pp files
REPOS="$1"
TXN="$2"
tmpfile=`mktemp`
export HOME=/
SVNLOOK=/usr/bin/svnlook
$SVNLOOK changed -t "$TXN" "$REPOS" | awk '/^[^D].*\.pp$/ {print $2}' | while read line
do
$SVNLOOK cat -t "$TXN" "$REPOS" "$line" > $tmpfile
if [ $? -ne 0 ]
then
echo "Warning: Failed to checkout $line" >&2
fi
puppet --color=false --confdir=/etc/puppet --vardir=/var/lib/puppet --parseonly --ignoreimport $tmpfile >&2
if [ $? -ne 0 ]
then
echo "Puppet syntax error in $line." >&2
exit 2
fi
done
res=$?
rm -f $tmpfile
if [ $res -ne 0 ]
then
exit $res
fi
|
|
|
|
|
|
|