VMware Horizon View Pools

Its been quite a while I blogged. However during this big pause I learnt one thing about myself. I don’t publish unless I’m convinced information which I’m posting is not found or neatly explained. I have been always confused on persistent desktops, stateful desktops, stateless desktops, Full cloned, linked clone. I have only heard of linked clone, other terms are interchangeably used. This is post is aimed at clarifying these doubts.

Pools are basically collections of desktops. These desktop are either pre-created or can be created on the fly or can be created as demand increases.

Why we create pools?

Pool is like a group policy. If you define it once and it applies to group of users and computers. Similarly in pools you can defined various settings to control deployment of desktops, logoff action, provisioning style sysprep/quickprep.

Types of Pools

Automatic Pool

Desktops are automatically created. You can specify total number of virtual machines you wish pool to provision at any given time. With automatic pool you also have option to keep minimum number of VM to Spare for new users. This will allow you to control how frequently VMs should be provisioned, there by controlling load on the view composer/vCenter servers. Setting also ensures desktops are available for immediate use. Please note horizon view licenses are based on current users. Once you know the number of concurrent users, you can designed this parameter accordingly. If you are purchasing 1000 concurrent user licenses, then you should never put more than 1000 as maximum number of VM per pool.

Manual Pool

Manual is used when Desktop VM is already provisioned and available in vcenter. Or it is not managed by vCenter (e.g. Hyper-V, SCVMM) or it is physical desktop. Very limited use case.


It is terminal service now renamed by Microsoft as Remote Desktop Services (RDS).Primarily used to publish session based desktops and applications. However in RDSH pool, You can only create a session based desktops for users. Remember this is not pool of desktops. User can log into RDSH simultaneously. RDSH based desktop pools only supports Windows Based desktops. Again, very limited use case for desktops. In fact RDSH real power is to publish applications on RDSH servers and make it accessible from any device.

Decision on which one to use

Simplest way to select the type of pool is to find if you are using only view based VMs? If yes, answer is automated pool.

Are you going to use some 3rd party desktop management software and User profile management software? If answer is Yes, think of RDSH based pool.

Note: RDSH based pool do not support persona management. So decision is primarily around user profile management and operations. RDSH based desktops pools use case is very limited. Use cases which RDSH based desktop can solve are already covered and over lapping with Automated pool

1. Roaming profile management (Automated Pool)

2. Image management (Automated Pool)

3. Users don’t want to buy software licenses per desktop (RDSH Based Desktop)

e.g. MS Office, Windows OS license and other software products which support CAL types.

4. User must get same desktop every time he logs in (Automated Pool)

5. User need custom application installed on his desktop (Automated Pool)

# [4] RDSH you don’t have floating desktops or dedicated desktop pools.

What else users work profile would be? It is major driving factor to choose Automated over RDSH Pool.


In next post we discuss Types of Assignments and Types of Deployments how they further impact the pool selection type.

vCAC /vRA Blog List

I think this list makes lot of sense. I believe lot of information is already there which can help you build the effective orchestration layer. In no specific order here is the vCAC Blogger list, I refer and love reading them.

  1. http://www.virtualjad.com
  2. http://dailyhypervisor.com
  3. http://vmtocloud.com
  4. http://www.definit.co.uk
  5. http://storagegumbo.com
  6. http://grantorchard.com/
  7. http://extendingclouds.com/
  8. http://www.managesddc.com/
  9. http://www.virtualizationteam.com/cloud
  10. http://www.realize.net
  11. https://brianragazzi.wordpress.com
  12. http://blogs.vmware.com/management
  13. http://www.clearascloud.com
  14. http://elasticskies.com/
  15. cloud-abstract.com

I’m pretty sure list is going to be big. I have used all above blogs to learn vCAC product. If any blog I have missed please feel free to leave it in comment. I will update it. Idea to share the active vCAC/vRA bloggers.

Using custom property in vRA/vCAC deploy VM in specific datacenter using local templates -Post02

We discussed out of the box option in post:01. we all know it was not a practical approach. So only option best option is to use vCO (vRO). It is so easy to achieve, you would be surprised to see it. You just need to pass what datacenter string user is selecting. In my case it will be Mumbai or Pune


Using this input a “If else” statement is used to pass value back to vCAC template. Here is how the code looks below

System.log("Workflow started from workflow stub " + externalWFStub + " on vCAC host " + vCACHost.displayName);
System.log("Got vCAC virtual machine " + vCACVm.virtualMachineName);
System.log("Matching virtual machine entity " + virtualMachineEntity.keyString);
propertyNames = new Array();
propertyValues = new Array();
//var vmTemplate = vCACVmProperties.get("Datacenter.Location");
var DCName = vCACVmProperties.get("Vrm.DataCenter.Location");
System.log("This is coming from inbuild " + " " + DCName);

//Mumba DC is selected
System.log ("Mumbai");
System.log("Set template: template_mum");

//Pune DC is selected
else if(DCName=="Pune"){
System.log ("Pune");

System.log ("Pune is the DC location");
System.log("Set template: template_pnq");

In line “7” we are querying which datacenter user has selected. This is grabbed in variable DCName as represented below line.

var DCName = vCACVmProperties.get("Vrm.DataCenter.Location");

You might ask what is “Vrm.DataCenter.Location”, well it is reserved property in vCAC/vRA.

Now we have string available, I have used “if else” loop and updated custom properties. Custom properties & values are represented from line “10” to “29”. These values are passed into foreach loop for inbuilt workflow create/ update property on virtual machine Entity back to vCAC.  Then finally we use state change workflow and this time we select “BuildingMachine” state. This allows values to be updated before virtual machine provisioning starts. At the end of post, Please find attached VCO Workflow. Hope you find it useful.

Well if this is first time you are playing with VCO then follow the steps below. These only for First timers.

Copy workflow template provided in Library > vRealize Automation > Infrastructure > Extensibility to your folder/location

  1. Edit workflow, go to the schema and edit Update Property script
  2. Remove all except first three lines
  3. Create attribute as in parameter by name false and of type boolean
  4. Go to OUT tab, create two string attributes of type array
    • propertyNames
    • propertyValues


Go to visual Binding and ensure parameters are mapped as shown below.


Then go to scripting tab. Copy and paste the script mentioned above (in the code tag). You may have to change the datacenter location string. I have explain it in below image what needs to be changed.


 Now you are done with “Update Properties” where we have decide what needs to be replaced, when particular datacenter is selected.


These properties needs to updated back into blueprint. To do this we have a In-built workflow “Create / Update property on virtualMachine Entity“. Since we are updating multiple properties we will loop this workflow into foreach loop.

So first drag foreach workflow, and select Create / Update property on virtualMachine Entity then Edit workflow, go to Visual Binding, ensure things are mapped as shown below


Finally use state change workflow. However you must select life cycle stage as Building machine. Here is more information on various life cycle available. Also check here to understand how to use state change workflow. Building machine will change template based on CloneFrom property before even machine starts building.

Well, I tried my best to explain the step by step procedure in as much detail as possible, but there could be few gaps to make it simpler. If you are reading this blog post and you feel lost, comment in the post or use linkedin to reach me, I will strive to assist.

Download Workflow from here

Using custom property in vRA/vCAC to deploy VM in specific datacenter using local templates -Post01

Yeah ! Post title is big. But let me explain the use case. Customer has geographically dispersed datacenter but part of single vCenter. Customer would like to provisioning resources across geographies but wish to reduce time while provisioning across geographies. To be honest I was not aware if we can dynamically provide options to user based on the field selection. These two posts (By Jad, By Eiad Al-Aqqad ) are amazing. They explain in detailed how to achieve it. All credits for them but credit also goes to Ajit as he directed me to these posts. Let’s deconstruct the requirement. Single vCenter, two physical datacenter and local templates. And Virtual Datacenter added into vCenter.


In above figure, i have tried to simulate customer setup. Customer will be requesting VM either in Mumbai or Pune. However when he is provisioning VM in mumbai, it should use Mumbai template as it will reduce provisioning time.  So end user should be able to choose datacenter where he needs VM to deployed, which should automagically select local template in respective datacenter. Here is how the workflow below looks like


Let’s see how to achieve this. There is non-documented custom property Vrm.Datacenter.Location which will be used here. Below is the complete detailed procedure.

First make changes on vCAC-IaaS Server as explained here. Here is how my xml file looks like


Now associate the datacenter with compute resources as shown here.

Mumbai represented by Pune represented by Cluster_PNQ
 image  image

Now we need to create property definition. You can create either build profile or Property Dictionary . I preferred Property Dictionary. I have exactly followed steps mentioned by Jad. Here is how Vrm.Datacenter.Location looks like



Now datacenter part is done. We have to create value expression such that when datacenter is selected, template should be displayed.

We will be using customer property by name CloneFrom. Refer custom property link here. This property will over-ride the value defined in blueprint. So here is the CloneFrom and its value expression.



I took opportunity to use macro create by Eiad here. Automatically xml is created for you. Great work “Eiad”. Now that being done we are ready to test if things work fine.

Actually it didn’t worked. I never got any template in the drop down. And it took quite while to understand. I have to set a Property Layouts. I have to first select datacenter based on which respective template will be displayed in drop down as designed below.


NOTE: If you login into to portal as Tenant Admin you will always see Location field displayed irrespective of if you select “Display location on request” or not. However if end user logs in “Display location on request” behavior is reflected based on if checkbox is selected or not.


If you look into screen capture, by default CloneFrom is empty, so unless user selects template to be used, CloneFrom becomes null, which over-rides the property in template and provisioning fails. This was expected behavior.



If you have use cases where user must select template to start provisioning in respective datacenter this will solve your problem.

In my case I don’t want user to select template, I want user to just select datacenter and automatically respective template is selected behind the scene and VM provisioning starts. AFAIK, this behavior cannot be achieved using value expression. In order to do it you must use vCenter Orchestrator Workflow. I must admit, I’m in love with this tool. It just keep extending the possibility of what you can do. So to conclude as long as you want user choice to select template this procedure works and is perfectly fine. let’s discuss vCO Option in next post.

Using custom properties to govern Service in vRA 6.2

We all have been impressed with governance engine of vRA/vCAC. Governance is biggest advantage over vCloud Director. Approval policies are the crux of governance. I have explained in detailed approval policies in my previous post. Approval policies can have multiple level and can span across your different divisions e.g. IT, HR, Finance. These policies are little bit revised in vRA 6.2 to leverage extensibility aspect. Again this revision is brought due to customer demand. In previous release if end user has specific requirement and is requesting something, If it is not available, workflow use to end and user has to request service again with different requirement. This was especially true for custom properties. For system property it was possible to do so, however system defined property have very limited scope. Continue reading Using custom properties to govern Service in vRA 6.2

Using VCO (vRO) to drive automation for vRA (vCAC) using Custom Properties

This post in many ways a repetition of Post1, Post2 and Post3. This post is about achieving same thing using new ways. When I did these posts I was unaware of this method. It took me quite long to get along. There are few basic steps you must complete before you can use this post. There are good number blogs which are covering it.  vCAC Plug for vCO was introduced sometime back and it made thing simpler further to make vRA and vRO talk with each other. Initial steps are very well covered here. By my own admission it is pretty simple to do it. Continue reading Using VCO (vRO) to drive automation for vRA (vCAC) using Custom Properties

Bulk Import VMs into vRealize Automation (vRA/vCAC)


In the previous post we discussed consideration and steps to be taken for successful bulk import of VMs. In this post I would like to explain the procedure of importing VMs into vRA. A word of caution “The unmanaged machines are recorded during last successful data collection. Any new machines on the endpoint will not appear until next successful data collection”. By default inventory collection happens only once in a 24 hours. Continue reading Bulk Import VMs into vRealize Automation (vRA/vCAC)

Considerations while Bulk Importing VMs into vCAC/vRA

Why we need to import VMs

In 90% of the cases vRealize Automation (vRA) and formerly known as vCloud Automation vCenter (vCAC) will be a brown field deployment. Brown field environment suggest you already have virtual infrastructure in place. Post deployment of vRA, customer would naturally like to allow end users to manage their own VMs. What if customer has 1000 VMs and you need import these VMs. Very next question comes from customer  “is there a way to migrate existing VMs into vRA” Answer is of course Yes. It can be done using either Infrastructure organizer or Bulk import utility.

Bulk importing of VMs into vRA was introduced in vRA 6.1. Virtual machines which are not under vRA are referred as Unmanaged. If you would like end user to control their VMs using vRA, VMs must be imported into vRA. Such VMs are referred as Managed VMs. Continue reading Considerations while Bulk Importing VMs into vCAC/vRA

Cost Profiles in vRealize Automation

Recently I was queried on how to apply cost profile. I thought, it is super simple to do so. However when I tried in my lab, it took quite a while to find cost profiles screen and how does it work. While working on cost profile in my lab I realized few things. In this post I’m sharing how to use cost profiles and how it is related to compute resources, Fabric group

You have to associate Cost profiles with compute resources. Compute resources is pool of clusters available in your endpoint. This is the single most thing I would like you to take as a learning from this post. Compute resource is in turn associated with fabric. There is direct relationship between compute resource and fabric. So when you create a fabric, you also carry along cost profile defined at the compute resource. Fabric admin creates reservation i.e. carves the chunk out of the fabric. Cost profiles get carried to this chunk. So cost profile applies to all the VMs created out of the fabric. Since it is fabric based operation, you need Fabric admin credentials to do this job. Continue reading Cost Profiles in vRealize Automation