我有两本关于Puppet的书,没有一本提到如何aptitude safe-upgrade yum update或aptitude safe-upgrade 。
所以我觉得木偶不能,我觉得很难相信。
题
你将如何推动yum update或aptitude safe-upgrade每个月在许多不同的主机上aptitude safe-upgrade ?
Puppet实际上只是一个configurationpipe理工具,而不是一个自动化工具。 如果你想要适当的自动化,那么你会希望看到作为第三方工具开始的mcollective,现在已经被傀儡的伞下。 我没有和mcollective一起工作,我也不能真正说出它会如何处理这个问题,但是我的理解是,它最适合作为一个任意的任务执行机制,当尝试执行定期重复的任务。
我相信最好的方法是开发一个你想要更新的脚本和过程,然后用puppet来推送configuration。 所以问自己以下问题。
当您开始构buildconfiguration并回答这些问题时,您可能会发现更多将会出现在您的特定环境中。 举一个具体的例子,我做的是这样的:
/boot中最高版本的vmlinuz文件与uname -r的输出 这全部包含在两个文件中,即存储在/etc/cron.d和更新脚本中的两个cron条目(更新和内核检查)。 我正在做一个越来越杂乱的外观脚本,采取命令行参数执行更新或内核检查,是否重新启动。 木偶然后pipe理这两个文件。 既然你正在处理基于rpm和dpkg的系统,我可能会创build两个脚本或为这两个版本创build单独的do_update函数,并且每个函数都使用不同的命令行开关。 然后,您可以通过检查文件声明中的operatingsystem事实来推出正确的脚本,或者对cron条目进行模板化,并使用相同的事实来决定使用哪个开关。
使用经过良好testing的脚本,这种方法已经得到了很好的解决。 事实上,事实上,这个设置已经成功使用了几年,可以处理数百个系统。 当内核打包者开始向文件和比较例程扼stream器添加越来越多的次要版本时,我们偶尔会看到打嗝。
木偶本身并不是这项工作的工具。 Puppetlabs有一个叫做MCollective的独立工具,类似于Capistrano,Fabric和Func。
有一个名为Packages Agent的MCollecive 代理 ,它可以执行yum更新以及其他types的包pipe理。
你提到你的一部分基础设施正在运行Ubuntu。 也许你应该看看无人值守升级包。
如果您的主机是RHEL主机,您可能希望查看RHN Satellite 。 否则太空行走可能值得一看**(见下面的注释)。 它们旨在pipe理上游软件包储存库的本地副本,并便于pipe理注册到RHN Satellite服务器的系统。 您可以安排要在特定时间更新的软件包,或者如果启用了OSAD,可以在RHN Satellite / Spacewalk Web GUI中将更新安排在互联网上。
有些人使用下面的puppet贴出来,有一些博客和网页写了关于如何整合Puppet和RHN Satellite。
另外….
如果你更关心一个新兴的项目,最终将取代RHN卫星,你可以看看Katello项目 。 Katello包含许多项目,它们是Red Hat的CloudForms产品的一部分,据说它是RHN Satellite最终替代品的上游。 事实上,Katello通过使用Foreman来整合Puppet。 长远来看,Katello绝对值得考虑Spacewalk(但是由于订阅/支持而不是RHN Satellite)。
**我已经在我的文章中提到RHN卫星和太空行走作为RHN卫星,以使事情更容易。 真正的区别是天气还是不是你有RHEL系统,如果是这种情况你需要RHN Satellite,因为它可以从RHN以受支持的方式下载,Spacewalk将用于使用RHEL或Fedora重build的用户(我了解太空行走也可能支持Debian,但我个人对这方面的了解不多。)因此,在search信息时,可能需要searchSpacewalk和/或RHN Satellite
您也可以使用cluster-ssh同时连接多个主机,并在所有主机上执行相同的命令。 我很确定你也可以编写脚本。
sudo yum安装clusterssh
然后,从命令行或GUI运行它,并添加所有您需要处理的主机。 一旦你完成了,你可以从窗口运行任何命令,它会在你的设备上执行。
Debian / Ubuntu系统可以更新如下:
class { 'apt': update => { frequency => 'weekly', }, }
之后,为了运行upgrade ,您可以应用下面所示的相同技巧。
对于CentOS / RedHat系统,您可以订阅exec到一个哑文件:
exec { 'yum-update': command => '/usr/bin/yum -q -y update', refreshonly => true, subscribe => File['/some/dumb/file']; }
你在puppet上更新/some/dumb/file ,它会触发yum更新
如果你不想在无人值守的情况下运行它,你可能需要使用Salt-stack。 注意在这个更新过程中salt-minion不会自动更新。 ZeroMQ会突然closures连接,更新将被中断,您将需要重新生成包DB(它发生在我在一堆Debian服务器上)。