Puppet:如何在包升级期间跳过重启直到配置被替换?

Mar*_*els 5 ubuntu varnish puppet apt

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

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

Class['varnish::repo']
-> Class['varnish::install']
-> Class['varnish::tools']
-> Class['varnish::config']
~> Class['varnish::service']
Run Code Online (Sandbox Code Playgroud)

我已经更新了APT-回购网址varnish::repo,设置ensure=>latestvarnish::install并提供了一个更新的配置文件varnish::config。到现在为止还挺好。

当 Puppet 运行这些依赖项时,运行会在该varnish::install阶段失败,因为 Apt 会在升级 Varnish 守护进程后立即尝试重新启动它,而没有给 Puppet 替换配置文件的机会。类中的失败varnish::install会导致依赖链中断,并导致其余类也失败。结果是损坏的 Varnish 安装需要手动恢复。

你如何处理这个问题?

我考虑过使用policy-rc.d,它本质上是告诉 Apt 不要执行服务的自动停止和启动。我尝试在升级之前创建文件并在升级之后将其删除。

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

当然创建删除是一个问题,因为 Puppet 将其视为重复资源。

你问我为什么要在安装后再次删除该策略?因为我们过去常常unattended-upgrades执行较小的安全升级,而我希望在这些情况下允许自动重启服务,但在这种情况下则不然。此外,policy-rc.d 影响所有服务,而不仅仅是 Varnish。

也许我想错了,但是我可以以某种方式告诉 Puppet 或 Apt 等待重新启动,直到配置文件也被替换吗?

jmp*_*242 2

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