VMware: Get CDP/LLDP info from ESXi/vCenter hosts.

Summary:
Had to get CDP/LLDP long time ago and never posted it.  Hosted on gist.github.com for anyone to consume and manipulate how they please.  Definitely been useful and faster since it'll actually ignore disconnected nics.

Also automatically adjusts for CDP or LLDP.  I 'think' I wrote this, but I borrow so much from Lam and LucD that they deserve credit for being so awesome anyway.

Misc: Navien NPE-240A Navilink App missing scheduling function

NPE-240A
Summary:
Just had a new tankless water heater installed in my house to replace a failing 22 year-old 50 gallon tank.  Couldn't be happier w/ my new tankless, but was dealing with weirdness on the Navilink app to control/view my new Navien.  The app's scheduling function (for the recirculation pump) was missing.

Solution:
NR-20DU


  • Disconnect NR-20DU remote controller. (if you want to schedule via App)
    • *DIP Switches need to be set properly as well.

In my case, w/ a bridge valve in my furthest faucet, is considered "External Recirculation".
Check w/ your plumber for proper settings, they set mine properly.
If you are in the Atlanta area, I highly recommend Plumbing Express LLC.
Ask for Jonathan DeWeese.

For reference only, these were set correctly by my plumber for my setup.

  • DIP Switch 1 Off, 2 On.  (Internal Recirculation would be the opposite)
  • Parameter 18 set to On (This is to enable Navilink)

These settings are detailed out in the installation guide.

DO NOT just look at youtube for suggestions, there are some videos out there that are just plain WRONG.

Details:
My understanding is that "External Recirculation" refers to the use of a bridge valve, typically installed in the furthest point from the water heater.  Basically utilizing my cold water pipes as a poor man's hot water loop.  "Internal Recirculation" is when a dedicated hot water loop is actually installed.  That will be way more expensive to retrofit a house that does not have a dedicated hot water loop, so external recirculation is usually more common.

With regards to the Navilink schedule function, my plumber was just as confused as I was since this was one of the primary reasons I wanted the Navilink function.  Long story short, installing the NR-20DU remote controller unit disables the apps remote scheduling capabilities.  Simply disconnecting it enables the scheduling function in the Navilink app.

When thinking about it, it actually makes sense.  You wouldn't want 2 devices dictating possibly conflicting schedules.  Although documentation wise, it's almost as if you're led to believe that the remote controller is required for Navilink schedule function.  So what is the difference between the two?

Quite simply, Navilink allows a more complex schedule.  The NR-20DU controller only allows 3 schedules.

Next is to figure out how to have app enable the 'hot button'.  Cursory glance appears to me that I need the hot button kit, but that appears to disable the scheduling function.  This leads me to believe that the unit might be dumb in its status info to its controllers.  Meaning if a 'schedule' is active, pressing/activating the hot button will turn that off.  Seems like a split brain issue that Navien works around by simply disabling competing functions.
NaviLink App & Wi-Fi Control

Mac: Quick Screen Recording on MacOS (Bonus TouchBar Integration)

Summary:
To launch screen recording w/ Quicktime Player feels really unintuitive.  I'm betting the average person has no idea this capability exists.  I often forget it's able to as well.  Reason being, when you launch Quicktime Player, it defaults to opening a 'finder' window for you to select a file to 'play'.  So here is a way to kind of "shortcut" access to Quicktime screen recording on MacOS.

Solution:
Launch QuickTime Player


"Right" Click on QuickTime Player Dock and Select "Keep in Dock"


Now with QuickTime Player in dock, you can "Right Click" the icon and select Screen Recording.

Bonus:

Macbook Pros with Touchbar will have a smart menu to select capture type.  You can select either full screen recording of each individually attached screen or "selection" which allows you to simply click and drag your mouse on any portion of the screen.

VMware: Custom ESXi boot iso bootable on Fusion, but not vSphere...


