vCAC / vRA Custom Property Toolkit for vCO / vRO

vCAC / vRA Custom Property Toolkit for vCO / vRO

This Orchestrator package aims to include workflows to Create/Read/Update/Delete vCAC custom properties on more than just VirtualMachine objects.

It is dependent on the vCAC IaaS Plugin for Orchestrator.

So far it has workflows for manipulating properties on Blueprint, Build Profiles, Management Endpoints, Property Sets, Property Dictionary Definitions/Attributes and Business Group (vRA 6.x) / Provisioning Group (vCAC 5.x):

vcacPropToolkit20141207_1.pngvcacPropToolkit20141207_2.png

USAGE Examples:

Dynamically updated request forms example with vRA, vRO and Chef | VMtoCloud.com

VMware Cloud Adapter | DDI (Secure DNS, DHCP, and IPAM) | Infoblox

UPDATES:

  • 9/3/2015:
    • Fixed: Blueprints/Toggle Build Profile on Blueprint
    • Added: Build Profile/Update Build Profile Details. Allows you to rename a build profile, update description.
    • Added: Business Groups/Get All Values of Business Group Custom Property
  • 7/2/2015:
    • Added Apply to Existing VMs functionality option for workflows:
      • Blueprints
        • Create / Update property on Blueprint
        • Delete property from Blueprint
        • Import Blueprint Properties From Property Set XML
        • Toggle Build Profile on Blueprint.  (Can be rerun to apply a modified build profile to VMs.)
    • Fixed presentation defect in Blueprints/Import Blueprint Properties From Property Set XML
    • Added action addUpdateManyPropertyFromVirtualMachineEntity which will add/update many properties in a more efficient manner.
      • Fixed return of action to be an array of vCAC:Entity in com.vmware.pso.vcac.proptoolkit.20150702_1.package
  • 12/7/2014:
    • Added workflows:
      • Find Blueprint by Property
      • Find Business Groups by Property
      • Find Virtual Machines by Property
  • 8/26/2014:
    • Added workflows:
      • For Blueprint properties
      • Apply Build Profile to Existing Virtual Machine
      • Get Properties of Disposed Virtual Machines
      • Add/Remove item for ValueList attributes of DropDown Property Definitions.
      • Get All Property Definition Attribute Entities
      • Preliminary Property Dictionary Layout workflows.
      • Parse Property Set XML
    • Fixed workflows:
      • Create Build Profile From Property Set XML - Fixed handling of strings that contain a "#" character.
      • Fixed error handling for Get Property Definition Attribute Entity when multiple attributes have the same name.
  • 7/2/2014:
    • Added Workflows:
      • Build Profiles\Delete Many Build Profiles
      • Business Groups\Copy Business Group Properties
      • Property Dictionary\Copy Property Definition
      • Endpoints\Copy Endpoint Properties
      • Endpoints\Create / Update Property on Endpoint
      • Endpoints\Delete Property from Endpoint
      • Endpoints\Export Endpoint Properties as Property Set XML
      • Endpoints\Import Endpoint Properties From Property Set XML
    • Added description output to workflows:
      • Build Profiles\Get Build Profile Entity
      • Build Profiles\Export Build Profile as Property Set XML
    • Added attributeNames and controlTypeName outputs to workflow:
      • Property Dictionary\Get Property Definition Entity
    • Added sameAsSource boolean input to Copy Build Profile and Copy Property Definition workflows. This will make authoring workflows easier for managing many Build Profiles or Property Definitions when you just need to copy the object exactly between different vCAC hosts.
  • 5/23/2014:
    • Added workflows to create / update / delete Property Definitions in the Property Dictionary
    • Added workflows to create / update / delete Property Attributes in Property Definitions
Attachments
Comments

Dan,

This looks really cool.  Any reason it wouldn't work with vCAC 5.2.1?

--Chris

I have not tested it against vCAC 5.2 yet.  Not aware of any reason why it would not work.  I haven't noticed any changes between the 5.2 and 6.0 vCAC IaaS plugins in vCO yet.

I would like to thank you for giving me a day of my life back... I so often curse VMware for taking days away when I spin my wheels on what should be simple tasks I thought it only fair to give some kudos back!  I used your examples to quickly create a build profiles sync up between my various vCAC environments!

I should have procrastinated!  It looks like your updates will trump some of the work I did today.  I created workflows to sync all build profiles and the property dictionary and all the attributes but I imagine your workflows will be much more elegant than what I did.  Thanks again for the great toolkit!

Honestly your kudos inspired me to wrap up those changes / additions I have been working on.  Glad to see these workflows are saving energy & time.

Seriously keep them coming... I have downloaded and used and/or tweaked a bunch of the stuff that gets posted here by pso.  I often find the pso workflows to be like the missing manual for vCO and the plugins.  Dissecting them gives me so many "A Ha!" moments.

I will say that I have noticed that the documentation is getting better for the individual plugins.  The docs for the vCAC plugin are probably the best I have seen so far but really still only scratch the surface.  At least they included some example code that is useful and not just a how to configure the plugin guide.

Definitely saving time and energy... after taking a look at how things were working, I was able to setup some low friction sync of all of my build profiles and custom dictionary from production back to a freshy rebuilt dev instance today. Probably saved me 3-4 hours of time with manual input vs. 15-20 minutes to build the loop structure and let it roll. Amazing!

can you elaborate just a bit of what you mean by sync build profiles.. what where you trying to accomplish. Just trying to understand the use case scenario. Thanks much

when i try to run any workflow from this package i guess.

"Validation process report 6 error in the workflow".

what is this ?

The package is dependent on the vCAC Plugin for vCO.  Do you have that installed?  Make sure you have two vCAC entries at the root of your vCO Inventory (vCAC Infrastructure Administration, vCloud Automation Center)

ok, got it now it's working.

Woo hoo!  I'll pretend the 8/26 release was for my bday!

Is there any legal issues if we use this to implement one of our own VCO plugin where we are trying to integrate a 3rd Party solution to vCAC.

Have you checked out the communities terms of service?  I think it's covered clearly there under "Contributions Ownership, Rights and Liability".

Thanks again Dan!

Thanks for posting this - amazingly helpful :smileygrin:

Hi Dan,

Thank you for your amazing module.  It's proven very helpful.

I had a question though.  Is it possible to retrieve the name of a business group for a given VM?  You offer the ability to look up a business group via it's custom property or name, but we're really looking to look it up via the ID, provided in the vRO property collection

Sure, you can replace the getProvisioningGroupEntityByName action in the workflows with:

var groupId = "<YOUR BG GROUP ID>";

var groupProperty = new Properties();

groupProperty.put("GroupID",groupId);

var entities = vCACEntityManager.readModelEntitiesByCustomFilter(vcacHost.id, "ManagementModelEntities.svc", "ProvisioningGroups", groupProperty, null);

if (entities != null){

    return entities[0];

}else{

    System.warn("No Provisioning Group found with id: "+groupId);

    return null;

}

The biggest change to the action was bolded to find a group by it's ID instead of name.

Dan.

Hey Dan.  Is this package the most recent version?  If so I think I might have found an issue with the "Import Blueprint Properties from Property Set XML".  The drop down for the target blueprint is listing the build profiles but I am assuming it should be listing a blueprint?  I flipped it over to loading up with blueprints and executed it then received another error.  I am trying to move a 6.1 blueprint over to 6.2.2 so I don't know if that is a part of the issue.  Anyway, before I spend too much time troubleshooting I figured I'd make sure I have the most recent version and I am using the workflows correctly.  Thanks!  Paul

Hey Paul, that was a presentation defect cause by duplicating a workflow that I didn't catch.  It is fixed now.  Copying properties from 6.1 to 6.2.2 would not be the cause of the issue you saw.

Thanks Dan!  I see some new features too in the updated package.  You rock!

Any documentation available for this

Excellent WF !!!

I don't find the way to automate populating a property definition from an XML file or any other source.

I must admit that i'm a newbie to manage WF in VCO. Can anyone help me ? :smileyblush:

each time i try to get property or update property, i get this message :

