package org.ow2.choreos.ee.services.preparer;
import org.ow2.choreos.ee.nodes.cm.NodeNotPreparedException;
import org.ow2.choreos.ee.nodes.cm.NodePreparer;
import org.ow2.choreos.ee.nodes.cm.NodePreparers;
import org.ow2.choreos.ee.nodes.cm.NodeUpdater;
import org.ow2.choreos.ee.nodes.cm.NodeUpdaters;
import org.ow2.choreos.ee.nodes.cm.PackageTypeToCookbook;
import org.ow2.choreos.nodes.datamodel.CloudNode;
import org.ow2.choreos.services.datamodel.DeployableService;
import org.ow2.choreos.services.datamodel.DeployableServiceSpec;
import org.ow2.choreos.utils.SshWaiter;
public class InstanceDeploymentPreparer {
private DeployableService service;
private CloudNode node;
private DeployableServiceSpec newSpec;
private String instanceId;
SshWaiter sshWaiter = new SshWaiter();
public InstanceDeploymentPreparer(DeployableServiceSpec newSpec, DeployableService service, CloudNode node) {
this.newSpec = newSpec;
this.service = service;
this.node = node;
}
public void prepareDeployment() throws PrepareDeploymentFailedException {
runDeploymentPrepare();
scheduleHandler();
}
private void runDeploymentPrepare() throws PrepareDeploymentFailedException {
NodePreparer nodePreparer = NodePreparers.getPreparerFor(node);
String packageUri = newSpec.getPackageUri();
String cookbookTemplateName = PackageTypeToCookbook.getCookbookName(newSpec.getPackageType());
try {
instanceId = nodePreparer.prepareNodeForDeployment(packageUri, cookbookTemplateName);
} catch (NodeNotPreparedException e1) {
throw new PrepareDeploymentFailedException(newSpec.getName(), node);
}
}
private void scheduleHandler() {
InstanceCreatorUpdateHandler handler = new InstanceCreatorUpdateHandler(service, instanceId, node);
NodeUpdater nodeUpdater = NodeUpdaters.getUpdaterFor(node);
nodeUpdater.addHandler(handler);
}
}