puppet 如何审记资源以及在资源中使用schedule
[导读]
相信大部分同学都已经可以熟悉操作puppet了,本小节接着上一小节,puppet如何创建目录树,以及有条件的删除过期文件,
而本节则是给我们了一个新的课题,是如何调度并确保资源运行,就是说,我不想在某个时间段运行某个资源,或者我在特定的时间
内运行该资源次数不要超过我规定的执行次数上限,还有我们不得不面对这样的一个问题,某些资源是在puppet管理下,但是有人
改过了该资源的属性,这时要知道这些变化怎么办?或者我们有某个资源特别的重要,需要受到严格的保护怎么办?这时我们就可以
使用puppet 审记功能,可以记录资源的变化,那如何将这些变化即时传递给运维人员呢.详情请继续阅读
[正文]
在资源中使用schedules
使用schedule资源,你可以控制其它资源得到应用.例如,内置的每天调度不是你所期望的:如果你指定了一个像这样的资源:
1
2
3 |
exec { "/usr/bin/apt-get update" : schedule => daily, } |
这将是每天都会应用一次.
稍微棘手的事情有关的时间表是,它并不能保证资源将每天被应用 一次,这只是一个限制,资源不会被应用于每天超过一次.
或者是适用于所有的资源,该资源将取决于何时运行puppet和Puppet是否正在运行.
正因为如此,schedule是最好的用来限制其它资源:例如,你可以想确保apt-get 的更新每小时运行不超过一次.
或者说你维护的工作不是安排在白天工作时间内.为此,你需要创建自己的schedule资源.
怎么办呢…
1.添加以下内容到你的代码:
1
2
3
4
5
6
7
8 |
schedule { "not-in-office-hours" : period => daily, range => [ "17:00-23:59" , "00:00-09:00" ], repeat => 1, } exec { "/bin/echo Doing maintenance!" : schedule => "not-in-office-hours" , |
2.运行Puppet.
它是如何工作…
我们已经创建了资源,名称为not-in-office-hours 指定了重复时间表以及运行期间,每天下午5点后,
上午9时或者之前所允许的时间范围:
1
2 |
period => daily, range => [ "17:00-23:59" , "00:00-09:00" ], |
我们还指出了,在一个时段内该资源可以应用的执行次数为1.
1 |
repeat =>1, |
现在我们在exec资源中应用schedule.
1
2 |
period => daily, range => [ "17:00-23:59" , "00:00-09:00" ], |
如果没有指定schedule参数,这其中的资源将随puppet每次运行而运行.现在Puppet将检查not-in-office-hours资源:
时间是在允许范围内 在这一规定的时间内,该资源是否已经运行的时间超出了规定的运行的次数.
例如,让我们来看看发生什么,如果Puppet每隔1小时运行,
4pm:它超出了允许的时间范围内,因此不会做任何事情
5pm:在允许的时间范围内,在这个期间,该资源尚未运行,Puppet将会应用该资源.
6pm:这是在允许的时间范围内,该资源已经运行了一次,所以它达到其最大的重得计数,puppet 将不会做任何事情,依此类推,直到第二天.
还有更多…
你可以增加repeat的参数,如果你想,例如,运行一个作业在一小时内不超过6次.
period => hourly,
repeat => 6,
请记住,这并不能保证一个小时该作业运行了6次,它只是规定了上限限制,puppet运行多久或者其它发生什么情况都是没有关系的.
如果这个小时该作业已经运行了6次,将不会再运行.如果Puppet每天只运行一次,该作业将只会运行一次,因此,schedule是最好的
用于确保事情不会发生在特定的时间(或者不超过一个给定的频率).
审记资源
我曾经诊断过一个服务器,为什么ping没有响应,连接不上ssh或者控制台,最后解决了,当我打电话到位于服务器存放的位置(国内一般就是IDC 机房),
他们告诉我,在之前来过两名不明身份的男子,将服务器装进卡车并从前门出去了,这里的信息是,它知道谁对你的服务器做了些什么.
试运行模式,可以使用-noop开关,是一种简单的方法来审记在Puppet控制下的任何机器变化,然而,Puppet也有个专门的审记功能,
它可以报告资源或者指定的属性变化.
怎么办呢…
1.使用audit参数定义一个资源.
1
2
3 |
file { "/etc/passwd" : audit => [ owner, mode ], } |
它是如何工作的…
audit的metaparameter(metaparameter是个适用于任何资源,而不是特定类型) 告诉Puppet要记录和监视资源的某些方面,
该值可以是你要审记的参数列表,在这种情况下,当puppet 运行时,puppet 将会记录/etc/passwd文件的属主和权限.如果其中任何
有改变,例如,如果运行:
1 |
# chmod 666 /etc/passwd |
在下次运行Puppet时,puppet 会应用变化,并会记录下改变.
1
2 |
notice: /Stage [main] //Node [cookbook] /File [ /etc/passwd ] /mode : audit change: previously recorded value 644 has been changed to 666 |
还有更多…
此功能非常有用来审记大型网络中的机器所做的任何改变,无论是恶意的或者是意外,
你还可以使用tagmail报告功能自动发送电子邮件,以报告审记变更和通知.这也是
非常有用的可以保持对那些不是由puppt管理的文件监视.例子如,在生产服务器上的
应用程序代码.你可以在这里阅读更多关于审记功能:
http://www.puppetlabs.com/blog/all-about-auditing-with-puppet/
如果你只是想审计资源的一切,可以使用all:
1
2
3 |
file { "/etc/passwd" : audit => all, } |
另请参阅:
使用试运行模式,以避免意外
通过电子邮件发送日志中包含特定的tags
[总结]
本小节的内容就到此结束,感兴趣的同学可以把导读部分的问题自己测试下,这里大家可以稍微改下,
部分内容以前就有介绍过,大家可以把相关的串联起来,学以致用哈.下小章节学习如何临时禁用某个资
源.
建议继续学习:
- 使用Apache 和Passenger来运行puppetmaster (阅读:7030)
- 自动化运维之企业实际案例分析 (阅读:3802)
- puppet使用rsync来同步文件教程 (阅读:3309)
- DevOps之Puppet (阅读:2988)
- 如何有效运行puppet cron任务以及如何触发运行puppet (阅读:3024)
- puppet vagrant 管理VirtualBox 虚拟机 (阅读:2740)
- puppet运维之使用自定义函数 (阅读:2650)
- puppet extlookup 和puppet hiera使用 (阅读:2255)
- puppetmaster集群解决方案之puppet客户端共享一张证书 (阅读:1975)
- puppet 手册检查puppet配置文件和使用puppet tags (阅读:1634)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:sky 来源: MySQLOPS 数据库与运维自动化技术分享
- 标签: puppet schedule
- 发布时间:2012-03-04 17:46:20
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [65] android 开发入门
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则