我正在致力于让我们的傀儡基础设施更加动态,我可以添加任意数量的节点,这些节点将自动应用于另一个节点配置。
举个例子:我有 X 个主机在运行 Java 应用程序,这些主机由我们的java应用程序模块中定义如下(简化):
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。
答案1
导出资源是实现此目的的非常合适的设计模式,是的。但是,模板不能直接使用当前目录中的资源(导入的或其他方式)。
你最好的选择是连接模块。让定义的类型为您的应用程序导出 concat 片段。不要file
使用模板content
,而是使用concat
资源。