Как динамически получить IP-адрес из уже выполненного рецепта в Chef

Я новичок в Chef, и я пытаюсь протестировать конфигурацию кластера AWS для 2 серверов БД + 2 сервера приложений с использованием kitchen-ec2 и столкнулся со следующей проблемой:

Я не могу динамически передать ip_address_1 из рецепта №1 (рецепт №1 для сервера 1 выполнен) в рецепт №2 (который является рецептом конфигурации для сервера2 и выполняется). Было бы полезно услышать ваш совет.

Одна из вещей, которые я могу сделать, это явно установить IP-адрес в .kitchen.yml для каждого ящика, который я пытаюсь настроить, но мне любопытно, есть ли способ сделать это на лету, что-то вроде Ohai node['ipaddress'], но более общий, возможно, список всех IP-адресов серверов, настроенных в моем кластере.

рецепт №1готовосервер1 настроен, AWS назначен частный ipaddress1
рецепт# 2в процессе — конфигурация server2 применяется, но требуется ipaddress1

Заранее спасибо,
Дмитрий


person Dmitry Savinkov    schedule 06.03.2015    source источник


Ответы (1)


Я не уверен, что это то, что вы ищете, но вы можете получить доступ ко всем конфигурациям серверов в своем рецепте через search, например:

search(:node, 'recipes:"recipe#2"')

А затем повторите результаты, чтобы получить доступ к конфигурации узлов.

пример, используемый для заполнения /etc/hosts . Я использую knife-ec2, я не уверен, предоставляет ли kitchen-ec2 все эти атрибуты.

recipes/default.rb

template "/etc/hosts" do
  source "etc/hosts.erb"
  owner "root"
  group "root"
  mode "0644"
  variables(:servers => search(:node, "chef_environment:#{node.chef_environment}"),
            :region => node['ec2']['placement_availability_zone'].match(/(\w*\-\w*\-\d*).*/)[1])
end

templates/default/etc/hosts .erb

<% @servers.each do |n| %>
   <% if n["ec2"] %>
      <% region = n["ec2"]["placement_availability_zone"].match(/(\w*\-\w*\-\d*).*/)[1] %>
      <% if region == @region && n["ec2"]["local_ipv4"] %>
<%= n["ec2"]["local_ipv4"] -%> <%= n.name -%> <%= n["ec2"]["hostname"] -%>

      <% elsif n["ec2"]["public_ipv4"] %>
<%= n["ec2"]["public_ipv4"] -%> <%= n.name -%> <%= n["ec2"]["public_hostname"] -%>

      <% end %>
   <% end %>
<% end %>
person makhan    schedule 07.03.2015
comment
Большое спасибо! Это то что мне нужно. - person Dmitry Savinkov; 07.03.2015