Как перехватить IP-адрес гостевой машины в Vagrant

Я работаю над проектом, в котором я создаю экземпляры облачных стоек с помощью Vagrant. Я использую плагин vagrant-rackspace, чтобы сделать это. У меня все работает отлично, кроме той части, которая мне нужна для записи IP нового экземпляра стойки, созданного в vagrantfile.

Мне нужен этот 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 я обновлю файл инвентаря, чтобы отразить IP вновь созданного экземпляра стойки.

2 ответа

Решение

Вы можете использовать плагин Vagrant Host Manager, используя 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.

Я наткнулся здесь на контрольно-пропускной пункт.

Мне нужно было создать файл инвентаризации, который содержит IP-адреса VM-TWO и VM-THREE.

Я полагал, что Vagrant предоставляет файл инвентаризации по умолчанию, который содержит IP-адреса двух экземпляров, которые он создает, и ansible будет использовать этот файл инвентаря при запуске playbook.

Файл инвентаря, автоматически сгенерированный vagrant, находится по адресу.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory.

Так что моя первоначальная проблема решена сейчас. Спасибо.

Другие вопросы по тегам