Monday, July 6, 2015

Searching within vRealize Automation – Part 1 - Orchestrator

I was recently engaged with a customer needing to execute some very particular manipulations of their provisioned virtual machines in their nascent vRealize Automation environment.  I learned a few things about using search functions in both vRealize Orchestrator and the vRealize Automation REST API, and I figured it was worth sharing here.

vRealize Orchestrator

The requirement for this part was to use vRealize Orchestrator to change properties of a specific type of vRA-provisioned machine.  This entailed finding all managed virtual machines that lived on a certain cluster within vCenter, and then filtering those machines by a further custom property that was being used.

It tuned out to be a bad idea to use vRealize Orchestrator to do all the grabbing and manual sorting, iterating over scripts and actions to gradually reduce all machines down to the required subset.  It was taking ages, and it was REALLY annoying to have to wait for so long before finding out I hadn’t quite nailed the search anyway!  So I turned to the Model Manager function within the vRA IaaS component.  This is one of the services that runs on Windows servers in the solution, and manages the data model quite directly.

Cluster search

I used a little bit of cheeky searching to discover the right “entity sets” and fields I needed to utilize for the search.  I needed to find the UUID of the target cluster first, taking the “cluster path” that was derived from vCenter’s API structure.  I handled the search as per the below code snippet.
var modelName = 'ManagementModelEntities.svc';
var entitySetName = 'Hosts';
var filter = "HostUniqueID eq '" + clusterPath + "'";
var orderBy = null;
var top = 1;
var skip = 0;
var headers = null;
var select = null;
var entities = vCACEntityManager.readModelEntitiesBySystemQuery(host.id,     modelName, entitySetName, filter, orderBy, select, top, skip, headers);
The important parts to point out are:

  • modelName is indicating the standard entity model.  There is a special one for AWS, for example, if I wanted to search on that instead.
  • entitySetName is “Hosts” in the first search, which is the host or cluster running a given virtual machine.  If you are running clusters, then the cluster is stored as the “host”, rather than a specific runtime host.
  • filter is the magic part.  It turns out that this complies with OData syntax, which you can read about here ().  In my case, the query was for a cluster path, but this is where you need to engage your brain to determine was to search for.
  • orderBy, top, skip, headers and select are all modifiers for what gets returned from the search result set and how.  I will come back to these in the follow up blog article where I search in the vRA REST API.
  • vCACEntityManager is the object that executes the search, and this invocation method is the same across all my queries – just varying a couple of parameters.

Virtual Machine search
In my use case, I then wanted to find the virtual machines within the matching cluster, which was similar to above, but I used a new entitySet and filter.
var entitySetName = 'VirtualMachineProperties';
var filter = "PropertyName eq '" + propertyName + "' and PropertyValue eq     '" + propertyValue + "'";

Properties search

And the final search was to find all virtual machines with a given property – a custom property in my case.
var entitySetName = 'VirtualMachineProperties';
var filter = "PropertyName eq '" + propertyName + "' and PropertyValue eq     '" + propertyValue + "'";
End result
At the end of these searches, I had two arrays of virtual machine objects.  Merging these arrays in vRO was a piece of regular Javascript, looping over the data set looking for common elements.

See below for the visual representation of the two searches and final merge.
(Download the vRO actions here, if you like.)

In the next article, I will show a different search use case, where I needed to filter a specific VM from the vRA API.

Tuesday, June 30, 2015

Integrating Infoblox IPAM with vRealize Automation - Part 3

This is the last article in my series on integrating InfoBlox with vRealize Automation.  Part 1 discussed the general setup of the integration, and specifically how the solution looked in vRealize Orchestrator.  Part 2 discussed how some of the common integration elements might be used, regardless of the IP allocation approach.  This last article is the guide to the specific IP allocation methods available, how to use them, and some guidance on which one might be right for you.

InfoBlox integration types

Method 1 – vRA allocates IP, registers in InfoBlox

