我正在尝试让 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::repo
,ensure=>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
为什么不在安装更新之前替换配置文件?如果它在重新启动时加载,它将不会使用“错误的”配置文件,直到更新重新启动它之后……