Nutanix .Next 2017 Nice: My Sessions

Intro

Last week as you’ll probably already have seen I was at the Nutanix .Next 2017 Europe event in Nice, France. During this amazing event, I visited several sessions going from sales talks, via an NDA session to a deep dive. In this post, I will try to give a bit more information about the sessions I followed as far as I can do.

Disclaimer: this overview is based on notes written during the session and my memory and since specially the latter is not failsafe they could be some untrue things in this post. Please send the feedback directly to me so I can adjust them. Also, I don’t have equal amounts of text about all sessions because nothing is equal.

Nice disclaimer, right? This was just if the disclaimer all presenters had to read before starting their sessions. On screen, there was an even bigger one equally to the one showed during the keynote’s.

Index

These where the sessions that I followed:

Dell-EMC: 6 rules of disruption

VMware VDI On Nutanix

NX Files (NDA)

SOS Troubleshooting Nutanix

Puppet

Calm Deep dive

The six rules of disruption

While this clearly is a sponsored session only the middle part was commercial. Before and after that it was about those six rules and what they are according to them. I will give a bit more explanation about them that also might include my own opinion about them.

  • The interface is everywhere
    • It is, just think of your smartphone, Google home, an Echo dot or maybe your home thermostat. Everything has an interface these days. While voice commands where hard years back it has become really mature these days on some of those devices.
  • Remove the friction
    • If something doesn’t work flawlessly users will not accept it and the product will fail. Same with doing business, if it gets hard for a customer to do business with you they will go away and take their business somewhere else.
  • Prepare for abundance
    • With this they say that we should prepare for more and more data. Everything will have a sensor in the future, from the floor you walk on, trough the shoes you walk with up to the hat you have on your head. This will need to be handled somewhere.
  • Embrace non-linearity
    • With this they try to say we shouldn’t keep thinking the same way. Change needs and will happen and if you refuse to change you will lose.
  • Be honest
    • If you are not honest this will haunt you. In a world where a single tweet can bring down companies being dishonest might result in that tweet.
  • Be curious
    • If you don’t keep pioneering and developing yourself there is no way forward. If companies keep doing the same repeatedly they will fail in the end. Same with people, if I never learned anything new or would never think outside of the box I would have been unemployed for years already.

This was a fun session to follow and while the 6 points ‘coincidentally’ are generally the direction Nutanix is going they are also what lots of people see happening in the (near) future.

VMware VDI on Nutanix

This session was meant to be presented by Brian Suhr but he managed to brake his leg the week before so he was replaced by Kees Baggerman of Nutanix and VCDX-DTM Sean Massey. I had to sit in front because I big mouthed Angelo Luciano to sit up front and Sean made me take his place. Me always with my big mouth. While a lot of the content in this session was already known to me it was good to see some of my knowledge once more confirmed and they presented us with some figures I would never have guessed. I always knew that optimizing an image is required but up to 50% performance was new to me. Also, they gave numbers to prove that data locality is essential for VDI. I can’t remember the exact numbers but there was a big difference with or without shadow clones enabled. This was a very good session that showed the audience on how to design a good working VMware View environment on Nutanix.

NX Files

Since this was an NDA session there’s not a lot I can say besides that it contained presentations about ideas and product improvements that came out of the Nutanix Internal Hackathons. Only point I have about this session that it contained code samples that where hard to read since the text was too small.

SOS Troubleshooting

To start this session had some hard to read blue titles in the PowerPoint and too small text size ssh session screens. Content wise this session was about the tools you can use to manage and troubleshoot your Nutanix Environment like the alerting services, NCC, syslog, Pulse and Prism analysis. Further it went deeper into the thought process and framework required for successful troubleshooting.

Some of the key takeaways from this session where that an admin should always run NCC before logging a case. Also, Pulse should be enabled where possible and allowed. This sends only relevant information to Nutanix that contains no IP or data. This was a great session with heaps of technical information.

Puppet

The presenter for this session introduced himself as an engineer but the first five minutes sounded commercial. Luckily, I had an excuse to escape since Sean Massey asked me to record a podcast about automating Horizon View with PowerCLI

Calm deep dive

