The blog is back!

October 3, 2016 – 3:43 am

Before the holidays last year, I shut down the blog completely. I was up for renewal with the hosting service, and I wasn’t putting in as much time as I hoped. But now it’s back and I’ll do my best to keep it relevant and useful for everyone.

vSphere “good practices” for Windows VMs

May 23, 2015 – 8:49 pm

I won’t call them best practices because these are my personal preferences/standards. I am posting this as I had a conversation with a junior sysadmin earlier about this. Figured it could come in handy for others looking for ideas on how to approach this!

When creating a VM for a Windows based system, I always apply the following standards:

  • C: drive – OS installation only, usually 60GB thin provisioned (Windows 2012 R2)
  • D: drive – Applications binaries, sized according to requirements
  • E: drive – Data, sized according to requirements (IIS Inetpub for example gets relocated here and renamed).
  • P: drive – Pagefile (with SCSI id 0:15 – easy to identify/exclude them from backups/replication (with Veeam for example))

More drives are created based on requirements/applications (SQL has a L: drive for logs, a K: drive for backups (exports), etc…)

Each drive is in it’s own VMDK file of course, I never create multiple partitions in a VMDK, this simply makes things more complicated when resizing.

I usually keep the OS partition on a standard SCSI controller, and if there is some value to it, add a PVSCSI controller for the applications/data drives.

The C: drive contains a folder called Scripts where I store generic scripts that I use regularly

  • Clear-EventLogs.ps1
  • Update-Windows.ps1 (using the Windows Update Powershell Module) – in a template, this can be triggered easily from PowerCLI (convert from Template to VM, power up, execute script).
  • Prep-Template.ps1 (for templates only – I delete this on deployed VMs) – This is run when image editing/updating is done. It removes the IP, clears the temp folders, the event logs, etc… before shutting down.

What are your standards?

Certification Status

May 23, 2015 – 8:24 pm

I passed the VCAP-DCA exam a few weeks ago. It was a tough exam, like everybody else that has gone through it said, time management is the issue. Everything I had studied for, focused on as my weak spot, wasn’t on the exam 🙂 I basically relied on personal experience and nailed it.

Both VCAP-DCA/DCD passed, so one step closer to VCDX. We’ll see if I go for it in the coming year.

In the meantime, I’ll be trying something new that combines two fields I enjoy: VMware NSX. Given that I do not have to take the official course since I’m CCNP, makes it more affordable!

VCAP-DCA exam tips

April 18, 2015 – 7:55 pm

I didn’t take the exam yet but here’s some tips to help with command line stuff.

In an SSH session on a host, type in “esxcli esxcli command list” and paste the output to Notepad. A quick CTRL-F for keywords will help you find/remember the right commands. (I really hope notepad is available during the exam!)

Also, some esxcli commands have extra parameters that are not shown when you enter an incomplete command. Add “-?” to get more information

ex:
esxcli storage core path stats get” shows you right away the stats for all paths. But to specify one path only, what is the command? “-?” will show you. Might sound simple/obvious but it’s easy to overlook simple things when doing a complex test like this one!

esxcli-help

Also, pressing tab twice shows all commands matching what you started typing i.e. esxcfg- will show all esxcfg-* commands. Great when you forget under pressure.

esxcfg-tab-tab

 

Sorry for the small images – click on them to read them 🙂

Hardware CPU/MMU Virtualization

April 11, 2015 – 12:49 pm

VMware vSphere ESXi will determine whether or not to use hardware virtualization support based on various factors such as the guest operating system type and the physical hardware. Certain workloads can benefit from explicitly turning hardware virtualization support on or off. If the value is unset, the value will default to hvAuto. Usually it is left to automatic except for specific cases where it’s either not detected or we want to ensure it uses the proper setting.

When specifying the OS type when creating a VM, it lists the preferred modes.

Example from a Windows 2012 R2 server running on an HP Proliant DL385 G7 (AMD Opteron 6282 SE):

Opening the vmware.log in a VM’s datastore folder and searching for MONITOR brought this up:

2015-04-11T16:30:40.910Z| vmx| I120: MONITOR MODE: allowed modes : BT HV HWMMU
2015-04-11T16:30:40.910Z| vmx| I120: MONITOR MODE: user requested modes : BT HV HWMMU
2015-04-11T16:30:40.910Z| vmx| I120: MONITOR MODE: guestOS preferred modes: HWMMU HV BT
2015-04-11T16:30:40.910Z| vmx| I120: MONITOR MODE: filtered list : HWMMU HV BT
2015-04-11T16:30:40.910Z| vmx| I120: HV Settings: virtual exec = ‘hardware’; virtual mmu = ‘hardware’

So basically setting to auto on a Windows 2012 R2 on this host does enable hardware MMU/CPU features, same as if we selected the 4th option.

CPUMMU

Here is a powerCLI script to check the current settings for all VMs :

# Create a new VM object property

New-VIProperty -Name MMUStatus -ObjectType VirtualMachine -ValueFromExtensionProperty 'Config.Flags.VirtualMmuUsage' -Force

New-VIProperty -Name HVStatus -ObjectType VirtualMachine -ValueFromExtensionProperty 'Config.Flags.VirtualExecUsage' -Force

# Get all VMs and return their Name and settings

Get-VM | Sort -Property Name | Select Name, MMUStatus, HVStatus | ft

One step closer!

April 7, 2015 – 8:19 am

Last night I booked the VCAP-DCA 5.50 exam – scheduled for May 4th, 2015 – so about one month to prepare. I have been procrastinating, being somewhat intimidated by that exam. A fellow Vmware enthusiast offered to partner up for the studies, sharing progress and questions so I took him up on it. I took the VCAP-DCA Test Track offered by @SOSTech_WP (Joshua Andrews) and did pretty well so that gave me the confidence to book and finish this once and for all. So hopefully, a month from now, I’ll be once step away from the VCDX!

PowerCLI: Linked VMs Refresh

April 1, 2015 – 5:19 pm

And here is the follow up script for the pre-prod environment. This script can be scheduled to run daily to provide a fresh pre-production or test environment when your team arrives in the office.

#=============================================================================
# Script       : Pre-Production environment refresh
# Author       : Marc Bouchard
# Credits      : Rob Girard
# Version      : 1.0
# Revision     : 03/31/2015
# Purpose      : Refresh non-persistent copies of production VMs
# Requirements : 
# 1. Source VM snapshot is created
# 2. New VM is created, configured to use the base virtual HD of the source VM.
#    This drive is configured as a non-persistent disk to prevent corruption of
#    the reference image. This basically makes a point in time reference image
#    for testing changes to the production environment.
# 3. Both VMs must be powered on
#
# Parameters   : List of source (production) VMs
#=============================================================================

#=============================================================================
# --- Command line parameters
#=============================================================================

param (
	[Parameter(Mandatory=$true)]
	[String[]]$ListOfVMs = $(throw "List of source (production) VMs required")
)

#=============================================================================
# Screen setup
#=============================================================================

# set regular console colours
[console]::backgroundcolor = "black"
[console]::foregroundcolor = "white"

# clear screen
clear-host

#=============================================================================
# --- Load Powershell Snap-ins
#=============================================================================

if (!(get-pssnapin -name VMware.VimAutomation.Core -erroraction 'SilentlyContinue')) {
	Write-Host "[INFO] Adding PowerCLI Snapin"
	add-pssnapin VMware.VimAutomation.Core -ErrorAction 'SilentlyContinue'
	if (!(get-pssnapin -name VMware.VimAutomation.Core -erroraction 'SilentlyContinue')) {
		Write-Host "[ERROR] PowerCLI snapin NOT added" -ForegroundColor Red
	} Else {
		Write-Host "[INFO] PowerCLI snapin added"
	}
}

#=============================================================================
# --- CUSTOMIZE THIS SECTION ONLY FOR YOUR ENVIRONMENT
#=============================================================================

