技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> puppet 如何审记资源以及在资源中使用schedule

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

浏览:1402次  出处信息

[导读]

相信大部分同学都已经可以熟悉操作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    (阅读:7030)
  2. 自动化运维之企业实际案例分析    (阅读:3802)
  3. puppet使用rsync来同步文件教程    (阅读:3309)
  4. DevOps之Puppet    (阅读:2988)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet    (阅读:3024)
  6. puppet vagrant 管理VirtualBox 虚拟机    (阅读:2740)
  7. puppet运维之使用自定义函数    (阅读:2650)
  8. puppet extlookup 和puppet hiera使用    (阅读:2255)
  9. puppetmaster集群解决方案之puppet客户端共享一张证书    (阅读:1975)
  10. puppet 手册检查puppet配置文件和使用puppet tags    (阅读:1634)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:python十分钟入门
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1