@Override
public Map<String, Object> call() throws Exception {
Map<String, Object> result = new HashMap<String, Object>();
ClusterReportQueue queue = new ClusterReportQueue();
Thread progressThread = null;
ExternalProgressMonitor monitor =
new ExternalProgressMonitor(targetName, queue, statusUpdater,
lockedClusterEntityManager);
progressThread = new Thread(monitor, "ProgressMonitor-" + targetName);
progressThread.setDaemon(true);
progressThread.start();
boolean success = false;
try {
switch(managementOperation) {
case CREATE:
success = softwareManager.createCluster(clusterBlueprint, queue);
break;
case CONFIGURE:
success = softwareManager.reconfigCluster(clusterBlueprint, queue);
break;
case PRE_DESTROY:
if (softwareManager == null) {
logger.warn("Software manager was unavailable when deleting cluster " + clusterBlueprint.getName() + ", will skip it and delete vms forcely");
logger.warn("You may need to delete related resource on software manager server manually.");
success = true;
} else {
success = softwareManager.onDeleteCluster(clusterBlueprint, queue);
}
break;
case DESTROY:
success = softwareManager.deleteCluster(clusterBlueprint, queue);
break;
case START:
success = softwareManager.startCluster(clusterBlueprint, queue);
break;
case STOP:
success = softwareManager.onStopCluster(clusterBlueprint,queue);
break;
case START_NODES:
List<NodeInfo> nodes = new ArrayList<NodeInfo>();
for (NodeGroupInfo group : clusterBlueprint.getNodeGroups()) {
if (group != null) {
for (NodeInfo node : group.getNodes()) {
if (node.getName().equals(targetName)) {
nodes.add(node);
break;
}
}
if (!nodes.isEmpty()) {
break;
}
}
}
success = softwareManager.startNodes(clusterBlueprint.getName(), nodes, queue);
break;
case QUERY:
ClusterReport report = softwareManager.queryClusterStatus(clusterBlueprint);
queue.addClusterReport(report);
success = true;
break;
case RESIZE:
AuAssert.check(chunkContext != null);
List<String> addedNodes = getResizedVmNames(chunkContext, clusterBlueprint);