$DateOnly = Get-Date -f yyyy-MM-dd
$ScriptLocation="C:\Scripts\PreProd\"
$CredUser = "ServiceAccountUserID"
$CredFile = $ScriptLocation + "Refresh-PreProd.crd"
$ReptFile = $ScriptLocation + "Refresh-PreProd_" + $DateOnly + ".log"
$vCenter = "vCenterServerName"
$Prefix = "PRE_"

#SMTP relay
$smtpServer = "smtp.companyname.com"
$Sender = "refresh-preprod@companyname.com"
$Recipient = "sysadmin@companyname"

#=============================================================================
# --- FUNCTION: Send e-mail
#=============================================================================

function SendMail{
   Write-Host "[INFO]    Sending e-mail"

	#Creating a Mail object
	$msg = new-object Net.Mail.MailMessage

	#Creating email attachment object
	$att = new-object Net.Mail.Attachment($ReptFile)

	#Creating SMTP server object
	$smtp = new-object Net.Mail.SmtpClient($smtpServer)

	#Email structure 
	$msg.From = $Sender
	$msg.To.Add($Recipient)
	$msg.subject = "Pre-production environment refresh " + $DateOnly
	$msg.body = "Please see attached file."
	$msg.Attachments.Add($att)
	
	#Sending email 
	$smtp.Send($msg)
	$att.Dispose()
}

#=============================================================================
# --- Log Messages to journal
#=============================================================================

function LogMessages($LogMessage, $LogErrorMsg) {
	
	$(Get-Date -Format s) + " [INFO]    " + $LogMessage | Out-file $ReptFile -Encoding ASCII -append
	if ($LogErrorMsg -ne $null)
	{
		$(Get-Date -Format s) + " [ERROR]   " + $LogErrorMsg | Out-file $ReptFile -Encoding ASCII -append
	}
}

#=============================================================================
# --- MAIN PROGRAM
#=============================================================================

Write-Host "[INFO]    ======================================"
Write-Host "[INFO]           Refresh Linked VM Script"
Write-Host "[INFO]    ======================================"
Write-Host "[INFO]"

#=============================================================================
# --- Credentials management
#=============================================================================

if ((Test-Path $CredFile) -eq $false) {
	$cred = new-object system.management.automation.pscredential $CredUser,
		(read-host -assecurestring -prompt "Enter administrator password")
      try
      {
         $cred.Password | ConvertFrom-SecureString | Set-Content $CredFile -ErrorAction Stop
      }
      catch
      {
         $Message = "Error saving credentials"
         $ErrorMessage = $_.Exception.Message
         LogMessages $Message $ErrorMessage 
         SendMail
         Exit
      }
}
else {
   $password = get-content $CredFile | convertto-securestring
	$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $CredUser,$password
}

#=============================================================================
# --- Connect to vCenter server
#=============================================================================

Write-Host "[INFO]    Connecting to vCenter: " $vCenter

try
{
	Connect-VIServer -server $vCenter -credential $cred -ErrorAction Stop -WarningAction SilentlyContinue | Out-Null
	$Message = "Connecting to vCenter: " + $vCenter
	LogMessages $Message
}
Catch
{
	$Message = "Failed connecting to " + $vCenter
	$ErrorMessage = $_.Exception.Message
	LogMessages $Message $ErrorMessage 
	SendMail
	Exit
}

#=============================================================================
# --- Shutdown current clones
#=============================================================================

ForEach ($SourceVM in $ListOfVMs)
{
	try
	{
		$TargetVM = $Prefix + $SourceVM
      Write-Host "[INFO]    Shutting down" $TargetVM
		$task = Stop-VM -VM $TargetVM -confirm:$false -runasync -ErrorAction Stop
		wait-task -Task $task  | Out-Null
		$Message = "Stopping " + $TargetVM
		LogMessages $Message
	}
	Catch
	{
      Write-Host "[ERROR]   Shutting down " $TargetVM -foregroundcolor Red
	   $Message = "Error powering off "+ $Prefix + $SourceVM 
		$ErrorMessage = $_.Exception.Message
		LogMessages $Message $ErrorMessage
		SendMail
		Exit
	}
}

