Vagrant中如何抓取guest机器的IP地址

How to capture the IP address of the guest machine in Vagrant

我正在做一个项目,我正在使用 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。

您可以使用 Vagrant Host Manager plugin using the 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

@FrédéricHenri 我添加这个作为答案,因为评论太长了。

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

-> I installed vagrant on my macbook 
-> Wrote a vagrantfile to spinup the first box(VM-ONE) 
-> install vagrant and ansible on VM-ONE using vagrant shell provisioning 
-> Write vagrantfile to spin up VM-TWO and VM-THREE 
-> Write playbook to provision VM-TWO and VM-THREE 
-> Run "vagrant up" on VM-ONE 
-> Use vagrant ansible to provision VM-TWO and VM-THREE.

我在这里遇到了障碍。

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

我认为 Vagrant 提供了一个默认清单文件,其中包含它创建的两个实例的 IP,ansible 将在 运行 剧本时使用该清单文件。

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

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