Again, this was a good session to follow. Some of it might have been lost on me but Calm looks to be an awesome and easy tool to use. The real nerds will be able to dig deep into it though and can connect it to any automation tool already in use and can even create the json config files automatically using other tooling. Calm itself consists of two docker systems running on Prism Central, by default it will be disabled but once enabled (and maybe the ram for the Prism Central server(s) is expanded it will give access to just about anything you want to automate ranging from PowerShell to SSH, batch or the programming language you might prefer.

Nutanix .Next Europe report Day 2

Disclaimer: this post was written between 6 am and 7 am without having access to coffee.

So, that was the second and last day of .Next Europe 2017. The rush from day one continued with a great keynote where Nutanix launched their vision on how to handle IoT. The keynote itself started with the outtakes of yesterday’s clapping video which was funny and had a lot of beeps because of all the profanity.

Back to the IoT, within no-time there will be three billion devices but probably more that need to send their data somewhere. This will be way too much to send to the cloud. Nutanix will process this data in the edge and only send the valuable stuff to the cloud. For this even container are too big and even smaller entities will be handling that data. Sherlock is what Nutanix named this functionality and it will handle IoT devices as first-class objects and we will literally go from webscale to planet scale computing.

After this the CEO of Hyperloop came on stage to talk about the progress they have been making. Personally, I really see a future for this tech but I doubt if it can be done as cheap and as safe as what he is saying. The keynote needed with a tale about machine learning with a comparison of Big Blue beating the best chess player in the world years back by brute force to the best Go player in the world being beaten by using machine learning.

The second day of .Next I only did two break-out sessions. The first one was about troubleshooting and the tools and thought paths needed for that. The second one was a deep dive on Calm where we were shown all the bells and whistles wat can be really done with Nutanix’ new automation tool. I ended up in a 3rd session but it started with five minutes of sales crap so I was happy to escape so I could record a podcast with Sean Massey about Horizon View & PowerCLI.

The closing keynote was just awesome. There was some other thing being told but it was all about one of the good causes that Nutanix has been sponsoring during the .Next conference: Not Impossible. This is all about helping people and all started with CEO Mike Ebeling telling the family of a graffiti artist that he would make him able to draw again. Having no idea on how to tackle this he gathered a bunch of mad scientists and ended up doing it with cheap hardware and open source software; The Eyewriter. Their second project was project Daniel where he decided to create a cheap way to make artificial limps for a victim of the fighting in Sudan that had both his arms amputated. He developed techniques so the people in the refugee camps would be able to help each other with cheap 3d printers so artificial limbs went from 1000’s of dollars to 100’s of dollars.

With both these stories it was clear that Mike struck a nerve with the audience because at the end of his talk he received a well-deserved standing ovation. After this Nutanix announced the gathered a combined $11.000 for all four good causes: Not Impossible, Girls in Tech, Movember and the Fabien Cousteau Ocean Learning Centre

Nutanix .Next Europe report Day 1

To repeat an earlier phrase: ooooh what a rush. Yesterday was a great day in a perfectly named Acropolis where Nutanix is holding its second .Next Europe. Being one of the 2200 attendants in an atmosphere that really feels vibrant is awesome. Due to security and busses leaving late from hotels the Keynote (with my mugshot in there since I am a Nutanix Technology Champion) began 15 minutes late but made up that lost time by ending 45 minutes late. The only other point about the keynote was that it went a lightning speed. As techs, we managed to follow everything but I am 100% sure that a lot of people didn’t manage that.

In here we saw some new features of the 5.5 release, new tools and performance charts that are just unbelievable. The fact that they did demos on stage made it even better. The key thing from the keynote for me is that everything will be about simplicity. If apps/tools can’t be consumed very easily they will never be as successful as apps that are and the mantra of More Tea Less Clicks will probably appeal to everyone although some people might name it More Life Less Clicks or More Beers Less clicks.

Due to the keynote running late I missed my first session about xtract since I really wanted to visit with my fellow NTC’s at our lunch. It was good to finally meet the people behind the names with Sudheesh Nair making a surprise visit. He was almost literally pulled from the hallway by Angelo Luciano when he walked by.

My first session was from Dell about the six rules of disruption. This session told an obvious story with a little bit of product marketing in between. Nothing too much but hey a vendor has to sell so things, right? The second session I did was a Horizon View on Nutanix session. This was supposed to be done by Brian Suhr but he broke his leg last week so Sean Massey (VCDX-DTM) and Kees Baggeman had to replace him. They had some good takeaways and performance tips and tricks for the audience. Both sessions will be covered more extensively in a later post. I will not be able to do that with my last sessions since this was an NDA session with new tools and features that might or might not end up in final products presented by the engineers who created them at one of the Nutanix Hackathons.

The evening keynote started with a small fireside chat about politics and economics and how they influence each other. After this Fabian Cousteau came on stage for a very inspiring talk about the sea and how it impacts everything on our world. He had a very good tale and awesome videos to show. I visited the reception at the convention floor for a short while but did not go to the party. I was getting tired and since I am not really a party person I probably would have left early anyway. I saw some pictures that they had a big tent at the beach and that was food since there was a good thunderstorm when I left the venue.

Updated and new VMware Labs Flings for Oktober 2017

“Listen very carefully; I shall say this only once.”

Even after years this for me is one of the best quotes from any comedy series. Allo Allo always was so much fun to watch even though it looks pregistoric these days in video quality. For the people who don’t know Allo Allo please check out Michell from the resistance saying it herself over here. This months version of this post has two new flings and two updated ones. As almost always the vSphere HTML5 Web Client makes an appearance with the Horizon Toolbox as secondant, as you can see they have dropped the version number for the toolbox. New ones are the Blockchain on vSphere and the Desktop Watermark.

New Flings

Desktop Watermark

Desktop Watermark is a Windows native application that adds a watermark to a desktop for Virtual Desktop Infrastructure (VDI) auditing or exhibition purposes. A watermark has the ability to be visible or invisible. Invisible watermarks, seen in the screenshot, can be revealed by a tool bundled in the Fling. The tool should be configured by an administrator and enforced on the end user’s desktop.

Changelog
Build 1019
Issue Fixes
  • Windows 10 – Installation failure on some machine with domain account
  • Issue fix – Windows 10 – During uninstallation the service is not automatically stopped

Blockchain on vSphere

Blockchain is an emerging technology which has been gaining traction globally throughout the past few years. Industries like finance, logistics, and IoT are actively working on research and pilot projects using blockchain.

Fabric is a sub project under Hyperledger (a LinuxFoundation project), it is probably the most mature blockchain solution available now for business use cases.

The mission of Blockchain on vSphere is to provide an end-to-end blockchain solution, from IaaS, to Blockchain platform and Blockchain applications. It allows organizations to quickly collaborate and evaluate the new business models and processes by using the decentralized blockchain technology.

By using BoV, blockchain developers can quickly set up an environment to build and test their blockchain applications.

Changelog

Not yet

Updated Flings

Horizon Toolbox

Good old Horizon toolbox as said dropped its version number but continues to give you some features that the regular View Admin doesn’t have. Auditing on client versions, snapshots, usage and others are the great additions this tool gives.

Changelog

2017 Oct 12

  • Auditing – Clients are enhanced
  • Horizon 7.3.1 is supported
  • Some bugs are fixed

vSphere HTML5 Web Client

What do I need to say about this one? Just update you’re existing version and enjoy this almost perfect vSphere client.

Changelog
Fling 3.26 – Build 6984758

New Features

  • License Products Details
  • Add New License action

Improvements

  • Enhanced the performance of the Datastore File Browser

Known Issues

  • If you see error in the vSphere Client (HTML5) similar to this – ‘getHostIsAssignLicenseActionAvailable’, then you can resolve this error by following below steps:
    • If vSphere Client (HTML5) Fling appliance is pointed to a vCenter Server Appliance (VCSA), then you should reregister the fling appliance by logging in to FAMI UI (or by running the config-ui CLI). Refer the instructions document to follow the steps for configuring Fling appliance for VCSA.
    • If vSphere Client (HTML5) Fling appliance is pointed to a Windows vCenter Server, then reregister by downloading latest server-configure.bat from the Download section of this website. Refer the instructions document to follow the steps for configuring Fling appliance for Windows vCenter Server.
Fling 3.25 – Build 6929189

New Features

  • Edit the properties and policies of distributed ports
  • Licenses list
  • License Products list (Read-only)
  • Rename and Remove License action
  • You can now deploy VM from a VM template by choosing New VM wizard > Deploy from template > Data center tab

Improvements

  • Rescan storage action is done in parallel when is executed on Cluster or Datacenter level
  • Replication groups can be managed through Edit VM Storage Policy action
  • Showing the number of pending upload sessions and size uploaded in Datastore File Browser

Bug Fixes

  • Template icon missing issue is resolved
  • After creating some Tags or accessing the Content Library and leaving the H5 client idle, the UI starts to spin and fails to display requested info. The following error starts to appear constantly: “The query execution timed out because of a back-end data adapter ‘com.vmware.vise.data.adapters.core.DataServiceCoreAdapter’”. This bug is fixed in this release and the time out error should no longer appear.

Known Issues

  • If you see error in the vSphere Client (HTML5) similar to this – ‘getHostIsAssignLicenseActionAvailable’, then you can resolve this error by following below steps:
    • If vSphere Client (HTML5) Fling appliance is pointed to a vCenter Server Appliance (VCSA), then you should reregister the fling appliance by logging in to FAMI UI (or by running the config-ui CLI). Refer the instructions document to follow the steps for configuring Fling appliance for VCSA.
    • If vSphere Client (HTML5) Fling appliance is pointed to a Windows vCenter Server, then reregister by downloading latest server-configure.bat from the Download section of this website. Refer the instructions document to follow the steps for configuring Fling appliance for Windows vCenter Server.
Fling 3.24 – Build 6862396

New Features

  • Ability to customize all network properties, incl. default gateways, when applying GOS customization spec to a VM (during cloning or customizing GOS on existing VM)
  • Add NVMe controller for an existing VM or for a new VM

Improvements

  • Enhanced Compatibility details view in VM provisioning wizards

Known Issues

  • Fling appliances pointed to vCenter 6.5 seems to have timeout issues. These issues are being investigated and are not related to fling itself. In some cases, restart the Fling Appliance could solve this problem
  • If you see error in the vSphere Client (HTML5) similar to this – ‘getHostIsAssignLicenseActionAvailable’, then you can resolve this error by following below steps:
    • If vSphere Client (HTML5) Fling appliance is pointed to a vCenter Server Appliance (VCSA), then you should reregister the fling appliance by logging in to FAMI UI (or by running the config-ui CLI). Refer the instructions document to follow the steps for configuring Fling appliance for VCSA.
    • If vSphere Client (HTML5) Fling appliance is pointed to a Windows vCenter Server, then reregister by downloading latest server-configure.bat from the Download section of this website. Refer the instructions document to follow the steps for configuring Fling appliance for Windows vCenter Server.

Removing faulty Horizon desktops using PowerCLI

So last week there where a couple of posts on vmtn about people wanting to automatically removing or refreshing faulty Horizon desktops. With faulty I mean desktops in Agent Unreachable or in error state or whatever status are available. Since this was something i had been investigating anyway I decided to make a script for it that had separate menu’s for the status the desktop needs to be and to pick the desktop to be deleted. The latter part can be rebuild to do all those desktops at once  in case something breaks pretty badly during a recompose of the pool.

The largest part of the script is for creating the menu’s. Since the amount of returned desktops is variable and names differ it’s not possible to use a static menu. Instead I have used a menu structure created by Roman Gelman and that can be found inside this script on github. The part that gets things done i have listed below. The $spec array doesn’t need to be created but it is required in the API call to remove the desktop, Powershell assumes everything true by default when it’s empty but it just has to be called otherwise you will get a big fat red error. To remove multiple desktops at once machine_deletemachines needs to be used with an array filled with desktop id’s and $spec.

$spec = New-Object VMware.Hv.machinedeletespec
$spec.deleteFromDisk=$TRUE

[email protected]()
$desktops=get-hvmachine -state $targetstate
[email protected]()
foreach ($desktop in $desktops){
    $selectdesktop+= New-Object PSObject -Property @{"Name" = $desktop.base.name
    "ID" = $desktop.id;
    }
}

$selectdesktop=write-menu -menu ($desktops.base.name) -header "Select the desktop you want to remove"
$removedesktop=$desktops | where {$_.base.name -eq $selectdesktop}


try {
	$services1.machine.machine_delete($removedesktop.id, $spec)
	#$services1.machine.machine_reset($removedesktop.id, $spec)	
	write-host "$selectdesktop will be marked for deletion" -ForegroundColor Green
}
catch {
	write-host "Error deleting $selectdesktop" -ForegroundColor Red
}

As always the complete script can be found at Github where it will also be updated. This is how it looks in the end:

Update

After the comment below I decided to create the script to delete all desktops in a certain state. It’s a variation of the script above, just a bit shorter. Again it can be found on Github. Please be aware that due to a limitation in get-hvmachine both these scripts will only handle 1000 desktops at a time. It is safe to just repeat the script to do the rest.

https://github.com/Magneet/Various_Scripts/blob/master/remove_faulty_VDI_desktop.ps1

https://github.com/Magneet/Various_Scripts/blob/master/remove_multiple_faulty_VDI_desktops.ps1

What’s in my bag for Nutanix .Next

Intro

So previous to VMworld and also for MS Ignite I saw some people posting pictures of what would be in their bag for those events. Since I have always been a bad copycat I decided to make a post like that myself for Nutanix .Next Europe that I will be attending. Since it’s still some weeks to go the list might change a bit but this is the core of what i will be bringing.

Laptop

My day to day laptop is an HP Probook 440 G4 it by defaults comes with an 128GB NVME and has an extra 500Gb SSD added to it with 16Gb of ram. This is plenty for me and when I want I am always able to run a couple of VM’s. It has an USB-C port but sadly HP made sure it can’t be charged over that 🙁 It does have a regular USB port that gives some more power to charge my phone. When doing simple office work it has a battery life of about 6-7 hours so for most convention days I only need to charge it overnight. With 14 inch it has a nice size and the weight is also low enough.

Phone

this smart talky talky thing is a Samsung A5 2017 and yes the screencover needs to be replaced. Again it goes a very long time on the battery, only when i get distracted by Boom Beach it goes down a lot faster. From my employer I have a Samsung S4 mini, this makes phone calls, does whatsapp and the mail and that’s about it.

Headset

To keep the rotten sounds out and the good sounds in my ear I use the Sony MDR-ZX770BN. Since in ear buds always give my headaches I went with this over ear set that i got recommended by a lot of folks in the community and I love it. it gives a lot of bang for the noise cancelling buck.

Loose stuf

For the rest I have a supposedly (but who believes China?) Bubm DIS-L case fits all those goodies that normally would get lost in my backpack. It will be holding a battery pack (Xiaomi 10k for when i have played to much Boom Beach), Xiaomi Bluetooth mouse (Cheap, works perfect), USB stick, charging cables and whatever else I can think off. Xiaomi does have some good and cheap things to use it just takes a while before they arrive from China.

Travel Adapter

Wait, a travel adapter? You’re form The Netherlands just use your normal plugs! Yes I will be using those but this is an ideal travel adapter. The Powercube Rewireable USB isn’t a normal adapter. This cube uses a normal C14 cable or one of the plugs that come with it for other countries. So for France a normal power cable is all it takes to give me four power outlets + two 2A USB ports. Ideal for when you are travelling.

Creating local ESXi user in a locked down situation and add it to exception list

So my customer asked for a solution to add local users on ESXi hosts that are in lockdown mode. A side quest was to add these to the lockdown exception list. The use case for this is app volumes, they want to be able to keep using them in case the vCenter server goes down. The trick to this that you need to talk to two different viserver entities. The vCenter server and the local ESXi host since you can add those users via vCenter.

Offcourse PowerCLI to the rescue! I decided to do everything in a try catch construction for some error handling and to give some visual output. These cab be stripped if you want but i like some feedback.

Some of the outtakes:

(get-vmhost $vmhost | get-view).ExitLockdownMode()
(get-vmhost $vmhost | get-view).EnterLockdownMode()

These two disable and enable the current lockdown mode, this is necessary before being able to create the local user.

Try {
$account = Get-VMHostAccount -server $vmhost.name -Id $accountName -ErrorAction Stop |
Set-VMHostAccount -server $vmhost.name -Password ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($accountPswd))) -Description $accountDescription 
}
Catch   {
$account = New-VMHostAccount -server $vmhost.name -Id $accountName -Password ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($accountPswd))) -Description $accountDescription -UserAccount -GrantShellAccess 
}

Some encryption stuff in here but that’s because I dislike having password visible as plain tekst. This first test if the account exists and then sets the password and description. If the user doesn’t exist it will create the user for you.

 $rootFolder = Get-Folder -server $vmhost.name -Name ha-folder-root
 New-VIPermission -server $vmhost.name -Entity $rootFolder -Principal $account -Role admin

This gives the newly created or edited user the admin role. If you want to use a custom role this could be added to the script, we decided to go for the admin role since app volumes needs an awful lot of rights anyway. In that case i would recommend to use a variable for role name and create it per host using new-VIrole

$HostAccessManager = Get-View -Server $vCenter $vmhost.ExtensionData.ConfigManager.HostAccessManager
$HostAccessManager.UpdateLockdownExceptions($accountName)

This simply adds the user to the lockdown exception list.

So now the complete script:

#-------------------------------------------------
# Create local ESXi user with admin rights and lockdown exception while the host is in lockdown mode
# 
# Requires PowerCLI 6.5 or higher (module based not snappin)
# Based on scripts by Luc Dekens and others
#
# Version 1.0
# 09-10-2017
# Created by: Wouter Kursten
#
#-------------------------------------------------
#
# Load the required VMware modules (for PowerShell only)

Write-Host "Loading VMware PowerCLI Modules" -ForegroundColor Green
try	{
    get-module -listavailable vm* | import-module -erroraction stop
}
catch	{
    write-host "No Powercli found" -ForegroundColor Red
}

#Ask for connection information

$vcenter=Read-Host "Enter vCenter server name"
$Target = Read-Host "Which hosts? (i.e. server*)"
$rootpassword = Read-Host "Enter root Password" -AsSecureString
$accountName = $userPassword = Read-Host "Enter New Username"
$accountDescription = $userPassword = Read-Host "Enter New User description"
$accountPswd = Read-Host "Enter New User Password" -AsSecureString
$rootuser="root"

# Connect to vCenter
$connectedvCenter = $global:DefaultVIServer

if($connectedvCenter.name -ne $vcenter){
	Connect-VIServer $vCenter -wa 0 | Out-Null
	Write-Host "Connected"
	Write-Host " "
}

# Get the host inventory from vCenter
$vmhosts = Get-VMHost $Target | Sort Name

foreach($vmhost in $vmhosts){
    try {
        (get-vmhost $vmhost | get-view).ExitLockdownMode()
        write-host "Lockdown disabled for $vmhost" -foregroundcolor green
    }
    catch   {
        write-host "can't disable lockdown for $vmhost maybe it's already disabled" -foregroundcolor Red
    }

    connect-viserver -server $vmhost -user $rootuser -password ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($rootpassword))) -wa 0 -notdefault | Out-Null

    Try {
        $account = Get-VMHostAccount -server $vmhost.name -Id $accountName -ErrorAction Stop |
        Set-VMHostAccount -server $vmhost.name -Password ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($accountPswd))) -Description $accountDescription 
    }
    Catch   {
        $account = New-VMHostAccount -server $vmhost.name -Id $accountName -Password ([Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($accountPswd))) -Description $accountDescription -UserAccount -GrantShellAccess 
    }
    
    $rootFolder = Get-Folder -server $vmhost.name -Name ha-folder-root
    New-VIPermission -server $vmhost.name -Entity $rootFolder -Principal $account -Role admin

    #Adding the new user to the Lockdown Exceptions list
    $HostAccessManager = Get-View -Server $vCenter $vmhost.ExtensionData.ConfigManager.HostAccessManager
    $HostAccessManager.UpdateLockdownExceptions($accountName)
     
      
    Disconnect-VIServer $vmhost.name -Confirm:$false  
    try {	
        (get-vmhost $vmhost | get-view).EnterLockdownMode()
        write-host "Lockdown enabled for $vmhost" -foregroundcolor green
    }
    catch   {
        write-host "can't disable lockdown for $vmhost maybe it's already Enabled?" -foregroundcolor Red}
    }
}

    Disconnect-VIServer -Confirm:$false

