Puppet - 我可以有选择地通知一个服务吗?

Puppet - 我可以有选择地通知一个服务吗?

我有一个 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

相关内容