In hindsight (as mentioned in Part 2), I believe this was the functionality I should have explored the first time!  It is where you allow vRealize Automation to continue to manage its own IP pools, pick addresses for VMs, use Network Profiles and all the other goodness from vRA.  However, once vRA allocates an address, it then calls out to the InfoBlox workflow to register that allocation in InfoBlox.  
This method assumes that there is a range of addresses that you can pre-assign to vRA usage, and that the ranges are matching between vRA and InfoBlox to ensure no conflicting usage of this range!

Specifically, this method picks up the following existing vRA properties that you have probably already taken care of in your vRA Network Profiles – so you don’t have to worry about them!
  • VirtualMachine.IPaddress
  • VirtualMachine.PrimaryDNS
  • VirtualMachine.SecondaryDNS
  • VirtualMachine.DNSSuffix
  • VirtualMachine.SubnetMask
  • VirtualMachine.Gateway
  • VirtualMachine.PrimaryWins
  • VirtualMachine.SecondaryWins
  • VirtualMachine.DnsSearchSuffixes

Method 2 – InfoBox allocates from specified network

This is the method I initially explored, and unfortunately it had the consequence that I had to disable vRA Network Profiles for my vRA Reservation (well, I created a new reservation for blueprints using IPAM) to avoid the two IP management methods from conflicting with each other.  In particular, when Network Profiles are also present vRA assigns and manages the VM’s address from its own pool, and while InfoBlox was still invoked, that IPAM address was completely ignored.

You can specify a network is two ways.  One is to specify the network/CIDR identity of the desired network.  This is fine if you are dealing with a small number of distinct networks and the number of machines will not burst beyond that network’s limits.  To use this approach you specify the below two custom properties:
  • Infoblox.IPAM.netaddr – the identity of the Infoblox Network to use, such as “172.16.50.x”
  • Infoblox.IPAM.cidr – the subnet mask, such as “24”
The other way is to search for a set of networks by extended attributes.  This is possibly going to match several networks (which should be equal in purpose).  The cool thing about this method is that for very large environments, a virtual machine could need to exist in any number of adjacent network segments, or dynamic inputs such as location, environment, security level, etc.  For instance, you may be deploying into multiple 24-bit networks that are all equivalent (internal, data access layer), and you don’t know which one will be chosen because of (a) available addresses, or (b) during provisioning there might be some request input that determines network placement.

The custom properties to use for searching for networks by attributes are those below:
  • Infoblox.IPAM.searchByEa – set this to “true” to use this search method
  • Infoblox.IPAM.searchEa1Name – attribute name
  • Infoblox.IPAM.searchEa1Value – attribute value to compare
  • Infoblox.IPAM.searchEa1Comparison – comparison type, one of the following types:
    • EQUAL
    • EQUAL_CASE_INSENSITIVE
    • GREATER_OR_EQUAL
    • LESS_OR_EQUAL
    • NOT_EQUAL
    • REGULAR_EXPRESSION
  • …  up to 10 search attributes can be specified, as below
  • Infoblox.IPAM.searchEa10Name
  • Infoblox.IPAM.searchEa10Value
  • Infoblox.IPAM.searchEa10Comparison
Using the method of IP allocation by network, Infoblox expects to fill IP details from the DHCP options already existing in the network definition in the IPAM system.  However, the blueprint can specify “default” values for these, in case they are missing from Infoblox.  This would certainly NOT be recommended if you would be searching for networks, as different subnet ranges might be returned.  Additionally, any values found in Infoblox will override the provided values, and the blueprint values will be ignored – so it is not an override mechanism.
  • Infoblox.IPAM.defaultGateway
  • Infoblox.IPAM.defaultPrimaryDns
  • Infoblox.IPAM.defaultSecondaryDns
  • Infoblox.IPAM.defaultPrimaryWins
  • Infoblox.IPAM.defaultSecondaryWins
  • Infoblox.IPAM.defaultDnsSuffix
  • Infoblox.IPAM.defaultDnsSearchSuffixes

