Как перехватить 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.
Так что моя первоначальная проблема решена сейчас. Спасибо.