Puppet

Puppet - 我可以選擇性地通知服務嗎?

  • July 14, 2021

我有一個 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
}

我不確定這是否有效,但如果有效,我可以將什麼用於虛擬服務?

是的,這是可能的,並且您的程式碼非常接近正確的解決方案:

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

引用自:https://serverfault.com/questions/1069510