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 }
我不確定這是否有效,但如果有效,我可以將什麼用於虛擬服務?
是的,這是可能的,並且您的程式碼非常接近正確的解決方案:
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