Future versions of this script will not be edited on here so always check the latest version on github.

 

Nutanix Releases Xtract for VM’s

Today Nutanix has released the Xtract for VM’s product. With this tool you will finally be able to directly move your existing vSphere infrastructure to the Nutanix Cloud platform on AHV without any 3rd party tooling or workarounds.

Previously there where several ways to move from ESXi to AHV. The first way was to use 3rd party tooling like starwind to convert the disks. The other ways where completely manual by adding existing disks to new VM’s, use the cross hypervisor DR functionality or in place ESXi > AHV conversion if both clusters where already running on Nutanix. While these are tested and well documented scenario’s, there was no easy way to just test this and it could require a large maintenance window with a lot of manual actions. Rolling back could be a pita as well so it might end up being a costly effort.

In the spring Nutanix already announced Xtract, a tool that would solve all these headaches for you. With it you can schedule the migration and it will insert the required drivers and network settings for you. This results in a migration with hardly any downtime. You can setup the sync from ESXi to AHV wel advance so it is possible to test the complete migration procedure well in advance of the final cutover.

TLDR:

Release of new Nutanix tool called Xtract for Vm’s that efficiently and safely automates the move of your vm’s from ESXi to AHV.

 

New and updated VMware flings for September 2017

Intro

No WWE quotes,clips or sounds this month. So here I am reporting from couch central that there have been three updated flings in September. One steady name in this monthly post has been the vSphere HTML5 Web client but don’t underestimate the VMware OS Optimization Tool that is been in here a couple of times already as well. A new name is the Horizon Migration Tool, while it’s been there for quite some time it doesn’t get a lot of updates but it gets them and that’s awesome.

