木偶:如何在程序包升级过程中跳过重启,直到configuration被replace?

我试图让Puppet升级我们的Varnish 3服务器到Varnish 4,这是一个重要的更新,需要一个更新的configuration文件,否则将无法启动。 这是在Ubuntu 12.04上。

Varnish模块基本上是由这些类和依赖项构build的:

Class['varnish::repo'] -> Class['varnish::install'] -> Class['varnish::tools'] -> Class['varnish::config'] ~> Class['varnish::service'] 

我已经更新了varnish::repo的Apt-repo URL,在varnish::install设置ensure=>latest ,并向varnish::config提供了一个更新的configuration文件。 到现在为止还挺好。

当Puppet运行这些依赖关系时,在varnish::install阶段运行失败,因为Apt尝试在升级后立即重启Varnish守护进程,而不是让Puppet有机会replaceconfiguration文件。 varnish::install类中的失败会导致依赖关系链中断,并导致其余的类也失败。 结果是需要手动恢复的一个损坏的Varnish安装。

你怎么处理这个?

我想过使用policy-rc.d ,它基本上告诉Apt不要执行自动停止和服务启动。 我试图在升级之前创build文件,然后将其删除。

 file {'/usr/sbin/policy-rc.d': ensure => $ensure, content => "#!/bin/sh\nexit 101", owner => 'root', group => 'root', mode => '0755', } 

当然创build删除是一个问题,因为Puppet把这看作是一个重复的资源。

为什么我想再次删除策略,只需要安装它,你问? 因为我们使用unattended-upgrades来执行较小的安全升级,我想在这种情况下允许自动服务重新启动,而不是在这种情况下。 此外,policy-rc.d会影响所有的服务,而不仅仅是Varnish。

也许我正在考虑这个错误,但我可以告诉Puppet或Apt等待重启,直到configuration文件被replace?

为什么不在安装更新之前更换configuration文件? 如果在重新启动时加载,则在更新重新启动之前,不会使用“错误的”configuration文件。 。 。