Summary:
Building an embedded lab for some testing w/ NSX and everything.  Cannot clone a pre-installed ESXi host w/o some magic, so decided to utilize a simple kickstart script in an ESXi custom iso pre-mounted to my VM template.  Worked fine on Fusion, not vSphere/ESXi though...

Workaround:
Simply change VM Options --> Boot Options to BIOS

Fusion defaults to BIOS, which is why it worked.  I made the iso w/o UEFI options which is why it worked on fusion, but not ESXi VM.

OR

Solution:
The command I was using to make the iso was missing some key new features to make the iso UEFI bootable.
mkisofs -relaxed-filenames -J -R -o ~/Desktop/custom_esxi.iso -b ISOLINUX.BIN -c BOOT.CAT -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -eltorito-platform efi -b EFIBOOT.IMG -no-emul-boot ~/Desktop/ESXiDefaultInstall

You will have to modify two BOOT.CFG files, one in root directory, and the other in the EFI subdirectory to utilize any custom kickstart you put together.  If you only modify one, it will only point to the kickstart file when booted via BIOs and not UEFI or vice versa.

Details:
Basically, it came down to the fact that I was rebuilding the iso w/ an older command that didn't have the UEFI options.  This made my iso BIOs bootable (Fusion default), but not bootable on my ESXi VM which was set to UEFI.  Highlighted above in solutions section.  Basically my goal was to simply clone a templated VM shell w/ a local hard drive layout I needed for an Embedded vSAN lab.  The VM shell would have the iso mounted so that it would build ESXi at time of clone. 

So I needed an iso that would simply build ESXi w/ basic defaults and configure DHCP.  In the other notes section, I show how I modified the BOOT.CFG file(s) and added a KS.CFG file.  Once I found the options I was missing, my iso was now properly bootable via UEFI and BIOs.  This is a fairly easy workaround to build ESXi virtual hosts w/o having to stand up a PXE environment within an NSX bubble.

Other Notes:
mkisofs is not apart of MacOS, but you can install it via homebrew.
brew install cdrtools

/BOOT.CFG and /EFI/BOOT/BOOT.CFG (Modified kernelopt value to target CD rom and my custom KS.CFG)
kernelopt=ks=cdrom:/KS.CFG

/KS.CFG
accepteula
rootpw superduperSecret!
install --firstdisk --overwritevmfs
network --bootproto=dhcp
reboot

References:
https://docs.vmware.com/en/VMware-vSphere/6.5/com.vmware.vsphere.install.doc/GUID-C03EADEA-A192-4AB4-9B71-9256A9CB1F9C.html
https://communities.vmware.com/thread/584801?start=0&tstart=0

Nested ESXi virtual appliances that you can customize via OVA options.
https://www.virtuallyghetto.com/2017/05/updated-nested-esxi-6-0u3-6-5d-virtual-appliances.html



VMware: PowerNSX on Mac Invoke-nsxwebrequest unknown exception

Blarg!
Summary:
All was well and dandy until I tried to actually "do" something.  I was trying to create a new logical switch (New-NSXLogicalSwitch) when these errors reared their ugly head:
https://github.com/vmware/powernsx/issues/493
One or more errors occurred. (The handler does not support custom handling of certificates with this combination of libcurl (7.54.0) and its SSL backend ("LibreSSL/2.0.20").) ---> System.PlatformNotSupportedException: The handler does not support custom handling of certificates with this combination of libcurl (7.54.0) and its SSL backend ("LibreSSL/2.0.20").

Workaround:
Windows w/ full Powershell does not have these issues.  Have yet to see if it is a thing specific to Powershell Core.  So use it if you can.

If you don't have a Windows box handy, you can modify the PowerNSX.psm module file to get around this error.  I'm unsure if it can become a permanent solution, but it effectively accomplishes the same thing as the current httpclienthandler.

Location of PowerNSX.psm file on Mac:
/usr/local/share/powershell/Modules/PowerNSX/<versionnumber>/PowerNSX.psm1

You need to modify line 105 from this:
ServerCertificateCustomValidationCallback = delegate { return true; };

To this:
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator;

*One line and case sensitive, must be verbatim.