If you follow the guide to export .ova file and import to ESXi. It will show error below on ESXi 6.0 or later:
Issues detected with selected template. Details….No supported hardware versions among….
After couple of hours’ deep dive. I figured out a way to convert VirtualBox to ESXi. You need Oracle VirtualBox, VMware Workstation or VMware Player and VMware ESXi host.
Select the virtual machine -> Go to main menu -> File -> Export appliance.
Choose the virtual machine.
Make sure Format is “Open virtualization format 1.0“.
Export to a .ova file.
Open the .ova file in VMware Workstation or VMware Player.
The import of the VM maybe failed with following error. Just click Retry button it will work. The import failed because xxxxx did not pass OVF specification conformance or virtual hardware compliance checks.
Select the virtual machine and go to main menu -> File -> Export to OVF.
VMware Workstation or VMware Player generates .ovf, .mf and .vmdk files.
Edit .ovf file and find the line with keyword “VirtualSystemType“.
Change the value “vmx-XX” to the version lower or equal to your ESXi version.
Edit .mf file and remove SHA256 value of .ovf file in first line. SHA256(XXXXX.ovf)= xxxxxxxxxxxxxxxxx
Now it’s ready to import to VMware ESXi host.
This procedure is not involve any code or command. There are also couple of other ways to convert VirtualBox to ESXi by ovftool command line. I tried several ways but didn’t work. Maybe I did something wrong.
In step 10, I changed VM version in .ovf file directly. I think you can also leverage VMware Workstation or VMware Player to downgrade the virtual machine’s version in GUI. It should work as long as the version is lower than your ESXi supported VM version.
Computer cannot contact Microsoft update service to upgrade latest patches if it’s managed by SCCM policy. Sometimes we may need to keep latest patch for testing, security or other purpose, such as when you create a golden image, you always want to keep the system up to date.
How to know error types of the validating connection result?
You probably have question how did I know which error types are for what? I used a very simple way that just give it a try. 🙂
# Simulating connection error
Connect-VIServer vCenter.zhengwu.org -User "xxx" -Password "yyy"
# Format output of $Error. $Error stores output of errors in PowerShell.
$error | fl * -force
# You will see similar lines below
writeErrorStream : True
Exception : VMware.VimAutomation.ViCore.Types.V1.ErrorHandling.InvalidLogin: 7/29/2019 9:27:30 AM Connect-VIServer Cannot complete login due to an
incorrect user name or password. ---> VMware.Vim.VimException: Cannot complete login due to an incorrect user name or password. --->
System.ServiceModel.FaultException`1[VimApi_67.InvalidLogin]: Cannot complete login due to an incorrect user name or password.
VMware.VimAutomation.ViCore.Types.V1.ErrorHandling.InvalidLogin is the error type we want to find.
This is very simple way to validating connection result of Connect-VIServer. Looks like the result errors coming from different assemblies. For example, connection error is VMware.VimAutomation.Sdk.Types.V1.ErrorHandling.VimException.ViServerConnectionException. It’s hard to find out all possible errors. I’m looking for a official document but no lucky. Please let me know if you know where I can reference.
There is an official Bitbucket extension for Visual Studio Code if you use Bitbucket Cloud. Bitbucket has not yet released official extension for Bitbucket Server users. Following is how to configure Visual Studio Code to use Bitbucket Server.
Before the procedure you need to collect the following information:
Your user name on Bitbucket Server.
Your email on Bitbucket Server.
Decide the local path to store code. (It’s c:\temp\git\ in this guide)
Your account has permission to modify repositories on Bitbucket Server.
Assume project name is “ExampleProject” on Bitbucket Server.
Assume repository name in the project is “ExampleRepository“.
Get the URL of the target repository. (It’s https://firstname.lastname@example.org/scm/exampleproject/examplerepository.git in this guide)
Download windows installer in Github. Installation is simple. Only thing is to make sure to choose “Visual Studio Code” when it asks editor integration.
Configure user name and email in Git.
Name and email should match your account information on Bitbucket server. Run the commands in Windows command prompt. $ git config --global user.name "Name" $ git config --global user.email "email@example.com"
Clone repository to local.
Open a command prompt. Go to a folder you want to clone the remote “ExampleRepositiry” to. Run command: git clone https://firstname.lastname@example.org/scm/exampleproject/examplerepository.git You will see a sub-folder with the name “ExampleRepository” is created in local. A hidden folder “.git” is created in the sub-folder. It’s used to tracking changes.
Open workspace in Visual Studio Code
Bitbucket Server configuration is completed in local. Now open Visual Studio Code -> File -> Add folder to workspace -> Open “ExampleRepository” folder. Visual Studio Code is integrated with Git in-the-box. It detects the repository automatically. It shows “Unrack” if you create a new file in the folder.
This is an expressway to integrate Bitbucket Server with Visual Studio Code. I’m still new on Git. Following are some useful information.
It’s not easy for me to describe the issue in one line on the title. Let me give some background here. I have 2 set of VMs. Set 1 has VM A & VM B. Set 2 has VM C & VM D. Each VM has a vNIC configured with a private IP address. VM A and VM C also have another vNIC configured with an L3 (Routable) IP address. Each set’s private IP addresses are the same. To make sure no confusion I implemented a vRouter VM for each set. The vRouter is same as VM A or VM C, it has two vNICs. One is connected to L3 network, another is connected to the private network. This way can keep the private network traffic not going outside of the set. So the both set no disturb each other when I set same private IP addresses.
Following are IP addresses I set for each VM:
VM A: 192.168.0.11
VM B: 192.168.0.12
VM C: 192.168.0.11
VM D: 192.168.0.12
The problem is I still can get ping responding on VM A to 192.168.0.12 when I turn off VM B. I expected to see the L2 traffic goes to it own vRouter and finds VM B is offline. But tracert command shows me the traffic goes from VM A’s L3 network to vRouter of the 2nd set, and then get the answer from VM D. Looks like the L2 ping package is broadcasting on L3 network.
The issue was fixed by enabling a feature on L3 network. It called “Enforce Subnet Check for IP Learning“. Cisco changed the name to “Limit IP Learning To Subnet“. It’s a VLAN level setting. It will not allow broadcasting the private Ip traffic on an L3 network. It forces private IP traffic to go to L2 network only.
I have a box uses Emulex OneConnect OCe10102 network adapters. The adapter is quite old and Emulex brand card doesn’t support ESXi 6.0. I upgraded the server to ESXi 6.0 and the Emulex adapters lost.
In the initial troubleshooting, I noticed that the adapters are still visible in BIOS. So it should be some driver level issues. I checked VMware Compatibility Guide. The model OCe10102 doesn’t support by ESXi 6.0.
If you run the following command you will still be able to see the adapters in PCI list on ESXi.
esxcli hardware pci list
So it indicates the adapters are not visible in ESXi since the newer Emulex driver doesn’t contain the model of the adapter in ESXi 6.0 native driver.
Then I uninstalled the native Emulex driver for ESXi 6.0 by the following command and rebooted the ESXi host.
The adapters still not visible after rebooting since no any drivers for Emulex adapters. Then I downloaded the Emulex drivers for ESXi 5.5 on VMware website and uploaded the “offline” package in the zip file to /tmp directory of the host. Then installed the driver by the following command:
I wrote an article talk about how to find out which services lockout domain accounts on vCenter Server. It only applies to the scenarios that domain accounts very frequently lockout. Like every 1 second. If it’s minutes, it will be hard to find out as it’s manually processing.
The other way to identify source is to use vSphere Web Client. The trick was told by VMware BCS team.
Log in to vSphere Web Client. Go to the main page and the Events node. Search for “authen” you may see some error events. The real source is red text.
I wrote an article about how to manage Windows Server 2016 TP remotely. Today I had some spare time to re-build my lab environment by the latest release of Windows Server 2016 Core. It’s easy to remotely manage a Windows Server in a domain, but a trick for workgroup Windows Server. Following is an improved procedure.
One Windows Server 2016 Core
Run sconfig command on Windows Server 2016 Core.
Go to Configure Remote Management – Enable Remote Managementto enable remote management.
Then enable responding to ping in same page.
Enable NetBIOS protocol on the firewall by PowerShell.