Chrome: On MacOS downloads .OVA files as OVF's.

I must not download OVA's all that often.  When I do though, Chrome decides that "nah" you should name that into OVF.  Seems to be a long standing bug w/ Chrome and MacOS.  Not really a huge problem until a you try to import the OVA w/ the file extension of OVF.

Error when trying to import:
Basically the error returned when trying to import an OVA w/ OVF file extension:
"Failed to open OVF descriptor"

Workaround 1:
Stop using Chrome...Haha, just kidding.
On macOS, you simply have to enable "Show all filename extensions" in Finder.

    • You'll usually find this icon in your dock.  Probably the most under-stated/used icon in your dock.

Once done, Chrome will download OVA's as is and not change it to OVF like a proper browser.  Honestly, if Chrome does it for OVA's it "might" do it for other file extensions as well.  Firefox and Safari don't have this problem, so if you use either of those, Bravo!

Workaround 2:
Uncheck the "Ask to save each file before downloading" box in Chrome's Advanced Settings.  This bypasses Chrome's macOS finder integration which seems to be the root of the problem.

Reference bug:

PowerCLI/Powershell: vCenter Slack Bot

An OVF from Opvizor that gets deployed to any VMware environment for powercli slack integration.  Very simple deployment model.  
Current Model:
  1. Appliance can currently only target one vCenter and one slack bot.
  2. Permissions are granted via account designated in OVF config. 
    • (read only recommended for obvious reasons)
    • all commands requested via slack bot run in context of this account.
  3. Multiple appliances/vCenters can target one slack bot. 
    • (Ref.1 of two appliances/vcenter targeting one slack bot)
  4. Appliances can also be assigned to individually different slack bots. 
    • (Ref.2 of two different slack bots)
  5. Both models can be achieved by simply doubling up OVF deployments.  One that targets a singular bot, while the other targets a default/catch-all bot.
  6. Utilizes powerclicore so, there are limitations to what powercli cmdlets can be utilized and same limits that powershellcore may have too.


Neat Tidbit:
  1. Not yet in "Help", but there is a little neat 'alias' function.
    • @yourbotname alias badvms=posh get-view -ViewType VirtualMachine -Filter @{'RunTime.ConnectionState'='disconnected|inaccessible|invalid|orphaned'} | select name
    • @yourbotname badvms
  2. This will run your PowerCLI/Powershell line of code by simply passing your alias. (ref.3)

Turbonomic/VMTurbo: Testing target port connectivity from appliance (network troubleshooting tools)

Attempting to troubleshoot IP and port connectivity issues on a Turbonomic appliance is a bit difficult.  The target configuration 'target status' doesn't really give enough information and the default toolset in the appliance ssh session doesn't provide telnet, traceroute, or netcat.  As long as your appliance has internet access, you can install these tools fairly easily though.

Quite simply, assuming nothing changes later, the appliance runs OpenSuSE.  You can make use of zypper to install the additional tools needed such as netcat, telnet, and traceroute:
zypper install netcat-openbsd
Usage of netcat is the same as ESXi which you can reference here or use 'man netcat'.

Installation of telnet and traceroute are a bit more straightforward:
zypper install telnet
zypper install traceroute
  1. These tools simply give you an idea of connectivity from the appliance's perspective.
  2. Traceroute can help you determine if anything in between is preventing your connection.  Such as a hardware firewall.
  3. telnet provides same functionality as netcat albeit it's more obvious when a successful connection is made.
  4. I recommend uninstalling tools once you are done just to maintain the system's integrity.

Powershell: Docker PowerCLI Core and Microsoft/Powershell - (docker -it switch)

Docker running on MacOS.  (Likely runs the same on any other OS, minor differences)

While I appreciate William Lam's posts on Docker and PowerCLICore; I'm kind of dumb and need explanations on the simpler aspects of docker.  So for those who would like to know what the options in docker mean (to explore at least) and why it can looks strange even looking at 'help', here is how I understand it.  This can also be applied to Microsoft/Powershell container image as well.

docker run --rm -it -v /Users/cnakagaki/Downloads/:/tmp/scripts vmware/powerclicore

The above line will pull the powerclicore container from docker hub (if not already 'pulled'), run it in interactive mode (w/ pseudo TTY, needed), and mount my local Downloads directory to /tmp/scripts within the docker container.

The part that mainly threw me off was the syntax combination of '-it' which essentially translates to -i (interactive) and -t (pseudo TTY).

Graphic below breaks it down to hopefully get a better basic understanding.

Further Research Needed:
I'm still having difficulty making Lam's examples work of running a powershell script from my mounted volume.  It works fine when working in session, but not calling it from this line like outlined in Lam's article:
docker run --rm -it -v ~/Downloads/:/tmp/scripts vmware/powerclicore /tmp/scripts/test.ps1
*"~" = /Users/CurrentUser/
I simply get a permission denied error.  Once I understand how to get this working, this'll be immensely useful in using docker and vmware/powerclicore container to distribute powershell/powercli workloads without actually installing it.

GeekTool: Geekweather2 auto-geolocation updated w/ city name

Continued from:

I briefly looked through the corelocation framework.  Looks like the CLGeocoder Class could return friendly names, but I've been playing w/ Python lately so took that route for now.

Be that as it may, wrote a little python script to take the latitude and longitude results from locateme to have it return city name from Google mapping API's.  I also updated the script to accept "Names" that have underscores and/or spaces.  The python script needs work as I'm kind of guessing w/ the return I get from geopy.

I'll look into it more just out of curiosity, but if you have a chance, would love for someone to update my gist to determine city more accurately.


  1. Install geopy module for python
    1. pip install geopy

Below is my fork of

Below is what the new shell geeklet would look like w/ this new python script:

Below you'll find the contents of the cityLocator python file: