Wednesday, June 3, 2020

Time passes …

Ha, so 2017 was the last entry. Ah well. Since then, company I work for was acquired by another company, passed various exams (the usual VCP stuff, NSX, vSAN) and now in 2020, well, hmm, less said about 2020 the better.

I have started putting some PowerCLI scripts up on Github - more to follow. Some of them are variations of things I have written in work, and have generalized a bit.

Tuesday, January 3, 2017

VCP 6 passed

Shortly before Christmas, I took, and managed to pass the VCP6 Delta exam (2V0-621D), to further extend my VCP status by another 2 years (not really a fan of the need to do this, but ultimately the choice is do it or lose it).

Personally, I found the exam a bit tougher than the previous VCP exams. Now, whether that was because it was the Delta (and so in theory, they can concentrate on asking more detailed/specific questions, as it should focus on the changes between vSphere 5 and vSphere 6) I don’t know. It could be that as I use the VMware technologies covered by the VCP-DCV all day every day (it’s my day job), it was actually a bit tougher to then sit down and do the necessary reading (ie, the temptation to go “oh, I know this, I’m skipping it”). The risk with that of course, is that :

1) I don’t know if all - this of course, goes without saying.
2) I need to focus on the areas that I feel less confident in, or that we don’t use all day every day - resource pools are a good example of this, they’re not something we use much at all. But picking out those areas becomes more tedious.

Ultimately, that’s all just an excuse for not preparing as thoroughly as I would’ve liked, and I think I was probably a bit complacent (plus there are more “interesting” things to be working on that revising for what I think I already know - see the end of this entry for the kind of thing I mean. Still managed to pass with (what to me was) an acceptable score.

Resources used :

Well, it’s the usual kind of thing.
1) The Blueprint (I do wish they kept it as a PDF or a single file download at least, I don’t like the current presentation of it).
2) VMware documentation - as mentioned above, I struggled here, just because of the whole idea of re-reading the same stuff again - need to be wary of this, as obviously there are (significant) changes.
3) Mastering vSphere 6 - from my Safari subscription - didn’t use this as much as previous versions - again complacency on my behalf.
2) Practical work - as I said, it’s my day job, so I’m using it every day, but personally I’m poor at remembering menu options or anything like that (I just “do” tasks, I don’t think too much about the menu structure or what the labels are etc. I also try to script more and more these days, so prefer to not rely on the GUI if I can help it). So it’s a combination of my paid work, and things in the home lab.

Anyway, it’s done and dusted for a few more years, which is a relief, as there’s plenty more to work with, given the recent release of 6.5, and the associated technologies - vSAN, vROPS, vRA, Orchestrator etc. Plus I’d like to look more at NSX (may be a struggle, as I’m not a Network person), and other areas such as Openstack, AWS and Azure to name a few.

Monday, July 11, 2016

Setting QFullSampleSize and QFullThreshold by script in ESXi 5.1

[Repost of old entry that died under the weight of spam]

With ESXi 5.1, VMware have changed things a bit for Controlling LUN queue depth throttling in VMware ESX/ESXi
- see Controlling LUN queue depth throttling in VMware ESX/ESXi

Previously it was a global setting on the host, configured in the Advanced Settings - and could be checked and set using PowerCLI. eg :

To check values :

Get-VMHostAdvancedConfiguration -vmhost <host> -name Disk.QFullSampleSize
Get-VMHostAdvancedConfiguration -vmhost <host> -name Disk.QFullThreshold

To set values :

Set-VMHostAdvancedConfiguration -vmhost <host> -name Disk.QFullSampleSize -value <int>
Set-VMHostAdvancedConfiguration -vmhost <host> -name Disk.QFullThreshold -value <int>

That’s no longer the case. Now, it’s per LUN and not global. So, each LUN you present will need setting (if you use this), and on each host.

We use 3Par storage, and do set the values recommended :

QFullSampleSize = 32.
QFullThreshold = 4

The question was asked whether these settings were retained on a host that had them, and was then upgraded to 5.1. An upgrade in one of the test labs seems to indicate they’re not - all LUNs were set to 0 for these parameters.

So, I decided to try and script something. The result is below.

Basically, I read the LUN device ID from a text file (one entry per line), and then apply the change to it. The problem then is generating the text file - we have 50+ LUNs per host typically. For this, I used RV Tools , and exported the vDatastore tab, which includes the value I need - second column labelled Address. I take those values, and stick them in the text file - cumbersome, but it works.

I call the script, and chmod +x it to set the execute bit.


usage() {
        echo "Usage : ./ filename.txt"
        echo "Where filename.txt is the file with the list of naa ids, eg test.txt"

# File with the naa entries. One per line.

# Check script is invoked with correct number of arguments, ie, filename.txt
# If not, give usage details then exit.
[[ $# -ne 1 ]] && usage && exit 1

# Check if the file specified exists, if not, exit
if [ ! -f $filename ]
        echo "$filename does not exist. Exiting"
        exit 1

# Set the values, working through the input file one line at a time.
echo "Reading in the file $filename"
cat $filename | while read line
        echo "Running the following ... esxcli storage core device set --device $line -q=4 -s=32"
        esxcli storage core device set --device $line -q=4 -s=32

echo "Completed the changes ... exiting"

How to run :
# ./
Usage : Set3Par filename.txt
Where filename.txt is list of naa ids, eg test.txt

Sample input file : (values changed for writeup purposes)
# more test.txt

Sample run:
# ./ test.txt
Reading in the file test.txt
Running the following … esxcli storage core device set –device naa.50002aaaaaaaaaaa -q=4 -s=32
Running the following … esxcli storage core device set –device naa.50002bbbbbbbbbbb -q=4 -s=32
Running the following … esxcli storage core device set –device naa.50002ccccccccccc -q=4 -s=32
Running the following … esxcli storage core device set –device naa.50002ddddddddddd -q=4 -s=32
Running the following … esxcli storage core device set –device naa.50002eeeeeeeeeee -q=4 -s=32
Completed the changes … exiting

New vApp fails to deploy in vCloud Director with “… does not exist in our inventory, but vCenter Server claims that it does” type error.

[Repost of old entry that died under the weight of spam]

Working on a vCloud Director 5.1 proof of concept in work, ran into an issue where deploying a new vApp would fail after about a minute. Same with trying to import a template. All errors were of the type :

Folder vApp_system_25 (b220707f-7e73-401a-91b9-c74000c76a1a) does not exist in our inventory, but vCenter Server claims that it does..

I could indeed see the object in vCenter, but nothing in vCloud.

Searching around, I found this VMware communities article It mentions “None of the cells have a vCenter proxy service running.” Checking our environment, this message was also present. The communities page indicated that it was then fixed by cleaning the QRTZ tables in the database, but no details on how. Not being a DBA, this bothers me :-)

Searching for details on how to do this led to this blog entry by Jason Boche -

All looked similar, so tried it on our setup, and pleasingly it fixed it. We’re running the database in MSSQL, so used the relevant script, tidied to fit our database name.

Sunday, May 24, 2015

Enable or disable CBT

Implementing a new client solution recently based on vSphere 6, there was a request from our backup team to enable CBT on the VMs that were to be backed up. This basically meant around about 160 VMs from the overall solution.

Per the VMware KB article, this would entail shutting down the VM, adding the ctkEnabled parameter and then set its value to true and then Add Row, add scsi0:0.ctkEnabled, and set its value to true. Finally, power the VM back on.

To disable, again, power down the VMs.

This is a bit tedious obviously for 160 VMs, not to mention the downtime incurred for the client solution. However, in the KB article is some PowerCLI script to achieve the same end result, but without powering down the VM.

So, for ease, I took this and just put it into a simple loop to read in the list of VMs from a .txt file (1 VM per line) and make the change. It’s easy enough to have another script to disable the change and do it enmasse. Even better given the (now apparently resolved via latest patch) issue described here.

Also, there’s a one line to list out whether CBT is enabled on all the VMs in the environment.


# Enable CBT on number of VMs based on .txt file
# 1 VM per line - name as per vSphere client
# Based on the code from

$vmlist = Read-Host "Enter the name of the file with the list of VMs"

$vmname = get-content $vmlist

ForEach ($vm in (Get-VM $vmname))

    $vmtest = Get-vm $vm| get-view
    $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec

    # enable ctk
    $vmConfigSpec.changeTrackingEnabled = $true
    $snap=New-Snapshot $vm -Name "Enable CBT"
    $snap | Remove-Snapshot -confirm:$false



# Disable CBT on number of VMs based on .txt file
# 1 VM per line - name as per vSphere client
# Based on the code from

$vmlist = Read-Host "Enter the name of the file with the list of VMs"

$vmname = get-content $vmlist

ForEach ($vm in (Get-VM $vmname))

    $vmtest = Get-vm $vm| get-view
    $vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec

    #disable ctk
    $vmConfigSpec.changeTrackingEnabled = $false
    $snap=New-Snapshot $vm -Name "Disable CBT"
    $snap | Remove-Snapshot -confirm:$false



# Check CBT status on all VMs
get-vm  | Get-View | Sort Name| Select Name, @{N="CBT State";E={$_.Config.ChangeTrackingEnabled}} | ft -AutoSize