in cloud-vmware-server/src/main/java/jetbrains/buildServer/clouds/vmware/connector/VMWareApiConnectorImpl.java [330:388]
protected Collection<FolderBean> findAllFolders() throws VmwareCheckedCloudException {
final AtomicReference<VmwareCheckedCloudException> exceptionRef = new AtomicReference<>();
final Collection<FolderBean> result = findWithDatacenter(dc -> {
try {
final ObjectContent[] ocs = getObjectContents(dc, new String[][]{{
"Folder", "name", "childType", "parent"
},});
if (ocs == null){
return Stream.empty();
}
final String datacenterId = dc.getMOR().getVal();
return Arrays.stream(ocs).map(oc -> {
try {
final Map<String, Object> mappedProperties = Arrays.stream(oc.getPropSet()).collect(Collectors.toMap(
DynamicProperty::getName, DynamicProperty::getVal
));
final String simpleName = String.valueOf(mappedProperties.get("name"));
final ManagedObjectReference parent = (ManagedObjectReference)mappedProperties.get("parent");
LOG.debug("Found folder with name '" + simpleName + "'. Parent: " + (parent == null ? "null" : parent.toString()));
final String[] childTypes = ((ArrayOfString)mappedProperties.get("childType")).getString();
boolean skip = true;
for (String childType : childTypes) {
if (VM_TYPE.equals(childType)) {
skip = false;
break;
}
}
if (skip) {
LOG.debug("The folder cannot contain VMs. Skipping it...");
return null;
}
final String fullFolderPath = getFullPath(simpleName, oc.obj, parent, dc);
LOG.debug("Calculated path: " + fullFolderPath);
return new FolderBean(oc.obj,
simpleName,
fullFolderPath,
childTypes,
parent,
datacenterId
);
} catch (Exception ex) {
LOG.warnAndDebugDetails("Error getting folder details", ex);
return null;
}
});
} catch (RemoteException e) {
LOG.warnAndDebugDetails("An error occurred while searching for all folders", e);
exceptionRef.set(new VmwareCheckedCloudException(e));
return Stream.empty();
}
});
return result;
}