Puppet:有条件地重新启动服务
是否可以有条件地跳过Puppet:有条件地重新启动服务,puppet,Puppet,是否可以有条件地跳过服务资源上的刷新事件?或者:当通知类时,是否可以防止类内的服务资源被刷新 上下文:我有一个Puppet模块,包含以下清单(简化): class-foo( 布尔预处理服务=true, 布尔值自动重新启动服务=true ) { if$pre_过程_服务{ exec{“进程配置”: …#包括相当复杂的命令在内的详细信息应该隐藏在我的模块中 notify=>Service['foo'], } } 服务{'foo': 确保=>“正在运行”, enable=>true, } } 可以
服务
资源上的刷新事件?或者:当通知类时,是否可以防止类内的服务资源被刷新
上下文:我有一个Puppet模块,包含以下清单(简化):
class-foo(
布尔预处理服务=true,
布尔值自动重新启动服务=true
) {
if$pre_过程_服务{
exec{“进程配置”:
…#包括相当复杂的命令在内的详细信息应该隐藏在我的模块中
notify=>Service['foo'],
}
}
服务{'foo':
确保=>“正在运行”,
enable=>true,
}
}
可以这样使用:
文件{'config':
…#从某处复制配置
}
类{'foo':
自动重新启动\u服务=>false,
订阅=>File['config'],
}
当用户指定auto\u restart\u service=>false
时,如何避免重新启动服务
请注意,模块的用户决定如何提供配置(复制文件、签出Git存储库等等),因此我不能在模块内这样做。相反,类订阅提供配置的资源。只要用户使用默认的auto\u restart\u service=true
一切正常,甚至禁用配置的预处理也能正常工作。但是,当用户指定auto\u restart\u service=false
时,服务仍将重新启动,因为在通知类时,service
资源将被刷新。将服务资源包装到if
块中,就像我对exec
资源所做的那样,也不起作用,因为服务
资源执行多个操作:
如果服务未运行,它将启动该服务
如果未启用该服务,它将启用该服务
如果收到通知,它将重新启动服务
我只想有条件地阻止(3)的发生,同时总是做(1)和(2)。有什么方法可以做到这一点吗?我不认为有什么方法可以在通知班级时不刷新服务。但是,您可以尝试使用服务
资源的restart
属性有条件地覆盖Puppet应该如何重新启动服务
大概是这样的:
if $auto_restart_service {
# Let the provider handle the restart
$_attr = {}
} else {
# Let Puppet execute `true` instead of actually restarting the service
$_attr = { 'restart' => '/usr/bin/true' }
}
service { 'foo':
ensure => 'running',
enable => true,
* => $_attr,
}
我不认为在你通知全班的时候没有办法不刷新服务。但是,您可以尝试使用服务
资源的restart
属性有条件地覆盖Puppet应该如何重新启动服务
大概是这样的:
if $auto_restart_service {
# Let the provider handle the restart
$_attr = {}
} else {
# Let Puppet execute `true` instead of actually restarting the service
$_attr = { 'restart' => '/usr/bin/true' }
}
service { 'foo':
ensure => 'running',
enable => true,
* => $_attr,
}
来自tectux的想法真的很好。我增强了if条件。我已决定使用自定义事实脚本
模块/autofs/facts.d/autofs.sh
#!/bin/sh
DECISION=`test -f /usr/bin/docker && /usr/bin/docker ps -q |grep -q . && echo no`
if [ "x$DECISION" == "x" ] ; then
DECISION=yes
fi
echo '{'
echo ' "autofs": {'
echo " \"do_automatic_restart\": \"$DECISION\""
echo ' }'
echo '}'
因此,脚本的输出
# modules/autofs/facts.d/autofs.sh
{
"autofs": {
"do_automatic_restart": "yes"
}
}
现在我们可以使用自定义事实
if $facts['autofs']['do_automatic_restart'] == "no" {
$_attr = { 'restart' => "logger puppet agent: automounter is NOT going to be RESTARTED due to active containers on a host" }
} else {
$_attr = {}
}
来自tectux的想法真的很好。我增强了if条件。我已决定使用自定义事实脚本
模块/autofs/facts.d/autofs.sh
#!/bin/sh
DECISION=`test -f /usr/bin/docker && /usr/bin/docker ps -q |grep -q . && echo no`
if [ "x$DECISION" == "x" ] ; then
DECISION=yes
fi
echo '{'
echo ' "autofs": {'
echo " \"do_automatic_restart\": \"$DECISION\""
echo ' }'
echo '}'
因此,脚本的输出
# modules/autofs/facts.d/autofs.sh
{
"autofs": {
"do_automatic_restart": "yes"
}
}
现在我们可以使用自定义事实
if $facts['autofs']['do_automatic_restart'] == "no" {
$_attr = { 'restart' => "logger puppet agent: automounter is NOT going to be RESTARTED due to active containers on a host" }
} else {
$_attr = {}
}