Puppet - 是否可以使用全局变量来引入具有相同名称的模板?

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 --testpuppet 时,它都会抱怨找不到该shell/bash/$service_env.erb文件,但我仔细检查了它是否存在。我知道由于通知语句输出了预期值,因此 var 是可访问的,所以我怀疑我所做的是不允许的。

我知道我可以有一个template.erb并将变量传递给模板,这在本例中是可行的,因为 custom.sh 文件很小,而且在环境中没有太多变化,但对于更复杂的配置(httpd、solr 等),我更愿意访问特定于环境的文件。我也知道我可以指定特定于环境的模块路径,但我更愿意在模板级别处理这种行为,而不是拥有多个名称相近的目录。

谢谢。

答案1

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

相关内容