【发布时间】:2020-06-05 18:07:04
【问题描述】:
是否可以有条件地跳过 service 资源上的刷新事件?或者:是否可以防止类内的service 资源在通知类时被刷新?
上下文:我有一个 Puppet 模块,其中包含以下清单(简化):
class foo(
Boolean pre_process_service = true,
Boolean auto_restart_service = true
) {
if $pre_process_service {
exec { 'process config':
... # details including a pretty complex command - should be hidden in my module
notify => Service['foo'],
}
}
service { 'foo':
ensure => 'running',
enable => true,
}
}
可能会这样使用:
file { 'config':
... # copies config from somewhere
}
class { 'foo':
auto_restart_service => false,
subscribe => File['config'],
}
当用户指定auto_restart_service => false时如何避免重启服务?
请注意,模块的用户决定如何提供配置(复制文件,签出 Git 存储库,...),所以我不能在我的模块中这样做。相反,该类订阅提供配置的资源。只要用户使用默认的auto_restart_service = true,一切都可以正常工作,甚至禁用配置的预处理也可以正常工作。但是,当用户指定auto_restart_service = false 时,服务仍将重新启动,因为在通知类时会刷新service 资源。像我对 exec 资源所做的那样,将服务资源包装到 if 块中也不起作用,因为 service 资源可以做多种事情:
- 如果服务没有运行,它会启动它
- 如果服务未启用,则启用该服务
- 如果收到通知,它会重新启动服务
我只想有条件地阻止 (3) 的发生,同时始终执行 (1) 和 (2)。有没有办法做到这一点?
【问题讨论】:
标签: puppet