New Flings

None, nada, nothing, you can’t expect to have a new one every month do you?

Updated Flings

The Horizon Migration Tool has been created to help companies migrate from Citrix to Horizon View.

Changelog

Version 3.0.0

  • Supports Citirx to Horizon 7.2 migration
  • Added Citrix PVS Desktop pool migration to Horizon 7.2
  • Added Citrix Dedicate MCS Desktop Pool migraiton to Horizon 7.2 as manual pool, linked-clone pool or instant clone pool
  • Fixed Bug: XenApp applications with customerized path includes spaces will migrate properly.

Like I said before the VMware OS Optimization Tool  is THE tool to use when you want (and you need to!) optimize any Golden Image. No matter if it’s build for VDI,RDS or even physical desktops this is THE go to tool for that.

Changelog

September 20, 2017

  • Supports new mode for optimization item: display-only
  • Supports more easy information retrieval. For example, installed product version, service current status

Clearly the vSphere HTML5 Web Client is getting a lot of updates. In the August version of this post the newest was 3.20 while we’re at 3.23 at the moment. I will give all updates, fixes and known issues since then.

Changelog
Fling 3.23 – Build 6682372

New Features

  • Download folder from the File Browser

Improvements

  • DRS groups can be filtered by member.
  • Replication group are shown on the VM Storage Policy portlet

Known Issues

  • If you see error in the vSphere Client (HTML5) similar to this – ‘getHostIsAssignLicenseActionAvailable’, then you can resolve this error by following below steps:
    • If vSphere Client (HTML5) Fling appliance is pointed to a vCenter Server Appliance (VCSA), then you should reregister the fling appliance by logging in to FAMI UI (or by running the config-ui CLI). Refer the instructions document to follow the steps for configuring Fling appliance for VCSA.
    • If vSphere Client (HTML5) Fling appliance is pointed to a Windows vCenter Server, then reregister by downloading latest server-configure.bat from the Download section of this website. Refer the instructions document to follow the steps for configuring Fling appliance for Windows vCenter Server.
Fling 3.22 – Build 6613965

New Features

  • The list of software packages installed on a host can be viewed (for ESXi version 6.5)
  • Edit Video Card information for a VM

Bug Fixes

  • Fixed few bugs related to snapshots

Known Issues

  • If you see error in the vSphere Client (HTML5) similar to this – ‘getHostIsAssignLicenseActionAvailable’, then you can resolve this error by following below steps:
    • If vSphere Client (HTML5) Fling appliance is pointed to a vCenter Server Appliance (VCSA), then you should reregister the fling appliance by logging in to FAMI UI (or by running the config-ui CLI). Refer the instructions document to follow the steps for configuring Fling appliance for VCSA.
    • If vSphere Client (HTML5) Fling appliance is pointed to a Windows vCenter Server, then reregister by downloading latest server-configure.bat from the Download section of this website. Refer the instructions document to follow the steps for configuring Fling appliance for Windows vCenter Server.
Fling 3.21 – Build 6555866

New Features

  • Create and edit VM customization specifications with custom network configurations
  • Edit/Clone Storage Policy Component
  • Datastore capability sets (Datastore > Configure > Capability sets)
  • Create, edit and delete Link Aggregation Groups on Distributed Switches

Improvements

  • Confirmation on logout when there is upload file task in progress
  • Quick filter is introduced in the network selection dialog at Edit VM Settings > Network Adapter > Browse. It replaces the per-column filtering.
  • Enable/disable IPv6 on ESXi hosts.
  • Shares information is now available on Resource Allocation views for clusters and resource pools.
  • ESXi hardware health: when deployed against 6.5 vCenter, timestamps for sensor readings are displayed.

Bug Fixes

  • Cluster > Monitor > vSphere HA > Heartbeat now displays the actual set of datastores used by HA (used to display only the user-configured datastores)

Known Issues

  • If you see error in the vSphere Client (HTML5) similar to this – ‘getHostIsAssignLicenseActionAvailable’, then you can resolve this error by following below steps:
    • If vSphere Client (HTML5) Fling appliance is pointed to a vCenter Server Appliance (VCSA), then you should reregister the fling appliance by logging in to FAMI UI (or by running the config-ui CLI). Refer the instructions document to follow the steps for configuring Fling appliance for VCSA.
    • If vSphere Client (HTML5) Fling appliance is pointed to a Windows vCenter Server, then reregister by downloading latest server-configure.bat from the Download section of this website. Refer the instructions document to follow the steps for configuring Fling appliance for Windows vCenter Server.

Horizon view vCheck : Pool Overview plugin

So one of the things still missing in the Horizon View vCheck was a plugin that simply gives an overview of all Pools with their status. In short what I am talking about is a translation from this view:

