vagrant-hostsupdater icon indicating copy to clipboard operation
vagrant-hostsupdater copied to clipboard

Using wrong IP with Hyper-V, Homestead

Open ethanclevenger91 opened this issue 4 years ago • 1 comments

I'm running Hyper-V and Laravel Homestead. The IP address configured in Homestead.yaml is being used to update the hosts file instead of the IP reported by the box being started. Honestly, not 100% sure if this is on your end or their's.

Vagrantfile from homestead:

# -*- mode: ruby -*-
# vi: set ft=ruby :

require 'json'
require 'yaml'

VAGRANTFILE_API_VERSION ||= "2"
confDir = $confDir ||= File.expand_path(File.dirname(__FILE__))

homesteadYamlPath = confDir + "/Homestead.yaml"
homesteadJsonPath = confDir + "/Homestead.json"
afterScriptPath = confDir + "/after.sh"
customizationScriptPath = confDir + "/user-customizations.sh"
aliasesPath = confDir + "/aliases"

require File.expand_path(File.dirname(__FILE__) + '/scripts/homestead.rb')

Vagrant.require_version '>= 2.2.4'

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
    if File.exist? aliasesPath then
        config.vm.provision "file", source: aliasesPath, destination: "/tmp/bash_aliases"
        config.vm.provision "shell" do |s|
            s.inline = "awk '{ sub(\"\r$\", \"\"); print }' /tmp/bash_aliases > /home/vagrant/.bash_aliases && chown vagrant:vagrant /home/vagrant/.bash_aliases"
        end
    end

    if File.exist? homesteadYamlPath then
        settings = YAML::load(File.read(homesteadYamlPath))
    elsif File.exist? homesteadJsonPath then
        settings = JSON::parse(File.read(homesteadJsonPath))
    else
        abort "Homestead settings file not found in #{confDir}"
    end

    Homestead.configure(config, settings)

    if File.exist? afterScriptPath then
        config.vm.provision "shell", path: afterScriptPath, privileged: false, keep_color: true
    end

    if File.exist? customizationScriptPath then
        config.vm.provision "shell", path: customizationScriptPath, privileged: false, keep_color: true
    end

    if Vagrant.has_plugin?('vagrant-hostsupdater')
        config.hostsupdater.remove_on_suspend = false
        config.hostsupdater.aliases = settings['sites'].map { |site| site['map'] }
    elsif Vagrant.has_plugin?('vagrant-hostmanager')
        config.hostmanager.enabled = true
        config.hostmanager.manage_host = true
        config.hostmanager.aliases = settings['sites'].map { |site| site['map'] }
    end

    if Vagrant.has_plugin?('vagrant-notify-forwarder')
        config.notify_forwarder.enable = true
    end
end

And that settings var gets pulled from a yaml file, like this one:

---
ip: "192.168.10.10"
memory: 2048
cpus: 2
provider: hyperv

authorize: ~/.ssh/id_rsa.pub

keys:
    - ~/.ssh/id_rsa

folders:
    - map: /d/dev/package-peak
      to: /home/vagrant/dev/package-peak
    - map: /d/dev/phpmyadmin
      to: /home/vagrant/dev/phpmyadmin

sites:
    - map: packagepeak.test
      to: /home/vagrant/dev/package-peak/public
    - map: phpmyadmin.test
      to: /home/vagrant/dev/phpmyadmin

databases:
    - package_peak
    - package_peak_test
...

features:
    - mariadb: true
    - ohmyzsh: false
    - webdriver: false

# ports:
#     - send: 50000
#       to: 5000
#     - send: 7777
#       to: 777
#       protocol: udp

You can see an IP is declared at the top of that, but I don't see where that's being translated to this plugin in any way.

ethanclevenger91 avatar Apr 06 '20 18:04 ethanclevenger91

I do have a similar issue when using hyper-v. In my case, the IP reported by the started VM is not used either. Because the private-network is configured with ip: nil, no hosts entries are created at all. I can 'fix' this by manually setting the IP in the Vagrantfile, but this will obviously only work as long as the VM gets assigned the same IP (which seems to be the case so far judging after several reboots).

config.vm.provider :hyperv do |_v, override|
    override.vm.network :private_network, id: 'vvv_primary', ip: nil
end

reikjarloekl avatar Nov 17 '20 08:11 reikjarloekl