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

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

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

Varnish 模块主要由以下类和依赖项构建:

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

我已更新了 中的 Apt-repo URL varnish::repoensure=>latest在 中进行了设置varnish::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',
}

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

你可能会问,为什么我刚安装完策略就又想删除它?因为我们习惯于unattended-upgrades进行小规模的安全升级,而我想允许在这些情况下,服务会自动重启,但在这种情况下不会。此外,policy-rc.d 会影响全部服务,而不仅仅是 Varnish。

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

答案1

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

相关内容