package dk.kaspergsm.stormdeploy.commands;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Set;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.NodeMetadata.Status;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dk.kaspergsm.stormdeploy.Tools;
import dk.kaspergsm.stormdeploy.configurations.Storm;
public class Attach {
private static Logger log = LoggerFactory.getLogger(Attach.class);
/**
* Attaches to cluster
*/
@SuppressWarnings("unchecked")
public static void attach(String clustername, String stormVersion, ComputeServiceContext computeContext) {
/**
* Parse current running nodes for cluster
*/
ArrayList<NodeMetadata> zkNodes = new ArrayList<NodeMetadata>();
ArrayList<NodeMetadata> workerNodes = new ArrayList<NodeMetadata>();
NodeMetadata nimbus = null;
NodeMetadata ui = null;
for (NodeMetadata n : (Set<NodeMetadata>) computeContext.getComputeService().listNodes()) {
if (n.getStatus() != Status.TERMINATED &&
n.getGroup() != null &&
n.getGroup().toLowerCase().equals(clustername.toLowerCase()) &&
n.getUserMetadata().containsKey("daemons")) {
String daemons = n.getUserMetadata().get("daemons").replace("[", "").replace("]", "");
for (String daemon : daemons.split(",")) {
if (daemon.trim().toLowerCase().equals("master"))
nimbus = n;
if (daemon.trim().toLowerCase().equals("worker"))
workerNodes.add(n);
if (daemon.trim().toLowerCase().equals("zk"))
zkNodes.add(n);
if (daemon.trim().toLowerCase().equals("ui"))
ui = n;
}
}
}
/**
* Update attachment
*/
try {
Storm.writeStormAttachConfigFiles(
Tools.getInstancesIp(zkNodes),
Tools.getInstancesIp(workerNodes),
Tools.getInstanceIp(nimbus),
(ui == null) ? "" : Tools.getInstanceIp(ui),
clustername,
stormVersion);
log.info("Attached to cluster");
} catch (IOException ex) {
log.error("Problem attaching to cluster", ex);
}
}
}