在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': }
}