在Puppet模块中放置variables

我有一个puppet模块来设置几个Gigaspaces PU。 其中每个variables都有很多variables放置在configuration文件模板中。 我们还使用了几个不同的环境,所以这些variables重复多次以包含每个环境的值。

我的问题是存储这些variables的最佳位置是什么? 一个自己的类,一个外部的.pp我导入,或者其他的东西?

你所要求的很多东西都不仅仅是严格的语言要求……这种语言足够灵活,可以用很多不同的方式来做事情。

如果所有服务器的configuration都一样,那么应该可以使用顶部的variables来设置一个单独的“gigaspace”类。

如果你的需求比单个服务器类更复杂,我要做的就是创build一个“gigaspace”模块,它带有一个通用类,它包含由需要variables的类inheritance的variables。 在gigaspace / manifest中会有一个包含“ class gigaspace {...} ”的“ class gigaspace {...} ”,然后是一个包含“ class gigaspace::common {...} ”的“common.pp”。 然后在任何我需要访问这些variables的类中,我将inheritance普通类,如“ class gigaspace::master inherits gigaspace::common { ... } ”。

如果不从其他类inheritance,那么获取另一个类中的variables,特别是从模板中获取variables是一件痛苦的事情。 通过直接包含,您可以通过指定全名来获得只读权限。

我非常喜欢使用外部节点分类器来设置顶部范围的variable=value 。 这样,您可以使用真正的数据存储区和编程逻辑来确定给定节点的值应该是多less,而不是将一堆木偶语言条件堆成乱七八糟的variables.pp .pptypes的文件。 inheritance和范围界定是木偶中的两大领域,即使你知道会发生什么,也不会像许多人所期望的那样工作,而且事实上也有自己的警告和问题。 没有外部节点,你将需要一个或两个。

外部节点分类器的工作方式是configurationpuppetmaster的puppet.conf来运行它:

 [master] node_terminus = exec external_nodes = /path/to/my/classifier.rb 

每次客户端连接连接客户端证书名称的命令行参数时,主服务器都会执行该操作。 您的代码可以执行您所需的任何操作,并返回YAML classes:的列表classes:应包含在节点和parameters:列表中parameters:它们被设置为顶级范围variables,用于在清单和模板中使用。

源分布的ext /目录中有几个样本分类器。 这是一个解决“合理的默认,超越我所需要的地方”的超级方法。

我通常看到两个build议。 一个是使用外部节点分类器,就像eric sorensonbuild议的那样。 另一个是使用extlookup。 Extlookup易于使用,并且在版本2.6.1中包含在puppet中。 我一直很满意。

您可以在您的模块内部有一个由其他模块调用的variables.pp清单。 这是我见过的最常见的事情。 对于环境variables,我会看看一些事实的事实,看看你是否可以使用这些。 如果你可以发布你的模块的例子,我可能会提供更多的细节。