vagrant:如何从厨师食谱中获取hostonly ip地址?

时间:2013-01-25 08:45:07

标签: chef vagrant

我正在尝试检索Vagrantfile中指定的hostonly ip地址:

config.vm.network :hostonly, "33.33.33.33"

在食谱文件中:

mycookbook /文件/默认/ xdebug.ini

[xdebug]
zend_extension = "/usr/lib/php/modules/xdebug.so"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = "***HERE***"
xdebug.trace_output_dir = "/tmp"
xdebug.max_nesting_level = 200

3 个答案:

答案 0 :(得分:12)

node[:network][:interfaces][:eth1][:addresses].detect{|k,v| v[:family] == "inet" }.first

实际上,您可以通过登录VM(使用 vagrant ssh )并运行shef来查找所有节点属性。并在那里检查节点对象。

答案 1 :(得分:1)

如果要检索主机的IP,可以使用:

在你的食谱中

您/食谱/路径/食谱/ default.rb

ip = node[:network][:interfaces][:eth1][:addresses].detect{|k,v| v[:family] == "inet" }.first
remote_ip = ip.gsub /\.\d+$/, '.1'

template "/etc/php.d/xdebug.ini" do
  source "xdebug.ini.erb"
  owner "root"
  group "root"
  mode 0644
  variables({
              "remote_host" => remote_ip
            })
end

并在模板中: 您/食谱/路/模板/默认/ xdebug.ini.erb

[xdebug]
zend_extension = "/usr/lib/php/modules/xdebug.so"
xdebug.profiler_append = 0
xdebug.profiler_enable = 0
xdebug.profiler_enable_trigger = 0
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%t-%s"
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_host = <%= @remote_host %>
xdebug.trace_output_dir = "/tmp"
xdebug.max_nesting_level = 200

答案 2 :(得分:0)

我查看 ohai 的json输出,并在提示之前查找初始 vagrant ssh 登录输出中显示的内容:

$ vagrant ssh
Last login: Tue Sep 29 13:40:10 2015 from 10.0.2.2
vagrant@vagrant:~$

在ohai输出中,我在

中的其他位置找到了10.0.2.2
[:network][:default_gateway]  

我确认通过在ssh中启动 shef ,根据Draco的信息

chef >     node[:network][:default_gateway]
 => "10.0.2.2"

这对我有用,我可以在bash中手动卷曲我在主机上设置的python SimpleHTTPServer。接下来就是在厨师面前使用它。

这是我在Vagrantfile中的网络条目,以防万一这只适用于我特定的流浪网络配置:

config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

FWIW,使用Draco的回答将我指向另一个IP地址,这对我来说并不适用。