
我是木偶新手。因此,我正在嘗試以最佳方式設定有意義的清單。遵循 DRY(不要重複)原則,我嘗試在一個範本中載入通用指令,然後從與環境相符的檔案載入環境特定指令。基本上是這樣的:
# nodes.pp
node base_dev {
$service_env = 'dev'
}
node 'service1.ownij.lan' inherits base_dev {
include global_env_specific
}
class global_env_specific {
include shell::bash
}
# modules/shell/bash.pp
class shell::bash inherits shell {
notify{"Service env: ${service_env}": }
file { '/etc/profile.d/custom_test.sh':
content => template('_global/prefix.erb', 'shell/bash/global.erb', 'shell/bash/$service_env.erb'),
mode => 644
}
}
但每次我運行puppet agent --test
木偶都會抱怨它找不到該shell/bash/$service_env.erb
文件,但我仔細檢查它是否存在。我知道由於通知語句輸出預期值,所以 var 是可以存取的,所以我懷疑我正在做這是不允許的。
我知道我可以有一個template.erb
並將變數傳遞給模板,這在這種情況下可以工作,因為custom.sh 檔案很小並且跨環境的更改不多,但對於更複雜的配置(httpd、solr 等)我會更喜歡存取特定於環境的文件。我還知道我可以指定環境特定的模組路徑,但我更願意在模板層級處理此行為,而不是擁有多個名稱密切的目錄。
謝謝。
答案1
您使用單引號意味著'shell/bash/$service_env.erb'
沒有變數將被插值。您必須使用雙引號。