You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sm...@apache.org on 2016/04/15 21:31:01 UTC

[1/2] airavata git commit: Adding the cloud-provisioning project

Repository: airavata
Updated Branches:
  refs/heads/develop fa2c064e5 -> 975edba02


Adding the cloud-provisioning project


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/975edba0
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/975edba0
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/975edba0

Branch: refs/heads/develop
Commit: 975edba02f87e52fa036cf6f6d21231888e44ced
Parents: 232d346
Author: Mangirish Wagle <va...@gmail.com>
Authored: Tue Apr 12 00:40:12 2016 -0400
Committer: Suresh Marru <sm...@apache.org>
Committed: Fri Apr 15 15:29:57 2016 -0400

----------------------------------------------------------------------
 modules/cloud/cloud-provisioning/README         |   7 +
 modules/cloud/cloud-provisioning/pom.xml        |  52 ++++++
 .../airavata/cloud/intf/CloudInterface.java     |  72 ++++++++
 .../cloud/intf/impl/OpenstackIntfImpl.java      | 172 +++++++++++++++++++
 .../cloud/openstack/OS4JClientProvider.java     | 117 +++++++++++++
 .../apache/airavata/cloud/util/CloudRef.java    |  40 +++++
 .../apache/airavata/cloud/util/Constants.java   |  34 ++++
 .../main/resources/jetstream_openrc.properties  |  29 ++++
 .../airavata/cloud/test/CloudIntfTest.java      | 118 +++++++++++++
 .../src/test/resources/test_data.properties     |  27 +++
 10 files changed, 668 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/README
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/README b/modules/cloud/cloud-provisioning/README
new file mode 100644
index 0000000..1b161a0
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/README
@@ -0,0 +1,7 @@
+This is the initial project created as an interface to various clouds.
+Currently supporting, Openstack on Jetstream using Openstack4j.
+
+To Test Run:-
+1) Replace the credentials in src/main/resources/jetstream_openrc.properties with the Jetstream credentials.
+2) Update the publicKeyFile, jetstream_imageId, jetstream_flavorId and jetstream_networkId to the local path in src/test/resources/test_data.properties. This are the parameters used by the unit tests.
+3) Run JUnit Test org.apache.airavata.cloud.test.CloudIntfTest.

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/pom.xml
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/pom.xml b/modules/cloud/cloud-provisioning/pom.xml
new file mode 100644
index 0000000..0554f0c
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/pom.xml
@@ -0,0 +1,52 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.apache.airavata.cloud</groupId>
+	<artifactId>cloud-provisioning</artifactId>
+	<version>0.0.1</version>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.pacesys</groupId>
+			<artifactId>openstack4j</artifactId>
+			<version>2.0.9</version>
+			<classifier>withdeps</classifier>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-api</artifactId>
+			<version>1.7.21</version>
+		</dependency>
+		<dependency>
+			<groupId>org.slf4j</groupId>
+			<artifactId>slf4j-simple</artifactId>
+			<version>1.7.21</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<directory>target</directory>
+		<outputDirectory>target/classes</outputDirectory>
+		<finalName>${project.artifactId}-${project.version}</finalName>
+		<testOutputDirectory>target/test-classes</testOutputDirectory>
+		<sourceDirectory>src/main/java</sourceDirectory>
+		<testSourceDirectory>src/test/java</testSourceDirectory>
+		<resources>
+			<resource>
+				<directory>src/main/resources</directory>
+			</resource>
+		</resources>
+		<testResources>
+			<testResource>
+				<directory>src/test/resources</directory>
+			</testResource>
+		</testResources>
+		<plugins>
+		</plugins>
+	</build>
+</project>

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/CloudInterface.java
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/CloudInterface.java b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/CloudInterface.java
new file mode 100644
index 0000000..f9d9520
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/CloudInterface.java
@@ -0,0 +1,72 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.airavata.cloud.intf;
+
+import org.openstack4j.model.compute.Keypair;
+import org.openstack4j.model.compute.Server;
+
+public interface CloudInterface {
+
+	/**
+	 * Method to create Server.
+	 * @param serverName
+	 * @param imageId
+	 * @param flavorId
+	 * @param networkId
+	 * @param keyPairName
+	 * @return Server object.
+	 */
+	public Server createServer(String serverName, String imageId, String flavorId, String networkId, String keyPairName);
+
+	/**
+	 * Returns the Server object pertaining to the serverId.
+	 * @param serverId
+	 * @return
+	 */
+	public Server getServer(String serverId);
+
+	/**
+	 * Method to delete Server.
+	 * @param serverId
+	 * @return
+	 */
+	public void deleteServer(String serverId);
+
+	/**
+	 * Creates a public key pair on the cloud
+	 * @param publicKey
+	 */
+	public Keypair createKeyPair(String keyPairName, String publicKey);
+
+	/**
+	 * Returns the keypair object associated to the keyPairName.
+	 * @param keyPairName
+	 * @return
+	 */
+	public Keypair getKeyPair(String keyPairName);
+
+	/**
+	 * Deletes a public key pair on the cloud
+	 * @param publicKey
+	 */
+	public void deleteKeyPair(String keyPairName);
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/impl/OpenstackIntfImpl.java
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/impl/OpenstackIntfImpl.java b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/impl/OpenstackIntfImpl.java
new file mode 100644
index 0000000..cb202c4
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/intf/impl/OpenstackIntfImpl.java
@@ -0,0 +1,172 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.airavata.cloud.intf.impl;
+
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Properties;
+
+import org.apache.airavata.cloud.intf.CloudInterface;
+import org.apache.airavata.cloud.openstack.OS4JClientProvider;
+import org.openstack4j.api.Builders;
+import org.openstack4j.api.OSClient;
+import org.openstack4j.model.compute.Keypair;
+import org.openstack4j.model.compute.Server;
+import org.openstack4j.model.compute.ServerCreate;
+
+public class OpenstackIntfImpl implements CloudInterface {
+
+	/** The properties. */
+	private String propertiesFile;
+	private Properties properties;
+
+	OSClient os = null;
+
+	/**
+	 * Default Constructor
+	 * Initializing the properties.
+	 */
+	public OpenstackIntfImpl(String propFile) {
+		try {
+
+			this.propertiesFile = propFile;
+			InputStream inputStream = getClass().getClassLoader()
+					.getResourceAsStream(propertiesFile);
+
+			if(inputStream != null) {
+				properties = new Properties();
+				properties.load(inputStream);
+			}
+			else {
+				throw new FileNotFoundException("property file: " + propertiesFile + " not found!");
+			}
+
+			// Initialize the OSClient.
+			os = OS4JClientProvider.getOSClient(properties);
+		}
+		catch(Exception ex) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+		}
+	}
+
+	@Override
+	public Server createServer(String serverName, String imageId, String flavorId, String networkId, String keyPairName) {
+		try {
+
+
+			List<String> srvNet = new LinkedList<String>();
+			srvNet.add(networkId);
+
+			ServerCreate sc = Builders.server()
+					.name(serverName)
+					.flavor(flavorId)
+					.image(imageId)
+					.networks(srvNet)
+					.keypairName(keyPairName)
+					.addPersonality("/etc/motd", "Welcome to the new VM! Restricted access only")
+					.build();
+
+			//Boot the Server
+			Server newServer = os.compute().servers().boot(sc);
+
+			return newServer;
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+			return null;
+		}
+	}
+
+	@Override
+	public Server getServer(String serverId) {
+		try {
+
+			Server server = os.compute().servers().get(serverId);
+
+			return server;
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+			return null;
+		}
+	}
+
+	@Override
+	public void deleteServer(String serverId) {
+		try {
+
+			os.compute().servers().delete(serverId);
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+		}
+	}
+
+	@Override
+	public Keypair createKeyPair(String keyPairName, String publicKey) {
+		try {
+
+			Keypair keyp = os.compute().keypairs().create(keyPairName, publicKey);
+
+			return keyp;
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+			return null;
+		}
+	}
+
+	@Override
+	public Keypair getKeyPair(String keyPairName) {
+		try {
+
+			Keypair keyp = os.compute().keypairs().get(keyPairName);
+
+			return keyp;
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+			return null;
+		}
+	}
+
+	@Override
+	public void deleteKeyPair(String keyPairName) {
+		try {
+
+			os.compute().keypairs().delete(keyPairName);
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+		}
+	}
+
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/openstack/OS4JClientProvider.java
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/openstack/OS4JClientProvider.java b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/openstack/OS4JClientProvider.java
new file mode 100644
index 0000000..394d1bf
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/openstack/OS4JClientProvider.java
@@ -0,0 +1,117 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.airavata.cloud.openstack;
+
+import java.util.Properties;
+
+import org.apache.airavata.cloud.util.Constants;
+import org.openstack4j.api.OSClient;
+import org.openstack4j.model.common.Identifier;
+import org.openstack4j.openstack.OSFactory;
+
+public class OS4JClientProvider {
+
+	private static OSClient os = null;
+	private static Integer apiVersion = null;
+
+
+	public static OSClient getOSClient(Properties properties) {
+
+		try {
+			String endPoint = properties.getProperty(Constants.OS_AUTH_URL);
+			String userName = properties.getProperty(Constants.OS_USERNAME);
+			String password = properties.getProperty(Constants.OS_PASSWORD);
+			String domain = properties.getProperty(Constants.OS_USER_DOMAIN_NAME);
+			String apiVersion = properties.getProperty(Constants.OS_IDENTITY_API_VERSION);
+
+			// Initialize client for api version 3.
+			if( apiVersion.equals("3") ) {
+				String project = properties.getProperty(Constants.OS_PROJECT_DOMAIN_NAME);
+				getOSClientV3(endPoint, userName, password, domain, project);
+			}
+			// Initialize client for api version 2.
+			else if( apiVersion.equals("2") ) {
+				getOSClientV2(endPoint, userName, password, domain);
+			}
+			else {
+				throw new Exception("Non- supported Openstack API version " + properties.getProperty("OS_IDENTITY_API_VERSION"));
+			}
+		}
+		catch(Exception ex) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+		}
+		return os;
+	}
+
+	/**
+	 * Function that authenticates to openstack using v3 APIs.
+	 * @param endPoint
+	 * @param userName
+	 * @param password
+	 * @param domain
+	 * @param project
+	 * @return OSClient object that can be used for other OpenStack operations.
+	 */
+	public static void getOSClientV3(String endPoint, String userName, String password,
+			String domain, String project) {
+
+		if(os == null || apiVersion == null ||apiVersion != 3 || ! os.getEndpoint().equals(endPoint)) {
+
+			Identifier domainIdentifier = Identifier.byName(domain);
+			Identifier projectIdentifier = Identifier.byName(project);
+			os = OSFactory.builderV3()
+					.scopeToProject(projectIdentifier, domainIdentifier)
+					.endpoint(endPoint)
+					.credentials(userName, password, domainIdentifier)
+					.authenticate();
+
+			apiVersion = 3;
+		}
+	}
+
+	/**
+	 * Function that authenticates to openstack using v2 APIs.
+	 * @param endPoint
+	 * @param userName
+	 * @param password
+	 * @param domain
+	 * @param project
+	 * @return OSClient object that can be used for other Openstack operations.
+	 */
+	public static void getOSClientV2(String endPoint, String userName, String password,
+			String domain) {
+
+		if(os == null || apiVersion == null ||apiVersion != 2 || ! os.getEndpoint().equals(endPoint)) {
+
+			Identifier domainIdentifier = Identifier.byName(domain);
+			//Identifier projectIdentifier = Identifier.byName(project);
+			os = OSFactory.builderV3()
+					//.scopeToProject(projectIdentifier, domainIdentifier)
+					.endpoint(endPoint)
+					.credentials(userName, password, domainIdentifier)
+					.authenticate();
+
+			apiVersion = 2;
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/CloudRef.java
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/CloudRef.java b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/CloudRef.java
new file mode 100644
index 0000000..e2a7c36
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/CloudRef.java
@@ -0,0 +1,40 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.airavata.cloud.util;
+
+public enum CloudRef {
+
+	JETSTREAM("jetstream"),
+	AMAZON("amazon"),
+	COMET("comet");
+
+	String cloudType;
+
+	private CloudRef(String type) {
+		this.cloudType = type;
+	}
+
+	@Override
+	public String toString() {
+		return this.cloudType;
+	}
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/Constants.java
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/Constants.java b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/Constants.java
new file mode 100644
index 0000000..275a0e7
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/main/java/org/apache/airavata/cloud/util/Constants.java
@@ -0,0 +1,34 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with tproperties.getProperty("OS_PROJECT_DOMAIN_NAME")his work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.airavata.cloud.util;
+
+public class Constants {
+
+	// OpenStack openrc string constants.
+	public static final String OS_AUTH_URL = "OS_AUTH_URL";
+	public static final String OS_IDENTITY_API_VERSION = "OS_IDENTITY_API_VERSION";
+	public static final String OS_USERNAME = "OS_USERNAME";
+	public static final String OS_PASSWORD = "OS_PASSWORD";
+	public static final String OS_USER_DOMAIN_NAME = "OS_USER_DOMAIN_NAME";
+	public static final String OS_PROJECT_DOMAIN_NAME = "OS_PROJECT_DOMAIN_NAME";
+
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/main/resources/jetstream_openrc.properties
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/main/resources/jetstream_openrc.properties b/modules/cloud/cloud-provisioning/src/main/resources/jetstream_openrc.properties
new file mode 100644
index 0000000..9487bc1
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/main/resources/jetstream_openrc.properties
@@ -0,0 +1,29 @@
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+# Authentication properties
+OS_PROJECT_DOMAIN_NAME=scigap
+OS_USER_DOMAIN_NAME=tacc
+OS_PROJECT_NAME=scigap
+OS_TENANT_NAME=scigap
+OS_USERNAME=scigap
+OS_PASSWORD=xxxxxxxx
+OS_AUTH_URL=https://jblb.jetstream-cloud.org:35357/v3
+OS_IDENTITY_API_VERSION=3

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/test/java/org/apache/airavata/cloud/test/CloudIntfTest.java
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/test/java/org/apache/airavata/cloud/test/CloudIntfTest.java b/modules/cloud/cloud-provisioning/src/test/java/org/apache/airavata/cloud/test/CloudIntfTest.java
new file mode 100644
index 0000000..71a8a53
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/test/java/org/apache/airavata/cloud/test/CloudIntfTest.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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 org.apache.airavata.cloud.test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.util.Properties;
+import java.util.Scanner;
+
+import org.apache.airavata.cloud.intf.CloudInterface;
+import org.apache.airavata.cloud.intf.impl.OpenstackIntfImpl;
+import org.junit.Test;
+import org.openstack4j.model.compute.Keypair;
+import org.openstack4j.model.compute.Server;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CloudIntfTest {
+
+	/** The properties. */
+	private String propertiesFile = "test_data.properties";
+	private Properties properties;
+
+	// Initializing Logger
+	private Logger logger = LoggerFactory.getLogger(CloudIntfTest.class);
+
+	public CloudIntfTest() {
+		try {
+
+			InputStream inputStream = getClass().getClassLoader()
+					.getResourceAsStream(propertiesFile);
+
+			if(inputStream != null) {
+				properties = new Properties();
+				properties.load(inputStream);
+			}
+			else {
+				throw new FileNotFoundException("property file: " + propertiesFile + " not found!");
+			}
+
+		}
+		catch(Exception ex) {
+			ex.printStackTrace();
+			// TODO: Check with the team on how to handle exceptions.
+		}
+	}
+
+	/**
+	 * Test that will create keypair, create server with keypair, delete server, delete keypair.
+	 */
+	@Test
+	public void jetstreamCreateDeleteServerTest() {
+		try {
+			CloudInterface cloudIntf = new OpenstackIntfImpl("jetstream_openrc.properties");
+			// Sample data. This can be determined by the inputs from Airavata.
+			String imageId = properties.getProperty("jetstream_imageId");
+			String flavorId = properties.getProperty("jetstream_flavorId");
+			String networkId = properties.getProperty("jetstream_networkId");
+
+			/* Create Keypair */
+			String publicKeyFile = properties.getProperty("publicKeyFile");
+			String keyPairName = "testKey";
+
+			Scanner fileScan = new Scanner(new FileInputStream(publicKeyFile));
+			String publicKey = fileScan.nextLine();
+
+			Keypair kp = cloudIntf.getKeyPair(keyPairName);
+			if(kp == null) {
+				kp = cloudIntf.createKeyPair(keyPairName, publicKey);
+			}
+
+			logger.info("Keypair created/ retrieved: " + kp.getFingerprint());
+
+			/* Create Server */
+			Server newServer = cloudIntf.createServer("AiravataTest", imageId, flavorId, networkId, kp.getName());
+			logger.info("Server Created: " + newServer.getId());
+
+			/* Delete Server */
+			cloudIntf.deleteServer(newServer.getId());
+			logger.info("Server deleted: " + newServer.getId());
+
+			Server deleted = cloudIntf.getServer(newServer.getId());
+
+			/* Delete Keypair */
+			cloudIntf.deleteKeyPair(kp.getName());
+			logger.info("Keypair deleted: " + kp.getName());
+
+			assertTrue(newServer != null && deleted == null);
+		}
+		catch( Exception ex ) {
+			ex.printStackTrace();
+			fail();
+		}
+	}
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/975edba0/modules/cloud/cloud-provisioning/src/test/resources/test_data.properties
----------------------------------------------------------------------
diff --git a/modules/cloud/cloud-provisioning/src/test/resources/test_data.properties b/modules/cloud/cloud-provisioning/src/test/resources/test_data.properties
new file mode 100644
index 0000000..2ebf7c7
--- /dev/null
+++ b/modules/cloud/cloud-provisioning/src/test/resources/test_data.properties
@@ -0,0 +1,27 @@
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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.
+#
+
+# Common properties
+publicKeyFile=/path/id_rsa.pub
+
+# Jetstream properties
+jetstream_imageId=7048bb41-bbbbb-4caa-9370-xxxxxxxxxxx
+jetstream_flavorId=3
+jetstream_networkId=4367cd20-cccc-4dc2-97e8-kkkkkkkkkkk


[2/2] airavata git commit: excluding mysql from distribution

Posted by sm...@apache.org.
excluding mysql from distribution


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/232d346a
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/232d346a
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/232d346a

Branch: refs/heads/develop
Commit: 232d346ac3bafa93672e14601c2f2468802999ab
Parents: fa2c064
Author: Suresh Marru <sm...@apache.org>
Authored: Tue Mar 22 16:10:39 2016 -0400
Committer: Suresh Marru <sm...@apache.org>
Committed: Fri Apr 15 15:29:57 2016 -0400

----------------------------------------------------------------------
 distribution/src/main/assembly/bin-assembly.xml | 223 ++++++++++---------
 1 file changed, 113 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/232d346a/distribution/src/main/assembly/bin-assembly.xml
----------------------------------------------------------------------
diff --git a/distribution/src/main/assembly/bin-assembly.xml b/distribution/src/main/assembly/bin-assembly.xml
index 8650793..b9146d5 100644
--- a/distribution/src/main/assembly/bin-assembly.xml
+++ b/distribution/src/main/assembly/bin-assembly.xml
@@ -26,89 +26,89 @@
         <!ELEMENT dependencySet (outputDirectory|outputFileNameMapping|includes)*>
         ]>
 <assembly>
-	<id>bin</id>
-	<includeBaseDirectory>true</includeBaseDirectory>
-	<baseDirectory>${archieve.name}-${version}</baseDirectory>
-	<formats>
-		<format>tar.gz</format>
-		<format>zip</format>
-	</formats>
+    <id>bin</id>
+    <includeBaseDirectory>true</includeBaseDirectory>
+    <baseDirectory>${archieve.name}-${version}</baseDirectory>
+    <formats>
+        <format>tar.gz</format>
+        <format>zip</format>
+    </formats>
 
-	<fileSets>
+    <fileSets>
 
-		<!-- ********************** copy release notes files ********************** -->
-		<fileSet>
-			<directory>../../../</directory>
-			<outputDirectory>.</outputDirectory>
-			<includes>
-				<include>RELEASE_NOTES</include>
-			</includes>
-		</fileSet>
-		<!-- ********************** copy licenses, readme etc. ********************** -->
-		<fileSet>
-			<directory>src/main/resources/</directory>
-			<outputDirectory>.</outputDirectory>
-			<includes>
-				<include>LICENSE</include>
-				<include>NOTICE</include>
-				<include>README</include>
-				<include>INSTALL</include>
-			</includes>
-		</fileSet>
+        <!-- ********************** copy release notes files ********************** -->
+        <fileSet>
+            <directory>../../../</directory>
+            <outputDirectory>.</outputDirectory>
+            <includes>
+                <include>RELEASE_NOTES</include>
+            </includes>
+        </fileSet>
+        <!-- ********************** copy licenses, readme etc. ********************** -->
+        <fileSet>
+            <directory>src/main/resources/</directory>
+            <outputDirectory>.</outputDirectory>
+            <includes>
+                <include>LICENSE</include>
+                <include>NOTICE</include>
+                <include>README</include>
+                <include>INSTALL</include>
+            </includes>
+        </fileSet>
 
-		<!-- ********************** copy database scripts ********************** -->
-		<fileSet>
-			<directory>../modules/registry/registry-core/src/main/resources/
-			</directory>
-			<outputDirectory>bin/database_scripts
-			</outputDirectory>
-			<includes>
-				<include>*sql*</include>
-			</includes>
-		</fileSet>
-		<fileSet>
-			<directory>src/main/resources/bin</directory>
-			<outputDirectory>bin</outputDirectory>
-			<fileMode>777</fileMode>
-			<includes>
-				<include>*.sh</include>
-				<include>*.bat</include>
-				<include>logo.txt</include>
-				<include>startNetworkServer</include>
-			</includes>
-		</fileSet>
-		<fileSet>
-			<directory>src/main/resources/samples</directory>
-			<outputDirectory>samples</outputDirectory>
-			<fileMode>777</fileMode>
-			<includes>
-				<include>*.sh</include>
-				<include>**/*.sh</include>
-			</includes>
-		</fileSet>
-		<fileSet>
-			<directory>${project.build.directory}/conf</directory>
-			<outputDirectory>bin</outputDirectory>
-			<includes>
-				<include>airavata-server.properties</include>
-				<include>zoo.cfg</include>
-				<include>registry.properties</include>
-				<include>log4j.properties</include>
-				<include>host.xml</include>
-				<include>persistence.xml</include>
-				<include>provenance.sql</include>
-				<include>gfac-config.yaml</include>
-				<include>PBSTemplate.xslt</include>
-				<include>SLURMTemplate.xslt</include>
-				<include>LSFTemplate.xslt</include>
-				<include>UGETemplate.xslt</include>
-				<include>ForkTemplate.xslt</include>
-				<include>gsissh.properties</include>
-				<include>airavata.jks</include>
-				<include>client_truststore.jks</include>
-				<include>airavata-default-xacml-policy.xml</include>
-			</includes>
-		</fileSet>
+        <!-- ********************** copy database scripts ********************** -->
+        <fileSet>
+            <directory>../modules/registry/registry-core/src/main/resources/
+            </directory>
+            <outputDirectory>bin/database_scripts
+            </outputDirectory>
+            <includes>
+                <include>*sql*</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/resources/bin</directory>
+            <outputDirectory>bin</outputDirectory>
+            <fileMode>777</fileMode>
+            <includes>
+                <include>*.sh</include>
+                <include>*.bat</include>
+                <include>logo.txt</include>
+                <include>startNetworkServer</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>src/main/resources/samples</directory>
+            <outputDirectory>samples</outputDirectory>
+            <fileMode>777</fileMode>
+            <includes>
+                <include>*.sh</include>
+                <include>**/*.sh</include>
+            </includes>
+        </fileSet>
+        <fileSet>
+            <directory>${project.build.directory}/conf</directory>
+            <outputDirectory>bin</outputDirectory>
+            <includes>
+                <include>airavata-server.properties</include>
+                <include>zoo.cfg</include>
+                <include>registry.properties</include>
+                <include>log4j.properties</include>
+                <include>host.xml</include>
+                <include>persistence.xml</include>
+                <include>provenance.sql</include>
+                <include>gfac-config.yaml</include>
+                <include>PBSTemplate.xslt</include>
+                <include>SLURMTemplate.xslt</include>
+                <include>LSFTemplate.xslt</include>
+                <include>UGETemplate.xslt</include>
+                <include>ForkTemplate.xslt</include>
+                <include>gsissh.properties</include>
+                <include>airavata.jks</include>
+                <include>client_truststore.jks</include>
+                <include>airavata-default-xacml-policy.xml</include>
+            </includes>
+        </fileSet>
 
         <!-- Create logs directory -->
         <fileSet>
@@ -119,39 +119,42 @@
             </excludes>
         </fileSet>
 
-		<!-- ********************** Copy samples ********************** -->
-		<fileSet>
-			<directory>${project.build.directory}/samples/applications
-			</directory>
-			<outputDirectory>samples</outputDirectory>
-			<includes>
-				<include>*.sh</include>
-				<include>*.bat</include>
-			</includes>
-		</fileSet>
+        <!-- ********************** Copy samples ********************** -->
+        <fileSet>
+            <directory>${project.build.directory}/samples/applications
+            </directory>
+            <outputDirectory>samples</outputDirectory>
+            <includes>
+                <include>*.sh</include>
+                <include>*.bat</include>
+            </includes>
+        </fileSet>
 
-	</fileSets>
+    </fileSets>
 
-	<dependencySets>
-		<dependencySet>
-			<useProjectArtifact>false</useProjectArtifact>
-			<outputDirectory>lib</outputDirectory>
-			<outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
-			<includes>
-				<include>org.apache.derby:derby:jar</include>
-				<include>org.apache.derby:derbytools:jar</include>
-				<include>org.apache.derby:derbynet:jar</include>
-				<include>org.apache.derby:derbyclient:jar</include>
-			</includes>
-		</dependencySet>
-		<dependencySet>
-			<useProjectArtifact>false</useProjectArtifact>
-			<outputDirectory>lib</outputDirectory>
-			<includes>
-				<include>*:*:jar</include>
+    <dependencySets>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <outputDirectory>lib</outputDirectory>
+            <outputFileNameMapping>${artifact.artifactId}.${artifact.extension}</outputFileNameMapping>
+            <includes>
+                <include>org.apache.derby:derby:jar</include>
+                <include>org.apache.derby:derbytools:jar</include>
+                <include>org.apache.derby:derbynet:jar</include>
+                <include>org.apache.derby:derbyclient:jar</include>
             </includes>
-		</dependencySet>
+        </dependencySet>
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <outputDirectory>lib</outputDirectory>
+            <includes>
+                <include>*:*:jar</include>
+            </includes>
+            <excludes>
+                <exclude>mysql:mysql-connector-java</exclude>
+            </excludes>
+        </dependencySet>
 
-	</dependencySets>
+    </dependencySets>
 
 </assembly>