Matched more than one property definition attribute with name: environnement (Workflow:Get Property Definition Attribute Entity / Single Build Profile Found? (item3)#12)

and also for another attribute name called application.

But i have only one property with that name

Due to the data structure of the Property Attributes, It allows you to create multiple attributes with the same name.  The name of these property attributes are just labels, they do not provide any functionality. Only the Type and Value are important here.

The name of these property attributes does not have to have the same name of the property itself.

Example that is not supported by that workflow:

Both of those property attributes had the same name.

A more compatible example that will have the exact same functionality:

Hello Dan, thanks for your answer, i will try it now.

Yesterday i successed in creating a property, but is there a way to do it for massive update ?

I had about 280 applications (that can be filled in a CSV, XML, TXT file) that i need to populate in a dropdown list. I was looking for a powershell module for vcac but i dont find anything.

Is there a way by API ?

The ValueList attribute of a DropDown/DropDownList is a comma separated value.  You do not have to add each value individually, you can batch add with a comma separated string.  As long as you can build up a string with those values, you can use either workflow:

PSO\vCAC\Property Dictionary\Attributes\Add Item to DropDown ValueList Attribute

PSO\vCAC\Property Dictionary\Attributes\Create / Update Property Definition Attribute

Hello Dan,

thanks for you answer. That what i try. I generate the whole string from the XML file generated from Service Now that list all my application.

But after, i don't know how to bind the powershell output to the "Create / Update Property Definition Attribute" input.

I am seaching the communites to find someone who explains this basic.

Is there someone who update a property value from a text file that contains the string with comma or something else ?

I really don't know how to give the 3 inputs (vcac host, property name, property value extract from a txt file) to the WF and scheduled this action

You can interactively attach a text file to a workflow by using a MimeAttachment type.  Lets assume you name this input csvNames.

You can get the string from this type with .content.  This string should be assigned to the value input of the Create / Update Property Definition Attribute workflow:

    value = csvNames.content;

The snippet above could be used in a Scriptable Task with csvNames as in input, and value as an output.

The host input of type vCAC:VCACHost is chosen from the inventory. It should show up in your inventory under vCAC Infrastructure Administration.  Typically there is only one. This is not the vCAC Cafe host, but the vCAC IaaS host.  It is added to vCO/vRO using workflow: Library/vCloud Automation Center/Infrastructure Administration/Configuration/Add an IaaS host.

The propertyName is the name of the custom property you are updating the property attribute for.  The property attribute (name) is defined per Custom Property (propertyName).  The descriptions on these particular inputs should help you identify how they relate to the vCAC Property Dictionary UI for the Property Dictionary/Attributes workflows.

thanks for your explanation. I will try with the mime attachement.

Just a few word to tell you that i successed in updating a dictionnary property by calling a Powershell WF and then your fantastic WF.

The WF call a PS that query Service Now CMBD by downloading an XML file and then, the PS Script return to the update_application WF the value for the property.

I faced some difficulties when trying to read a file on the local PS Host while executing the WF so i had to do all in variable with no more file. (the PS script execute fine when launched directly on the windows local server.

Hi Dan,

Firstly, an amazing job with this package, some very useful Workflows and it's a huge timesaver. One query I have is regarding updating Build Profiles on Blueprint(s). I've used some of the Workflows in the toolkit to create Custom Properties (and Attributes), create a Build Profile, add the properties to the Build Profile and then toggle the Build Profile on the Blueprint(s). Technically, this has all worked as expected, however, the only way I can get the Blueprint to show the new properties on the request form is to logon to the portal, open the Blueprint and click 'OK' (no changes made, just open Blueprint properties and click 'OK'). That seems to update a link 'somewhere' which then shows the new properties on the request form as expected.

If I open the Blueprint properties (after running the Workflow to create/amend the Build Profile), I see the Build Profile is selected (i.e. ticked). If I look at the Build Profile and the Property Dictionary all is in order (i.e. new properties exist). If I click 'Cancel' instead of 'OK' (in Blueprint properties), the new properties do not show on the request form. As soon as I open the Blueprint properties and click 'OK' the new properties show up on the request form.

I'm sure I'm missing something obvious, I just can't figure out what and wondered if you'd seen this before?

I have tried various methods to reoslve this, such as setting another property on the Blueprint(s) hoping it might refresh (setting a property directly on the Blueprint seems to to show on the request form immediately). I also tried the 'Update a vCAC model entity' workflow, which correctly shows the new Build Profile in the 'links' (before I update it) and has no errors when I run (effectively getting the existing settings and feeding them back into the update) but this appears to have no effect on showing the new properties on the request form. It's like I've changed the settings in the backend but it hasn't saved those settings for display in the front end.

Thanks for the feedback!  What version of vRA are you using?  I'd like to attempt to recreate this issue.

Hi Dan,

I'm using vRa 6.2.1 and this is in my lab so it's the internal vCO instance that's running (1 x vRa Applicance, 1 x SSO Appliance, 1 x IaaS 2012R2). It does seem like a vRa issue and not an issue with the Workflow(s), it's just not clear if it's my vRa issue or if it's expected. My process is quite simple:

01) Create Custom Properties and their Attributes

02) Create a Build Profile and add the Custom Properties to it