#=============================================================================
# --- Remove old snapshots
#=============================================================================

ForEach ($SourceVM in $ListOfVMs)
{
	Try
	{
      Write-Host "[INFO]    Deleting Snapshots for" $SourceVM
		$task = Get-VM $SourceVM | Get-Snapshot | Remove-Snapshot -confirm:$false -runasync -ErrorAction Stop
		wait-task -Task $task | Out-Null
		$Message = "Deleting snapshot for " + $SourceVM
		LogMessages $Message
	}
	Catch
	{
      Write-Host "[ERROR]   Failed removing snapshot for" $SourceVM -foregroundcolor Red
      $Message = "Error removing snapshot for " + $SourceVM 
		$ErrorMessage = $_.Exception.Message
		LogMessages $Message $ErrorMessage
		SendMail
		Exit
	}
}

#=============================================================================
# --- Create new snapshots
#=============================================================================

ForEach ($SourceVM in $ListOfVMs)
{
	try
	{
      Write-Host "[INFO]    Creating snapshot for" $SourceVM
		$task = New-Snapshot -VM $SourceVM -Name ($(Get-Date -format s)) -runasync -ErrorAction Stop
		wait-task -Task $task | Out-Null
		$Message = "Creating snapshot for " + $SourceVM
		LogMessages $Message
	}
	Catch
	{
      Write-Host "[ERROR]   Failed creating snapshot for" $SourceVM -foregroundcolor Red
	   $Message = "Error creating snapshot for " + $SourceVM 
		$ErrorMessage = $_.Exception.Message
		LogMessages $Message $ErrorMessage
		SendMail
		Exit
	}
}

#=============================================================================
# --- Power up refreshed environment
#=============================================================================

ForEach ($SourceVM in $ListOfVMs)
{
	try
	{
		$TargetVM = $Prefix + $SourceVM
      Write-Host "[INFO]    Powering up " $TargetVM
		Start-VM -VM $TargetVM -confirm:$false -runasync -ErrorAction Stop | Out-Null
		$Message = "Restarting " + $TargetVM
		LogMessages $Message
	}
	catch
	{
      Write-Host "[ERROR]   Failure starting " $SourceVM -foregroundcolor Red
	   $Message = "Error starting " + $SourceVM 
		$ErrorMessage = $_.Exception.Message
		LogMessages $Message $ErrorMessage
		SendMail
		Exit
	}
}

#=============================================================================
# --- Close session
#=============================================================================

Disconnect-VIServer -server $vCenter -confirm:$false -force
Write-Host "[INFO]    Disconnecting from vCenter"
$Message = "Disconnecting from vCenter"
LogMessages $Message
SendMail
Write-Host

PowerCLI: Linked VMs

March 31, 2015 – 9:58 pm

My current employer has a pre-production environment that is being refreshed nightly from production using a PowerCLI script. I started looking into it, to better understand the inner workings and to see if I could improve things. The objective is to have a pre-production environment that is an identical copy of the production, that can be deployed and refreshed quickly. A full clone could be an option but doesn’t meet some of the requirements. I call these Linked VMs, as they are not Linked Clones.

Here’s how it works.

A snapshot is taken of the production servers, thereby “freezing” the base VMDK disk. A new VM is created for the pre-production and it uses the “frozen” base disk of the production server as it’s own disk, in non-persistent mode. The VM is of course connected to an isolated port group. This basically allows the dev/infra team to have an identical copy of the production servers at any time (just run the refresh script).

While this works very well, I have concerns about using production disks for this purpose. I usually prefer to leave production alone and have either full clones or fully provisioned pre-prod environment. But it’s been running safely for a few years this way so far…

The initial pre-production linked VMs were created manually and I wanted to automate the creation of these pre-prod shells. Here’s a summary of what this script does

  • Removes all snapshots on the source VM
  • Clones the source VM without the virtual hard drives
  • Link the source VM’s hard drives to the new clone in non-persistent mode
  • Change the network interface port group to an isolated one
  • Create a snapshot on the source VM (this shields the production VM from the “sharing” of it’s disks)

And here’s the source:

#=============================================================================
# Script       : Linked VM Creation
# Author       : Marc Bouchard
# Credits      : Luc Dekens, Rob Girard
# Version      : 1.0
# Revision     : 03/31/2015
# Purpose      : Creates a non-persistent copy of a production VM, for testing
#                and pre-production purposes.
#
# Parameters   : Source VM
#
# Command Line: Create-Preprod.ps1 -SourceVM "SERVERA"
#=============================================================================

#=============================================================================
# Command line parameters
#=============================================================================

param (
	[Parameter(Mandatory=$true)]
	[String]$SourceVM = $(throw "Name of source VM required")
)

#=============================================================================
# Screen setup
#=============================================================================

# set regular console colours
[console]::backgroundcolor = "black"
[console]::foregroundcolor = "white"

# clear screen
clear-host

#=============================================================================
# --- Load Powershell Snap-ins
#=============================================================================

if (!(get-pssnapin -name VMware.VimAutomation.Core -erroraction 'SilentlyContinue')) {
	Write-Host "[INFO] Adding PowerCLI Snapin"
	add-pssnapin VMware.VimAutomation.Core -ErrorAction 'SilentlyContinue'
	if (!(get-pssnapin -name VMware.VimAutomation.Core -erroraction 'SilentlyContinue')) {
		Write-Host "[ERROR] PowerCLI snapin NOT added" -ForegroundColor Red
	} Else {
		Write-Host "[INFO] PowerCLI snapin added"
	}
}

#=============================================================================
# CUSTOMIZE THIS SECTION ONLY FOR YOUR ENVIRONMENT
#=============================================================================

$ScriptLocation="C:\Scripts\PreProd\"

$DateOnly = Get-Date -f yyyy-MM-dd

$CredUser = "ServiceAccountUserID"
$CredFile = $ScriptLocation + "Create-PreProd.crd"
$vCenter = "vCenterServerName"
$Prefix = "PRE_"
$IsolatedPortGroup = "IsolatedPortGroupName"

#=============================================================================
# --- Function: New-LinkedVM
#=============================================================================

