在puppet中,如何从不同的参数化类中检索类范围内的变量

时间:2017-06-02 23:07:54

标签: puppet puppet-3

在一个类的范围内,我需要能够从另一个类访问变量。变量作为参数传递,例如

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_classother_class的值?是否无法在参数化类上使用include

1 个答案:

答案 0 :(得分:0)

根据Puppet文档(https://docs.puppet.com/puppet/3.5/lang_classes.html#include-like-behavior),您不能使用包含类似声明的强制参数。在您的情况下,您可以做的就是不要理会包含,因为您已经通过在节点定义中声明它来处理它。此外,因为两者都在您的节点定义中声明,您也希望在那里对它们进行排序。

作为不提供默认值的附注是一种不好的做法,就像在模块中使用变量一样。

相关问题