木偶 – 是否有可能使用一个全局variables来拉同名的模板?

我是新来的傀儡 正因为如此,我正在努力工作,以最好的方式来设置我的清单是有道理的。 遵循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是可以访问的,因为notify语句输出的期望值,所以我怀疑我在做什么是不允许的。

我知道我可以有一个template.erb并将variables传递给模板,这将在这种情况下工作,因为custom.sh文件很小,跨环境没有太多的变化,但对于更复杂的configuration(httpd,solr等)我宁愿访问特定于环境的文件。 我也意识到我可以指定环境特定的模块path,但我宁愿只在模板级别处理这种行为,而不是有几个密切指名的目录。

谢谢。

你使用单引号'shell/bash/$service_env.erb' ,这意味着没有variables将被内插 。 您必须使用双引号。