带破折号的变量

带破折号的变量

在 puppet 中,模块名称中可以有破折号,变量也可以。但是,我们如何使用这样的变量呢?

例如,我有一个在类$ssh_mode中定义的变量google-authenticator::params,因此我希望能够调用$google-authenticator::params::ssh_mode,但 puppet (0.25.5) 会切断破折号。使用${google-authenticator::params::ssh_mode}也无济于事。

我该怎么做才能访问这个变量?

答案1

您会发现这在更高版本中有效。当然,在 Puppet 2.7 中,字符串中的变量插值现在包括破折号(这也会导致一些兼容性问题)。

但更深层次的问题是,您依赖未定义的带破折号的模块处理。我强烈建议您将模块重命名为使用下划线,或不使用分隔符。如果您不遵循此建议,Puppet 中会出现许多错误(在不同的主要版本之间出现和消失):

类名、模块名以及已定义和自定义资源类型的名称应限制为小写字母数字字符和下划线,并且应以小写字母开头;也就是说,它们应与表达式 [az][a-z0-9_]* 匹配。尽管目前某些违反这些限制的名称可以工作,但不建议使用它们。

语言指南(保留字和可接受字符)

答案2

以下是描述允许的字符在傀儡标识符中。

在类名部分下,您可以阅读:

 …but if you use any hyphens, you screw up qualified variable access.

在变量部分下,您可以阅读:

* [a-zA-Z0-9_]+ (No unicode nonsense or %@^ etc.)
* i.e. no hyphens, ever.

相关内容