cu_Cbear 发表于 2012-01-12 15:39

puppet cookbook 中文翻译节选

puppet cookbook 中文翻译节选





从www.mysqlops.com上转载的,点我阅读原文
-----------------------------------------------------------------
从puppet filebucket恢复文件
有铅笔就有橡皮擦,因为我们都会犯错,每当puppet检测到客户端文件变化时,
它会对当前版本做个备份,我们可以看到这一过程,在puppet运行实例中,
我们替换一个现有存在的文件,并且文件内容有变化,我们看示例:

root@cookbook:/etc/puppet# puppet agent --test
info: Caching catalog for cookbook
info: Applying configuration version '1293459139'
--- /etc/sudoers 2010-12-27 07:12:20.421896753 -0700
+++ /tmp/puppet-file20101227-1927-13hjvy6-0 2010-12-27
07:13:21.645702932 -0700
@@ -12,7 +12,7 @@
# User alias specification
-User_Alias SYSOPS = john
+User_Alias SYSOPS = john,bob
info: FileBucket adding /etc/sudoers as {md5}c07d0aa2d43d58ea7b5c5307
f532a0b1
info: /Stage/Admin::Sudoers/File: Filebucketed /
etc/sudoers to puppet with sum c07d0aa2d43d58ea7b5c5307f532a0b1
notice: /Stage/Admin::Sudoers/File/content:
content changed '{md5}c07d0aa2d43d58ea7b5c5307f532a0b1' to '{md5}0d218
c16bd31206e312c885884fa947d'
notice: Finished catalog run in 0.45 seconds
我们感兴趣的是下面这行:

info: /Stage/Admin::Sudoers/File: Filebucketed /
etc/sudoers to puppet with sum c07d0aa2d43d58ea7b5c5307f532a0b1
puppet会根据文件内容创建一个MD5 哈希,并使用它来创建一个filebucket.
filebucket是基于哈希的前几个字符,filebucket的作用是来保存puppet
替换下来的任何文件的副本,它存放的默认位置是 /var/lib/puppet/clientbucket:
• root@cookbook:/etc/puppet# ls /var/lib/puppet/clientbucket/c/0/7/
d/0/a/a/2/c07d0aa2d43d58ea7b5c5307f532a0b1
contents paths
你在bucket存放位置会看到两个文件:contents和paths.contens即为原始文件内容,
paths即为原始文件的路径。
如果你知道文件内容的哈希值(像你看到的上面的例子),可以很容易找到该文件,
如果你不知道,在整个filebucket中创建以文件内容为表,并建立索引文件将非常有用。
How to do it…
1.使用如下命令创建索引文件:
find /var/lib/puppet/clientbucket -name paths -execdir cat {} \;
-execdir pwd \; -execdir date -r {} +"%F %T" \; -exec echo \; > bucket.txt

2.在索引文件中查找文件:
cat bucket.txt
/etc/sudoers
/var/lib/puppet/clientbucket/c/0/7/d/0/a/a/2/c07d0aa2d43d58ea7b5c5
307f532a0b1
2010-12-27 07:13:21
/etc/sudoers
/var/lib/puppet/clientbucket/1/0/9/0/e/2/8/a/1090e28a70ebaae872c2e
c78894f49eb
2010-12-27 07:12:20
如果你想恢复文件,并且知道他的bucket path,那么只需要复制文件内容到原始文件,即可。
cp /var/lib/puppet/clientbucket/1/0/9/0/e/2/8/a/1090e28a70ebaae872
c2ec78894f49eb/contents /etc/sudoers
How it works…
刚那个脚本会创建一份完整的filebucket文件列表清单,显示原始文件的名称,以及bucket的路径,
以及修改日期,(在上例中你学习到了如何恢复文件到以前版本),一旦你知道bucket的路径,那么
你就可以复制文件到正确的位置。
There’s more
你可以指定puppet在原始目录下创建备份文件,而不是在filebucket.要想做到这一点,你只需要在代码
中添加backup参数:
file { "/etc/sudoers":
mode => "440",
source => "puppet:///modules/admin/sudoers",
backup => ".bak",
}
现在如果puppet要替换上面的文件,会在原始路径(/etc)下面创建一个扩展名为.bak的备份文件,如果
你想puppet默认在替换文件前先备份这一策略,可以这样做:

File {
backup => ".bak",
}
要完全禁用备份,可以这样做:
backup => false,

使用自动签名
在密码学中,跟生活一样,你必须小心你的签名,一般来说,每当puppetmaster新增一个客户端,你需要
在客户端上生成一个证书请求,然后你要到puppetmaster给它ssl 签名(puppetca -s hostname)。然而,
你可以使用自动签名(autosign)跳过这一步骤。
How to do it ..
1.在puppetmaster上创建/etc/puppet/autosign.conf文件,添加如下内容:
*.example.com ##请根据实际情况,修改为你客户机所对应的域名
How it works..
puppet 会检查所有的证书请求是否匹配autosign.conf中任何一行,
客户端主机名匹配*.example.com的任何证书请求,puppetmaster都会自动签名。
重要:这是个潜在的安全问题,因为puppetmaster信任任何客户端连接,只要主机名
匹配,出于这个原因,不建议使用autosigning,如果你真的要这样做用,确保puppetmaster
受防火墙保护,只允许信任的客户端或者ip段连接,一个更安全的方法是使用pre-signing.
Pre-signing certificates (预签名)
这里有一个刚才签名过的例子,一般来说,如果你要自动的加入大量
客户端,最好在puppetmaster上预先给客户端签名,然后推送相应ssl
证书到客户端,这是整个过程,你可以使用puppetca –generate
生成证书。
How to do it…
1.给clietn1.example.com预先生成ssl证书。
puppetca --generate client1.example.com

puppet会生成并签名一个证书名为clietn1.example.com.
2. 复制三个文件到新的客户端:客户端证书的私钥,客户端证书和CA证书。这三个文件所在位置为:

/etc/puppet/ssl/private_keys/client1.example.com.pem
/etc/puppet/ssl/certs/client1.example.com.pem
/etc/puppet/ssl/certs/ca.pem
复制上述三个文件到客户端相应的目录下,puppet 会自行进行身份验证可以省略ssl证书请求这一步骤。

原文地址:http://www.mysqlops.com/2011/12/07/puppet-cookbook-zhongwen.html

在我心中舞动 发表于 2012-01-12 15:40

谢谢分享
页: [1]
查看完整版本: puppet cookbook 中文翻译节选