VMware Clarity based WordPress Theme – v0.1

A couple of days ago I saw a tweet from Cody De Arkland showing his new tweaked VMware Clarity based theme on his website.

Cody has gone down the route of using Hugo and AWS, which I respect, but just seems like too much work for me at the moment! I am familiar with WordPress, and Simon is barely computer literate at the best of times, so I can’t ask him to start writing in markdown. But I did want some of this Clarity goodness – so I set about learning how to create a WordPress theme, and how to integrate Clarity with this. (more…)

GDPR, blogging and DefinIT

So…this is a frustrated sort of post. As you are most likely to already know, the new data protection laws (GDPR) are coming into effect on the 25th May 2018. I must emphasise that I am not an expert on GDPR, this post is my layman’s conclusion for my specific circumstances. I run this blog as an exercise to help others, provide information and as a hobby. There is a lot of speculation around how this will affect bloggers, and a lot of panic and mis-information too. I’ve seen a few people this week simply shut down and delete their blogs – which is both upsetting and sad.

Once again, here is my disclaimer: I’m not a lawyer and I’m not providing you legal advice. Contact your legal council for help interpreting and implementing the GDPR. This article is provided for entertainment purposes, and amounts to nothing but my interpretation of the GDPR.

My general approach to GDPR is one of avoidance – I will avoid collecting any Personally Identifiable Information (PII).

Please feel free to get in touch via twitter (@sammcgeown) with any suggestions or updates and I’ll gladly share them (at least, the non-personally identifiable parts :))


Some general privacy best practices, which help towards GDPR compliance

  • I already use SSL to secure the site through LetsEncrypt, and HTTP redirects to HTTPS, so that’s good.
  • I already back up the site regularly, and encrypt my backups
  • My web server is patched and updated regularly
  • My WordPress and all Plugins are updated regularly

Privacy Policy

The main requirement from GDPR is that you clearly detail a Privacy Policy. The latest version of WordPress has a new “Privacy Settings” page that allows you to link to an existing, or create a new, Privacy Policy page. It also has some good pre-canned text and a guide to modifying it to fit your site. This has been the starting point from where I have modified the DefinIT Privacy Policy

Privacy Settings


All comments on have been disabled, and any existing comments have been deleted. I’ve done this because it seems to be the most efficient way for me to remove the risk that Personally Identifiable Information is collected and stored on the site.

Also, managing comment spam is a pain in the a***

To disable the comments site wide, I used the Disable Comments plugin, which allowed me to disable comments site wide and delete all existing comments. So here it is, 1498 legitimate, productive, helpful comments removed from the site to protect me from GDPR. I’m sorry to all those who put effort into discussions and helpful input.

Delete Comments


This is tricky. I’ve read a lot of conflicting info about analytics and GDPR. My settled opinion is that I can keep using my 3rd party provider (Google Analytics) as long as I clearly state that in my Privacy Policy, and that people have the option to opt out. With Google Analytics I can update my Plugin Settings and Privacy Policy to detail how the information is used, and link to Google’s Privacy Policy.

I use the Google Analytics Dashboard for WP (GADWP) plugin and ensure IP addresses are anonymised. That’s the only PII collected by Google Analytics, but we also enable user opt-out, and compliance with Do Not Track.

Google Analytics Plugin Settings

Sharing Links

For now, I’ve disabled social media links – the reason for this is that they tend to be trackers for the social media platforms that they link back to. I may revise this at a later date when I understand the implications better for each platform.

vRealize Lifecycle Manager 1.2 VC data collection fails when NSX-T hostswitches are in use

vRLCM LogoWhen vRealize Lifecycle Manager 1.2 was released recently, I was keen to get it installed in my lab, since I maintain several vRealize Automation deployments for development and testing, as well as performing upgrades. With vRLCM I can reduce the administrative overhead of managing the environments, as well as easily migrate content between environments (I’ll be blogging on some of these cool new features soon).

However, I hit a snag when I began to import my existing environment – I couldn’t get the vCenter data collection to run.

Data Collection Failed (more…)

Three Tier App for vRealize Automation

One question I’m asked quite a lot is what I use for a 3-tier application when I’m testing things like NSX micro-segmentation with vRealize Automation. The simple answer is that I used to make something up as I went along, deploying components by hand and generally repeating myself a lot. I had some cut/paste commands in my note application that sped things up a little, but nothing that developed. I’ve been meaning to rectify this for a while, and this is the result!

