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

在puppet中,如何从不同的参数化类检索类范围内的变量,puppet,puppet-3,Puppet,Puppet 3,在一个类的范围内,我需要能够从另一个类访问变量。变量作为参数传递,例如 class parameterized_class ( $param1, ) { ... } 及 例如使用: node default { class { 'parameterized_class': param1 => 'somevalue', } class { 'other_class': } } 上面的示例不起作用,因为我得到了一个大致如下的错误: 必

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

class parameterized_class (
    $param1,
) {
    ...
}

例如使用:

node default {
    class { 'parameterized_class':
        param1 => 'somevalue',
    }
    class { 'other_class': }
}
上面的示例不起作用,因为我得到了一个大致如下的错误:

必须将参数1传递给 类[参数化的_类]位于 /path/to/modules/parameterized_class/manifests/init.pp:1 在节点本地主机上

显然,include试图在不传递任何参数的情况下声明
参数化的\u类。但是从文档中,我可以看到,
include
允许一个类之前已经声明过,并且由于我将
参数化的\u类
声明作为
其他\u类
的依赖项,我不明白我怎么会得到这个错误

我使用的是Puppet 3.4.3,Ubuntu 14.04 Trusty上提供的版本


我应该如何从
其他类
的范围内检索
参数化类
中的
$param1
的值?不能在参数化类上使用
include
吗?

根据Puppet文档(),不能使用带有强制参数的include-like声明。在您的例子中,您所能做的就是不用担心包含,因为您已经通过在节点定义中声明它来处理它了。另外,因为这两个都是在节点定义中声明的,所以您也希望在那里对它们进行排序


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

首先,升级到Puppet的非过时版本:。其次,您可以对参数化类使用
include
,但这并不能帮助您在这里实现所需的功能。第三,在
other_类
定义中使用
Class['parameterized_Class']]->Class['other_Class']
以及您尝试执行操作的方式可能最终会导致问题。考虑到这一点以及您正在尝试执行的操作,解决问题的最简单方法是hiera或删除
include parameterized_class
行。请告诉我们您喜欢哪条路线,我们可以进一步提供帮助。
node default {
    class { 'parameterized_class':
        param1 => 'somevalue',
    }
    class { 'other_class': }
}