【问题标题】:ERB template not picking up variables from hieradataERB 模板未从 hieradata 中提取变量
【发布时间】:2020-05-18 17:12:29
【问题描述】:

我有一个 puppet 基础架构,并且我创建了一个新模块,它引用 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


    【解决方案1】:

    你需要打电话给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

    希望这会有所帮助!

    【讨论】:

    • 谢谢,让我试试看!
    • @peter 当我运行hiera cms_nxlog::port 时,我得到了结果514,但是为什么我不能在模板中使用它作为Port &lt;%= hiera('cms_nxlog::port') %&gt;,这就是使用函数scope.function_hiera 的原因?
    • 是的,function_hiera 是在cms_nxlog::port 上进行分层查找的方法
    【解决方案2】:

    在 puppet 6 中这有效:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      相关资源
      最近更新 更多