Method 3 – InfoBlox allocates from specified IP range

As you might guess, this method finds an available IP address within the specified range.  This is similar to Method 2 above, but you can skip the fancy searching if you already roughly know the addressing you want for the machine.  

The unique parameters used for this method are below:
  • Infoblox.IPAM.startAddress
  • Infoblox.IPAM.endAddress
I would warn, however, that this method is taking the least advantage of either vRA or Infoblox functionality.  This method assumes that the blueprint owner or the service requester somehow know more about the available IP environment that does either vRealize Automation or Infoblox.  If this is actually the case, then you still have some major network management challenges to solve!  I recommend you find a way to utilize one of the other approaches, and adapt your provisioning processes to get it right the first time…


This concludes this particular series of articles, all to do with vRealize Automation and Infoblox integration and use cases.  Hopefully you have found some value from it.  Please leave any comments or feedback!

Wednesday, June 24, 2015

Integrating Infoblox IPAM with vRealize Automation - Part 2

Following on from Part 1 of this blog article, I wanted to explore how to implement the InfoBlox integration into vRealize Automation blueprints.

First approach

When first learning about how to utilize the IPAM integration, I believe I actually went down the complicated route first (Method 2, in Part 3!).  I assumed I would NOT use vRA to manage and assign IP addressing at all, and would delegate this entirely to InfoBlox.  In order to do this, I had to disable the vRA Network Profile in the Reservation, whose job it would normally be to create the IP information.   This had two implications:

  1. In my environment, not all VM requests were going to be IPAM integrated, so I had to create a NEW Reservation in vRA, overlapping with my existing ones, with the Network Profile disabled.  I then had to make duplicate blueprints to be associated with the new reservation.  Of course, I could have made the Reservation Policy be dynamically selected during request, but that is just another complication.
  2. Now that vRA was not supplying the networking parameters to go with the IP address (subnet mask, DNS servers, DNS suffix, etc), I had to supply this is additional vRA Build Profile properties.

So, maybe don’t do it that way…!  There are two other approaches, and I’ll outline each of them in Part 3 of this series of articles.  I’ll also explain below some more details about how the provisioning options work.

But for now, I’ll explain some of the common elements across the integration methods.

Using the Build Profiles

After creating the initial Build Profile (as per Part 1), I went back into vRA and modified the Build Profile to pre-populate the static attributes that I knew I would use.

Common properties

There is one set of common properties that are used no matter which IPAM methodology you use.  There are a number of “create-something” attributes, and you need to choose exactly what type of Infoblox record you wish to create.

DNS-integrated Host record

If you specify this option, as cannot specify any of the other below types.  It is both an InfoBlox record type and a DNS record type.

  • Infoblox.IPAM.createHostRecord

InfoBlox address record type

You can choose between either of the below options, depending on how you plan to use InfoBlox records.  I believe Fixed Address probably fits the use case most people think of for the automation use-case.

  • Infoblox.IPAM.createFixedAddress
  • Infoblox.IPAM.createReservation

DNS address record type

If you are not creating an InfoBlox/DNS host record (above), then you can either specify to create a DNS A record alone, or both the A and PTR records for the entry.  Obviously “one or both” means you don’t choose both these options!

  • Infoblox.IPAM.createAddressRecord
  • Infoblox.IPAM.createAddressAndPtrRecords

Additional common properties

There are a list of additional properties created in the Build Profile, most of which I have not used.  One property I did statically populate was “Infoblox.IPAM.comment” with a string such as “Record created by vRealize Automation”, so that when managing my addresses directly in InfoBlox I could quickly determine which entries are under automated management.

A quick word on one other property – “Infoblox.IPAM.vmName”.  In my view, this property is a bit redundant when using vRA, as I was already using vRA Dynamic Hostname workflows to determine a special hostname, and didn’t want to populate this separately in a new field.  In my case, I went and edited a few of the InfoBlox workflows to just pickup the vRA name.

