如何在配方运行时使用厨师的ifconfig资源configurationnetworking接口

我正在通过Amazon Opsworks与Chef合作,并且需要为我的一些服务器configuration和configuration额外的networking接口,而且我很难弄清楚如何正确使用ifconfig厨师资源。 主要的问题是,当我正在写厨师食谱时,我不知道接口的IP地址。 我所见过的所有例子都显示了在资源名称中表示为一个常量string的目标IP地址,如下所示:

 ifconfig '10.0.0.1' do eth1 end 

但是,我在配方执行时configuration了networking接口,因此我不知道在本地networking(Amazon VPC)内预置的networking接口将被分配的IP地址。 我写了一个ruby_block资源,提供接口和收集分配的IP,但是当我尝试将它传递给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配方实现很多。 当您为虚拟机请求额外的接口时,会由亚马逊分配,我认为寻址也由亚马逊pipe理。 即使您可以更改界面的IP地址,也很有可能不会被亚马逊正确识别和路由。

其中一个select是使用私有静态IP地址,您实际上知道您的接口将提前接收的地址。 另一种select是从元数据中提取新接口的地址。