03) Attach(/toggle) the Build Profile on a selected number of Blueprints

then:

01) (I'm manually adding the new Properties to a Property Layout at this stage, which is already attached to VirtualMachine.Request.Layout on the Blueprint(s))

02) Go to portal Catalog and request one of the affected Blueprints

03) Check if new Custom Properties are showing on the Blueprint request form

if new properties are not showing:

01) Go to portal Infrastructure - Blueprints - Click an affected Blueprint to edit and select 'Properties' tab

02) Verify the new Build Profile is listed and selected

(important part in my lab)

03a) Click 'Cancel' and new Custom Properties still do not show on Blueprint request form

or

03b) Click 'OK' and new Custom Properties show on Blueprint request form

Just to confirm, if I query the IaaS Entity for an affected Blueprint after making my changes, the 'links' GlobalProfiles contains the name of the Build Profile (i.e. it thinks it's on there as it should be) and this is also reflected if you edit the Blueprint and examine the checkbox for the Build Profile (it's ticked). I have tried waiting (even 24hrs) in case there's some global update that occurs but it doesn't seem to self-resolve for me.

I'm on BST so please excuse delays in my response, I am definitely interested to know if you can replicate this and I do understand support in any traditional sense is not applicable but it would be a great help to know if it's 'a' vRa thing or 'my' vRa thing. I also appreciate it takes time to lab these things up so if you do get any cycles to spin this up I thank you in advance.

Aside from the huge time (and sanity) savings made possible by this package inherently, it's been of massive help in understanding how to work with some of the Entities in vRa so thanks again for some sterling work!

I think I found the issue:  We need to add/update a hidden custom property on the blueprint: __buildprofile_order

I'll keep testing and post an updated package to address this.

Please try the latest package posted on September 3.  The Toggle Build Profile workflow will now also update the hidden custom property and make your build profile appear in your catalog request without manual blueprint updates.

Hi Dan,

Great job on your find! I've yet to test the updated package but I should get some cycles over the weekend to have a look. I was actually trying something else last night which unfortunately didn't work for me. There are a couple of really good posts on publishing IaaS Blueprints and there's an issue which sounds exactly the same (Blueprint not showing in Catalog Items even though it's set to Published). JM mentions you need to assign the AdminCatalogItem (i.e. Blueprint) to a Service in order to fully automate the publishing process and to do this he's used the REST API.

