设为首页 收藏本站
查看: 1982|回复: 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545761-1-1.html 上篇帖子: 开源自动化配置管理工具Puppet安装 下篇帖子: Puppet Dashboard配置文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


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


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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