Как получить доступ к IP-адресу моего другого экземпляра внутри моего приложения при настройке нескольких экземпляров

Я собираюсь развернуть мое приложение в BOSH и кластеризовать его с n числом узлов. Например, 2 Итак, в моем приложении, когда я развертываю приложение в моем manifest.yml, я определил ниже. Таким образом, он начинается в 10.244.15.21, а следующий узел начинается в 10.244.15.22, когда дают instance: 2 в моем manifest.yml

static: - 10.244.15.2 - 10.244.15.20 

Таким образом, в каждом моем приложении мне нужно получить доступ к IP-адресам друг друга внутри XML-файла. Как я могу сделать это динамически в файле 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>

1 ответ

Основываясь на своем образце, вы сможете выполнить это, используя комбинацию оценки 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 https://bosh.io/docs/jobs.html

Вы будете использовать цикл и несколько известных свойств для определения всех элементов кластера.

 <%= 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 текущего экземпляра, если вам нужно исключить это из цикла.

Другие вопросы по тегам