My snippet of additional code is below, which was inserted into the “Retrieve Properties” workflow scripting elements.
vmname=vCACVmProperties.get("Infoblox.IPAM.vmName");
if(vmname=="")
{
vmname=vCACVm.virtualMachineName;
}

Property list


  • Infoblox.IPAM.vmName
  • Infoblox.IPAM.dnsView
  • Infoblox.IPAM.networkView
  • Infoblox.IPAM.comment
  • Infoblox.IPAM.enableDHCP (see comments below)
  • Infoblox.IPAM.aliases
  • Infoblox.IPAM.defaultPortGroup

Have a look through the InfoBlox to explore some other use-cases you can try out with the DNS and Network views – as these will apply well to multi-tenanted usage, overlapping network ranges, etc.  This is something considerably beefed up in the later vNIOS 7.x version of InfoBlox which I haven’t covered in these articles.

One last word of warning – the “Infoblox.enableDHCP” property is defined automatically when you generate the Build Profiles with the provided workflow.  However, this property is never referenced in the later call-outs, and so might give you the wrong impression for this parameter that there is some DHCP-specific IP assignment.  There is not – static IP allocation and assignment is the only method implemented, at least in the version of the plug-in I have been reviewing.


That's it for this article on the common elements of integration.  Please go ahead and read Part 3 to understand the juicy details of specific integration methods, and how you might actually go about using this for your own environment!

Please let me know any comments or feedback!

Tuesday, March 31, 2015

Integrating Infoblox IPAM with vRealize Automation - Part 1

Many customers love the idea of self-service provisioning through vRealize Automation (vRA), but do not want to give up control of IP address management (IPAM) to the new tool. I frequently see requests for us to integrate vRealize Automation into a customer’s existing IPAM solution – and pretty much every time this is the Infoblox solution. So, I thought I’d give it a go!

In this first blog, I will replay how I initially configured my environment to integrate the solutions. In my next post, I will explain how I used that integration to achieve an effective server build from the vRA blueprint.

In my environment, I am using vRealize Automation 6.2.1, and vRealize Orchestrator 6.0.1. For Infoblox, I used the virtual appliance vNIOS version 6.11, and their vRO plug-in version 2.4.1.

For starters, I had some trouble in my past attempts to do this. The Infoblox plug-in for vRealize Orchestrator (vRO) was finicky and a little hard to work with. But Infoblox have revised their plug-ins and their core solution, and I have to say I had almost no trouble this time around.

Deployment of the appliance is easy enough, documented here: https://www.infoblox.com/sites/infobloxcom/files/resources/vnios-trial-quick-start-guide_1.pdf

