/*
* Copyright (c) 2013 Technische Universitat Wien (TUW), Distributed Systems Group. http://dsg.tuwien.ac.at
*
* This work was partially supported by the European Commission in terms of the CELAR FP7 project (FP7-ICT-2011-8 #317790), http://www.celarcloud.eu/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package at.ac.tuwien.dsg.cloud.salsa.cloudconnector.multiclouds;
import java.io.File;
import java.util.Arrays;
import org.slf4j.Logger;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.CloudInterface;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.CloudParameter;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.CloudParametersUser;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.InstanceDescription;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.localhost.LocalhostConnector;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.openstack.OpenStackJcloud;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.openstack.OpenStackParameterStrings;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.stratuslab.StratusLabConnector;
import at.ac.tuwien.dsg.cloud.salsa.cloudconnector.stratuslab.StratuslabParameterStrings;
// support
//@Component
public class MultiCloudConnector {
//@Value("${cloudconnector.user}")
String username;
Logger logger;
CloudInterface connector;
CloudParametersUser paramUser;
public MultiCloudConnector(Logger logger, File configFile) {
this.logger = logger;
paramUser = new CloudParametersUser(configFile);
}
public CloudInterface getCloudInplementation(SalsaCloudProviders provider) {
CloudInterface cloud;
try {
switch (provider) {
case DSG_OPENSTACK: {
CloudParameter param = paramUser.getParameter("dsg", "openstack");
String keystone_endpoint = param.getParameter(OpenStackParameterStrings.KEYSTONE_ENDPOINT);
String tenant = param.getParameter(OpenStackParameterStrings.TENANT);
String username = param.getParameter(OpenStackParameterStrings.USERNAME);
String password = param.getParameter(OpenStackParameterStrings.PASSWORD);
String keyName = param.getParameter(OpenStackParameterStrings.SSH_KEY_NAME);
String accesskey=param.getParameter(OpenStackParameterStrings.ACCESS_KEY);
logger.info("Connection info: " + accesskey +", " + keystone_endpoint + ", " + tenant + ", " + username + ", " + password + ", " + keyName );
cloud = new OpenStackJcloud(logger, keystone_endpoint, tenant, username, password, keyName);
break;
}
case LAL_STRATUSLAB:
{
CloudParameter param1 = paramUser.getParameter("lal", "stratuslab");
String user_public_key_file = param1.getParameter(StratuslabParameterStrings.user_public_key_file);
if (user_public_key_file==null || user_public_key_file.equals("")){
user_public_key_file = MultiCloudConnector.class.getResource("/id_rsa_hung.pub").getFile();
}
cloud = new StratusLabConnector(
logger,
param1.getParameter(StratuslabParameterStrings.endpoint),
param1.getParameter(StratuslabParameterStrings.pdisk_endpoint),
param1.getParameter(StratuslabParameterStrings.username),
param1.getParameter(StratuslabParameterStrings.password),
user_public_key_file,
param1.getParameter(StratuslabParameterStrings.client_path));
System.out.println(param1.getParameter(StratuslabParameterStrings.endpoint)
+ " - " + param1.getParameter(StratuslabParameterStrings.pdisk_endpoint)
+ " - " + param1.getParameter(StratuslabParameterStrings.username)
+ " - " + param1.getParameter(StratuslabParameterStrings.password)
+ " - " + user_public_key_file);
break;
}
case LOCALHOST:
{
cloud = new LocalhostConnector(logger);
break;
}
default:
logger.error("Undefined Cloud Connector !");
cloud = null;
break;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return cloud;
}
// launch an instance on a provider and return an InstanceDescription
public InstanceDescription launchInstance(String instancename, SalsaCloudProviders provider,
String imageId, String sshKeyName, String userData,
String instType, int minInst, int maxInst) {
CloudInterface cloud = getCloudInplementation(provider);
try {
if (cloud != null) {
String newInstance = cloud.launchInstance(instancename, imageId,
Arrays.asList("default"), sshKeyName, userData,
instType, minInst, maxInst);
InstanceDescription id = cloud
.getInstanceDescriptionByID(newInstance);
return id;
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public void removeInstance(SalsaCloudProviders provider, String instanceId) {
CloudInterface cloud = getCloudInplementation(provider);
try {
cloud.removeInstance(instanceId);
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}