我将在BOSH中部署我的应用程序并使用n个节点对其进行集群。 例如,2所以在我的应用程序中,当我在manifest.yml中部署应用程序时,我已在下面定义。 所以它从10.244.15.21开始,下一个节点从10.244.15.22开始,当我在manifest.yml中给出实例:2时
static: - 10.244.15.2 - 10.244.15.20
因此,在我的每个应用程序中,我需要访问XML文件中的每个其他节点的IP。如何在xml文件中动态执行此操作。请指教。谢谢
,例如,
<parameter name="localMemberHost">127.0.0.1</parameter>
<members>
<member>
<hostName>10.244.15.21</hostName>
<port>4000</port>
</member>
<member>
<hostName>10.244.15.22</hostName>
<port>4000</port>
</member>
</members>
答案 0 :(得分:0)
根据您的示例,您应该能够使用作业模板的ERB评估和已知的IP范围组合来完成此任务。
首先在清单中定义与该作业的计数匹配的特定IP范围。您需要增加共享网络定义中的静态预留,以覆盖您需要的.21 +范围。然后该作业使用这些静态IP的分配。见https://bosh.io/docs/networks.html
jobs:
- name: clustered-job
instances: 5
templates:
- name: jobname
release: releasename
networks:
- name: default
static_ips: [10.244.15.21 - 10.244.15.26] <-- you would need to make sure these are reserved in cloud config
我假设有问题的xml文件在您的工作规范中被定义为“模板”,这是使用可用属性启用ERB评估所必需的。 https://bosh.io/docs/jobs.html#templates https://bosh.io/docs/jobs.html#properties
您将使用循环和一些已知属性来定义所有集群成员。
<%= spec.networks.default.static_ips %>
使循环摄取清单中指定的任何内容。您可能希望为作业添加一个属性来指定起始IP,因为我忘了如果上面给出了整个清单的IPS,或者只是作业(我认为它是后者)。
<% @spec.networks.default.static_ips.each do |static_ip| %>
<member>
<hostName><%= static_ip %></hostName>
<port>4000</port>
</member>
<% end %>
如果您需要将其从循环中排除,您还可以检查spec.ip
以获取当前实例的IP。