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
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
Hilfreichster Kommentar
Hallo @StefanScherer - wir haben eine Konfigurationsoption eingeführt , um Situationen wie diese zu beheben ... kannst du das in deiner Vagrantdatei versuchen?