【发布时间】:2020-04-02 05:13:02
【问题描述】:
puppetlabs/apache 模块中的许多区域,例如vhost.pp,您可以看到需要首先包含基类的错误处理,因为所讨论的类在其参数默认值中使用了基类。
dev.pp 中没有参数,但您可以看到对 $::apache::dev_packages 的引用,它在 ::apache 初始化时由 ::apache::params 类声明。
但是,在vhosts.pp 中,您可以看到基类被显式包含,而不是期望它之前被包含。
我对此的理解是 apache::vhosts 被设计为用作独立类,它包含 ::apache 初始化 Apache 的默认配置,由模块确定。但是,如果 Apache 在其他地方声明,例如:
class { '::apache':
*params*
}
然后,基类的包含利用作为参数传递给基类的任何值。那是对的吗?为什么apache::vhosts和apache::dev这两个公共类会有两种不同的使用要求?
【问题讨论】:
-
虽然这是一个有趣的问题,但它也有点没有意义,因为
params模式早在几年前就存在了,那时模块数据功能还不存在,而且您通常也不应该直接声明类资源不再是最佳实践。在现代最佳实践中,您将使用与模块数据(或环境或全局)的自动参数绑定,然后您的参数查找将符合此要求。 -
@MattSchuchard 我完全同意,我认为这是处理模块参数数据的“传统方式”。出于好奇,这比什么都重要。感谢您指出这一点。