0

我将在 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>
4

1 回答 1

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。

于 2017-11-07T17:59:58.683 回答