Deployment of the plug-in was similarly fairly easy, and documentation is provided with the plug-in itself (for which you need to register, here: https://www.infoblox.com/downloads/software/vmware-vcenter-orchestrator-plug-in).

Two quirks of note that I discovered:
  • I could not register the vNIOS appliance to the plug-in using the FQDN. I believe this was because the appliance FQDN was a “.local” domain, and deemed as invalid. Using the IP address got around this problem, and the error message made it pretty clear that it was not happy with DNS validity, so it wasn’t hard to drill down to what alternatives to try.
  • The self-signed certificate was expired. It appears that the default certificate generated has a lifetime of one year.  This was only an issue for me when trying to connect the plug-in. Again, fairly easily fixed – this time through the Infoblox System Manager web app under System – Certificates.
The vRO plug-in also requires a workflow package to be imported, to support some of the additional functions that the plug-in invokes.  This package is included in the plug-in download, and included in the documented instructions.

Once I installed the plug-in for my setup, I used the provided Infoblox vRO workflows to:
  • Install vCO customization wrapper”.


    This enabled vRA to call out to Infoblox via vRO (aka vCO) during three distinct lifecycle stages:
    • Building – this stage is where IP addressing is reserved in IPAM and passed back into vRA during the initial provisioning.
    • Provisioned – once the machine is built, this calls out to the workflow “Update MAC address for vCAC VM wrapper”, which appears to grab the as-built MAC address from the VM (nic0) in order to populate Infoblox with this detail.
    • Disposing – when the machine is destroyed, this calls-out to “Remove Host Record or A/PTR/CNAME/Fixed address/Reservation of vCAC VM wrapper”. In essence, this removes the entries made by the previous workflows.

    • CAVEAT: In my environment only, the above Removal workflow does not release the IP address back into the available pool. I am still working on this, and will update this article accordingly. For the moment, I manually review the “Used” records (without any other data associated) and perform a “Reclaim” in the Infoblox management console.  Strangely, this behaviour did NOT happen in a customer's environment, nor in Infoblox's own test environment.  
  • Create Build Profile for Reserve an IP for a vCAC VM in Network”. This piece of absolute magic sets up a new Build Profile in vRA so that I can merely select it during blueprint definition to enable IPAM integration. Magic!!

I used the “in Network” method of IP allocation, because I just wanted Infoblox to pick the next address within a given subnet range. I already have certain ranges carved out and reserved for other purposes (such as vRA’s own ranges that it manages, more on that later) – so anything that wasn’t already reserved is free game for Infoblox to grab. The other methods are “in Range” (if you have specifically carved out one in Infoblox for this purpose), or “general” (if the IP address to reserve is already known, perhaps through an external process prior to the request).

Once I had run these initial configuration workflows, everything was almost ready to go for vRealize Automation to utilise.

 This wraps up the first blog covering initial setup. In the next blog article, I will specify how vRA is configured to utilise Infoblox as part of its provisioning.

Tuesday, January 13, 2015

Explaining Hybrid Cloud to a 5 year old?

Someone recently pointed me to this article on Tech Week Europe on "How To Explain Hybrid Cloud To A Five-Year-Old".  It was not shared because of its awesomeness, but how ridiculous some of the explanations were.  I completely agree, but unfortunately it made me want to create my own analogies!  What a sorry state of affairs!

Of course, Massimo Re Ferre asked the obvious question "Why would anyone want to explain this to a 5 year old anyway??".  As a father of two kids, brought up to ask questions and challenge their father, I reckon I've probably already been challenged to explain to them what it is that I do!  But more importantly, if you can't explain this fluffy concept in simple enough terms, there's a good chance you might leave your customers, managers, executives or users with an unsettled mind about what Hybrid Cloud is all about, why they should use it, what it is NOT, and how to figure out if it's working the right way.

Anyhow, I came up with two and felt the need to share.  I'm sure they are terrible, but I like them.  So please feel free to let me know better ones!

(1) Hybrid Cloud is like a perfect lunch at school. You have some food you've brought from home, because that's what Mum gives you and maybe it's cheaper, or healthier or maybe you can't eat peanut butter because you're allergic, and your Mum looks after you! And then you also get some money to spend at the school canteen for a nice cold chocolate milk, or a fresh cookie. You can choose what you feel like on each day. But when you put together your healthy lunch from home and your special fun things from the canteen - you have a perfect lunch in front of you!
(2) Hybrid Cloud is like your home. At home you have your own bedroom where you sleep and keep your toys and no one is allowed in if you don't want them to. Sometimes you play there, but sometimes you play out in the family room with everyone else. In the family room there's more space, and the big TV and other people - but that also means sometimes your toys get stepped on, or you fight with your sister, or you can't have the room all to yourself. So, you play sometimes in your room, sometimes in the rest of the house, and you have toys everywhere (but your special ones are safe in your room)! And every day, you can choose where to play!

Monday, August 25, 2014

Report on View session history - How busy is my lab?

I was asked a while ago to help justify spending some money on our shared lab environment, which we use for customer demonstrations.  The question really was "How much do people use the demonstration lab, really?"  So, I thought there must be a way within VMware View to help figure it out.  There was, and it got turned into a pretty little graph, as I'll show you below.

The first part is to extract the session data.  In View's database is a table called "View_Events", which logs all sorts of things about the environment (read KB article here).  For my interests, I noticed it logged and event when a user got connected, and when they disconnected.  I didn't care about when they were logged in, because most of us use the lab for short sharp demos, and tend to leave our desktops logged in all the time, and then quickly jump in to do a demonstration, and then jump off again.  It was only the ACTIVE session count and length of stay that I wanted to know. In particular:
  • How frequently were people connecting to the lab, and
  • How long were people in session for (quick demo, longer demo, or working on something bigger like an all-day marketing event)
There was no natural way to show session duration, but the data can be derived from the session ID being attached to both the CONNECT event and the DISCONNECT event.  These show up as login/logout events on the broker - "BROKER_USERLOGGEDIN" and "BROKER_USERLOGGEDOUT". Have a long look at my query below, and it'll make sense when you compare it with the results.
USE View_Events
SELECT LoginEvents.UserDisplayName AS Username, LoginEvents.EventID AS LoginEventID, LoginEvents.Time AS TimeIn, LogoutEvents.EventID AS LogoutEventID, LogoutEvents.Time AS TimeOut, LoginData.StrValue AS SessionId, LogoutEvents.Time - LoginEvents.Time AS SessionTime
FROM VE_user_events_hist AS LoginEvents INNER JOIN VE_event_data_historical AS LoginData ON LoginEvents.EventID = LoginData.EventID INNER JOIN VE_event_data_historical AS LogoutData ON LoginData.StrValue = LogoutData.StrValue INNER JOIN VE_user_events_hist AS LogoutEvents ON LogoutData.EventID = LogoutEvents.EventID
WHERE (LoginEvents.Module = N'Broker') AND (LoginEvents.EventType = N'BROKER_USERLOGGEDIN') AND (LoginData.Name = N'BrokerSessionId') AND (LogoutData.Name = N'BrokerSessionId') AND (LogoutEvents.Module = N'Broker') AND (LogoutEvents.Module = N'Broker') AND (LogoutEvents.EventType = N'BROKER_USERLOGGEDOUT')
ORDER BY LoginEvents.Time DESC
If you are good at reading SQL, you might notice that the last column selected, which I call "SessionTime".  This is actually a SQL calculation of logout time minus login time.  This tells me how long the person was connected for.

The results look a bit like the below, when extracted as raw CSV.
MELB\nwheat,28366,2013-11-20 21:47:39.513,28370,2013-11-20 22:07:45.483,e2fc4503_1633_4634_8e3b_bdd8dc098438,1900-01-01 00:20:05.970

Putting it through the Excel wringer, I turned it into something a LOT more palatable, as below.  I also add some further calculated fields, which helps me turn it into a pretty PivotChart. The bolded fields are the ones I used for my report.
  • Username
    • I performed a find and replace to remove the unneeded 'DOMAIN\' part.
  • LoginEvent
    • Completely ignored field, but is the ID for the BROKER_USERLOGGEDIN event.
  • LoginTime
    • Event timestamp, ignored hereafter.
  • LogoutEvent
    • Completely ignored field, but is the ID for the BROKER_USERLOGGEDOUT event.
  • LogoutTime
    • Event timestamp, ignored hereafter.
  • SessionID
    • This magic field is present for both the Login and Logout event and connects the login/logout events together so I can calculate the session duration!
  • SessionTime
    • This is the field calculated in the SQL query.  Unfortunately, it comes through as a timestamp, which Excel displays as "one day plus the calculated time", so I convert it below.
  • SessionLength
    • Added in Excel to remove the additional "day" in the timestamp above.
    • Formula is {"=[@SessionTime]-1"}
  • Short
    • Added in Excel, to be "1" if the SessionLength is less than 30 minutes (1 day / 48)
    • Formula is {"=IF(([@SessionLength]<(1/48)),1,0)"}
  • Medium
    • Added in Excel, to be "1" if the SessionLength is more than 30 minutes but less than 90 minutes.
    • Formula is {"=IF((AND([@SessionLength]>=(1/48),[@SessionLength]<(1/16))),1,0)"}
  • Long
    • Added in Excel, to be "1" if the SessionLength is more than 90 minutes.
    • Formula is {"=IF(([@SessionLength]>=(1/16)),1,0)"}
  • Month
    • Added in Excel, month extracted for my PivotChart later.
    • Formula is {"=(MONTH([@LoginTime]))"}
  • Year
    • Added in Excel, month extracted for my PivotChart later.
    • Formula is {"=(YEAR([@LoginTime]))"}

Phew!  That was a bunch of playing around, and surely someone can quickly make a template or macro out of this.  But seeing as I only need to churn out a report every 6  months or so, I haven't bothered as yet.  The resulting table looks like the below.

Username LoginEvent   LoginTime LogoutEvent LogoutTime SessionID SessionTime SessionLength Short Medium Long Month Year
asingleton 1794 30/6/14 10:58 PM 1796 30/6/14 11:07 PM 7f6bfad3_7000_4d69_88d2_1c17e7276e02 24:08:34 0:08:34 1 0 0 6 2014
gorchard 1790 30/6/14 8:49 PM 1800 1/7/14 12:36 AM ceb28d1a_8bad_47cb_80c4_a793e9dc42ce 27:47:22 3:47:22 0 0 1 6 2014

This told me everything I need to know, but it's not really in "Management language" - by which I mean a pretty graph!  The last part is to quickly turn this into a PivotChart using the Excel wizards.  The only difference being that I interpret "short" sessions to be "Quick demo", "medium" to be "Full demo", and "long" to be "Event or workshop".

The pretty output of my report is shown below.  Vertical axis is session count, and horizontal axis is the first six months of this year.



This did in fact result in some money being spent on our environment, and partly because I was able to show the usage frequency, and indicate what kind of thing people are doing in our View environment.  I hope you've found this useful, and that you can do this directly yourself in your environment, or enhance this report even further with a bit of tinkering.  Please contact me if you'd like the sample file that goes with this (although I'm sure you can re-create), or if you have a better version you'd like to contribute back!

Monday, January 20, 2014

VCAP-CID and VCAP-DCD exam experiences

I recently studied and passed the VMware Advanced Certified Professional (VCAP) level exams for both Cloud Infrastructure Design (VCAP-CID) and Data Center Design (VCAP-DCD).  It was an interesting experience, and well worth the process for any considering them.

I was part of a study group with @GrantOrchard and @Josh_Odgers, and those guys really helped me focus on a study structure.  In both exams, our general approach was to work through the Exam Blueprint, which has been the strong recommendation by VMware Education and pretty much everyone else who cares to comment!  I can validate that approach.  Using the Blueprint, you know exactly what you're going to be examined on, and it will draw your attention to your weaker areas.

My natural behaviour was to skim through the blueprint and ummm and ahhh at each section, thinking about what it meant.  In my more productive moments, I would feel a little nervous and be prompted into a sideline of reading the Best Practice papers for the area.  When getting into the group, however, this casual attitude was firmed up into some very useful whiteboarding exercises.  Some of the exercises were drawing up a table - like a permission or role matrix.  This was the content which I just had to memorise, as the "logic" you might use in your own workplace could be irrelevant for the exam.  The exam is looking for certain organisational roles, and choices of permission management, which may have no bearing on how YOU would do it in real life.

For the VCAP-CID, almost everything you need to know is in the vCAT (plus a little bit of Chargeback docs).

The absolute BEST exercises were modelling the design scenarios, of which there are a few in each exam.  These take some time to answer, and are not always easy to draw in the exam, so having them clear in your mind is a great start.  For each of the study areas, we would try to imagine "What would be a design exercise for this?" - and then try to draw out a scenario.  This was awesome in a group, because inevitably it would start a discussion or argument about exactly what might be asked, and exactly what a "good answer" might contain.  For me, this is where the rubber hit the road.  Once we had a good set of scenarios we had worked through, we would then be in a good position to wonder how it might expand/change, or if we were missing a scenario so far.

My VCAP Design study tips


  • Find some colleagues, and study in a group.  If you're semi-confident, then a minimum of 5-6 sessions would be a good idea.  
  • Follow the Exam Blueprint as your study blueprint.  It tells you what you will be asked.  Pore over it and make sure you could answer questions about all the areas.
  • If you're feeling weak in areas, download the Best Practice whitepaper for the topic and make sure you understand the content, and why recommendations are given.  I found the below ones the most useful for me.
  • Get a whiteboard.  A big one!
  • For each study area, pick two design scenarios you think might come up and work through them in the group.  Nut it out, argue about it, ask what else they might want.  Don't forget you'll be starting from Business Requirements, so that has to be the start of the scenario!

Are you ready?

Well, that is something you will only know AFTER the exam!  However, my guidance on the exams is below.  Do take it with a grain of salt, as everyone will have a different experience.

VCAP-DCD

In my opinion, this exam was quite good, and not particularly scary.  Trying to sit down and focus for 3.5 hours is the biggest problem for candidates.  I reckon I was mentally "done" by about 2 hours into it.  So a VERY good sleep the night before is recommended - don't sit up studying late the night before.  It will hurt you.

Anyone that has a VCP-DV has the vSphere technical knowledge, I think.  In addition to this, the rest of the knowledge comes from using that feature set with customers' real problems.  I would say that if you have been spending the last 2-3 years implementing vSphere or acting in a (modestly detailed) technical pre-sales capacity for vSphere solutions, then you should be right to go.

I have recommended that ALL my VMware SE colleagues just go for it.  Both @GrantOrchard and @DemitasseNZ recommended that I just book it without study.  While I did study beforehand, it probably didn't help much - they were right.

VCAP-CID

Now, this one is a different kettle of fish.  This exam was challenging on more ways than one.  I believe it is perhaps still a little new in the sense that the exam content is nowhere near as refined/evolved as the DCD exam.  I found quite a few of the questions were either (a) unanswerable because of vagueness or ambiguity, or (b) unanswerable because the answers presented all seemed wrong.  I am happy to trust that the exam could be 100% correct and I am a bit thick, but for some questions I was still unable to derive a correct answer even several days later, when thinking back on it.

The other challenge was that at least one of the design scenarios seemed to be broken. That is, I couldn't correctly connect up the elements, no matter what I tried.  Perhaps I was marked correctly anyway, but I doubt it - and the drawing tool just would not play ball.

I failed my first attempt at this one (VCAP-CID), and so I can verify that it was not a one-off problem.  I also noticed that the question pool must be quite small, so unfortunately my second sitting was probably a bit unfair as I found myself in front of a lot of familiar (and previously considered) questions.

Failure?

My biggest factors in failing the VCAP-CID exam the first time around were two that are well known among all other candidates:

  • Lack of sleep the night before.  I had trouble sleeping due to an unrelated event, so while I got to bed early, I spent a lot of time listening to the night pass by!  This meant my brain was struggling to concentrate, and most questions took 2-3 reads before I understood what was needed.
  • Time management.  I ran out of time.  In fact, on a "pro-rata" basis, I got about the same score on both attempts, for the questions I got to.  The first time I got nearly three quarters through, and just failed by a few points.  The second attempt I finished quite early, and passed pretty well.  I thought I was managing OK the first time, but obviously my brain was operating at an entirely too slow rate!  (Due to the first factor above).

Conclusion

If you've been a "vSphere guy/gal" for a while, and kept your VCP status up to date, just do the VCAP-DCD.  It's a fine exam, and is a good test of what you're probably doing day to day anyway.

If you attempt the VCAP-CID, be prepared for a poorer quality exam, and a lower achievable score (I think).  And keep the vCAT close...

Good luck!