如何在Vagrant中捕获来宾计算机的IP地址

时间:2015-09-28 21:11:15

标签: vagrant vagrantfile rackspace-cloud vagrant-plugin vagrant-provision

我正在开发一个项目,我正在使用Vagrant创建机架空间云实例。我正在使用vagrant-rackspace插件来完成它。除了我需要捕获在vagrantfile中创建的新rackspace实例的IP之外,一切都能正常工作。

我需要此IP地址才能将其添加到Ansible库存文件(/ etc / ansible / hosts)

这是我的Vagrantfile:

Vagrant.configure(2) do |config|
  config.ssh.private_key_path = "rackspace_rsa"
  config.vm.provider :rackspace do |rs|
    rs.username = "rackspace-user"
    rs.api_key  = "a98weqrq3r34ewfadsf43rffa4697cc0036"
    rs.admin_password = "Password1"
    rs.flavor   = /1 GB Performance/
    rs.image    = /Ubuntu 12.04/
    rs.rackspace_region = :dfw
    rs.server_name =  "ansible_server_1"
    rs.public_key_path  = "rackspace_rsa.pub"
  end
end

创建实例后,我将使用Shell配置来安装机器以安装ansible。安装ansible后,我将更新库存文件以反映新创建的rackspace实例的IP。

2 个答案:

答案 0 :(得分:1)

您可以使用Vagrant Host Manager plugin

使用Custom IP Resolver

自定义IP解析器为您提供了自己计算每台计算机的IP地址的机会,让您也可以访问正在更新/ etc / hosts的计算机。例如:

config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
  if hostname = (vm.ssh_info && vm.ssh_info[:host])
    `host #{hostname}`.split("\n").last[/(\d+\.\d+\.\d+\.\d+)/, 1]
  end
end

答案 1 :(得分:0)

@FrédéricHenri我将此作为答案添加,因为评论时间过长。

好吧,我的计划是在rackspace(VM-ONE,VM-TWO和VM-THREE)上启动三个虚拟机。

/usr/local/nagios/libexec/check_nrpe -H <IP Address of my_host> -c check_this_process

我在这里遇到了障碍。

我需要创建一个库存文件,其中包含VM-TWO和VM-THREE的IP。

我认为Vagrant提供了一个默认的库存文件,其中包含它创建的两个实例的IP,并且ansible将在运行playbook时使用该库存文件。

vagrant自动生成的库存文件位于.vagrant / provisioners / ansible / inventory / vagrant_ansible_inventory。

所以我原来的问题现在解决了。谢谢。