Puppet - 是否可以使用全域變數來拉入具有相同名稱的範本?

Puppet - 是否可以使用全域變數來拉入具有相同名稱的範本?

我是木偶新手。因此,我正在嘗試以最佳方式設定有意義的清單。遵循 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'沒有變數將被插值。您必須使用雙引號。

相關內容