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。
所以我原来的问题现在已经解决了。谢谢。
我正在做一个项目,我正在使用 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。
所以我原来的问题现在已经解决了。谢谢。