Vagrant: VMware Fusion-Plugin fängt falsche IP-Adresse von vmrun cmd ab

Erstellt am 23. Nov. 2015  ·  3Kommentare  ·  Quelle: hashicorp/vagrant

Ich habe ein Problem mit dem VMware Fusion 7.1.3-, Vagrant 1.7.4- und vagrant-vmware-fusion 4.0.2-Plugin, das über WinRM mit einer Windows Server 2016 TP4-VM kommuniziert.

Es scheint, dass das vagrant-vmware-fusion-Plugin die falsche IP-Adresse 172.16.0.1 von der VM abfängt, die nur ein virtueller Switch ist.

So sieht es aus, die Windows-VM hochzufahren:

$ vagrant up
Bringing machine 'default' up with 'vmware_fusion' provider...
==> default: Verifying vmnet devices are healthy...
==> default: Preparing network adapters...
==> default: Starting the VMware VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: WinRM address: 172.16.0.1:5985
    default: WinRM username: vagrant
    default: WinRM transport: plaintext
^C==> default: Waiting for cleanup before exiting...

In der VM habe ich folgende Netzwerkkarten:

PS C:\Users\vagrant> ipconfig

Windows IP Configuration


Ethernet adapter vEthernet (Virtual Switch):

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe80::851b:ed4b:1436:4710%11
   IPv4 Address. . . . . . . . . . . : 172.16.0.1
   Subnet Mask . . . . . . . . . . . : 255.240.0.0
   Default Gateway . . . . . . . . . :

Ethernet adapter Ethernet 2:

   Connection-specific DNS Suffix  . : localdomain
   Link-local IPv6 Address . . . . . : fe80::91d4:5359:785b:e075%8
   IPv4 Address. . . . . . . . . . . : 192.168.254.134
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 192.168.254.2

Tunnel adapter isatap.{F8AB9E14-C9C4-4A78-A4F9-966B59BD5D9E}:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Tunnel adapter isatap.localdomain:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . : localdomain

Dies ist eine Windows 2016 TP4-VM mit installiertem Windows Docker und Hyper-V. Die Installation von Windows Docker erstellt diesen virtuellen Switch. Und irgendwie heißt die "primäre" VMware-Netzwerkkarte "Ethernet 2" und nicht die erste in der Liste.

Das Ausführen des gleichen vagrant up mit Debug-Protokoll zeigt, dass die richtige IP-Adresse 192.168.254.134 abgefangen wird, aber nach dem Ausführen von vmrun getGuestIPAddress das dann die IP-Adresse des virtuellen Switches Vagrant zurückgibt verwendet diese falsche IP-Adresse für WinRM.

$ "/Applications/VMware Fusion.app/Contents/Library/vmrun" "getGuestIPAddress" "/Users/stefan/code/docker-windows-box/.vagrant/machines/default/vmware_fusion/e04a32bc-9b7a-4cbf-9abb-dc5e7f299af7/packer-vmware-iso.vmx"
172.16.0.1

Da vmrun in manchen Situationen falsche Werte abzurufen scheint, wäre es eine bessere Idee, einfach die IP-Adresse der ersten MAC-Adressenübereinstimmung zu verwenden?

Irgendwo in der Mitte des Debug-Logs habe ich die richtige IP-Adresse gefunden: https://gist.github.com/sethvargo/9a84345f4fafd1490f7e

bug providevmware

Hilfreichster Kommentar

Hallo @StefanScherer - wir haben eine Konfigurationsoption eingeführt , um Situationen wie diese zu beheben ... kannst du das in deiner Vagrantdatei versuchen?

config.vm.provider "vmware_fusion" do |v|
  v.enable_vmrun_ip_lookup = false
end

Alle 3 Kommentare

Hallo @StefanScherer - wir haben eine Konfigurationsoption eingeführt , um Situationen wie diese zu beheben ... kannst du das in deiner Vagrantdatei versuchen?

config.vm.provider "vmware_fusion" do |v|
  v.enable_vmrun_ip_lookup = false
end

@phinze Vielen Dank! Ja das hat es geschafft!

$ vagrant up
Bringing machine 'default' up with 'vmware_fusion' provider...
==> default: Verifying vmnet devices are healthy...
==> default: Preparing network adapters...
==> default: Starting the VMware VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: WinRM address: 192.168.254.134:5985
    default: WinRM username: vagrant
    default: WinRM transport: plaintext
==> default: Machine booted and ready!
==> default: Forwarding ports...
    default: -- 3389 => 3389
    default: -- 22 => 2222
    default: -- 5985 => 55985
    default: -- 5986 => 55986
==> default: Configuring network adapters within the VM...
==> default: Configuring secondary network adapters through VMware 
==> default: on Windows is not yet supported. You will need to manually
==> default: configure the network adapter.
==> default: Enabling and configuring shared folders...
    default: -- /Users/stefan/code/docker-windows-box: /vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

Obwohl ich mir von Zeit zu Zeit die Versionshinweise des Plugins ansehe, habe ich diese nicht verstanden.

Nur für die Aufzeichnungen, dies ist mein Vagrantfile, das für Windows Server 2016 TP4 verwendet wird, um es im Vollbildmodus im Retina-Modus auf einem MBP auszuführen.

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

VAGRANTFILE_API_VERSION = "2"

Vagrant.require_version ">= 1.6.0"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box          = "windows_2016_tp4"
  config.vm.communicator = "winrm"

  ["vmware_fusion", "vmware_workstation"].each do |provider|
    config.vm.provider provider do |v, override|
      v.gui = true
      v.vmx["memsize"] = "4096"
      v.vmx["numvcpus"] = "2"
      v.vmx["vhv.enable"] = "TRUE"
      v.vmx["hypervisor.cpuid.v0"] = "FALSE"
      v.enable_vmrun_ip_lookup = false
    end
  end

  config.vm.provider "vmware_fusion" do |v|
    v.vmx["gui.fitguestusingnativedisplayresolution"] = "TRUE"
    v.vmx["mks.enable3d"] = "TRUE"
    v.vmx["mks.forceDiscreteGPU"] = "TRUE"
    v.vmx["gui.fullscreenatpoweron"] = "TRUE"
    v.vmx["gui.viewmodeatpoweron"] = "fullscreen"
    v.vmx["gui.lastPoweredViewMode"] = "fullscreen"
    v.vmx["sound.startconnected"] = "TRUE"
    v.vmx["sound.present"] = "TRUE"
    v.vmx["sound.autodetect"] = "TRUE"
  end

  config.vm.provision "shell", path: "scripts/provision.ps1", privileged: false
end
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen