04-07-2015 04:52 PM - edited 03-01-2019 06:34 AM
Task Name | VM Annotations + Moving a VM to Different Folder |
Description | VM Annotations + Moving a VM to Different Folder |
Prerequisites |
|
Category | Workflow (and tasks) |
Components | VM Annotations + Moving a VM to Different Folder Additional workflow can also create a new folder |
Instructions for Regular Workflow Use:
Inspired by work done by Harsha Ghanta.
The Workflow input:
The current state of a VM:
The workflow execution:
The Moved VM:
The annotation:
The log file:
Service Request ID: 4652
Workflow Inputs:
- vmid
- Folder
- AnnotationsField
- AnnotationsValue
Apr 07, 2015 18:33:16 CDT Request submitted
Apr 07, 2015 18:33:17 CDT Executing workflow item number 1
Apr 07, 2015 18:33:17 CDT Completed workflow item number 1, with status Completed
Apr 07, 2015 18:33:23 CDT Executing workflow item number 2
Apr 07, 2015 18:33:23 CDT Trigger context executeWorkFlowStep called
Apr 07, 2015 18:33:23 CDT Executing custom action VM Folder Move (custom_VM Annotations)
Apr 07, 2015 18:33:23 CDT Executing custom action VM Folder Move (custom_VM Annotations) for VM 1749 (epsilon0002)
Apr 07, 2015 18:33:23 CDT Executing custom script for VM Annotations
Apr 07, 2015 18:33:25 CDT VM ID = 1749
Apr 07, 2015 18:33:25 CDT Folder = undefined
Apr 07, 2015 18:33:25 CDT Custom Name: SAP3
Apr 07, 2015 18:33:25 CDT Custom Value: Stats Server1
Apr 07, 2015 18:33:25 CDT Gvm = com.cloupia.model.cIM.GenericVM@65eda2ba
Apr 07, 2015 18:33:25 CDT Account Name = Dallas
Apr 07, 2015 18:33:25 CDT Host Node = 172.17.32.113
Apr 07, 2015 18:33:25 CDT Cluster Name = Dallas Cluster1
Apr 07, 2015 18:33:26 CDT Root Folder = Folder:group-d1 @ https://172.17.32.110/sdk
Apr 07, 2015 18:33:26 CDT Key: 103
Apr 07, 2015 18:33:26 CDT Value: SAP3
Apr 07, 2015 18:33:34 CDT Annotation added successfully
Apr 07, 2015 18:33:34 CDT Task #1 (VM Folder Move (custom_VM Annotations)) completed successfully in 10 seconds
Apr 07, 2015 18:33:34 CDT Input/Output values for Task #1 (VM Folder Move (custom_VM Annotations)):
Apr 07, 2015 18:33:34 CDT [Template Input:vmid = ${VM_ID}]
Apr 07, 2015 18:33:34 CDT [Resolved Template Input: vmid = 1749]
Apr 07, 2015 18:33:34 CDT [Local Input: vmid = 1749]
Apr 07, 2015 18:33:34 CDT [Mapped Input: AnnotationsField = SAP3]
Apr 07, 2015 18:33:34 CDT [Mapped Input: AnnotationsValue = Stats Server1]
Apr 07, 2015 18:33:34 CDT Completed workflow item number 2, with status Completed
Apr 07, 2015 18:33:39 CDT Executing workflow item number 3
Apr 07, 2015 18:33:39 CDT Trigger context executeWorkFlowStep called
Apr 07, 2015 18:33:39 CDT Executing custom action VM Folder Move (custom_VM Folder Move)
Apr 07, 2015 18:33:39 CDT Executing custom action VM Folder Move (custom_VM Folder Move) for VM 1749 (epsilon0002)
Apr 07, 2015 18:33:39 CDT Executing custom script for VM Folder Move
Apr 07, 2015 18:33:41 CDT VM ID = 1749
Apr 07, 2015 18:33:41 CDT Folder = Level1
Apr 07, 2015 18:33:41 CDT Gvm = com.cloupia.model.cIM.GenericVM@70f0eb69
Apr 07, 2015 18:33:42 CDT Account Name = Dallas
Apr 07, 2015 18:33:42 CDT Host Node = 172.17.32.113
Apr 07, 2015 18:33:42 CDT Cluster Name = Dallas Cluster1
Apr 07, 2015 18:33:42 CDT Root Folder = Folder:group-d1 @ https://172.17.32.110/sdk
Apr 07, 2015 18:33:42 CDT FD = Folder:group-v1405 @ https://172.17.32.110/sdk
Apr 07, 2015 18:33:42 CDT Task #2 (VM Folder Move (custom_VM Folder Move)) completed successfully in 2 seconds
Apr 07, 2015 18:33:42 CDT Input/Output values for Task #2 (VM Folder Move (custom_VM Folder Move)):
Apr 07, 2015 18:33:42 CDT [Template Input:vmid = ${VM_ID}]
Apr 07, 2015 18:33:42 CDT [Resolved Template Input: vmid = 1749]
Apr 07, 2015 18:33:42 CDT [Local Input: vmid = 1749]
Apr 07, 2015 18:33:42 CDT [Mapped Input: Folder = Level1]
Apr 07, 2015 18:33:42 CDT Completed workflow item number 3, with status Completed
Apr 07, 2015 18:33:45 CDT Executing workflow item number 4
Apr 07, 2015 18:33:45 CDT Completed workflow item number 4, with status Completed
The Workflow:
The Custom Tasks:
The code for the folder move VM:
importPackage(java.util);
importPackage(java.lang);
importPackage(java.io);
importPackage(com.cloupia.lib.util);
importPackage(com.cloupia.model.cIM);
importPackage(com.cloupia.service.cIM.inframgr);
importPackage(org.apache.commons.httpclient);
importPackage(org.apache.commons.httpclient.cookie);
importPackage(org.apache.commons.httpclient.methods);
importPackage(org.apache.commons.httpclient.auth);
importPackage(com.cloupia.model.cEvent.notify);
importPackage(com.cloupia.lib.util.mail);
importPackage(com.cloupia.fw.objstore);
importPackage(com.cloupia.service.cIM.inframgr);
importPackage(com.cloupia.lib.cIaaS.vmware);
importPackage(com.vmware.vim25);
importPackage(com.vmware.vim25.mo);
importPackage(com.cloupia.lib.util.managedreports);
var VMID=input.vmid;
logger.addInfo("VM ID = "+VMID);
var folder=input.folder;
logger.addInfo("Folder = " + folder);
var gvm = InfraPersistenceUtil.getVMById(VMID);
var accountName = gvm.getAccountName();
var account = InfraPersistenceUtil.getAccount(accountName);
var hostNode = gvm.getParentHost();
var hosts = InfraPersistenceUtil.getVMWareHostsByAccountAndHostNode(accountName, hostNode);
var clusterName = hosts[0].getClusterName();
var si = new VCenterConnectionManager(account).getServiceInstance();
var mgr = si.getCustomFieldsManager();
var rootFolder = si.getRootFolder();
logger.addInfo("Gvm = " + gvm);
logger.addInfo("Account Name = " + accountName);
logger.addInfo("Host Node = " + hostNode);
logger.addInfo("Cluster Name = " + clusterName);
logger.addInfo("Root Folder = " + rootFolder);
//
// Moving VM to different folder
//
var vm = new InventoryNavigator(rootFolder).searchManagedEntity("VirtualMachine", gvm.getInstanceId());
var fd= new InventoryNavigator(rootFolder).searchManagedEntity("Folder", folder);
logger.addInfo("FD = " + fd);
if ( fd == null ) {
logger.addInfo("The selected Folder does not exist = " + folder);
logger.addInfo("Please Create folder in vCenter at desired Level = " + folder);
//var fd2 = new InventoryNavigator(rootFolder).searchManagedEntity("Folder", "/root");
//fd2.CreateFolder(folder);
}
else
{
fd.moveIntoFolder_Task([vm]);
}
The Code for the VM annotations:
importPackage(java.util);
importPackage(java.lang);
importPackage(java.io);
importPackage(com.cloupia.lib.util);
importPackage(com.cloupia.model.cIM);
importPackage(com.cloupia.service.cIM.inframgr);
importPackage(org.apache.commons.httpclient);
importPackage(org.apache.commons.httpclient.cookie);
importPackage(org.apache.commons.httpclient.methods);
importPackage(org.apache.commons.httpclient.auth);
importPackage(com.cloupia.model.cEvent.notify);
importPackage(com.cloupia.lib.util.mail);
importPackage(com.cloupia.fw.objstore);
importPackage(com.cloupia.service.cIM.inframgr);
importPackage(com.cloupia.lib.cIaaS.vmware);
importPackage(com.vmware.vim25);
importPackage(com.vmware.vim25.mo);
importPackage(com.cloupia.lib.util.managedreports);
var VMID=input.vmid;
logger.addInfo("VM ID = "+VMID);
var folder=input.folder;
logger.addInfo("Folder = " + folder);
var customName=input.AnnotationsField;
logger.addInfo("Custom Name: "+customName);
var customValue = input.AnnotationsValue;
logger.addInfo("Custom Value: "+customValue);
var gvm = InfraPersistenceUtil.getVMById(VMID);
var accountName = gvm.getAccountName();
var account = InfraPersistenceUtil.getAccount(accountName);
var hostNode = gvm.getParentHost();
var hosts = InfraPersistenceUtil.getVMWareHostsByAccountAndHostNode(accountName, hostNode);
var clusterName = hosts[0].getClusterName();
var si = new VCenterConnectionManager(account).getServiceInstance();
var mgr = si.getCustomFieldsManager();
var rootFolder = si.getRootFolder();
logger.addInfo("Gvm = " + gvm);
logger.addInfo("Account Name = " + accountName);
logger.addInfo("Host Node = " + hostNode);
logger.addInfo("Cluster Name = " + clusterName);
logger.addInfo("Root Folder = " + rootFolder);
//
// VM annotations
//
var vm = new InventoryNavigator(rootFolder).searchManagedEntity("VirtualMachine", gvm.getInstanceId());
var customFieldsVMMap = VMWareUtils.getCustomFieldsVMMap(si);
if(customFieldsVMMap != null && customFieldsVMMap.containsValue(customName))
{
var key = 0;
var fieldSet = customFieldsVMMap.keySet();
var it = fieldSet.iterator();
while(it.hasNext())
{
key = it.next();
var value = customFieldsVMMap.get(key);
if(customName.equals(value)) {
logger.addInfo("Key: "+key);
logger.addInfo("Value: "+value);
break;
}
}
mgr.setField(vm, parseInt(key), customValue);
}
else
{
var def = mgr.addCustomFieldDef(customName, "VirtualMachine", null, null);
mgr.setField(vm, def.getKey(), customValue);
}
VMWareUtils.collectHostorClusterInventory(account.getAccountName(), hostNode, clusterName);
logger.addInfo("Annotation added successfully");
Another example presented by (
(Presented by Jeremy Guthrie (cdw))
If you have a folder structure like:
A\X
B\X
C\X
Example #5 will put the VM into the folder you point it to, e.g. B\X puts the VM int folder B\ folder X using that vmwarefolderidentity type.
Find answers to your questions by entering keywords or phrases in the Search bar above. New here? Use these resources to familiarize yourself with the community: