Amazon Opsworksを介してChefと連携しており、一部のサーバーに追加のネットワークインターフェイスをプロビジョニングして構成する必要があり、ifconfig
chefリソースを適切に使用する方法を理解するのに問題があります。主な問題は、シェフのレシピを書いているときにインターフェースの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リソースのドキュメント は、ターゲットプロパティがデフォルトでリソースの名前になっていることを示唆しているようで、設定すると機能するようですが、そうではないようです。私はここで何が間違っているのですか?
ここでifconfig
レシピを使っても多くのことを達成できるとは思いません。 VMの追加インターフェースをリクエストすると、Amazonによって割り当てられ、アドレス指定もAmazonによって管理されると思います。インターフェースのIPアドレスを変更できたとしても、チャンスは十分にあります。 Amazonによって正しく認識およびルーティングされません。
オプションの1つは、インターフェイスが事前に受信するアドレスを実際に知っているプライベート静的IPアドレスを使用することです。別のオプションは、メタデータから新しいインターフェイスのアドレスを抽出することです。