@@ -82,6 +82,49 @@ public VirtualMachineMO findVm(String vmName) throws Exception {
8282 List <ObjectContent > ocs = getVmProperties (new String [] {"name" , instanceNameCustomField });
8383 return HypervisorHostHelper .findVmFromObjectContent (_context , ocs .toArray (new ObjectContent [0 ]), vmName , instanceNameCustomField );
8484 }
85+ public VirtualMachineMO findVm2 (String vmName ) throws Exception {
86+ int key = getCustomFieldKey ("VirtualMachine" , CustomFieldConstants .CLOUD_VM_INTERNAL_NAME );
87+ if (key == 0 ) {
88+ logger .warn ("Custom field " + CustomFieldConstants .CLOUD_VM_INTERNAL_NAME + " is not registered ?!" );
89+ }
90+ String instanceNameCustomField = "value[" + key + "]" ;
91+ List <ObjectContent > ocs = getVmPropertiesOnDatacenterVmFolder (new String [] {"name" , instanceNameCustomField });
92+ return HypervisorHostHelper .findVmFromObjectContent (_context , ocs .toArray (new ObjectContent [0 ]), vmName , instanceNameCustomField );
93+ }
94+
95+ public List <ObjectContent > getVmPropertiesOnDatacenterVmFolder (String [] propertyPaths ) throws Exception {
96+ PropertySpec pSpec = new PropertySpec ();
97+ pSpec .setType ("VirtualMachine" );
98+ pSpec .getPathSet ().addAll (Arrays .asList (propertyPaths ));
99+
100+ TraversalSpec dc2VmFolderTraversal = new TraversalSpec ();
101+ dc2VmFolderTraversal .setType ("Datacenter" );
102+ dc2VmFolderTraversal .setPath ("vmFolder" );
103+ dc2VmFolderTraversal .setName ("dc2VmFolderTraversal" );
104+
105+ SelectionSpec recurseFolders = new SelectionSpec ();
106+ recurseFolders .setName ("folder2childEntity" );
107+
108+ TraversalSpec folder2childEntity = new TraversalSpec ();
109+ folder2childEntity .setType ("Folder" );
110+ folder2childEntity .setPath ("childEntity" );
111+ folder2childEntity .setName (recurseFolders .getName ());
112+ folder2childEntity .getSelectSet ().add (recurseFolders );
113+ dc2VmFolderTraversal .getSelectSet ().add (folder2childEntity );
114+
115+ ObjectSpec oSpec = new ObjectSpec ();
116+ oSpec .setObj (_mor );
117+ oSpec .setSkip (Boolean .TRUE );
118+ oSpec .getSelectSet ().add (dc2VmFolderTraversal );
119+
120+ PropertyFilterSpec pfSpec = new PropertyFilterSpec ();
121+ pfSpec .getPropSet ().add (pSpec );
122+ pfSpec .getObjectSet ().add (oSpec );
123+ List <PropertyFilterSpec > pfSpecArr = new ArrayList <PropertyFilterSpec >();
124+ pfSpecArr .add (pfSpec );
125+
126+ return _context .getService ().retrieveProperties (_context .getPropertyCollector (), pfSpecArr );
127+ }
85128
86129 public List <VirtualMachineMO > findVmByNameAndLabel (String vmLabel ) throws Exception {
87130 CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO (_context , _context .getServiceContent ().getCustomFieldsManager ());
0 commit comments