我们将在未来一周内将RHEL 6.5机器升级到RHEL 6.6。 我知道如何使用Puppet创build回购站,但是不是只使用exec来运行yum -y update ,有没有办法告诉Puppet将操作系统带到(或保持)某个版本? 就像说明应该改变系统以达到或保持以下标准:
operatingsystem => RedHat operatingsystemmajrelease => 6 operatingsystemrelease => 6.6
TL; DR这不是一个好主意。 手动进行更新,或使用不同forms的自动化。
我不认为你应该走这条道路。
一般来说,至less从学术的angular度来看,使用Puppet来确保操作系统更新已经成功完成的想法是合理的。 木偶的目标是让你定义一个状态,并照顾到达这个状态的细节。
这就是说,木偶将需要一个(虚构) distrotypes,所以你可以指定
# pseudo code! Do not try at home or at all! distro { 'CentOS', version => '6.6'; }
你可以想象,继续并实现这样一种types,能够尝试和执行一个同步操作,从你当前的版本得到你所请求的版本。
然而,这样的过程可能是无限复杂的,对于失败和系统腐败(完成错误或根本就没有)几乎是无限可能的。 因此,它不能很好地适应任何forms的自动化。
至于Puppet,具体来说,你会想添加逻辑到你的distro /提供者从各种奇怪的状态中恢复,并实现一个干净的。 仅仅想到这样的努力让我头晕目眩。
编写一个shell脚本。 如果机器数量太大,无法批量使用cssh (正如我可能会做的任何低于几百个节点),创build一个简单的包装,将尽你所需。 使用Puppet进行部署,如果您希望Puppet触发更新,请使用exec资源。 考虑
exec { 'echo /my/update/script | at now+10min': }
所以puppet agent过程不是将做所有工作的yum实例的父亲。 这可能是灾难性的。
不过,如果可行的话,我会手动启动yum命令。
我同意通过木偶升级操作系统看起来像是太容易出错,最后是不可预测的。 但是,如果遵循三条规则,则这不是真的:
我使用下面的puppet代码来升级从12到14的ubuntu机器:
class os_upgrade { # Script for automatic reboot after the puppet run file {'/tmp/reboot_after_puppetrun.sh' : content => "watch -g ls -l ${::puppet_vardir}/state;nohup /sbin/reboot\n", mode => '0755', } # Unattended upgrade exec { 'do-release-upgrade' : command => '/usr/bin/do-release-upgrade -f DistUpgradeViewNonInteractive -m server', logoutput => true, onlyif => "test $::operatingsystemrelease != '14.04'", notify => Exec['reboot_after_upgrade'], timeout => 1800, } # Trigger the reboot as a background job to avoid puppet parentship exec { 'reboot_after_upgrade' : command => "/usr/bin/nohup /tmp/reboot_after_puppetrun.sh&", refreshonly => true, } }
要达到第4点,你必须定义一个阶段,并确保上面提到的类正确归因。
在site.pp :
stage {'post': subscribe => Stage['main']} node 'your_machine' { class { 'os_upgrade' : stage => 'post', }