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