I had a go at this yesterday evening but assigning a Blueprint to a Service (which it's already assigned to) didn't 'flick the switch' for me (or most likely I was doing it wrong) so I was back to the drawing board. It wasn't happy about me setting it to Active either (as it already was). I've also spent some time trying to attack it from a Firebug perspective but I struggle with Firebug. I couldn't find the json etc for that page you seem to get for some of the others or any way to perform what I guess is a POST request. That hidden Property sounds much more interesting though, I was going to have a go at unpublishing/republishing the Blueprint next but I'll have a go with the new package instead now Smiley Happy

I should be able to post some results during the next few days and I look forward to trying it out. I wonder if I can be cheeky and ask how you figured it out? The official documentation still appears sadly lacking and I've learned much more from posts and modules such as this one. There are posts about some hidden Properties (e.g. __reservationPolicyID) but if I google the one above, only 2 results!

I was also looking at updating the PropertyLayout (automating) but started getting a bit lost in a world of 'looks like a number but isn't' and also, the fact that people can choose their own 'Order' doesn't help. I tend to put 2 leading zero's in my layout(s) or it seems to mess up the order after 10 (1,10,11,2,3...), some people use 1, some none (usually < 10 Properties from what I've seen with no leading zero's). It seems most people use 'numbers' for their Order, though unfortunately a real number doesn't have any leading zero's so I presume it's an alphabetical sort. I think I'm about halfway to having something that 'might work if I sacrifice enough unicorns' but I'm up to my neck with other work right now and it looks like there's a few linked tables to be messing with so I fear it will be fighting back.

Thanks again for taking the time and trouble to look at this, the community for vRa may be small but there are some great posts/solutions to issues and it seems like most people figure them out the hard way, in their lab, late at night, if my experience is anything to go by! I'll post my findings once I've tested it out.

Hi Dan,


That is running sweet as a nut now. I only inserted the modified 'toggle' Workflow and now it 'just works'!

Thank you very much for your efforts, brilliant work Smiley Happy

Hi Daniel,

Great job. I had few workflows that don't run properly:

  • Create / update many properties on Build Profile. Create may properties work fine, but if I try to update any of them I get the error "HTTP/1.1 405 Method Not Allowed... 405 - HTTP verb used to access this page is not allowed.</h2>  <h3>The page you are looking for cannot be displayed because an invalid method (HTTP verb) was used to attempt access.</h3> </fieldset></div></div></body></html> (Dynamic Script Module name : addUpdatePropertyFromGlobalProfileEntity#32)
  • Create / update property on Build Profile. Create a property works fine, but if I try to update a property I get the same error.
  • Delete property from Build Profile. Delete a property doesn't work to me, I get the same error except in different module "Dynamic Script Module name : deletePropertyFromGlobalProfileEntity#6)"

I'm using vRealize Automation 6.2.2, vRealize Orchestrator 6.0.3, and vCAC plugin for 6.2.3

Regards,

Jose

Hi,

I found the issue. The IIS WebDAV module was installar on IaaS server. After remove the module and clean any trace of WebDAV in Handler Mappings it worked.

Regards,

Jose

Hi Dan,

I was wondering if you are planning to do a similar support for vRealize 7.0


Thanks!

Hello Dan,

Do you have something similar for vRA 7.0 ? I am looking for your response.

Thanks,

Koushik

Things have changed pretty dramatically in vRA 7, there are a lot more ties together which eliminate the need for some of this content (it's built in) If you want a simple walk through of making vRA 7 perform the same capabilities please see the following post.

Enabling the Event Broker | Extending Clouds

Dear,

Thank you very much for the link.

It's definitely fulfill my requirement.

Thanks,

Koushik

There is a lot of similar import / export functionality included in CloudClient 4.0 for vRA 7.0

In particular: Property Groups (build profiles) and Property Dictionary Definitions can be imported/exported with CloudClient 4.0 on vRA 7.

Dear,

Thanks to all of you.

I am able to complete my requirement by using property groups and Event Notification/Subscription in vRA7.0.

Thanks,

Koushik

Hello Dan,

Is there any API/way so that I can create the Property Group and Assigned this to a BP from vRO workflow ?

Basically I would like to automate the manual configuration task in vRA ( Creating Property Group and Event Subscription, etc) from vRO workflow.

Can you please help me out ?

Thanks,

Koushik

I tried to export the endpoint properties as property set XML but not sure where exactly it stores the xml file to import again? workflow is successful.

Do we need to change the var xml = <Doc></Doc>; or anything?

Need to get output file somewhere to import back?

There is a propSetXML output parameter to the workflow that you can use in another workflow step.  The XML doc is also written to the log tab, which can be used for copy/paste.

The XML in that field is complete.

I am trying to grab the output but not able to.There is no data in logs and PropSetXML string is coming as <Doc>  <CustomProperties/> </Doc>

Does it give more that what I listed above? I am not getting anything else

Version history
Revision #:
1 of 1
Last update:
‎05-19-2014 12:08 PM
Updated by: