我正在努力使我们的 puppet 基础设施更加动态,我可以添加任意数量的节点,这些节点将自动应用于另一个节点配置。
一个例子:我有 X 个运行 Java 应用程序的主机,它们由我们的javaapp模块定义,其中包含以下定义(简化):
define javaapp::site (
$site_name,
$site_port ) {
# Doing some stuff regarding deployment, service management etc here
}
这些在 site.pp 文件中定义如下:
javaapp::site { 'app01':
play_site_name => 'app01',
play_site_port => 9100,
}
我们在这些应用程序服务器前面有一个 nginx 反向代理,我需要将请求转发到一系列服务器。目前我的 nginx 模板如下所示:
upstream app-hosts {
server <%= @host_app_01 %>:9100;
server <%= @host_app_02 %>:9100;
}
其中@host_app_01 和@host_app_02 已在site.pp 文件中全局定义
我想做的是收集具有特定 javaapp 站点名称的节点数组,并在 nginx 模板中使用它。像这样的伪代码:
upstream app-hosts {
<% @host_app.each do |host| %>
server <%= @host.ip %>:<%= @host.appPort %>;
<% end %>
}
我已经阅读了一些关于导出资源的内容,但我不知道这是否适合这种情况?
甚至可以用木偶做吗?
我们正在运行 puppet 版本 3.7.5。
导出的资源是一个非常合适的设计模式,是的。但是,模板不能直接使用当前目录中的资源(导入或其他方式)。
你最好的电话将是concat模块之一。让您定义的类型为您的应用程序导出 concat 片段。与其
file
使用模板,不如content
使用concat
资源。