Although this sounds easy there where a lot of challenges for this one. First of all there are three separate pool types: Automated,Manual and RDS and all of them have subtypes like VIEW_COMPOSER,VIRTUAL_CENTER,FULL_CLONES,INSTANT_CLONE_ENGINE,UNMANAGED or RDS and not all of these subtypes are available for all pool types. This gives a lot of options that need to be separated for the pool types. Also the VIRTUAL_CENTER subtype is used for both manually added desktops that reside on a vSphere environment and for an automatic pool creating full clones. The FULL_CLONES subtype I haven’t been able to create in my lab yet.

Further outputs like true, false or any of the subtypes above weren’t clear enough for me to use as output. For this I learned a new trick in my book called switch.

switch ($source)
		{
			VIRTUAL_CENTER {$sourceoutput="vCenter Managed Desktop"}
			FULL_CLONES {$sourceoutput="Full Clones"}
			VIEW_COMPOSER {$sourceoutput="Linked Clones"}
			INSTANT_CLONE_ENGINE {$sourceoutput="Instant Clones"}
			UNMANAGED {$sourceoutput="Non-vCenter Desktops"}
			RDS {$sourceoutput="RDS Desktops"}
			{$_ -eq "VIRTUAL_CENTER" -AND $pool.type -eq "Automated"} {$sourceoutput="Full Clones"}
			{$_ -eq "VIRTUAL_CENTER" -AND $pool.type -eq "MANUAL"} {$sourceoutput="Manually Added vCenter Managed Desktops"}
			default {$sourceoutput="No Source data available"}
		}

Some documentation for the switch command can be found here but what it in short does is match the variable u use as input and sets or gives some output based on that. Also it can do a comparison as in above example so I was able to distinguish between Full Clones and Manually Added vCenter Managed Desktops. One thing to be aware of is that it will go trough the complete list. At first I had the two lines with the comparison in it at the top but that got overwritten since below it VIRTUAL_CENTER was recognized and the $sourceoutput would be based on that.

The Automated and Manual pools use a very similar set of code, the biggest difference is that one gets the data from the AutomatedDesktopData propertywhile the other gets it from the manualdesktopdata property.

	if ($pool.type -eq "Automated"){
		$Automaticassignment=$pool.AutomatedDesktopData.UserAssignment.AutomaticAssignment
		switch ($Automaticassignment)
		{
			$TRUE {$Automaticassignmentoutput="Automatic"}
			$FALSE {$Automaticassignmentoutput="Manual"}
			default {$Automaticassignmentoutput="No Assignment Status Available"}
		}
		$Pooloverview+=New-Object PSObject -Property @{"Name" = $pool.base.name;
			"Displayname" = $pool.base.DisplayName;
			"Description" = $pool.base.Description;
			"Status" = $poolstatusoutput;
			"Provisioning" = $ProvisioningStatusoutput;
			"Type" = $pool.type;
			"Source" = $sourceoutput;
			"User_Assignment" = $pool.AutomatedDesktopData.UserAssignment.userassignment;
			"Assignment_Type" = $Automaticassignmentoutput;
			}
		}
	elseif ($pool.type -eq "MANUAL"){
		$Automaticassignment= $pool.manualdesktopdata.UserAssignment.AutomaticAssignment
		switch ($Automaticassignment)
		{
			$TRUE {$Automaticassignmentoutput="Automatic"}
			$FALSE {$Automaticassignmentoutput="Manual"}
			default {$Automaticassignmentoutput="No Assignment Status Available"}
		}
		$Pooloverview+=New-Object PSObject -Property @{"Name" = $pool.base.name;
		"Displayname" = $pool.base.DisplayName;
		"Description" = $pool.base.Description;
		"Status" = $poolstatusoutput;
		"Provisioning" = $ProvisioningStatusoutput;
		"Type" = $pool.type;
		"Source" = $sourceoutput;
		"User_Assignment" = $pool.manualdesktopdata.UserAssignment.UserAssignment;
		"Assignment_Type" = $Automaticassignmentoutput;
			}
		}

The RDS block gives a totally different view though. The information had to be pulled from the farms that are the backend for the desktops.

	elseif ($pool.type -eq "RDS"){
		$source=($services1.farm.farm_get($pool.rdsdesktopdata.farm)).source
		$ProvisioningStatus=($services1.farm.farm_get($pool.rdsdesktopdata.farm)).automatedfarmdata.VirtualCenterProvisioningSettings.enableprovisioning
		switch ($source)
		{
			VIEW_COMPOSER {$sourceoutput="Linked Clones RDS Hosts"}
			INSTANT_CLONE_ENGINE {$sourceoutput="Instant Clones RDS Hosts"}
			default {$sourceoutput="Manually Added RDS Hosts"}
		}

		switch ($ProvisioningStatus)
		{
			$True {$ProvisioningStatusoutput="Enabled"}
			$False {$ProvisioningStatusoutput="Disabled"}
			default {$ProvisioningStatusoutput="N/A"}
		}

		$Pooloverview+=New-Object PSObject -Property @{"Name" = $pool.base.name;
		"Displayname" = $pool.base.DisplayName;
		"Description" = $pool.base.Description;
		"Status" = $poolstatusoutput;
		"Provisioning" = $ProvisioningStatusoutput;
		"Type" = ($services1.farm.farm_get($pool.rdsdesktopdata.farm)).type;
		"Source" = $sourceoutput;
		"User_Assignment" = "N/A";
		"Assignment_Type" = "N/A";
			}
		}

And when done I ended up with the following script. As usual it might get some improvements or I need to squash some bug so better check the latest version on Github.

