【问题标题】:Puppet hiera variable in erb `if` statementerb`if`语句中的人偶hiera变量
【发布时间】:2019-03-28 11:59:46
【问题描述】:

我的 erb 模板中有一个 hiera 变量用于条件检查。

<% if @server_name == 'jira-dev-api'

升级到 puppet 5 后,if 循环中的这个变量不起作用。但是,如果没有 erb 模板中的 if 语句,这将采用正确的值。

  1. 我尝试了用于 hiera 调试的 puppet 查找,它工作正常。该变量在以下同一模块中定义。

    module_name::install_confluence_apache_config::server_name=xyz
    
  2. 当我附加一个具有绝对路径的范围时,如下所示,

    scope['module_name::install_confluence_apache_config::server_name'] 
    

    它有效。

puppet 5 中 if 语句中的 erb 作用域有什么变化吗?我正在使用 puppet 3 开源。

添加更多信息。

a)server_name 是在“nodes/%{::clientcert}”yaml 文件中定义的变量。 b)我使用的是 puppet 3.8,工作 erb 模板如下

<% if @server_name == 'jira-dev-api'

c)升级到 puppet 5.5。但观察到,当我在上面的 if 语句中引用 erb 中的 server_name 变量时,值没有得到。但是当我使用时工作

scope['module_name::install_confluence_apache_config::server_name']

这个问题也只存在于 erb 模板中的 if 语句中。

【问题讨论】:

  • 这里没有足够的信息来诊断问题,甚至不足以让我确信我知道你所说的不寻常的术语“hiera variable”是什么意思。请出示minimal reproducible example
  • 另外,您的代码在哪个版本的 Puppet 中按预期工作? 已经改变了 ERB 模板中变量作用域的工作方式,但最近没有。
  • 它在 puppet 3.x 中工作。
  • 如果它确实是一个范围问题并且代码在 Puppet 3 框架的某个地方工作,那么“3.x”可能不准确。我的猜测是该模板依赖于从 动态范围 获得的变量,但删除几乎所有形式的动态范围是 Puppet 2 和 Puppet 3 之间的变化之一。Puppet 3 的早期版本然而,在那个动态范围内(错误地)仍然在模板中工作,有点错误。这在 Puppet 3 的后续版本中得到了修复。
  • 模板仅通过查找函数从 Hiera 访问数据。 @server_name 语法 strongly 表明您的模板不希望从 Hiera 获取数据,而是从某个类的变量(可能从 Hiera 获取)获取数据。详细信息与问题相关,因此请再次提交 MCVE。如果您不确定这意味着什么或如何创建一个,请点击我第一条评论中的超链接。

标签: puppet erb hiera


【解决方案1】:

谢谢约翰和亚历克斯。

这是一个范围问题,因为约翰说它在 3.8 之前使用 @syntax 可能是由于该错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-09
    • 2021-08-13
    • 2016-09-23
    相关资源
    最近更新 更多