@Override public boolean isProvidedBy(Provider provider) { return getProvider().equals(provider); }
private List<VM> vmFromAProvider(Provider p){ ArrayList<VM> result=new ArrayList<VM>(); for(VM v : currentModel.getComponents().onlyVMs()){ if(v.getProvider().getName().equals(p.getName())){ result.add(v); } } return result; }
private void provisionVM(VMInstance vmi){ Connector c2=ConnectorFactory.createIaaSConnector(vmi.getType().getProvider()); HashMap<String,Object> result=c2.createInstance(ci); c2.closeConnection(); coordinator.updateStatusInternalComponent(ci.getName(), result.get("status").toString(), CloudAppDeployer.class.getName()); coordinator.updateStatus(vmi.getName(), ComponentInstance.State.RUNNING, CloudAppDeployer.class.getName()); coordinator.updateIP(ci.getName(),result.get("publicAddress").toString(),CloudAppDeployer.class.getName()); } }
public Boolean scaleOut(VMInstance vmi){ Scaler scaler = new Scaler(currentModel, coordinator, this); if(vmi.getType().getProvider().getProperties().get("MaxVMs") != null) { int max = Integer.parseInt(vmi.getType().getProvider().getProperties().valueOf("MaxVMs")); if (nbVMFromProvider(vmi.getType().getProvider()) +1 < max) { scaler.scaleOut(vmi); }else{ if (coordinator != null) { coordinator.ack("MaxVMsReached", this.getClass().getName()); } return false; } }else{ scaler.scaleOut(vmi); } return true; }
private int nbVMFromProvider(Provider p){ int n=0; for(VMInstance v: currentModel.getComponentInstances().onlyVMs()){ if(v.getType().getProvider().equals(p)) n++; } return n; }
public void setEnvVar(VMInstance vmi, String varName, String value){ if (!vmi.getType().getOs().toLowerCase().contains("windows")) { //String command="echo export "+varName+"="+value+" >> ~/.bashrc"; Connector jc = ConnectorFactory.createIaaSConnector(vmi.getType().getProvider()); //jc.execCommand(vmi.getId(), command, "ubuntu", vmi.getType().getPrivateKey()); String command3="sudo sh -c 'echo export "+varName+"="+value+" >> /etc/environment'"; jc.execCommand(vmi.getId(), command3, "ubuntu", vmi.getType().getPrivateKey()); jc.closeConnection(); } else { //TODO: should we do something for Windows as well? } }
/** * Configure a component * * @param jc a connector * @param n A VM type * @param ni a VM instance * @param configurationCommand the command to configure the component, * parameters are: IP IPDest portDest */ protected void configure(Connector jc, VM n, VMInstance ni, String configurationCommand, Boolean keyRequired) { if (!configurationCommand.equals("")) { if(keyRequired) jc.execCommand(ni.getId(), configurationCommand+" "+ni.getType().getProvider().getCredentials().getLogin()+" "+ni.getType().getProvider().getCredentials().getPassword(), "ubuntu", n.getPrivateKey()); else executeCommand(ni, jc, configurationCommand); } }
/** * To initialise a deployment Model as the model of the current system if * the system is already RUNNING * * @param current the current Deployment model */ public void setCurrentModel(Deployment current) { this.currentModel = current; Connector jc; for (VMInstance vm : currentModel.getComponentInstances().onlyVMs()) { if (vm.getPublicAddress().equals("")) { jc = ConnectorFactory.createIaaSConnector(vm.getType().getProvider()); jc.updateVMMetadata(vm); } } }
private void setEnvVar(VMInstance vmi, String cmd){ if (!vmi.getType().getOs().toLowerCase().contains("windows")) { //String command="echo export "+varName+"="+value+" >> ~/.bashrc"; Connector jc = ConnectorFactory.createIaaSConnector(vmi.getType().getProvider()); jc.execCommand(vmi.getId(), cmd, "ubuntu", vmi.getType().getPrivateKey()); jc.closeConnection(); } else { //TODO: should we do something for Windows as well? } }
/** * Terminate a VM * * @param n A VM instance to be terminated * @throws MalformedURLException */ private void terminateVM(VMInstance n) { Provider p = n.getType().getProvider(); Connector jc = ConnectorFactory.createIaaSConnector(p); jc.destroyVM(n.getId()); jc.closeConnection(); coordinator.updateStatus(n.getName(), ComponentInstance.State.STOPPED, CloudAppDeployer.class.getName()); //old way without using mrt //n.setStatusAsStopped(); }
protected void restartHostedComponents(VMInstance ci){ journal.log(Level.INFO, ">> Restarting Hosted components of: "+ci.getName()); for(InternalComponentInstance ici: allHostedComponents(ci)){ Provider p=ci.getType().getProvider(); Connector c2=ConnectorFactory.createIaaSConnector(p); for(Resource r: ici.getType().getResources()){ dep.start(c2,ci.getType(),ci,r.getStartCommand()); } c2.closeConnection(); } }
private void unconfigureWithIP(Resource r, PortInstance<? extends Port> i) { Connector jc; if (r != null) { VMInstance ownerVM = (VMInstance) getDestination(i.getOwner().get()); //TODO: generalize to PaaS VM n = ownerVM.getType(); jc = ConnectorFactory.createIaaSConnector(n.getProvider()); //jc=new JCloudsConnector(n.getProvider().getName(), n.getProvider().getLogin(), n.getProvider().getPasswd()); //jc.execCommand(ownerVM.getId(), r.getStopCommand(), "ubuntu", n.getPrivateKey()); executeCommand(ownerVM, jc, r.getStopCommand()); jc.closeConnection(); } }
private void executeInstallCommand(InternalComponentInstance x, VMInstance owner, Connector jc) { unlessNotNull("Cannot install with an argument at null", x, owner, jc); for (Resource r : x.getType().getResources()) { if (!r.getInstallCommand().equals("")) { if (r.getRequireCredentials()) { jc.execCommand(owner.getId(), CloudMLQueryUtil.cloudmlStringRecover(r.getInstallCommand(), r, x) + " " + owner.getType().getProvider().getCredentials().getLogin() + " " + owner.getType().getProvider().getCredentials().getPassword(), "ubuntu", owner.getType().getPrivateKey()); } else { executeCommand(owner, jc, CloudMLQueryUtil.cloudmlStringRecover(r.getInstallCommand(), r, x)); } } } }
/** * Create the VM described by the given VMInstance object * * @param a */ public void createVM(VMInstance a) { Provider provider = a.getType().getProvider(); JCloudsConnector jc = new JCloudsConnector(provider.getName(), provider.getCredentials().getLogin(), provider.getCredentials().getPassword()); jc.createInstance(a); jc.closeConnection(); }
private static VM fromCloudmlToModaMP(VMInstance toTranslate) { VM toReturn = new VM(); //KB entity field String id = toTranslate.getName(); toReturn.setId(id); toReturn.setType(String.valueOf(toTranslate.getType().getName())); toReturn.setCloudProvider(toTranslate.getType().getProvider().getName()); toReturn.setLocation(toTranslate.getType().getLocation()); toReturn.setNumberOfCPUs(toTranslate.getCore()); return toReturn; } //Translate an internal component from cloudML to Monitoring Platform QoS-model
protected void startImpactedComponents(Set<ComponentInstance> listOfAllComponentImpacted, Map<InternalComponentInstance, InternalComponentInstance> duplicatedGraph){ for(ComponentInstance ici: listOfAllComponentImpacted){ if(ici.isInternal()){ Provider p=ici.asInternal().externalHost().asVM().getType().getProvider(); Connector c2=ConnectorFactory.createIaaSConnector(p); for(Resource r: ici.getType().getResources()){ dep.start(c2,ci.getType(),ici.asInternal().externalHost().asVM(),r.getStartCommand()); } c2.closeConnection(); } coordinator.updateStatusInternalComponent(ici.getName(), InternalComponentInstance.State.RUNNING.toString(), CloudAppDeployer.class.getName()); } for(InternalComponentInstance ici: duplicatedGraph.values()){ coordinator.updateStatusInternalComponent(ici.getName(), InternalComponentInstance.State.RUNNING.toString(), CloudAppDeployer.class.getName()); } }
@Override public void handle(Snapshot command) { if (isDeploymentLoaded()) { dispatch(new Message(command, Category.INFORMATION, "Generating snapshot ...")); VMInstance vmi = deploy.getComponentInstances().onlyVMs().withID(command.getVmId()); Connector c = ConnectorFactory.createIaaSConnector(vmi.getType().getProvider()); c.createSnapshot(vmi); } else { reportNoDeploymentLoaded(command); } }
@Override public void handle(Image command) { if (isDeploymentLoaded()) { dispatch(new Message(command, Category.INFORMATION, "Generating an image ...")); VMInstance vmi = deploy.getComponentInstances().onlyVMs().withID(command.getVmId()); Connector c = ConnectorFactory.createIaaSConnector(vmi.getType().getProvider()); c.createImage(vmi); } else { reportNoDeploymentLoaded(command); } }
public void scaleOut(ResourcePoolInstance resourcePoolInstance, VMInstance vmi){ VM temp = findVMGenerated(vmi.getType().getName(), "fromImage"); Map<InternalComponentInstance, InternalComponentInstance> duplicatedGraph=resourcePoolInstance.replicate(vmi,currentModel); if(temp == null){ Connector c = ConnectorFactory.createIaaSConnector(vmi.getType().getProvider()); String ID=c.createImage(vmi); c.closeConnection(); vmi.getType().setImageId(ID); }else{ vmi.getType().setImageId(temp.getImageId()); } provisionVM(vmi); allConfiguration(duplicatedGraph); journal.log(Level.INFO, ">> Scaling completed!"); }
protected void configureImpactedComponents(Set<ComponentInstance> listOfAllComponentImpacted, Map<InternalComponentInstance, InternalComponentInstance> duplicatedGraph){ for(ComponentInstance ici: listOfAllComponentImpacted){ coordinator.updateStatusInternalComponent(ici.getName(), InternalComponentInstance.State.INSTALLED.toString(), CloudAppDeployer.class.getName()); if(ici.isInternal()){ Provider p=ici.asInternal().externalHost().asVM().getType().getProvider(); Connector c2=ConnectorFactory.createIaaSConnector(p); for(Resource r: ici.getType().getResources()){ dep.configure(c2, ci.getType(), ici.asInternal().externalHost().asVM(), r.getConfigureCommand(),false); } c2.closeConnection(); } coordinator.updateStatusInternalComponent(ici.getName(), InternalComponentInstance.State.CONFIGURED.toString(), CloudAppDeployer.class.getName()); } }