设为首页 收藏本站

运维网

查看: 588|回复: 0

[经验分享] 使用svn和hook(钩子)对puppet进行版本控制

[复制链接]

尚未签到

发表于 2018-8-3 10:28:28 | 显示全部楼层 |阅读模式
  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
  

运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


独家合作伙伴: 青云cloud

快速回复 返回顶部 返回列表