function New-LinkedVM {

Param
	(
		[parameter(Mandatory=$true)]
 		[ValidateNotNullOrEmpty()]
 		[PSObject]$LinkSource,

 		[parameter(Mandatory=$true)]
 		[ValidateNotNullOrEmpty()]
 		[String]$LinkTarget,

		[parameter(Mandatory=$false)]
 		[ValidateNotNullOrEmpty()]
 		[String]$LinkPortGroup,

		[parameter(Mandatory=$false)]
 		[ValidateNotNullOrEmpty()]
 		[String]$LinkFolder
	)

#=============================================================================

try {
	if ($LinkSource.GetType().Name -eq "string"){
		try {
			$LinkSource = Get-VM $LinkSource -ErrorAction Stop
		}
		catch [Exception]{
			Write-Host "[WARNING] Source VM does not exist ($LinkSource)" -ForegroundColor Yellow
			Return
		}
	}
	elseif ($LinkSource -isnot [VMware.VimAutomation.ViCore.Impl.V1.Inventory.VirtualMachineImpl]){
	 	Write-Host "[WARNING] Invalid object" -ForegroundColor Yellow
 		Return
 	}

	$Exists = Get-VM $LinkTarget -ErrorAction SilentlyContinue
	if ($Exists){
		Write-Host "[WARNING] Target VM already exists ($LinkTarget)" -ForegroundColor Yellow
		Return
	}

	#=============================================================================
	# --- Remove old snapshots
	#=============================================================================
	
	Write-Host "[INFO]    Removing snapshots from source VM: " $SourceVM
	$Snapshot = Get-Snapshot -VM $LinkSource
	
	if ($Snapshot) {
		$Task = Get-VM $LinkSource | Get-Snapshot | Remove-Snapshot -confirm:$false -runasync
		wait-task -Task $Task
	}

	#=============================================================================
	# --- Get source VM information
	#=============================================================================

	if ($PSBoundParameters.ContainsKey('VMFolder')){
		try {
			$Folder = Get-Folder $LinkFolder -Type VM -ErrorAction Stop
 			$CloneFolder = $Folder.ExtensionData.MoRef
		}
		catch [Exception] {
			Write-Host "[WARNING] VM Folder $VMFolder does not exist, using existing folder instead" -ForegroundColor Yellow
 			$CloneFolder = $LinkSource.ExtensionData.Parent
 		}
	}
	else {
		$CloneFolder = $LinkSource.ExtensionData.Parent
	}
		
	#=============================================================================
	# --- Create clone specifications and exclude source hard disks
	#=============================================================================
	
	$CloneSpec = New-Object -TypeName VMware.Vim.VirtualMachineCloneSpec
	$CloneSpec.Location = New-Object -TypeName VMware.Vim.VirtualMachineRelocateSpec
	$CloneSpec.Location.Datastore = $LinkSource.ExtensionData.Datastore[0]
	$CloneSpec.Location.Host = $LinkSource.ExtensionData.Runtime.Host
	$CloneSpec.Config = New-Object -TypeName VMware.Vim.VirtualMachineConfigSpec
 
	Get-HardDisk -VM $LinkSource | %{
  		$DeviceChange = New-Object -TypeName VMware.Vim.VirtualDeviceConfigSpec
  		$DeviceChange.Device = $_.ExtensionData
  		$DeviceChange.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::remove
  		$DeviceChange.FileOperation = [VMware.Vim.VirtualDeviceConfigSpecFileOperation]::destroy
  		$CloneSpec.Config.DeviceChange += $DeviceChange
	}
 
	#=============================================================================
	# --- Create clone
	#=============================================================================

	$CloneTaskMoRef=$LinkSource.ExtensionData.CloneVM_Task($CloneFolder,$LinkTarget,$CloneSpec)
	$CloneTask=Get-View $CloneTaskMoRef
	while("running","queued" -contains $CloneTask.Info.State){
  		sleep 1
  		$CloneTask.UpdateViewData("Info.State")
	}

	#=============================================================================
	# --- Add SourceVM hard disks in non-persistent mode
	#
	# NOTE: The source VM cannot have any snapshots, otherwise the New-HardDisk
	#       addition will fail.
	#=============================================================================

	$AllDisks = Get-HardDisk -VM $LinkSource 
	ForEach ($HD in $AllDisks) {
		Write-Host "[INFO]    Reconfiguring HD: " $HD
		New-HardDisk -VM $LinkTarget -Persistence IndependentNonPersistent -DiskPath $HD.Filename | Out-Null
		}

	#=============================================================================
	# --- Change network interface port groups to isolated network
	#=============================================================================

	$AllNICs = Get-NetworkAdapter -VM $LinkTarget
	
	ForEach ($NIC in $AllNICs) {
		Write-Host "[INFO]    Reconfiguring NIC: " $NIC
		Set-NetworkAdapter -NetworkAdapter $NIC -Portgroup $LinkPortGroup -Confirm:$false | Out-Null
		}

	#=============================================================================
	# --- Create new snapshot for source VM
	#=============================================================================

	Write-Host "[INFO]    Creating snapshot on source VM: " $SourceVM
	$Task = New-Snapshot -VM $LinkSource -Name ($(Get-Date -format s)) -runasync 
	wait-task -Task $Task  | Out-Null

}
catch [Exception]{
	throw "[ERROR]   New-LinkedVM failed to complete..."
	}
}
#=============================================================================
# --- MAIN PROGRAM
#=============================================================================

Write-Host "[INFO]    ======================================"
Write-Host "[INFO]           Create Linked VM Script"
Write-Host "[INFO]    ======================================"
Write-Host "[INFO]"

#=============================================================================
# --- Credentials management
#=============================================================================

