ERB模板未从hieradata中提取变量

问题描述 投票:3回答:2

我有一个伪造的基础结构,我创建了一个新模块,该模块引用了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时似乎没有填写scope.lookupvar的内容,所以我最终得到了

<Output out>
Module om_udp
   Host 
   Port 
</Output>

正如我之前说过的那样,变量似乎可以在清单中正常工作,而不能在模板中正常工作。我已将其与类似的模块进行了比较,但似乎无济于事。

谢谢

erb puppet
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_hieraarray作为参数,而不是string

希望这会有所帮助!


0
投票

在p 6中,此方法有效:

<%= scope().call_function('lookup', ['cms_nxlog::port']) %>

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

© www.soinside.com 2019 - 2024. All rights reserved.