web-dev-qa-db-ja.com

レシピの実行時に決定されたIPのシェフifconfigリソースを使用してネットワークインターフェイスを構成する方法

Amazon Opsworksを介してChefと連携しており、一部のサーバーに追加のネットワークインターフェイスをプロビジョニングして構成する必要があり、ifconfigchefリソースを適切に使用する方法を理解するのに問題があります。主な問題は、シェフのレシピを書いているときにインターフェースのIPアドレスがわからないことです。私が見たすべての例は、次のようにリソース名で定数文字列として表されるターゲットIPアドレスを示しています。

ifconfig '10.0.0.1' do
 eth1
end

ただし、レシピの実行時にネットワークインターフェースをプロビジョニングしているため、プロビジョニングされたネットワークインターフェースがローカルネットワーク(Amazon VPC)内で割り当てられるIPアドレスが事前にわかりません。インターフェイスをプロビジョニングして割り当てられたIPを収集するRuby_blockリソースを作成しましたが、ドキュメントが示唆しているように、それをifconfigリソースに渡そうとすると、chefリソースからエラーが発生します。私のコードは次のようになります。

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リソースのドキュメント は、ターゲットプロパティがデフォルトでリソースの名前になっていることを示唆しているようで、設定すると機能するようですが、そうではないようです。私はここで何が間違っているのですか?

2
Michael Lang

ここでifconfigレシピを使っても多くのことを達成できるとは思いません。 VMの追加インターフェースをリクエストすると、Amazonによって割り当てられ、アドレス指定もAmazonによって管理されると思います。インターフェースのIPアドレスを変更できたとしても、チャンスは十分にあります。 Amazonによって正しく認識およびルーティングされません。

オプションの1つは、インターフェイスが事前に受信するアドレスを実際に知っているプラ​​イベート静的IPアドレスを使用することです。別のオプションは、メタデータから新しいインターフェイスのアドレスを抽出することです。

1
dtoubelis