public boolean scaleOutCluster(ClusterBlueprint blueprint, List<String> addedNodeNames,
ClusterReportQueue reports)
throws SoftwareManagementPluginException {
// TODO Auto-generated method stub
boolean success = false;
AmClusterDef clusterDef = null;
try {
logger.info("Blueprint:");
logger.info(ApiUtils.objectToJson(blueprint));
logger.info("Start cluster " + blueprint.getName() + " scale out.");
clusterDef = new AmClusterDef(blueprint, privateKey);
bootstrap(clusterDef, addedNodeNames, reports);
provisionComponents(clusterDef, addedNodeNames, reports);
success = true;
clusterDef.getCurrentReport().setNodesAction("", addedNodeNames);
clusterDef.getCurrentReport().setNodesStatus(ServiceStatus.STARTED, addedNodeNames);
clusterDef.getCurrentReport().setProgress(
ProgressSplit.PROVISION_SUCCESS.getProgress());
clusterDef.getCurrentReport().setSuccess(true);
} catch (Exception e) {
clusterDef.getCurrentReport().clearAllNodesErrorMsg();
clusterDef.getCurrentReport().setAction("");
clusterDef.getCurrentReport().setNodesError(
"Failed to bootstrap nodes for " + e.getMessage(),
addedNodeNames);
clusterDef.getCurrentReport().setSuccess(false);
String errorMessage = errorMessage("Failed to scale out cluster " + blueprint.getName(), e);
logger.error(errorMessage, e);
throw SoftwareManagementPluginException.SCALE_OUT_CLUSTER_FAILED(e, Constants.AMBARI_PLUGIN_NAME, blueprint.getName());
} finally {
clusterDef.getCurrentReport().setFinished(true);
reportStatus(clusterDef.getCurrentReport(), reports);
}
return success;
}