A lot of this is based on the excellent blog posts published on the VMware HOL blog by Doug Baer. Doug wrote five parts on creating his application on Photon OS and they’re well worth a read (start at part 1, here). I have changed a few things for my vRA Three Tier App, and some things are the same:

  • I’m using CentOS7, as that’s what I see out in the wild with customers (RHEL7) and I am most familiar with
  • The app itself is the PHP MySQL CRUD Application from Tutorial Republic
  • The DB tier uses MariaDB (MySQL) not SQLite
  • The App tier is an Apache/PHP server
  • The Web tier is still NGINX as a reverse proxy
  • I am including NSX on-demand load balancers in my blueprint, but you don’t actually need them for single-VM tiers
  • Finally, I want to be able to deploy my 3-tier application using vRA Software Components (though you can also use startup scripts in the customisation spec)

Based on this, my final application will look something like the image below, with clients connecting to the NSX load balancer on HTTPS/443, multiple NGINX reverse proxy servers communicating with the NSX load balancer on HTTP/8080, which is in front of multiple Apache web servers running the PHP application which all talk to the MySQL databased back end over MySQL/3306.

Three Tier App

When in use, the application looks like this:


Retrieve Blueprint or Virtual Machine Custom Properties using the vRealize Automation API

Just a quick post today, as I was working with a customer recently and we were trying to retrieve the Custom Properties assigned to a vRealize Automation 7.3 deployed Virtual Machine, similar to the one in the image below. It’s not as intuitive as you’d like it to be because of the split between IaaS APIs and Cafe APIs. Below you can see I’ve deployed a simple CentOS blueprint with a custom property at the Blueprint level (called “BlueprintLevel” with a value of “CustomProperty”) and a custom property at the VM level (called “CustomProperty” and a value of “Test123”).

vRA Blueprint Custom Property

vRA VM Custom Property (more…)

NSX 6.x Network Communications Diagram

There are a few NSX Communications network diagrams floating around, but none have really displayed the info in a way I found to be clear or complete enough. To that end, I have been working on a diagram that covers as much of the communications between NSX Components as I can. I’ve currently only covered single site NSX (not Cross vCenter) but I’ll publish an updated version soon including that.


vRealize Automation 7.3 and NSX – Micro-segmentation strategies
Day 2 Actions Micro-segmentation Strategy

vRealize Automation and NSX integration has introduced the ability to deploy multi-tiered applications with network services included. The current integration also enables a method to deploy micro-segmentation out of the box, based on dynamic Security Group membership and the Service Composer. This method does have some limitations, and can be inflexible for the on-going management of deployed applications. It requires in-depth knowledge and understanding of NSX and the Distributed Firewall, as well as access to the Networking and Security manager that is hosted by vCenter Server.

For customers who have deployed a private cloud solution using vRealize Automation, an alternative is to develop a “Firewall-as-a-Service” approach, using automation to allow authorised end users to configure micro-segmentation. This can be highly flexible, and allow the delegation of firewall management to the application owners who have intimate knowledge of the application. There are disadvantages to this approach, including significantly increased effort to author and maintain the automation workflows.

This blog post describes two possible micro-segmentation strategies for vRealize Automation with NSX and compares the two approaches against a common set of requirements.

This post was written based on the following software versions

Software Component Version (Build)
vRealize Automation 7.3 (5604410)
NSX 6.3.5 (7119875) – 6.4
vSphere 6.5 Update 1d (7312210)
ESXi 6.5 Update 1 (5969303)

These are some generic considerations when deploying micro-segmentation with vRealize Automation.

  • An application blueprint is designed to be deployed multiple times from vRealize Automation, the automation shouldn’t break any micro-segmentation or firewall policy when that happens.
  • vRealize Automation blueprints can scale in and out – this should be accommodated within the micro-segmentation strategy to ensure that required micro-segmentation is the same as implemented micro-segmentation.
  • vRealize Automation is a shared platform, so the micro-segmentation of one deployment should be limited in scope, but should also consider intra-deployment communications between applications, for example, of the same business group or tenant.

Application XYZ requirements

For illustration purposes, an example 3-tier application deployment is shown below “Application XYZ“. It consists of a Web, App and DB tier and a load balancer for the Web and App tiers.

Application XYZ Allowed Flows

Application XYZ Allowed Flows


NSX-T 2.0 Lab Build: Upgrading to NSX-T 2.1

Yesterday saw the release of NSX-T 2.1, with some new features and also some usability enhancements. You can check out the release notes here

As I’m mid-way through this blog series, I thought I’d stick in the upgrade as a little bonus!

Download the upgrade bundle

Validate the version and status of NSX-T components

Check the Controller cluster status and Manager connections are up.

Validate the hosts are installed, and have a connection to the controller and manager.

Ensure the Edges

Finaly, check that the transport nodes are all in a “Success” state

You can also validate the state of NSX-T via the command line

SSH to the controller and use “get control-cluster status verbose”

Uploading the NSX-T Upgrade bundle

Navigate to System > Utilities > Upgrade, then click the “PROCEED TO UPGRADE” button

Select the upgrade .mub file and click “UPLOAD”

Since the upgrade bundle is fairly hefty (3.7GB) the upload will take a while, and once it’s uploaded it is extracted and verified, which again takes some time


Once the package has uploaded, click to begin the upgrade. The upgrade coordinator will then check the install for any potential issues. In my environment there are two warnings for the Edges that the connectivity is degraded – this is because of the disconnected 4th VMNIC on my Edge VMs and is safe to ignore.

Click Next to view the Hosts Upgrade page. Here you can define the order and method of upgrade for each host, and define host groups to control the order of upgrade. I’ve gone with the defaults, serial (one at a time) upgrades over the parallel (up to 5 at once). All three hosts in this environment are in an automatic group for Pod200-Cluster-1. Click START to begin the upgrade, and the hosts will be put in maintenance mode, then upgraded and rebooted if necessary (a reboot shouldn’t be necessary!) Bear in mind you need to have DRS enabled and the VMs on the hosts must be able to vMotion off of the host being put in maintenance mode. Once the host has upgraded, and the MPA (Management Plane Agent) has reported back to the Manager, the Upgrade Coordinator will move on to the next host in the group.

Once the hosts are upgraded, click NEXT to move to the Edge Upgrade page

Edge Clusters can be upgraded in serial or parallel, but the Edges within are grouped by the Edge Clusters and upgraded serially to ensure connectivity is maintained. I have a single Edge Cluster with two Edge VMs, so this will be upgraded one Edge at a time. Click START to begin the upgrade, and select the Edge Cluster to view the status of the Edge VMs within the Cluster.

Once the Edge Cluster upgrades are complete, click NEXT to move to the Controllers. You can’t change the upgrade of the controllers, these are done in parallel by default. Click START to begin the upgrade – this step took by far the longest in my lab, so be patient!

Once the upgrade has completed, click NEXT to move to the NSX Manager upgrade page. The NSX Manager will become unavailable about 2-4 minutes after you click START, and may take 10-15 minutes to become available again afterwards – don’t worry about errors that come up in the meantime!

Once the Manager upgrade has completed you can re-validate the installation as I did at the start, checking that we have all the green lights, and the versions have increased.

Over the next few posts I will be exploring some the new features introduced in 2.1


NST-T 2.0 Lab Build: Logical Router Configuration

Disclaimer! I am learning NSX-T, part of my learning is to deploy in my lab – if I contradict the official docs then go with the docs!

Lab Environment

This NSX-T lab environment is built as a nested lab on my physical hosts. There are four physical ESXi hosts, onto which I will deploy three ESXi VMs, a vCenter Server Appliance, NSX Manager, an NSX Controller cluster, and two NSX Edge Nodes.

Physical, virtual and nested components of the NSX-T lab

Deployment Plan

I will follow the deployment plan from the NSX-T 2.0 documentation:

  • Install NSX Manager.
  • Install NSX Controllers.
    • Join NSX Controllers with the management plane.
    • Initialize the control cluster to create a master controller.
    • Join NSX Controllers into a control cluster.
  • Join hypervisor hosts with the management plane.
  • Install NSX Edges.
    • Join NSX Edges with the management plane.
  • Create transport zones and transport nodes.
  • Configure Logical Routing and BGP

When this post series is complete, the network topology should be something like this, with two hostswitches configured. The ESXi Hosts will have a Tunnel Endpoint IP address, as will the Edge. The Edge will also have an interface configured for a VLAN uplink.

The NSX-T Transport Node network configuration

In this post I will walk through configuring VLAN Logical Switch, Tier-0 Router, Tier-1 Router, Uplink Profiles and BGP dynamic routing to the physical router.