我有一个木偶基础设施,我已经创建了一个新模块,它引用了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>
正如我先前所说,变量似乎在清单中正常工作,而不是在模板中。我把它与一个似乎无济于事的类似模块进行了比较。
由于
答案 0 :(得分: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
取array
作为参数,而不是string
。
希望这有帮助!
答案 1 :(得分:0)
在人偶6中有效:
<%= scope().call_function('lookup', ['cms_nxlog::port']) %>
其中'cms_nxlog :: port'是hiera中的字符串变量