Назад | Перейти на главную страницу

Как настроить сетевой интерфейс с помощью ресурса chef ifconfig для IP, определенного во время выполнения рецепта

Я работаю с Chef через Amazon Opsworks, и мне нужно выделить и настроить дополнительные сетевые интерфейсы для некоторых из моих серверов, и мне сложно понять, как правильно использовать ifconfig шеф-повар ресурс. Основная проблема в том, что я не знаю IP-адрес интерфейса на момент написания рецепта шеф-повара. Все примеры, которые я видел, показывают целевой IP-адрес, выраженный в виде постоянной строки в имени ресурса, например:

ifconfig '10.0.0.1' do
 eth1
end

Однако я инициализирую сетевой интерфейс во время выполнения рецепта, поэтому я не знаю заранее, какой IP-адрес будет назначен подготовленному сетевому интерфейсу в локальной сети (Amazon VPC). Я написал ресурс ruby_block, который подготавливает интерфейс и собирает назначенный IP-адрес, но я получаю ошибки от ресурса chef, когда пытаюсь передать его в ifconfig ресурс, как, кажется, следует из документации. Мой код выглядит примерно так:

ruby_block 'provision_and_get_IP' do
  # Inside the following function the AWS CLI is called to provision
  # a network interface and return the assigned IP address
  assigned_ip = provision_and_get_ip()
  node["my_attributes"]["assigned_ip"] = assigned_ip
end

ifconfig 'setup_interface' do
  device 'eth1'  
  target lazy { node["my_attributes"]["assigned_ip"] }
end

И я получаю сообщение об ошибке

[2016-03-30T19:15:21+00:00] ERROR: ifconfig[setup_interface] (my_cookbook::my_recipe line 66) had an error: Chef::Exceptions::Exec: ifconfig eth1 setup_interface returned 1, expected 0
---- Begin output of ifconfig eth1 setup_interface ----
STDOUT: STDERR: setup_interface: Unknown host
ifconfig: `--help' gives usage information.
---- End output of ifconfig eth1 setup_interface ----

В документация для ресурса ifconfig казалось, предполагалось, что целевое свойство просто по умолчанию соответствует имени ресурса и что, если я его установлю, это сработает, но, похоже, это не так. Что я здесь делаю не так?

Я не думаю, что вы сможете многого добиться с ifconfig рецепт здесь. Когда вы запрашиваете дополнительный интерфейс для своей виртуальной машины, он выделяется Amazon, и я думаю, что Amazon также управляет адресацией. Даже если вы можете изменить IP-адрес своего интерфейса, велика вероятность, что Amazon не распознает и не перенаправит его должным образом.

Один из вариантов - использовать частные статические IP-адреса, о которых вы заранее знаете, какой адрес получит ваш интерфейс. Другой вариант - извлечь адрес нового интерфейса из метаданных.