# Start of Settings
# End of Settings

[email protected]()
foreach ($pool in $pools){
	$poolstatus=$pool.DesktopSettings.Enabled 
	$ProvisioningStatus=$pool.AutomatedDesktopData.VirtualCenterProvisioningSettings.enableprovisioning
	$source=$pool.source
	switch ($poolstatus)
		{
			$True {$poolstatusoutput="Enabled"}
			$False {$poolstatusoutput="Disabled"}
			default {$poolstatusoutput="No Pool Status available"}
		}

	switch ($ProvisioningStatus)
		{
			$True {$ProvisioningStatusoutput="Enabled"}
			$False {$ProvisioningStatusoutput="Disabled"}
			default {$ProvisioningStatusoutput="No Pool Provisioning Status available"}
		}

	switch ($source)
		{
			VIRTUAL_CENTER {$sourceoutput="vCenter Managed Desktop"}
			FULL_CLONES {$sourceoutput="Full Clones"}
			VIEW_COMPOSER {$sourceoutput="Linked Clones"}
			INSTANT_CLONE_ENGINE {$sourceoutput="Instant Clones"}
			UNMANAGED {$sourceoutput="Non-vCenter Desktops"}
			RDS {$sourceoutput="RDS Desktops"}
			{$_ -eq "VIRTUAL_CENTER" -AND $pool.type -eq "Automated"} {$sourceoutput="Full Clones"}
			{$_ -eq "VIRTUAL_CENTER" -AND $pool.type -eq "MANUAL"} {$sourceoutput="Manually Added vCenter Managed Desktops"}
			default {$sourceoutput="No Source data available"}
		}

	if ($pool.type -eq "Automated"){
		$Automaticassignment=$pool.AutomatedDesktopData.UserAssignment.AutomaticAssignment
		switch ($Automaticassignment)
		{
			$TRUE {$Automaticassignmentoutput="Automatic"}
			$FALSE {$Automaticassignmentoutput="Manual"}
			default {$Automaticassignmentoutput="No Assignment Status Available"}
		}
		$Pooloverview+=New-Object PSObject -Property @{"Name" = $pool.base.name;
			"Displayname" = $pool.base.DisplayName;
			"Description" = $pool.base.Description;
			"Status" = $poolstatusoutput;
			"Provisioning" = $ProvisioningStatusoutput;
			"Type" = $pool.type;
			"Source" = $sourceoutput;
			"User_Assignment" = $pool.AutomatedDesktopData.UserAssignment.userassignment;
			"Assignment_Type" = $Automaticassignmentoutput;
			}
		}

	elseif ($pool.type -eq "MANUAL"){
		$Automaticassignment= $pool.manualdesktopdata.UserAssignment.AutomaticAssignment
		switch ($Automaticassignment)
		{
			$TRUE {$Automaticassignmentoutput="Automatic"}
			$FALSE {$Automaticassignmentoutput="Manual"}
			default {$Automaticassignmentoutput="No Assignment Status Available"}
		}
		$Pooloverview+=New-Object PSObject -Property @{"Name" = $pool.base.name;
		"Displayname" = $pool.base.DisplayName;
		"Description" = $pool.base.Description;
		"Status" = $poolstatusoutput;
		"Provisioning" = $ProvisioningStatusoutput;
		"Type" = $pool.type;
		"Source" = $sourceoutput;
		"User_Assignment" = $pool.manualdesktopdata.UserAssignment.UserAssignment;
		"Assignment_Type" = $Automaticassignmentoutput;
			}
		}	

	elseif ($pool.type -eq "RDS"){
		$source=($services1.farm.farm_get($pool.rdsdesktopdata.farm)).source
		$ProvisioningStatus=($services1.farm.farm_get($pool.rdsdesktopdata.farm)).automatedfarmdata.VirtualCenterProvisioningSettings.enableprovisioning
		switch ($source)
		{
			VIEW_COMPOSER {$sourceoutput="Linked Clones RDS Hosts"}
			INSTANT_CLONE_ENGINE {$sourceoutput="Instant Clones RDS Hosts"}
			default {$sourceoutput="Manually Added RDS Hosts"}
		}

		switch ($ProvisioningStatus)
		{
			$True {$ProvisioningStatusoutput="Enabled"}
			$False {$ProvisioningStatusoutput="Disabled"}
			default {$ProvisioningStatusoutput="N/A"}
		}

		$Pooloverview+=New-Object PSObject -Property @{"Name" = $pool.base.name;
		"Displayname" = $pool.base.DisplayName;
		"Description" = $pool.base.Description;
		"Status" = $poolstatusoutput;
		"Provisioning" = $ProvisioningStatusoutput;
		"Type" = ($services1.farm.farm_get($pool.rdsdesktopdata.farm)).type;
		"Source" = $sourceoutput;
		"User_Assignment" = "N/A";
		"Assignment_Type" = "N/A";
			}
		}
}

$Pooloverview | select Name,Displayname,Description,Status,Provisioning,Type,Source,User_Assignment,Assignment_Type
$Title = "Overview of all Pools"
$Header = "Overview of all Pools"
$Comments = "Gives an overview of the general status of all pools"
$Display = "Table"
$Author = "Wouter Kursten"
$PluginVersion = 0.1
$PluginCategory = "View"

And a screenshot of the result: