2015-10-09 2 views
1

Я хочу автоматически добавлять/удалять псевдоним записи в/из моего файла /etc/hosts на основе имени проекта и IP-адреса виртуальной машины при каждом запуске vagrant up/vagrant destroy. Есть некоторые плагины, которые делают это, но без поддержки dhcp.vagrant manage hosts dhcp

Я строю имя файла, используя machine_name = File.basename(File.expand_path('..', Dir.pwd)) + '.local'.

Другой фрагмент головоломки, который мне не хватает, - это способ получить присвоенный IP-адрес DHCP в Vagrantfile и обновить файл/etc/hosts на главной машине.

Моя цель - развернуть виртуальную машину без редактирования ее имени и/или IP-адреса в Vagrantfile и/etc/hosts.

Я использую Vagrant 1.7.4, VirtualBox 5.x и Puppet 4.2.

Любые идеи?

+0

вы сказали, что вы смотрели на плагин, но сделал вы смотрите в [vagrant dns] (https://github.com/BerlinVagrant/vagrant-dns) он работает для меня, используя dhcp –

+0

поддерживает брандмауэр dns dhcp? просматривая документацию, похоже, что это не – Radu

ответ

1

Я установил vagrant-hostmanager, который имеет очень полезную опцию config.hostmanager.ip_resolver.

Добавьте следующий код в ваш Vagrantfile, чтобы убедиться, что ваш файл /etc/hosts обновляется при запуске vagrant up команду:

config.vm.hostname = "add-name-here" 

unless Vagrant.has_plugin?('vagrant-hostmanager') 
    raise 'vagrant-hostmanager is not installed!' 
else 
    config.hostmanager.enabled = true 
    config.hostmanager.manage_host = true 
    config.hostmanager.ignore_private_ip = false 
    config.hostmanager.include_offline = true 
    config.hostmanager.ip_resolver = proc do |vm, resolving_vm| 
     if hostname = (vm.ssh_info && vm.ssh_info[:host]) 
      `vagrant ssh -c "hostname -I"`.split()[1] 
     end 
    end 
end 

Кредиты на: https://github.com/smdahlen/vagrant-hostmanager/issues/86#issuecomment-107052823

0

вы должны быть в состоянии сделать это.

Помните, что бродячий файл рубином? напишите сценарий оболочки инициализации, который устанавливает/etc/hosts и передает его как arg в файле Vagrant местоположение файла (вроде файла File.exapand выше).

Этот способ, когда бродяга запускает скрипт, он сгенерирует параметр, и сценарий обеспечения подберет его и будет использовать.

для справки: https://docs.vagrantup.com/v2/provisioning/shell.html

+0

, можете ли вы рассказать об этом? Это подход, к которому я направляюсь. Кроме того, я уже использую марионетку в качестве помощника. Могу ли я использовать два устройства в одном Vagrantfile? – Radu

+0

вы можете использовать несколько провайдеров. перечитав ваш вопрос, я теперь вижу, что вы хотите изменить родительский (то есть хост)/etc/hosts, а не vm one. – Mircea

0

Вы должны быть в состоянии использовать vagrant-dns для этой цели, это выглядит он больше всего того, что вы пытаетесь достичь (хотя по словам Мирчи, почти все можно сделать с помощью сценариев)

Док дает пример использования частной сети, но вы также можете использовать следующие конфигурации

config.vm.box = "ubuntu-12.04" 

    config.dns.tld = "dev" 
    config.vm.hostname = "test-machine" 

    config.vm.network "public_network" 
    config.vm.network "forwarded_port", guest: 80, host: 8080 

После установки бродяга-DNS (бег vagrant dns --install) вы сможете для доступа к вашей машине с помощью www.test-machine.dev:8080

+0

Не удалось заставить его работать с '' 'config.vm.network" private_network ", введите:" dhcp "' '' .. любые предложения? – Radu

+0

нормально работает с private_network с исправлением IP или public_network, но не частным dhcp.ну плагин с открытым исходным кодом, поэтому вы можете попытаться подключить его, чтобы заставить его работать –

+0

@Radu, у плагина, похоже, что-то не хватает, я отправил [запрос на pull] (https://github.com/BerlinVagrant/vagrant-dns/pull/39) и смог заставить его работать локально, вы можете просмотреть и применить это локально или дождаться слияния, если владелец плагина выпустит новую версию с этим исправлением –