1

我正在做一个项目,我正在使用 Vagrant 创建机架空间云实例。我正在使用 vagrant-rackspace 插件来做到这一点。除了我需要捕获在 vagrantfile 中创建的新机架空间实例的 IP 的部分之外,一切对我来说都很好。

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

这是我的流浪文件:

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。

4

2 回答 2

1

您可以使用自定义 IP 解析器使用Vagrant Host Manager 插件

自定义 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
于 2015-09-29T06:42:21.150 回答
0

@FrédéricHenri 我将其添加为答案,因为评论太长了。

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

-> 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 将在运行 playbook 时使用该清单文件。

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

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

于 2015-10-14T16:38:58.063 回答