Я работаю с 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-адреса, о которых вы заранее знаете, какой адрес получит ваш интерфейс. Другой вариант - извлечь адрес нового интерфейса из метаданных.