我有一个 Puppet 脚本,它根据一个if/else
块在不同的环境中以不同的方式处理事情。但我在底部有一堆适用于所有环境的通用文件资源块。目前,这些块notify => Service['my-service']
,但对于生产,我希望它不通知。我只希望它更新文件,而不是启动或停止任何服务。
我最初的想法是,我可以将服务存储到变量中并将其设置在每个部分中吗?
例子:
if ($env == 'dev') {
$myService = Service['my-service']
} elsif ($env == 'prod') {
$myService = Service['dummy-service']
}
file { "myfile.xml":
ensure => file,
content =>
template("mytemplate.erb"),
require => Package['my-service'],
notify => $myService
}
我不确定这是否会起作用,但如果起作用,我可以使用什么来提供虚拟服务?
答案1
是的,这是可能的,并且您的代码非常接近正确的解决方案:
if ($env == 'dev') {
$my_service = 'my-service'
} elsif ($env == 'prod') {
$my_service = 'dummy-service'
}
file { "myfile.xml":
ensure => file,
content => template("mytemplate.erb"),
require => Package['my-service'],
notify => Service[$my_service]
}
但是,由于您的请求是在某个环境中根本不通知,因此更好的方法是这样做,而不是通知虚拟服务:
if ($env == 'dev') {
File['myfile.xml'] ~> Service['my-service']
}
这些被称为链接箭头:https://puppet.com/docs/puppet/7/lang_relationships.html#lang_rel_chaining_arrows