为什么Puppet解析器在某些情况下会失败,而对于其他相同的情况却会工作呢?

时间:2018-09-21 05:38:24

标签: linux validation parsing puppet

因此,测试清单代码的第一部分工作并使用“解析器验证”成功验证:

$display = @("END")
Family ${facts['os']['name']}
Name ${facts['os']['family']}
Family ${facts['os']['name']}
Version ${facts['os']['release']['full']}
END

notify { $display : }

但是,清单代码的下一部分由于以下错误而失败:

Error: Could not parse for environment production: Syntax error at '[' 
(file: /home/vagrant/puppet/facts.pp, line: 4, column: 21)

此清单未通过上述错误验证:

$display = @("END")
Family ${facts['os']['name']}
Name ${facts['os']['family']}
Family ${facts['os']['family']}
Version ${facts['os']['release']['full']}
END

notify { $display : }

据我所知,由于这都是变量,所以只要事实的语法正确,就不会有问题。 “ Family”,“ Version”,“ Name”字符串均不起作用。我已经尝试了这些行的任意数量的不同组合,并看到了看起来仅是不确定性行为。在这种情况下,我无法弄清为什么有时验证而不是为什么。

我真的很困惑这里使用的是什么奥秘验证逻辑。

另一个示例(此示例有效且有效),唯一的更改是更改了要测试的每行开始,事实部分并未更改。

$display = @("END")
Test ${facts['os']['name']}
Test ${facts['os']['family']}
Test ${facts['os']['family']}
Test ${facts['os']['release']['full']}
END

notify { $display : }

如果这很重要,它将在VirtualBox虚拟机(Centos 7)中的Mac上运行。

1 个答案:

答案 0 :(得分:0)

我已经确认这是一个错误,并创建了一个错误报告PUP-9163。错误报告中的更多信息。

建议的解决方法是:

人偶6

$display = @("END")
${getvar("facts.os.family")}
END

人偶4、5

$display = @("END")
${($facts['os']['family'])}
END

感谢Henrik Lindberg的解决方法。

此问题的修复程序已合并到here中,它应该出现在下一个Puppet 5/6版本中。