我是 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
puppet 时,它都会抱怨找不到该shell/bash/$service_env.erb
文件,但我仔细检查了它是否存在。我知道由于通知语句输出了预期值,因此 var 是可访问的,所以我怀疑我所做的是不允许的。
我知道我可以有一个template.erb
并将变量传递给模板,这在本例中是可行的,因为 custom.sh 文件很小,而且在环境中没有太多变化,但对于更复杂的配置(httpd、solr 等),我更愿意访问特定于环境的文件。我也知道我可以指定特定于环境的模块路径,但我更愿意在模板级别处理这种行为,而不是拥有多个名称相近的目录。
谢谢。
答案1
您使用单引号,'shell/bash/$service_env.erb'
这意味着没有变量将被插入。必须使用双引号。