Annoying Lens IDE Login

After updating to Lens IDE 5.5.2 a non skippable login screen is displayed. You need to signup for a Lens Spaces ID or login using a Google or GitHub account. Annoyed by this I wanted to know if there is a workaround. Luckily there is: Cooksauce on GitHub posted a workaround for MacOS

The same applies for Windows, the paths are slightly different:

  1. Close Lens IDE
  2. Delete the folder %LocalAppData%\Programs\Lens\resources\extensions\lenscloud-lens-extension
  3. Remove the line pointing to the extension lenscloud-lens-extension from %AppData%\Lens\package.json
  4. Start Lens IDE

Not sure how long this will work, since this wasn’t build in by mistake:

Some users suggested to move to other builds of Lens, older versions or different products altogether:

With Lens 5.4.6 You might need to add the following line to the hosts (C:\Windows\System32\Drivers\etc\hosts or /etc/hosts) file to circumvent the login:

127.0.0.1    app.k8slens.dev

I haven’t checked the alternatives, I used the folder delete method.

Advertisement

Thin Provisioned Disk taking up it’s entire space, Reclaiming disk space from Thin Disk

I came across some VMs that although being Thin Provisioned took up all the diskspace that they could. vMotion (explicitly choosing target type Thin didn’t help either. The Guest OS reported 60 GB of an 80 GB volume being free, but the VMDK was 80GB is size. This is something that happens, if the disk has been written to, the VMDK inflates, when the files are deleted the VMDK may not shrink. There is a Knowledge Base article about this, and it explains exactly what to do. But I needed to do it for many VMs, so I wrote a script. It will vMotion the VM to the datastore with the largest free space available, push sDelete.exe to the machine, runs sDelete, vMotions the machine back to it’s original datastore. All without powering down the machine or the need for vmkfstools. The script now only deals with the C:\ disk (since that was the disk on my machines, but can be easily be adapted to work multiple disks. And it assumes that the machine has a D:\ disk where it can put the sDelete.exe file. Don’t worry when the output halts at “SDelete is set for 1 pass.” it will take some time. Just let it sit, and it will continue. In my experience it takes 15-30 min for a 80GB volume.

Reclaiming 51 GB from a Thin Provisioned VM

It needs a CSV inputfile with some information, which can all be exported from vCenter:

VirtualMachine;Hostname;DataStore
MyVirtualMachine;MyVirtualMachine.MyDomain.MyTLD;MyDatastore

$ManualCopy=@()
$ReclaimedSpace=0
$suspectVMs = Import-CSV C:\MyFiles\BloatedVMs.csv -Delimiter ";"
$suspectVMs | Sort-Object {Get-Random} | Foreach-Object {
    $currentVM=$_
    Write-Host Now Proccesing $($currentVM.VirtualMachine) on $($currentVM.Datastore)
    $ConsumedBefore=(Get-VM $currentVM.VirtualMachine).get_UsedSpaceGB()
    $SourcePath = "C:\Users\vmNinja\Downloads\sDelete\sDelete.exe"
    $TargetPath = "\\" + $currentVM.HostName + "\D$\"
    try {
        Copy-Item -Path $SourcePath -Destination $TargetPath -ErrorAction Stop 
    }
    Catch {
        $ManualCopy += $currentVM
        Write-Warning -message "Cannot Move VM $($currentVM.VirtualMachine) Unable to copy needed files. Error: $($Error[0].exception.message)"
    }
    $SourceDataStore = (Get-DataStore -Name $currentVM.DataStore)[0]
    $SpaceNeeded = (Get-VM $currentVM.VirtualMachine).Guest.Disks | Measure-Object CapacityGB -Sum | Select-Object -ExpandProperty Sum
    $TargetDataStore = Get-VMHost (Get-VM $currentVM.VirtualMachine).VMHost | Get-Cluster | Get-Datastore | Where-Object {$_.Type -eq "NFS"} | Sort-Object -Property FreeSpaceGB -Descending | Select-Object -First 1
    If ($TargetDataStore.FreeSpaceGB -gt ($SpaceNeeded*2)) {
        Try {
            Get-VM $currentVM.VirtualMachine | Move-VM -Destination (Get-VMHost (Get-VM $currentVM.VirtualMachine).VMHost) -DiskStorageFormat Thin -DataStore (Get-Datastore $TargetDataStore | Select-Object -ExpandProperty Name -First 1) -ErrorAction Stop 
        }
        Catch {
            $ManualCopy += $currentVM
            Write-Warning -Message "Could not move $($currentVM.VirtualMachine) from $($currentVM.Datastore) to $($TargetDataStore[0]) Error: $($Error[0].Exception.Message)"
        }
        $CommandString = "D:\sDelete.exe /acceptEULA -nobanner -z C:"
        $ScriptBlock = [ScriptBlock]::Create($CommandString)
        Try {
            Invoke-Command -ScriptBlock $ScriptBlock -ComputerName $currentVM.HostName -ErrorAction Stop 
        }
        Catch {
            $ManualCopy += $currentVM
            Write-Warning -Message "Could run sDelete on $($currentVM.VirtualMachine) Error: $($Error[0].Exception.Message)"
        }
        Try {
            Get-VM $currentVM.VirtualMachine | Move-VM -Destination (Get-VMHost (Get-VM $currentVM.VirtualMachine).VMHost) -DiskStorageFormat Thin -DataStore (Get-Datastore $SourceDataStore | Select-Object -ExpandProperty Name -First 1) -ErrorAction Stop
            $ConsumedAfter=(Get-VM $currentVM.VirtualMachine).get_UsedSpaceGB()
            $ReclaimedSpace=$ReclaimedSpace+([MATH]::Round(($ConsumedBefore - $ConsumedAfter),2))
            Write-Host "$($CurrentVM.VirtualMachine) Space Reclaimed: $([MATH]::Round(($ConsumedBefore - $ConsumedAfter),2)) GB" -ForegroundColor Green
        }
        Catch {
            $ManualCopy += $currentVM
            Write-Warning -Message "Could not move $($currentVM.VirtualMachine) from $($TargetDataStore[0]) back to to $($currentVM.Datastore) Error: $($Error[0].Exception.Message)"
        }
    }
    Else {
        $ManualCopy += $currentVM
        $TargetSpace=$([MATH]::Round(($SpaceNeeded*2),2))
        Write-Warning -message "Cannot Move VM $($currentVM.VirtualMachine) There is not enough storage free in the Clusters' Datastores, need at least: $($TargetSpace) GB"
    }
}
if ($ManualCopy.Count -ge 1) {
    Write-Warning -Message "These VirtualMachines could not be debloated automatically, please check them manually: "
    $ManualCopy | Sort-Object -Property VirtualMachine -Unique
}
Write-Host "Total Space Reclaimed: $ReclaimedSpace" -ForegroundColor Green

Export Performance Charts from vCenter for many VMs.

I needed the performance charts for a couple of VMs. It’s an easy task which can be done via the GUI. But I needed the charts for tens of VMs, and needed a faster (and more lazy way), so I write this script that uses the Windows Charting APIs to plot the data from vCenter onto a PNG that I could send to the requester. I though to share the script here so it can help somebody else’s day be a little less grinding. This has been the second time I’ve been asked to deliver this kind of data, see my post from 2014 (which I forgot I made, and assumed I lost the script) So I wrote a new script. So why share it then, because this time it has been written better, and supports two Y-axis. Plotting CPU and RAM values at the same time with the method I used this time wasn’t possible so there you go, more of the same, but different. And you can have may stats plotted, it just dynamically adds data series.

Example chart that this script generates.

Function GenerateChart {
[CmdletBinding()]
param (
    [STRING][Parameter(HelpMessage='Type of chart to generate, see "https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.datavisualization.charting.seriescharttype" Default is "FastLine"')]$ChartType="FastLine",
    [STRING][Parameter(Mandatory,HelpMessage='Please give atleast one VirtualMachine Name')]$VirtualMachine,
    [STRING[]][Parameter(Mandatory,HelpMessage='Please give atleast one statistic, e.g. "cpu.consumed.average"')]$Statistic,
    [STRING][Parameter(HelpMessage='Location the save the generated charts, no need for a trailing "\". Default to TEMP variable')][Alias('Path')]$FilePath=$env:TEMP,
    [INT][Parameter(Mandatory,HelpMessage='Please indicate the timespan in days, for which you need the data')]$Days
)

    $VirtualMachine = Get-VM -Name $VirtualMachine
    $StartDate = (Get-Date).AddDays(-$Days)

    $Statistics = Get-Stat -Entity $VirtualMachine -Stat $Statistic -Start $StartDate | Sort-Object -Property Timestamp,VM | Select-Object @{Name='VirtualMachine';Expression={$_.Entity.Name}},Timestamp,MetricId,Value 

    $Chart = New-Object System.Windows.Forms.DataVisualization.Charting.Chart
    $Chart.Width = 1920
    $Chart.Height = 1080
    $Chart.BackColor = [System.Drawing.Color]::White
             

    [void]$Chart.Titles.Add($Statistics.VirtualMachine[0])
    $Chart.Titles[0].Alignment = "topLeft"
    $ChartArea = New-Object System.Windows.Forms.DataVisualization.Charting.ChartArea
    $ChartArea.Name = "ChartArea1"
    $Chart.ChartAreas.Add($ChartArea)
    
    $Statistics | Select-Object -ExpandProperty MetricId | Sort-Object -Unique -Descending | Foreach-Object {
        [STRING]$SeriesName = $_
        
        $SeriesStatistics = $Statistics | Where-Object {$_.MetricId -eq $SeriesName}
        
        [void]$Chart.Series.Add($SeriesName)
        
        $Chart.Series[$SeriesName].ChartType = [System.Windows.Forms.DataVisualization.Charting.SeriesChartType]::$ChartType
        If ($SeriesName -eq "mem.entitlement.average" -or $SeriesName -eq "mem.consumed.average") {
            $ChartArea.AxisY2.Enabled = [System.Windows.Forms.DataVisualization.Charting.AxisEnabled]::True
            $Chart.Series[$SeriesName].YAxisType = [System.Windows.Forms.DataVisualization.Charting.AxisType]::Secondary
        }
        
        $Chart.Series[$SeriesName].Points.DataBindXY($SeriesStatistics.TimeStamp,$SeriesStatistics.Value)
        $Legend = New-Object System.Windows.Forms.DataVisualization.Charting.Legend
        $Legend.IsEquallySpacedItems = $True
        $Legend.Position.Auto = $true
        $Chart.Legends.Add($Legend)
        $ChartArea.RecalculateAxesScale()
    }
    
    $FileName=$FilePath.TrimEnd("\") + "\" + $VirtualMachine + ".png"
    $Chart.SaveImage($FileName,"png")
    Return $FileName
}

[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.DataVisualization") | Out-Null
Import-Module VMware.VimAutomation.Core
Connect-VIServer -Server MyVirtualCenter -User Me -Password MySecr3t!

#Most likely you need information from more than one VM, You could use RegEx, or an inputfile but a single VM is equally possible:
#$VMs = Get-VM | Where-Object {$_.Name -match "(?i)^\D\d{4}srv\D{3}\d{3}"}
#$VMs = Get-Content C:\MyReports\InputList.txt
#$VMs = Import-CSV C:\MyReports\VirtaulMachines.csv -Delimiter ',' | Select-Object $_.VirtualMachineName
$VMs = Get-VM MyVirtualMachine

$Statistic = @(
    "cpu.demand.average",
    "mem.entitlement.average",
    "mem.consumed.average"
)

$VMs | ForEach-Object {
    GenerateChart -ChartType FastLine -VirtualMachine $_ -Statistic "cpu.demand.average","mem.entitlement.average","mem.consumed.average" -Days 7 -FilePath C:\MyReports
}

The Quest for VMware Horizon View Client with PC over IP on Raspberry Pi

In this blog I’m discussing multiple options to use an Raspberry Pi 4 as a VMware Horizon View 8 Thin Client. What works, what doesn’t.

Due to the COVID restrictions, and the push for working from home, I’ve been at home for the last 18 months. The customer for whom I work at the moment uses a VMware Horizon VDI infrastructure, so working from home is basically the same as working from the office, bar the co-workers.

But why? Don’t you have a PC or laptop for that?

Sure I do, but my primary PC has some issue when running the Horizon View and the Microsoft Teams clients, it gets unstable. Don’t know why, haven’t found anything, PC just freezes, leaving no trace of any issue in any log/eventlog. It just locks up (I’ve got alot of stuff, including VM’s running on the background, so probably my own fault). But that is not the topic of this post.

I needed to find a reasonable alternative, I don’t want to have yet another PC on my desk only for some remote desktop stuff. I do have a bunch of Raspberry Pi 4’s stacked, which I use for either Kubernetes or ESXi on ARM. I decided that I could use one of them to test if using a Raspberry Pi 4B (4GB) for work was feasible.

Short story short: Yes the Horizon Client works on a Raspberry Pi! But not how you may think. It will not do PC over IP on a Raspberry Pi running Linux. It does when running Windows or Android on the Raspberry Pi.

To keep the story as short as needed, use these links to jump to each section:

Setup and criteria

My setup consists of 2 LG 27UL500-W 27″ 4K screens I just bought from Amazon, they weren’t that expensive to begin with and by choosing the returned items (both were advertised with having minor scratches on the front bezels (rated ‘good’ by Amazon)). But I haven’t yet found any! (Your experience may vary) but for now, I’ve gotten an 15% discount on them just because they were returned. Since I’m located in the EU, they are covered with a 2 year warranty, and I’m able to return them without question within two weeks and just get my money back if the scratches are really an eyesore. But as stated earlier, I don’t see any! I’ve got an Larmtek 1080p USB webcam attached, also from Amazon, keyboard and mouse are an old Logitech wireless desktop set, connected over the included USB dongle. My headset is a Jabra Evolve2 headset connected over USB-A. All of this connected to an Raspberry Pi 4B 4 GB (with the older BCM2711 B0-stepping). I need to acquire a 8GB model with the C0 stepping, to see if that feels like it runs better with Windows or at higher clock speeds. But that’s for later. When do I consider the setup feasible? When I could recommend it to my co-workers. Who may have reservations about using their gaming rig for the desktop work, consuming some hundreds of Watts just for doing their work, especially now with the incredible rise off energy prices. So the setup must be able to run VMware Horizon View Client 8.0 (2006) or higher and run Microsoft Teams outside of the VDI. An added requirement is that Horizon works using Teradici’s PC over IP protocol. Since that is what my current customer uses. No Blast sadly.

PC over IP support is sparse!

The Linux (armhf/32-bit) version of the client does not support PC over IP (PCoIP), and that is the only protocol the customer allows, since they use Teradici hardware based Zero Clients at the office. And this is partly the reason for this post and probably why this has come up in your Google search. It cannot do PCoIP, and wont give any helpful error either: (from /tmp/vmware/vmware-mks-XXXX.log)

blastSocket SSL: syscall error 104: Connection reset by peer
blastSocket SOCKET 6 (31) Could not negotiate SSL
blastSocket
blastSocket SOCKET 6 (31) Cannot verify target host.

It seems to point to a certificate / SSL issue, especially when you Google error 104, it’s an error raised by OpenSSL. But it appears that it is raised when the connection couldn’t be made because the display protocol can’t connect. All messages are prefixed with blastSocket indicating that it is the Blast protocol connection that is attempted to be established.

Only by resorting to ThinLinx TLXOS a warning was shown, prompting me to change my Google searches. Still I couldn’t find a definitive VMware documentation source that states that PCoIP is not possible on the Linux ARM Client. Only that connecting to a Linux Agent requires Blast. And PCoIP should just work on the x86_64/AMD64 Linux clients.

ThinLinx TLXOS: Horizon Client for ARM Linux does not support the PCoIP and RDP protocols. Your session will use the BLAST protocol instead.

There is a script included in the Horizon Client bundle, vmware-view-lib-scan, that raised an error on the PCoIP installation, it’s missing a file vmware-remotemks-container which is not included in any of the armhf archives. I even checked the Android 32-bit ARM files, but those didn’t contain the file either. I saw some posts dating back to version 4, and something about an HP ThinClient update package that should contain a working PCoIP connection. But since that version is just ancient, I didn’t explore that path.

However if your setup does allows for Blast, and you want to use a standard Raspberry Pi 4B to use as a thin client, I’ve written this how to, since (and this is for me a common experience with anything Linux related) guides are not easy to come by or don’t elaborate enough and maybe the most common, they assume a lot of background knowledge of the reader. I try to explain the steps taken as much as I can, to hopefully make it easy to follow, and if anything changes in the future, and they will (!), maybe make it understandable how to update your steps.

Because both the Microsoft Teams app (3rd party webapp wrapper app) and the Horizon View client are only available for armhf and not ARM64 or aarch64, I used Raspberry OS in this example. I’ve tried the 64bit version of Ubuntu 21.04, and couldn’t install the Teams app, which for my use case/experiment was a requirement. Sadly Microsoft doesn’t supply a 64bit ARM version of Teams nor VMware an ARM64 version of Horizon View. Both have 64bit Linux support (at the time of writing) but only x86_64 / AMD64. The armhf Teams app is from a 3rd party developer who sadly stopped development. So no ARM64 version of that is to be expected. The last resort for Teams is the webapp, and the same goes for Horizon, but the HTML5 version still requires Blast. To at least test if Blast is working, I build a basic Horizon View 8.3 setup in my homelab.

The servers in my homelab do not have any hardware graphics acceleration. To test if Blast H.264/HVEC decoding works, I tested Big Buck Bunny 4K over YouTube, and 360p video in the VDI is choppy. Without the Blast acceleration, even 360p was unwatchable, chucks missing or no change between keyframes. The same video directly in Chromium on the Raspberry allowed for a choppy but watchable 720p resolution.

I did not try any of the central management options of ThinLinx or StratoDesk This was not the aim of this test. Both come with an free (!) management appliance. For more information on these appliances, check the websites of each vendor..

Conclusion

If PC-over-IP is a requirement, the clear winner is Android. It’s quick, has great hardware and app support, sadly no dual screen. If using it for Blast, the best hardware support comes with Raspberry Pi OS, StatoDesk NoTouch OS comes with a nicer interface (Windows inspired) and ThinLinx TLXOS sports a clean minimalistic approach. Windows 11, to be able to run x86_64 apps on a Raspberry Pi is just awesome. Most of all I just love the fact that almost any major OS runs on a such an underpowered cheap device as a Raspberry and quite workable at that. As far as I know it is not yet possible to get MacOS running on a Raspberry Pi, but when some one manages to do so, Apple will still catagoricaly refuse to allow MacOS to run on any non Apple hardware. It most likely will allways be a EULA violation. That said, Windows has not been officially released for the Raspberry Pi, and as far as I know the ARM version is OEM only. But that may change in the future. (Bootcamp on M1 Macs? More ARM SoCs (other than Qualcomm) in the laptop/desktop space, who knows)

(*) I briefly tested Ubuntu, but I couldn’t get snap to install armhf stuff, so no Teams. I did add the armhf microarchitecture using dpkg --add-architecture armhf but couldn’t find a way to configure snap.
(!)Max Resolution of the Raspberry Pi 4B/400 is 2x 3840×2160 (4K) @ 30Hz
(%)ThinLinx TLXOS only allows a single app/connection at a time. So no browser and View Client at the same time.
(^) Only PowerPoint, Pictures or Video’s and some apps can be shared.
(a) Horizon View armhf is only supported by VMware on StratoDesk and ThinLinx.
(b)Windows on ARM is only supported on selected devices, sadly the RPi is not one of them.

kubernetes “volume X already bound to a different claim”

volume X already bound to a different claim when recreating Persistent Volume Claim

I recently encountered an issue in Kubernetes (Azure Kubernetes Service v1.19.7 to be exact) in which a Persistent Volume Claim (PVC) kept giving the error “volume “myvolume” already bound to a different claim.” I do not know what caused this, since there were no other claims to the volume. The PVC kept status Pending and the Persistent Volume (Azure-File) kept the status Released

My Google-Fu could not help me, I found an question on stackoverflow, but there the error was caused by sizing differences in the PV and PVC (a PVC may not claim a larger size than the PV provides). But that wasn’t the case in my environment.

Eventually I found the sourcecode for the Persistent Volume Controller which throws the error and it shows that the error should not pop up if the volume.Spec.ClaimRef == nil (line 416 at the time of writing). So I decided to see if I could find this spec.claimref in the properties of the PV. I use Lens IDE which allows you to simply edit the configuration in a GUI, but kubectl edit should do the same)

kubectl edit pv <pv-name>
(Replace the values between <> with the correct values)

I tried to remove everything under spec.claimRef by simply replacing all text with “{}” but after saving the file, it still retained the original values.

So when playing around with the values, I saw that if I editted the spec.claimRef.name to some other value, that it would be applied immediately, so changes do get saved.

At this point I tried changing the spec.claimRef.uid to the value that I found in the properties of the PVC. And that resulted in a Bound PV and PVC.

To find the uid of the PVC:

kubectl get pvc <pvc-name> --namespace <namespace-name> --output yaml |grep uid
(Replace the values between <> with the correct values)

So for some reason this value is not overwritten with the newly created PVC’s value. (Line 83 in the screenshot) But doing by hand fixed the issue. Atleast for now.

apiVersion: v1
kind: PersistentVolume
spec:
  claimRef:
    kind: PersistentVolumeClaim
    namespace: <namespace-name>
    name: <pvc-name>
    uid: 12345678-1234-abcd-defg-1234567890ab <- The uid of the PVC
    apiVersion: v1
    resourceVersion: '14061061'

Configured LAG not showing on Juniper EX switch.

Building an aggregated ethernet interface with LACP didn’t work on a switch that was but back to factory defaults (load factory-defaults).

Creating an LAG with LACP between switches is quite easy, at least I thought it was… I followed the steps in: Configuring Link Aggregation Control Protocol

root@switch# set interfaces ae0 aggregated-ether-options lacp active
root@switch# set interfaces ae0 aggregated-ether-options lacp periodic fast
root@switch# set interfaces ae0 unit 0 description "LAG to Upstream Switch"
root@switch# set interfaces ae0 unit 0 family ethernet-switching interface-mode trunk
root@switch# set interfaces ae0 unit 0 family ethernet-switching vlan members all

{master:0}[edit]
root@switch# set interfaces ge-0/0/22 ether-options 802.3ad ae0

{master:0}[edit]
root@switch# set interfaces ge-0/0/23 ether-options 802.3ad ae0

{master:0}[edit]
root@switch# commit check
configuration check succeeds
fpc1:
configuration check succeeds

{master:0}[edit]
root@switch# commit
configuration check succeeds
fpc1:
commit complete
commit complete

{master:0}[edit]
root@switch# run show interfaces terse |match ae0
ge-0/0/22.0             up    up   aenet    --> ae0.0
ge-0/0/23.0             up    up   aenet    --> ae0.0

{master:0}[edit]

I was expecting an ae0 interface with up/up state, but no interface is listed?

Something like this:

root@switch# run show interfaces terse |match ae0
ge-0/0/22.0 up up aenet --> ae0.0
ge-0/0/23.0 up up aenet --> ae0.0
ae0         up up
ae0.0       up up eth-switch

{master:0}[edit]

I guess that anyone with a decent Juniper background already guessed it, but apparently I followed an incomplete guide, since my factory default switch was missing a statement telling the switch how many LAGs are defined on the switch. I assumed (and assumptions are the mother of all ….) that if you don’t set a limit there won’t be any limit. Since this isn’t a limit, it is simply the number of (virtual) interfaces that the switch (pre-)creates. A LAG (ae) interface needs to exist before it can be configured. My bad. As stated in (Configuring Aggregated Ethernet Links) I needed to set the ‘aggregated-devices ethernet device-count’:

{master:0}[edit]
root@switch# set chassis aggregated-devices ethernet device-count 1

Now the LAG is allowed, and operational:

root@switch# run show interfaces terse |match ae0
ge-0/0/22.0 up up aenet --> ae0.0
ge-0/0/23.0 up up aenet --> ae0.0
ae0 up up
ae0.0 up up eth-switch

More information on aggregated devices can be found here

RBD Health Alarm on vCenter 6.7

01a

vCenter greeted me this morning with a RBD Health Alarm. Not really sure what the issue could be, I just googled it. Sure enough, VMPros already blogged about it. It is about Auto Deploy. Something that is not used by the customer at this point, but is nevertheless enabled, and encountered some sort of error. The blog post points to VMware KB2000988. But it states:

“This article provides troubleshooting guidance on VMware Auto Deploy 5.x. This article does not apply to vSphere 6.0”

Continue reading

Remove Inaccessible datastore from inventory

DatastoreError

Datastore ‘{name}’ is not accessible. “No connected and accessible host is attached to the datastore.”

At a client’s we encountered a rather classical error, a dismounted datastore that couldn’t be removed/distroyed. So the customer just deleted the LUN from the storagebox expecting the datastore to disappear from the inventory. That didn’t happen. Neither did the datastore get removed after a reboot of the VCSA.

The customer was adament that everything from the datastore was moved to other datastores prior to the unmounting. The filesystem seems empty (except for the default folders (.naa.XXXXXXXXXX and .ssd.sf) And all of the VMs were XvMotioned to other datastores.

Two other datastores were assigned to be used by vSphere HA as Heartbeat Datastores

So why couldn’t it be removed? Continue reading

VCAP 6 – Datacenter Virtualization Deployment

After passing the 3V0-624 (VCAP 6.5 Design) I want to pursuit the VCIX6-DCV certification, so the next exam I need to take is the 3V0-623 VMware Certified Advanced Professional 6 – Data Center Virtualization Deployment Exam. Since the design exam has been upgraded to vSphere 6.5, I went to the VMware Education booth at VMworld to ask if they knew if the deploy exam is stil based on 6.0. And it should still be. VMware Education could not tell me if it will be upgraded, and if so, when. But it shouldn’t happen anytime soon. So I need to prepare with the 6.0 version of vSphere. Sadly no HTML 5 client…

I did get some pointers on the exam:

  • It is based on the hands on labs, but the Control, Alt and Backspace keys are disabled. This means that you can’t use the MKS client, since you can’t release the focus of the window with CTRL+ALT, use the web console!
  • You can go back and forth between questions.
  • Even questions that you can’t complete, will be scored on the parts you did manage.
  • Scoring is done by a script that simply checks if settings are as desired, a sort of desired state configuration check.
  • Deploying the lab environment will take some time, use this time to setup the screen size of the controls.
  • vCenter will take even longer to come online, use this time to enable SSH on the ESXi hosts.
  • It’s a single lab environment during the entire exam, so if you come up with an answer to a previous question, you didn’t manage earlier, you are always able to answer it.
  • The allotted time still is an issue, there is simply not enough time to comfortable answer each question.
  • Screwing up the ESXi host networking is less likely, since the automatic revert of settings if the host becomes isolated. I’ve read that this occurred to some in the 5.x edition of the exam.
  • PowerCli should be available, for me this is important since I use it allot.
  • Use Hands on Labs. Not only to get a feel for the exam environment, but to get proficient with the tasks that you may not do on a daily basis.
    • I don’t have a list of HoLs just yet. I haven’t really started with my studies, but wanted to document the points from VMware Education, before I forget them.

Read the Exam Guide and the Platform Interface guide.

There still is no official Certification Guide from VMware Press like there was for 5.x, nor will there be anytime soon. But there is an unofficial ‘VMware Certified Advanced Professional 6 – Data Center Virtualization Deployment Exam Preparation Guide’ written by Ramy Mahmoud. I haven’t been able to read it, but judging by the first few pages, it should be awesome.

Schermafbeelding 2018-11-09 om 22.13.16

3V0-624: VCAP 6.5 Datacenter Virtualization Design my exam experience

VMworld Barcelona 2018 started for me with a personal victory, I passed the 3V0-624 exam!

Schermafbeelding 2018-11-09 om 21.23.25

My exam experience was great, started my exam at 9 AM, (my appointment was a half hour later, but since there were plenty of seats available, I could start early. 30 minutes less to be a worried nervous wreck. I feel that I didn’t give myself enough time to properly prepare for this exam, but then again, isn’t that always the case? Just schedule an exam date far away, to use the date as the motivator to at least try to put in some effort… But with VMworld exams rescheduling is not really possible, so I just went for it.

The exam consisted of 60 questions, either multiple choice or drag and drop, no Visio style infrastructure quizlets. The time allotted was fine for me, I had ample time to read and re-read all questions. Yes it will involve some reading, since lots of (background) information is presented about the design in question.

Many questions weren’t so much technical in nature, but ask you the define a statement to be a functional or non-functional requirement. Or if something should be classified as being a risk, constraint or an assumption. Some questions ask to sort requirements by stakeholder. So know how to identify stakeholders, and have an idea about the common tasks or interests are for C-level executives, such as CEO, CIO, CISO and my wife CFO.

Oh and the rule that with a 4 answer multiple choice question, 2 choices are evidently ridiculous, will not apply in this exam. Many of the answers seem valid! Make sure to re-read the question to see, if something that seems valid enough may be invalidated by some of the wording in the question. For every answer you give, don’t just click it because it’s the first thing that comes to mind, but try to defend you answer against the question. Think “Why is answer X wrong?” or “Why does answer X fit better than Y?”

“Dear algebra, please stop asking us to find your X, she’s never coming back and we don’t know Y” – From somewhere on the internet.

In this exam you must know why. To get a taste of it, visit vMusketeers (See below)

But to prepare for the exam, a lot of reading is required anyways…

What I did to prepare for this exam:

  • Read books
    • VMware vSphere 6.x Datacenter Design Cookbook Second Edition by Hersey Cartwright ISBN: 9781785283468
    • Essential vSAN 6.2 by Duncan Epping and Cormac Hogan. An updated version may come soon, Duncan tweeted about it a few days back!
    • Host Resources Deep Dive 6.5 by Frank Denneman and Niels Hagoort. ISBN: 9781540873064 or get a free digital copy from Rubrik
    • vSphere HA DeepDive 6.0u1 by Duncan Epping which isn’t available anymore, but the content is updated and combined with the updated Host Resource Deep Dive 6.5 book, in the VMware vSphere Clustering Deep Dive 6.7 book. I haven’t read it yet. But picked up a signed copy at VMworld, again sponsored by Rubrik, if history truly repeats itself, they may provide a free ebook version soon, so check the Rubrik site regularly!
  • The VMware Exam Guide, which contains links to allot of (VMware) Documentation, which may not be the most fun to read, but as always in a VMware exam, know the configuration maximums, limits, product compatibility and caveats for each listed product. Knowing which operating systems can or can’t be converted on which platform using VMware Converter could win you a couple of points. Know the product suite on a high level, have intimate knowledge on all things vSphere. The guide contains 10 practice questions, which are somewhat easier than the real exam, at least in my experience. All are solely of the multiple choice variety. Beware: Even if you ace these, don’t think you’ll automatically ace the exam.
  • Watched a few recordings of the VCAP6.x Design sessions from vBrownbag. These are awesome, not only because of the technical content, but especially for the explanations of the differences between Functional and Non-Functional requirements, Risks, Assumptions, Constraints, which are very important in the exam. (I really loved the videos on Section 2.1 and 3.1
  • Tested my understanding with the VCAP 6.x DCD mock exam from vMusketeers. The score of this mock was surprising accurate compared to my actual exam score, and the type of drag ‘n drop questions are quite similar to those of the exam. I didn’t see any re-order questions in my exam, but that doesn’t necessarily means that there aren’t any.
  • Blogs of each of the gentlemen reverenced above. Don’t remember the exact blog posts, but many.

Thanks to all those people that make such an effort writing books, blogs and hosting/presenting these sessions, I wouldn’t know how I could have accumulated this amount of knowledge in such a short time without all your hard work!