if ((Test-Path $CredFile) -eq $false) {
	$cred = new-object system.management.automation.pscredential $CredUser,
		(read-host -assecurestring -prompt "Enter password for privileged account")
      try
      {
         $cred.Password | ConvertFrom-SecureString | Set-Content $CredFile -ErrorAction Stop
      }
      catch
      {
         Write-Host "[ERROR]   Credentials file creation problem" -ForegroundColor Red
         Exit
      }
}
else {
   $password = get-content $CredFile | convertto-securestring
	$cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $CredUser,$password
}

#=============================================================================
# --- Connect to vCenter server
#=============================================================================

try
{
	Write-Host "[INFO]    Connecting to vCenter: " $vCenter
	Connect-VIServer -server $vCenter -credential $cred -ErrorAction Stop -WarningAction SilentlyContinue | Out-Null
}
Catch
{
	Exit
}

#=============================================================================
# --- Create Linked VM
#=============================================================================

$LinkedVM = $Prefix + $SourceVM

New-LinkedVM -LinkSource $SourceVM -LinkTarget $LinkedVM -LinkPortGroup $IsolatedPortGroup

#=============================================================================
# --- Close session
#=============================================================================

Disconnect-VIServer -server $vCenter -confirm:$false -force
Write-Host "[INFO]    Disconnecting from vCenter"
Write-Host

Lab update

November 2, 2014 – 6:59 pm

I got rid of a rack full of equipment (2 ESXi rackmount servers, switches, routers, ASA Firewall, etc…) and replaced everything with a single ESXi server that will run nested environments (for DCA). I read through a few blogs while researching this and from what I can tell, Supermicro motherboards are a safe bet.

Here’s my build:

  • Supermicro X9SRH-7TF motherboard
  • Intel Xeon E5-2609 v2 CPU
  • Noctua NH-U9DX I4 heat sink
  • Kingston KVR16R11D4/16HA 16GB DDR3-1600MHZ ECC x 4 (64GB)
  • Fractal Design Define R4 ATX Mid Tower Window Case Titanium
  • Corsair RM550 Silence ATX
  • Kingston 8GB USB3.0 DataTraveler for the ESXi installation 🙂

I recycled 4 x 1TB SATA disks I had lying around for local storage. Found a good use for it too! (HP VSA). I also already had a Synology box for NFS/iSCSI storage, so I have many options available.

I also added an HP V1910-24G to have hardware based Layer 3 routing. I wish I could afford a gigabit 3750, but this serves the purpose for now.

Once this was all setup, and vSphere/vCenter installed, I started looking for free appliances I could setup to use in my new homelab. First thing I found was Veeam NFR license for VCPs (there are some available for Spiceworks members also). I installed it and during the setup, I saw it supported HP StoreVirtual, so I looked into it (never heard of it before). I found a free 1TB NFR license. I deployed it on my 4 internal 1TB disks (250GB per disk, striped). No RAID5 unfortunately, but it’s for lab use. Anything that requires more security will be deployed on the Synology.

Some links I found…

HP StoreVirtual: http://www8.hp.com/us/en/products/data-storage/server-vsa.html

Citrix NetScaler VPX Express: https://www.citrix.com/downloads/netscaler-adc/virtual-appliances/netscaler-vpx-express.html

A few more listed here: http://teebeedee.org/2014/05/nfr-licenses-vmware-professionals/

So… Off to installing a bunch of stuff and experimenting with my new lab! Then I’ll go back to prepping for the VCAP-DCA…

 

VCAP5-DCA update…

September 6, 2014 – 5:45 pm

Well, I was planning on taking the exam in september but life events prevented me from reaching that goal. I had to undergo surgery twice for a detached retina in my right eye, with bedrest and impaired vision, I haven’t been much in a study mood. I also recently changed job, leaving consulting for a full time position as an infrastructure architect. Been busy!

I did manage to read through the VMware Press book: Networking for VMware Administrators, which I found interesting and provided good extra knowledge to help with the DCA exam.

I was planning on taking the 5.0 exam of the DCA but since I am postponing it until at least december, I will tackle the 5.5 version of the exam instead.

My biggest concern right now is to upgrade my lab for the next 3 years…