IT技术博客大学习 共学习 共进步

puppet 如何审记资源以及在资源中使用schedule

MySQLOPS 数据库与运维自动化技术分享 2012-03-04 17:46:20 浏览 1,783 次

[导读]

相信大部分同学都已经可以熟悉操作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

[总结]

本小节的内容就到此结束,感兴趣的同学可以把导读部分的问题自己测试下,这里大家可以稍微改下,

部分内容以前就有介绍过,大家可以把相关的串联起来,学以致用哈.下小章节学习如何临时禁用某个资

源.

建议继续学习

  1. 使用Apache 和Passenger来运行puppetmaster (阅读 8,165)
  2. 自动化运维之企业实际案例分析 (阅读 4,623)
  3. puppet使用rsync来同步文件教程 (阅读 4,082)
  4. DevOps之Puppet (阅读 3,824)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (阅读 3,762)
  6. puppet vagrant 管理VirtualBox 虚拟机 (阅读 3,443)
  7. puppet运维之使用自定义函数 (阅读 3,303)
  8. puppet extlookup 和puppet hiera使用 (阅读 3,043)
  9. puppetmaster集群解决方案之puppet客户端共享一张证书 (阅读 2,782)
  10. puppet手册之建立软件安装源 (阅读 2,563)