ERB模板无法从hieradata中获取变量

4
我有一个木偶基础设施,并创建了一个新模块,它引用hieradata yaml文件中存在的变量,在清单部分中所有内容都正常工作。但是,当我在erb模板中引用它们时,在puppetrun之后变量不显示任何内容。文件存在,但变量不存在。
init.pp
class cms_nxlog ($msi_file) {
    anchor { 'cms_nxlog::begin': }
->
file { "C:/CMS/${cms_nxlog::msi_file}":
    ensure      =>  'file',
    source      =>  "puppet:///modules/cms_nxlog/${cms_nxlog::msi_file}",
    owner       => 'Administrators',
    group       => 'Users',
    mode        => '0770'

}
->
package { 'NXLOG-CE':
    ensure      =>  installed ,
    source      =>  "C:\\CMS\\${cms_nxlog::msi_file}",
}
->
file { "C:/Program Files (x86)/nxlog/conf/nxlog.conf":
    ensure      => 'file',
    content      => template('cms_nxlog/nxlog.conf.erb'),
    owner       => 'Administrators',
    group       => 'Users',
    mode        => '0770',
    notify      => Service['nxlog'],
}
->
service { 'nxlog' :
    ensure      =>  'running',
    require     => Package['NXLOG-CE']
}
->
    anchor { 'cms_nxlog::end': }
}

模板中相关的erb代码段:

<Output out>
Module om_udp
   Host <%= scope.lookupvar('cms::log_server') %>
   Port <%= scope.lookupvar('cms_nxlog::port') %>
</Output>

相关的yaml部分

cms_nxlog::msi_file:               nxlog-ce-2.8.1248.msi
cms_nxlog::port:                   514
cms::log_server:              192.168.1.50

整个安装过程很顺利,只是在复制erb文件时似乎无法填充作用域.lookupvar的内容,所以最终得到的结果是:
<Output out>
Module om_udp
   Host 
   Port 
</Output>

如我之前所说,变量在清单中似乎可以正常工作,但在模板中却不行。我已经将其与一个类似的模块进行了比较,但没有成功。谢谢。
2个回答

3

你需要调用 scope.function_hiera,而不是 scope.lookupvar

<Output out>
Moudule om_udp
    Host <%= scope.function_hiera(['cms::log_server']) %>
    Port <%= scope.function_hiera(['cms_nxlog::port']) %>
</Output>

请注意,function_hiera 接受一个数组作为参数,而不是一个字符串。
希望这可以帮到您!

谢谢,让我试一下! - Keef Baker
@peter 当我运行 hiera cms_nxlog::port时,我得到了结果 514,但是为什么我不能在模板中使用它作为Port <%= hiera('cms_nxlog::port') %>,这是使用函数scope.function_hiera的原因吗? - BMW
是的,function_hiera 是用来在 cms_nxlog::port 上执行 hiera 查找的方法。 - ptierno

2
在 Puppet 6 中,这个可以工作:
<%= scope().call_function('lookup', ['cms_nxlog::port']) %>

其中'cms_nxlog::port'是hiera中的一个字符串变量


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接