获取Puppet模板中的节点列表的最佳方法

从Puppet模板中获取所有节点列表的build议方法是什么?

假设我有一个运行Nginx的负载平衡器。 在模板内部,我想生成后端服务器列表。 为了简单起见,假设这些应用程序服务器具有与“appserver *”匹配的主机名。

目前,我在每个应用程序服务器的site.pp中定义一个数组,并使用它,如下所示:

upstream www.foobar.com { <% appservers.each do |val| -%> server <%= val %>:80; <% end -%> } 

我想取消那个手动定义的数组,而是查询Puppet。

我不认为有一个推荐的方法。 这取决于你的设置我猜。

有几种方法来实现这一点。 您可以使用导出的资源并查询puppetDB 。

我更喜欢的方法,因为我已经使用了Foreman,是使用foremans parsing器函数从工头获取节点列表。

所以在你的清单中,你可以做一些事情:

$appservers = foreman("hosts", 'hostgroup = appservers')

假设您的应用程序服务器位于Foreman主机组calles的“appservers”中。 这是一个博客文章,解释它。

另一种方法是将“appserver”列表存储在文本文件或数据库中,然后编写自己的函数来检索列表。 正如你所看到的,编写parsing器函数很简单。

另一种方法是使用Hiera 。