VRA CustomHostnaming
Jump to navigation
Jump to search
Contents
1 General
I created this as an exercise, hopefully this is useful for others too. This workflow got developed and tested with vRealize Automation 7.1.
File: defineHostname.js
// ----------------------------------------------- GLOBAL SETTINGS ----------------------------------------------------- var fallback_hostname_number_length = 4; // ----------------------------------------------- FUNCTIONS ----------------------------------------------------------- // fill numbers with leading zeros function pad(n, width, z) { z = z || '0'; n = n + ''; return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n; } // ---------------------------------------------- GET DATA ------------------------------------------------------------- // Retrieve the machine properties var machine = payload.get("machine"); // Check the machine properties exists if(machine != null) { // Retrieve the values required virtualMachineId = machine.get("id"); } var machineProperties = machine.get('properties'); //Read the hostname generated by vRA newHostname = machine.get('name'); System.log(workflow.currentWorkflow.name+" Default hostname is "+newHostname); var custom_hostname_prefix_group = machineProperties.get("Custom.Hostname.Prefix.Group"); var custom_hostname_prefix = machineProperties.get("Custom.Hostname.Prefix."+custom_hostname_prefix_group); var custom_hostname_uppercase = machineProperties.get("Custom.Hostname.Prefix."+custom_hostname_prefix_group+".UpperCase"); // -------------------------------------------- CHECK DATA VALIDITY ---------------------------------------------------- // check hostname prefix validity if(!custom_hostname_prefix){ throw("custom_hostname_prefix is null"); }else if(custom_hostname_prefix == ''){ throw("custom_hostname_prefix is empty"); } // ------------------------------------ CONSTRUCT NEW HOSTNAME NUMBER -------------------------------------------------- // -----------------hostname number length------------------ var element_exists = false; var element_name = custom_hostname_prefix.toLowerCase()+"_number_length"; for each(element in PrefixConfigElement.attributes){ if (element.name.toLowerCase() == element_name){ element_exists = true; System.log("Configuration element "+PrefixConfigElement.name+" / "+element_name+" does exist" ); } } if(!element_exists){ System.warn("Configuration element "+PrefixConfigElement.name+" / "+element_name+" does not exist, so I create new one" ); PrefixConfigElement.setAttributeWithKey(element_name , fallback_hostname_number_length); } var custom_hostname_number_length = PrefixConfigElement.getAttributeWithKey(element_name.toLowerCase()).value; // -----------------hostname number------------------------- var element_exists = false; var element_name = custom_hostname_prefix.toLowerCase()+"_number"; for each(element in PrefixConfigElement.attributes){ if (element.name.toLowerCase() == element_name){ element_exists = true; System.log("Configuration element "+PrefixConfigElement.name+" / "+element_name+" does exist" ); } } if(!element_exists){ System.warn("Configuration element "+PrefixConfigElement.name+" / "+element_name+" does not exist, so I create new one" ); PrefixConfigElement.setAttributeWithKey(element_name , 1); }else{ System.warn("Configuration element "+PrefixConfigElement.name+" / "+element_name+" does not exist, so I create new one" ); PrefixConfigElement.setAttributeWithKey(element_name , Number(PrefixConfigElement.getAttributeWithKey(element_name.toLowerCase()).value) + 1); } var custom_hostname_number = PrefixConfigElement.getAttributeWithKey(element_name.toLowerCase()).value; // ------------------------------------ CONSTRUCT NEW HOSTNAME --------------------------------------------------------- // Build new hostname newHostname = custom_hostname_prefix+pad(custom_hostname_number, custom_hostname_number_length); // set to upper case or lower case var convertToUpperCase = (custom_hostname_uppercase == 'true'); if(convertToUpperCase){ newHostname= newHostname.toUpperCase() }else{ newHostname= newHostname.toLowerCase() } System.log(workflow.currentWorkflow.name+" New hostname will be "+newHostname);
1.1 Concept
- Select DropDown "hostname set" as a property in vRA
- Store Hostname Numbers for every pattern as configuration element in vRO
- Store hostname number length as configuration element in vRO
- If configuration elements do not exist (eg. new pattern) create them automatically
- Make it easy to work with property group in vRA to add prefix collection to blueprint component
2 Configuration
2.1 Workflows
You can import my package from github:
https://github.com/joe-speedboat/vRealizeOrchestrator/blob/master/ch.bitbull.hostname.package
2.2 vRA Event Broker
Create new Subscription.
Add the following conditions:
- Data > Lifecycle state name Equals VMPSMasterWorkflow32.BuildingMachine
- Data > Lifecycle state phase Equals PRE
- Data > Machine > Machine type Equals Virtual Machine
Do not forget to hand over the properties from EB to vRO, by setting this custom property to Blueprint Component:
Extensibility.Lifecycle.Properties.VMPSMasterWorkflow32.BuildingMachine = *
2.3 Create Properties / Property Group
Create vRA properties like:
Note: PRD is a placeholder for a set of hostname prefixes
Extensibility.Lifecycle.Properties.VMPSMasterWorkflow32.BuildingMachine -> * Custom.Hostname.Prefix.Group -> empty (set in property group) Custom.Hostname.Prefix.PRD -> drop down list with needed prefixes Custom.Hostname.Prefix.PRD.UpperCase -> [true|false] (as you need)
Below you can find an example:
2.4 Final note
Now you can add the property group to a blueprint component and get the desired dropdown.