日常情况下都是通过puppetmaster端进行推送变更,推送可以用MC实现,至于变更的回滚可以通过SVN活该Git辅助实现。
存在这样一种情况,在一个复杂的环境中,存在多个管理员,而你是负责变更推送的,他们只是做应用的,很多时候是需要登录系统权限的,有一次,一个管理员为了满足他的应用并没有告知给你,登录到系统之后,修改了一个配置文件,完后也没有保存,而这个配置文件恰恰是你这边puppetmaster管理的配置文件,在你做puppet推送之后,那个管理员的配置文件被还原了。而那个管理员发现应用出了问题,要求你给他还原,你如何做呢?
答案是可以通过filebucket功能完成,那么那么多机器,如何集中管理这些单版本呢。
<a></a>
1
2
3
4
5
6
<code>[root@linuxmaster1poc manifests]# cat site.pp</code>
<code> </code><code>import</code> <code>'nodes/*.pp'</code>
<code> </code><code>$puppetserver = ‘puppetmaster.kisspuppet.com’</code>
<code>filebucket { ‘main’:</code>
<code>path => </code><code>"/puppet/version/hosts/${fact_certname}"</code><code>,</code>
<code> </code><code>}</code>
备注:有以上模块之后,只要在file模块中添加<code>backup => 'main',</code>,那么这个文件就会被保存到以上目录中。
参数clientbucketdir为当file模块中没有定义<code>backup => 'main',</code>时被保存的路径,默认在<code>/var/lib/puppet/clientbucket</code>
参数bucketdir为使用<code>puppet filebucket backup [file]</code>保存的路径
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<code>[root@linux57poc ~]# cat /etc/puppet/puppet.conf</code>
<code>[main]</code>
<code> </code><code>user = puppet</code>
<code> </code><code>group = puppet</code>
<code> </code><code>var</code><code>dir = /</code><code>var</code><code>/lib/puppet</code>
<code> </code><code>logdir = /</code><code>var</code><code>/log/puppet</code>
<code> </code><code>rundir = /</code><code>var</code><code>/run/puppet</code>
<code> </code><code>ssldir = $</code><code>var</code><code>dir/ssl</code>
<code> </code><code>pluginsync = </code><code>true</code>
<code> </code><code>clientbucketdir = /puppet/version/hosts/puppet_linux57poc.kisspuppet.com</code>
<code> </code><code>bucketdir = /puppet/version/hosts/puppet_linux57poc.kisspuppet.com</code>
<code>[agent]</code>
<code> </code><code>server = puppetmaster.kisspuppet.com</code>
<code> </code><code>classfile = $</code><code>var</code><code>dir/classes.txt</code>
<code> </code><code>localconfig = $</code><code>var</code><code>dir/localconfig</code>
<code> </code><code>runinterval=</code><code>86400</code>
<code> </code><code>report = </code><code>true</code>
<code> </code><code>authconfig = /etc/puppet/namespaceauth.conf</code>
<code> </code><code>usecacheonfailure = </code><code>false</code>
<code> </code><code>certname = puppet_linux57poc.kisspuppet.com</code>
<code> </code><code>environment = production</code>
<code># listen = </code><code>true</code>
<code># puppetport = </code><code>8139</code>
<code># bindaddress = </code><code>192.168</code><code>.</code><code>100.125</code>
3、file模块中添加 <code>backup => 'main',</code>
25
<code>class</code> <code>puppet_linux57poc{</code>
<code> </code><code>include</code> <code>puppet_linux57poc::motd,puppet_linux57poc::facts</code>
<code>}</code>
<code>class</code> <code>puppet_linux57poc::motd{</code>
<code> </code><code>package</code><code>{ setup:</code>
<code> </code><code>ensure => present,</code>
<code> </code><code>}</code>
<code> </code><code>file{ </code><code>"/etc/motd"</code><code>:</code>
<code> </code><code>owner => </code><code>"root"</code><code>,</code>
<code> </code><code>group => </code><code>"root"</code><code>,</code>
<code> </code><code>mode => </code><code>0400</code><code>,</code>
<code> </code><code>content => template(</code><code>"puppet_linux57poc/motd.erb"</code><code>),</code>
<code> </code><code>backup => </code><code>'main'</code><code>,</code>
<code> </code><code>require => Package[</code><code>"setup"</code><code>],</code>
<code>class</code> <code>puppet_linux57poc::facts{</code>
<code> </code><code>file{ </code><code>"/etc/mcollective/facts.txt"</code><code>:</code>
<code> </code><code>content => template(</code><code>"puppet_linux57poc/facts.txt.erb"</code><code>),</code>
修改节点被管理的配置文件/etc/motd,然后运行puppet命令还原
<code>[root@linux57poc ~]# echo aa>>/etc/motd</code>
<code>[root@linux57poc ~]# puppet agent -t</code>
<code>info: Retrieving plugin</code>
<code>info: Loading facts </code><code>in</code> <code>/</code><code>var</code><code>/lib/puppet/lib/facter/fact_apply.rb</code>
<code>info: Caching catalog </code><code>for</code> <code>puppet_linux57poc.kisspuppet.com</code>
<code>info: Applying configuration version </code><code>'1386061716'</code>
<code>notice: /Stage[main]/Mcollective::Facter/File[/etc/mcollective/facts.yaml]/content:</code>
<code>--- /etc/mcollective/facts.yaml </code><code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>26</code><code>:</code><code>35.000000000</code> <code>+</code><code>0800</code>
<code>+++ /tmp/puppet-file20131203-</code><code>14159</code><code>-i1qgrq-</code><code>0</code> <code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>56</code><code>:</code><code>59.000000000</code> <code>+</code><code>0800</code>
<code>@@ -</code><code>1</code><code>,</code><code>89</code> <code>+</code><code>1</code><code>,</code><code>89</code> <code>@@</code>
<code>。。。</code>
<code>info: FileBucket adding {md5}3997ee041b3277fda12dbd849fac47e7</code>
<code>info: /Stage[main]/Mcollective::Facter/File[/etc/mcollective/facts.yaml]: Filebucketed /etc/mcollective/facts.yaml to main </code><code>with</code> <code>sum 3997ee041b3277fda12dbd849fac47e7</code>
<code>notice: /Stage[main]/Puppet_linux57poc::Motd/File[/etc/motd]/content:</code>
<code>--- /etc/motd </code><code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>56</code><code>:</code><code>49.000000000</code> <code>+</code><code>0800</code>
<code>+++ /tmp/puppet-file20131203-</code><code>14159</code><code>-1c90psx-</code><code>0</code> <code>2013</code><code>-</code><code>12</code><code>-</code><code>03</code> <code>17</code><code>:</code><code>56</code><code>:</code><code>59.000000000</code> <code>+</code><code>0800</code>
<code>@@ -</code><code>7</code><code>,</code><code>4</code> <code>+</code><code>7</code><code>,</code><code>3</code> <code>@@</code>
<code> </code><code>rubyversion = </code><code>1.8</code><code>.</code><code>7</code>
<code> </code><code>....................</code>
<code> </code><code>------------------------------------------------</code>
<code>-aa</code>
<code>info: FileBucket adding {md5}6db65f0eb756ee96ef8e615e914fa0ee</code>
<code>info: /Stage[main]/Puppet_linux57poc::Motd/File[/etc/motd]: Filebucketed /etc/motd to main </code><code>with</code> <code>sum 6db65f0eb756ee96ef8e615e914fa0ee</code>
<code>notice: /Stage[main]/Puppet_linux57poc::Motd/File[/etc/motd]/content: content changed </code><code>'{md5}6db65f0eb756ee96ef8e615e914fa0ee'</code> <code>to </code><code>'{md5}7c6613a110541a050c8a8f51fc89dab2'</code>
<code>notice: Finished catalog run </code><code>in</code> <code>0.69</code> <code>seconds</code>
可以看到<code>/etc/motd</code>的MD5值从<code>'6db65f0eb756ee96ef8e615e914fa0ee'</code>变成<code>'7c6613a110541a050c8a8f51fc89dab2'</code>
<code>[root@linux57poc ~]# ll /puppet/version/hosts/puppet_linux57poc.kisspuppet.com/</code><code>6</code><code>/d/b/</code><code>6</code><code>/</code><code>5</code><code>/f/</code><code>0</code><code>/e/6db65f0eb756ee96ef8e615e914fa0ee/</code>
<code>total </code><code>8</code>
<code>-r--r----- </code><code>1</code> <code>nfsnobody nfsnobody </code><code>311</code> <code>Dec </code><code>3</code> <code>17</code><code>:</code><code>56</code> <code>contents</code>
<code>-rw-r----- </code><code>1</code> <code>nfsnobody nfsnobody </code><code>10</code> <code>Dec </code><code>3</code> <code>17</code><code>:</code><code>56</code> <code>paths</code>
通过puppet filebucket恢复
<code>[root@linux57poc ~]# puppet filebucket --local backup /etc/motd</code>
<code>/etc/motd: 6db65f0eb756ee96ef8e615e914fa0ee</code>
<code>[root@linux57poc ~]#</code>
<code>[root@linux57poc ~]# >/etc/motd</code>
<code>[root@linux57poc ~]# puppet filebucket --local restore /etc/motd 6db65f0eb756ee96ef8e615e914fa0ee</code>
<code>[root@linux57poc ~]# cat /etc/motd</code>
<code>------------a few of facter values-------------</code>
<code>myhostname = linux57poc</code>
<code>eth0_ip = </code><code>192.168</code><code>.</code><code>100.125</code>
<code>kernel = </code><code>2.6</code><code>.</code><code>18</code><code>-</code><code>274</code><code>.el5</code>
<code>system release = Red Hat Enterprise Linux Server release </code><code>5.7</code> <code>(Tikanga)</code>
<code>puppetversion = </code><code>2.7</code><code>.</code><code>23</code>
<code>rubyversion = </code><code>1.8</code><code>.</code><code>7</code>
<code>....................</code>
<code>------------------------------------------------</code>
<code>aa</code>
如何集中管理呢,可以将所有节点那个目录挂在到一台服务器上,这样就集中了,然后可以通过扫描命令进行查看
<code>[root@linuxreportpoc ~]# ll /puppet/version/hosts</code>
<code>total </code><code>12</code>
<code>drwxr-x--- </code><code>12</code> <code>nfsnobody nfsnobody </code><code>4096</code> <code>Dec </code><code>3</code> <code>17</code><code>:</code><code>56</code> <code>puppet_linux57poc.kisspuppet.com</code>
<code>drwxr-x--- </code><code>10</code> <code>nfsnobody nfsnobody </code><code>4096</code> <code>Dec </code><code>3</code> <code>17</code><code>:</code><code>08</code> <code>puppet_linux58poc.kisspuppet.com</code>
<code>drwxr-x--- </code><code>11</code> <code>nfsnobody nfsnobody </code><code>4096</code> <code>Dec </code><code>3</code> <code>17</code><code>:</code><code>09</code> <code>puppet_linux64poc.kisspuppet.com</code>
<code></code>
本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/1337910,如需转载请自行联系原作者