在一个类的范围内,我需要能够从另一个类访问变量。变量作为参数传递,例如
class parameterized_class (
$param1,
) {
...
}
和
class other_class () {
include parameterized_class
Class['parameterized_class'] -> Class['other_class']
$local_var = $parameterized_class::param1
}
使用示例:
node default {
class { 'parameterized_class':
param1 => 'somevalue',
}
class { 'other_class': }
}
上面的示例不起作用,因为我得到的错误看起来大致如下:
必须将param1传递给 类[Parameterized_class] at /path/to/modules/parameterized_class/manifests/init.pp:1 在节点localhost上
显然,include试图在不传递任何参数的情况下声明parameterized_class
。但是从文档中,我可以看到include
允许已经先前声明过一个类,并且由于我将parameterized_class
声明作为other_class
的依赖,我不知道了解我是如何得到这个错误的。
我正在使用Puppet 3.4.3,Ubuntu 14.04 Trusty上提供的版本
如何从$param1
范围内检索parameterized_class
中other_class
的值?是否无法在参数化类上使用include
?
答案 0 :(得分:0)
根据Puppet文档(https://docs.puppet.com/puppet/3.5/lang_classes.html#include-like-behavior),您不能使用包含类似声明的强制参数。在您的情况下,您可以做的就是不要理会包含,因为您已经通过在节点定义中声明它来处理它。此外,因为两者都在您的节点定义中声明,您也希望在那里对它们进行排序。
作为不提供默认值的附注是一种不好的做法,就像在模块中使用变量一样。