經過安裝部署Puppet C/S模型,實現Puppet Server端管理全部被控制機的整個生命週期:從初始化到軟件升級、從配置文件建立到測試部署、從系統維護到服務器遷移等。Puppet可以持續化的與 被控制機進行交互,從而實現配置文件的及時檢測更新。結合SVN版本控制系統,puppet可在更新以前將當前正在運行的環境以版本的方式保存到SVN版 本控制系統中,方便之後經過puppet更新出錯或者須要回滾到以前的某一個環境時快速恢復。html
序號 服務器類型 版本/IP參數 1 PuppetMaster RHEL6.4 x86_64(192.168.100.110) 2 PuppetAgent RHEL5.8 x86_64(192.168.100.111)和RHEL5.7 x86_64(192.168.100.112) 3 SVN Service端 RHEL6.4 x86_64(192.168.100.110) 4 SVN Service端 RHEL6.4 x86_64(192.168.100.110)和Windows 8.1 x86_64(192.168.100.2) 編號 類型 主機名/軟件名稱 系統/軟件版本 其餘信息 1 Software Subversion 1.6.11-7 rpm package 2 Software TortoiseSVN 1.8.2.24708-x64-svn-1.8.3 msi
1.1 安裝相關軟件包linux
[root@puppetserver ~]# yum install subversion [root@puppetserver ~]# svnserve –version #經過查看版本驗證安裝是否成功 svnserve, version 1.6.11 (r934486) compiled Apr 12 2012, 11:09:11 Copyright (C) 2000-2009 CollabNet. Subversion is open source software, see http://subversion.tigris.org/ This product includes software developed by CollabNet (http://www.Collab.Net/). The following repository back-end (FS) modules are available: * fs_base : Module for working with a Berkeley DB repository. * fs_fs : Module for working with a plain file (FSFS) repository. Cyrus SASL authentication is available.
1.2 建立第一個版本庫數據庫
[root@puppetserver ~]# mkdir /svndata [root@puppetserver ~]# svnadmin create /svndata/puppet [root@puppetserver ~]# ll /svndata/puppet/ total 24 drwxr-xr-x 2 root root 4096 Oct 22 13:29 conf drwxr-sr-x 6 root root 4096 Oct 22 13:29 db -r--r--r-- 1 root root 2 Oct 22 13:29 format drwxr-xr-x 2 root root 4096 Oct 22 13:29 hooks drwxr-xr-x 2 root root 4096 Oct 22 13:29 locks -rw-r--r-- 1 root root 229 Oct 22 13:29 README.txt
2.1 安裝相關軟件包apache
[root@puppetserver ~]# yum install httpd httpd-devel mod_dav_svn
2.2 建立SVN虛擬主機vim
[root@puppetserver svndata]# vim /etc/httpd/conf.d/subversion.conf LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so Listen 8142 <VirtualHost *:8142> <Location /svndata> DAV svn SVNListParentPath on SVNPath "/svndata/puppet" AuthType Basic AuthName "Subversion repository" AuthUserFile "/svndata/puppet/conf/authfile" #AuthzSVNAccessFile /svndata/puppet/conf/svn-acl-conf Require valid-user SVNAutoversioning on ModMimeUsePathInfo on </Location> </VirtualHost>
2.3 建立svn權限配置文件瀏覽器
[root@puppetserver svndata]# vim puppet/conf/authz [groups] admin = puppet [admin:/] @admin = rw [/] * = r [$name:/] test = rw">>/svndata/puppet/conf/authz 2.4 建立用戶名及密碼並設置相應權限 [root@puppetserver ~]# /usr/bin/htpasswd -c /svndata/puppet/conf/authfile puppet #建立SVN服務器帳戶puppet密碼爲redhat New password: redhat Re-type new password: redhat Adding password for user puppet [root@puppetserver ~]# chown apache /svndata/puppet -R [root@puppetserver ~]# echo "puppet = redhat" >>/svndata/puppet/conf/passwd
2.5 配置SVN服務信息安全
[root@puppetserver svndata]# vim /svndata/puppet/conf/svnserve.conf [general] anon-access = none auth-access = write password-db = /svndata/puppet/conf/passwd authz-db = /svndata/puppet/conf/authz realm = puppet Repository
2.6 經過瀏覽器測試訪問服務器
[root@puppetserver svndata]# /etc/rc.d/init.d/httpd restart #重啓httpd服務 http://192.168.100.110:8142/svndata/
2.7 經過其餘linux節點訪問測試
[root@agent1 ~]# svn checkout http://192.168.100.110:8142/svndata/ /mnt/ Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository Password for 'root': Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository Username: puppet Password for 'puppet': ----------------------------------------------------------------------- ATTENTION! Your password for authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository can only be stored to disk unencrypted! You are advised to configure your system so that Subversion can store passwords encrypted, if possible. See the documentation for details. You can avoid future appearances of this warning by setting the value of the 'store-plaintext-passwords' option to either 'yes' or 'no' in '/root/.subversion/servers'. ----------------------------------------------------------------------- Store password unencrypted (yes/no)? no Checked out revision 0.
2.8 經過Windows客戶端TortoiseSVN訪問測試
備註:因爲還爲import版本,因此查看的內容爲空
3.1 將puppet server模塊目錄導入到版本庫中
[root@puppetserver ~]# svn import /etc/puppet/environments/testing http://192.168.100.110:8142/svndata/puppet -m "Puppet Initial repository" Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository Password for 'root': Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository Username: puppet Password for 'puppet': Adding /etc/puppet/environments/testing/groups Adding /etc/puppet/environments/testing/groups/modules Adding /etc/puppet/environments/testing/groups/modules/grub Adding /etc/puppet/environments/testing/groups/modules/grub/files Adding /etc/puppet/environments/testing/groups/modules/grub/manifests … Committed revision 1.
備註:因爲SVN服務器端和puppetserver在同一臺服務器上,也能夠經過如下方式進行導入
[root@puppetserver ~]# svn import /etc/puppet/environments/testing file:///svndata/puppet -m "Puppet Initial repository"
3.2 經過IE瀏覽器訪問SVN服務器
3.3 經過Windows客戶端TortoiseSVN checkout最新的版本庫到本地
3.4 刪除puppetserver端testing目錄,並將版本庫中的數據導出
[root@puppetserver ~]# cd /etc/puppet/environments/testing/ [root@puppetserver testing]# rm -rf * #刪除以前建議備份 [root@puppetserver testing]# svn checkout http://192.168.100.110:8142/svndata/puppet /etc/puppet/environments/testing Authentication realm: <http://192.168.100.110:8142> Puppet Subversion repository Password for 'puppet': Please type 'yes' or 'no': no A groups A groups/modules A groups/modules/grub A groups/modules/grub/files A groups/modules/grub/manifests Checked out revision 1. [root@puppetserver testing]# ls -a . .. agents environment groups manifests .svn [root@puppetserver testing]# ls .svn/ #每一個目錄下面都會生成.svn隱藏目錄,用於保存當前版本的信息 all-wcprops entries prop-base props text-base tmp 備註:checkout以後,在/etc/puppet/environments/testing目錄下就會有一份SVN服務器上最新版本的副本。
4.1 設置pre-commit
設置pre-commit鉤子能夠提交文件到SNV服務器以前對puppet語法進行檢查,語法經過則提交成功,語法錯誤則提交失敗。
[root@puppetserver hooks]# chmod 774 pre-commit^C [root@puppetserver hooks]# cp pre-commit.tmpl pre-commit [root@puppetserver hooks]# chmod 774 pre-commit [root@puppetserver hooks]# vim pre-commit #!/bin/sh # SVN pre-commit hook to check Puppet syntax for .pp files # Modified from http://mail.madstop.com/pipermail/puppet-users/2007-March/002034.html # Access http://projects.puppetlabs.com/projects/1/wiki/puppet_version_control 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 >>/var/log/puppet/svn_pre-commit.log 2>&1 puppet --color=false --confdir=/etc/puppet --vardir=/var/lib/puppet --parser --ignoreimport $tmpfile >>/var/log/puppet/svn_pre-commit.log 2>&1 if [ $? -ne 0 ] then echo "Puppet syntax error in $line." >>/var/log/puppet/svn_pre-commit.log 2>&1 exit 2 fi done res=$? rm -f $tmpfile if [ $res -ne 0 ] then exit $res fi
4.2 設置post-commit
設置post-commit鉤子能夠在正確提交文件至SVN服務器以後,puppetmaster的模塊目錄/etc/puppet/environments/testing
會自動從SNV服務器上update最新的版本庫到本地。
#!/bin/sh # POST-COMMIT HOOK REPOS="$1" REV="$2" #mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf export LANG=en_US.UTF-8 SVN=/usr/bin/svn PUPPET_DIR=/etc/puppet #/usr/bin/svn up /etc/puppet -non-interactive $SVN update $PUPPET_DIR --username puppet --password 123.com >>/var/log/puppet/svn_post-commit.log
5.1 本地測試
1)導出版本數據庫文件到本地
[root@puppetserver ~]# svn checkout file:///svndata/puppet /puppet/puppet
2)、建立並添加新的目錄及文件
[root@puppetserver puppet]# svn add ssh
3)、將修改後的文件提交到SVN服務器,此時版本庫版本加1
[root@puppetserver .svn]# svn commit -m "add ssh modules" /puppet/puppet/*
5.2 遠程測試(Linux)
[root@agent1 svndata]# svn checkout http://172.16.200.100/svndata/ /mnt/
5.3 客戶端TortoiseSVN測試(Windows)
微信公衆號:puppet2014,可微信搜索加入,也能夠掃描如下二維碼進行加入
QQ交流羣:296934942