Introduction to VMware Photon OS

February 8, 2017 – 3:34 pm

I wanted to play with Photon, so I was looking for some ideas/purposes to deploy a Photon VM in a Windows “shop” 🙂

There’s always some docker packages you can find that can be useful (SMTP server for test/dev environments for example). One good use I found is to build our internal NTP server.

Here’s how I do it:

Create DNS record

an A record for the hostname, and a CNAME for an alias to refer to it in your various systems ( for example).

Set Static IP Address

mv /etc/systemd/network/ /etc/systemd/network/

then edit the file using VI








Set Hostname

hostnamectl set-hostname MYNTP.MYLAB.COM

hostname MYNTP



Disable IPTABLES (I know, not the most secure thing but that’s what I do)

Edit /etc/systemd/scripts/iptables

iptables -P INPUT ACCEPT




Update OS

tdnf update


set timezone

ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime


Install nano

tdnf install nano


Enable NTP Server

tdnf install ntp

nano /etc/ntp.conf

— add the following configs:





tinker panic

restrict netmask nomodify notrap

restrict default kod nomodify notrap nopeer


restrict -6 ::1

driftfile /var/lib/ntp/drift/ntp.drift


Start service

systemctl start ntpd

systemctl enable ntpd

systemctl status ntpd


Troubleshooting commands

ntpq -p

date -R

ntpdate -q


Stretched cluster VM localisation

November 29, 2016 – 8:28 pm

A colleague asked me to help him out with an issue he had. On a stretched cluster, some VMs had storage on Site A but were powered-on on site B and that’s a no-no in a normal situation. There’s no built-in mechanism other than using DRS groups to do so. So I assembled bits and pieces I found online to create a script that would serve this purpose by creating 2 DRS groups and populating them based on which datastores the VMs were on.

Here’s the script:

# These groups must already exist
# VMs-On-SiteA
# VMs-On-SiteB
# Hosts-SiteA
# Hosts-SiteB
# And the following rules
# Bind-To-SiteA (should run)
# Bind-To-SiteB (should run)

# Initialize variables

$vCenter = “vCenterName.subnet192.lab”
$vCenterUser = “ServiceAccount@vsphere.local”
$vCenterPass = “MyPassword”
$ClusterName = “ClusterName”
$SiteA_Datastores = “SiteA*”
$SiteB_Datastores = “SiteB*”

$SiteA_DRSGroup = “VMs-On-SiteA”
$SiteB_DRSGroup = “VMs-On-SiteB”

# Update-DrsVMGroup

function Update-DrsVMGroup {
param (

$spec = New-Object VMware.Vim.ClusterConfigSpecEx
$groupVM = New-Object VMware.Vim.ClusterGroupSpec
#Operation edit will replace the contents of the GroupVMName with the new contents seleced below.
$groupVM.operation = “edit”

$groupVM.Info = New-Object VMware.Vim.ClusterVmGroup
$groupVM.Info.Name = $groupVMName

Get-VM $VMs | %{
$groupVM.Info.VM += $_.Extensiondata.MoRef
$spec.GroupSpec += $groupVM

#Apply the settings to the cluster

# vCenter Connection

Connect-VIServer $vCenter -User $vCenterUser -password $vCenterPass -WarningAction SilentlyContinue

# Housekeeping


# Populate the groups

$Cluster = Get-Cluster $ClusterName
$AllVMs = $Cluster| Get-VM

$SiteA_VMs = Get-Datastore $SiteA_Datastores | Get-VM
$SiteB_VMs = Get-Datastore $SiteB_Datastores | Get-VM

Update-DrsVMGroup -VMs $SiteA_VMs -groupVMName $SiteA_DRSGroup
Update-DrsVMGroup -VMs $SiteB_VMs -groupVMName $SiteB_DRSGroup

# Run DRS to move VMS to the proper places

Get-DrsRecommendation -Cluster $Cluster -Refresh
Apply-DrsRecommendation -DrsRecommendation -RunAsync

Another certification…

October 21, 2016 – 10:41 pm

I regularly post about the latest certification exams I took… And today was the first of two for Cisco’s CCNA Datacenter certification.

In my new role, I am doing a lot of Cisco UCS and a bit of Nexus configurations and since I had little to no exposure to these platforms, I wanted to get up to speed with the platforms. With 25+ years experience, i don’t think certifications mean that much anymore but it’s my way to challenge myself to learn new stuff, and have something to show for all the efforts as well. As long as my employers pay for the material/exams 🙂

On my list for the coming months/year are:
– 2nd CCNA Datacenter Exam
– Renew my VCAP (assuming it also renews the VCP) for vSphere
– If I get good hands-on projects, the VCIX-NV for NSX.

So it seems I have a busy year ahead 🙂

vSphere 6.5

October 20, 2016 – 10:12 am

Like many of you who didn’t make it to either VMworld conferences, I followed things online avidly. Some great things are coming for our beloved hypervisor! I won’t rehash what’s already been posted all over the place, but here’s a quick link to the information:

Introducing vSphere 6.5

What’s New in vSphere 6.5: vCenter Server


Upgrading ESXi Hosts to vSphere 6

October 17, 2016 – 7:15 pm

Once I loaded the UCS image in VUM, it’s a piece of cake to deploy and update the hosts.


I had one site with 2 hosts running on IBM x3650 servers, so I downloaded the Lenovo image for this platform and loaded it up in VUM. Start the deployment, and the server ends up stuck in a loop.

A quick look with the remote IMM and I found out that host had vmnic0 disconnected (but vmnic1 was connected so management was accessible). It appears that in order for the upgrade to work properly, vmnic0 MUST be plugged in!

So I had to mount the ISO using the IMM and perform a manual update on that one (since nobody was at the remote site to reconnect that interface). There’s a KB for this issue actually:

Nice to know!

VMware VCSA Migration

October 17, 2016 – 7:10 pm

Last weekend I completed an upgrade/migration from vCenter 5.5 on Windows to vCenter Appliance 6.0 using the tool provided by VMware.

Everything went fairly smoothly – the migration tool was flawless. I made sure to take care of all the dependencies (vShield, vCOps, 3rd party plugins) first, upgrading them to a vSphere 6 compatible version. For some plugins, I simply uninstalled them, to reinstall later (VUM for example) as there was no particular customization that required saving the database/config.

I did have one issue with AD Integration. After the migration, I wasn’t able to authenticate with my AD credentials. I ended up having to remove everything (In VCSA, leave the domain and remove all AD configurations (groups, accounts, permissions, etc..) and in AD, delete the computer object.

Afterwards, doing everything step by step I was able to bring it back to a functional level. I had read that simply rejoining the appliance would do the trick but not so.

VMware Photon

October 3, 2016 – 3:50 am

A few months ago, I was looking for an SMTP solution for a dev team so they could test sending mail without using the production email service. I thought of using a container solution for this and found exactly what I needed with Docker.

Now, what platform would be the best for a quick and easy deployment on vSphere? Photon was the answer. VMware has released their own small footprint Linux appliance for exactly these kinds of purposes.

I spent a bit of time figuring my way around the environment (I am not a hardcore Linux guy but I enjoy working with it) and within a few hours, I had a fully functional SMTP service deployed using a Docker package. Anyone with more experience than me would have gotten this done in a few minutes, it’s that easy.

Whenever I need to run a small service or need a small VM for testing purposes, VMware Photon is now my first choice!


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!