Repository: jclouds-examples Updated Branches: refs/heads/master 22c5bdffe -> 46f452dda
The start of examples for OpenStack Project: http://git-wip-us.apache.org/repos/asf/jclouds-examples/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-examples/commit/46f452dd Tree: http://git-wip-us.apache.org/repos/asf/jclouds-examples/tree/46f452dd Diff: http://git-wip-us.apache.org/repos/asf/jclouds-examples/diff/46f452dd Branch: refs/heads/master Commit: 46f452ddad40078572a0b926505b36b38942f543 Parents: 22c5bdf Author: Everett Toews <[email protected]> Authored: Tue Sep 2 15:05:36 2014 -0500 Committer: Everett Toews <[email protected]> Committed: Thu Sep 4 15:54:07 2014 -0500 ---------------------------------------------------------------------- .gitignore | 4 +- openstack/README.md | 64 ++++++++++ openstack/pom.xml | 97 ++++++++++++++ .../openstack/identity/CreateTenantAndUser.java | 125 +++++++++++++++++++ openstack/src/main/resources/logback.xml | 89 +++++++++++++ 5 files changed, 377 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/46f452dd/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index ded7036..cb86fa8 100644 --- a/.gitignore +++ b/.gitignore @@ -11,8 +11,8 @@ atlassian-ide-plugin.xml *.ipr *.iws *.class -rackspace/lib/ -rackspace/bin/ +lib/ +bin/ lein project.clj .lein-deps-sum http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/46f452dd/openstack/README.md ---------------------------------------------------------------------- diff --git a/openstack/README.md b/openstack/README.md new file mode 100644 index 0000000..09af37e --- /dev/null +++ b/openstack/README.md @@ -0,0 +1,64 @@ +# OpenStack Examples +Example code that uses jclouds to perform common tasks on an OpenStack Cloud. The class names are self explanatory and the code is well commented for you to follow along. + +- [Requirements](#requirements) +- [Environment](#environment) +- [The Examples](#examples) +- [Support and Feedback](#support-and-feedback) + +## Requirements + +1. Username and password for an OpenStack Cloud - See the [Getting Started guide](http://jclouds.apache.org/guides/openstack/). +1. Java Development Kit (JDK) version 6 or later - [Download](http://www.oracle.com/technetwork/java/javase/downloads/index.html). +1. Apache Maven - [Maven in 5 Minutes](http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html). +1. Git - [Download](http://git-scm.com/downloads). + +## Environment +To setup an environment to compile and run the examples use these commands: + +``` +git clone https://github.com/jclouds/jclouds-examples.git +cd jclouds-examples/openstack/ +``` + +To download all dependencies, run: + +``` +mvn dependency:copy-dependencies "-DoutputDirectory=./lib" +``` + +If you also want to download the source jars, run: + +``` +mvn dependency:copy-dependencies "-DoutputDirectory=./lib" "-Dclassifier=sources" +``` + +## Examples + +To run individual examples from the command line use these commands: + +Note: If you're on Windows, the only change you need to make is to use a ';' instead of a ':' in the paths. + +``` +javac -classpath "lib/*:src/main/java/:src/main/resources/" src/main/java/org/jclouds/examples/openstack/identity/*.java +``` + +Every example class has a main method that takes the following arguments in the listed order + +1. Identity (Keystone) endpoint (e.g. an IP address or URL) +1. Tenant name +1. User name +1. Password + +Try out an example. + +``` +java -classpath "lib/*:src/main/java/:src/main/resources/" org.jclouds.examples.openstack.identity.CreateTenantAndUser identityEndpoint myTenantname myUsername myPassword +``` +Watch the terminal for output! + +## Support and Feedback + +Your feedback is appreciated! If you have specific issues with OpenStack support in jclouds, we'd prefer that you file an issue via [JIRA](https://issues.apache.org/jira/browse/JCLOUDS). + +If you have questions or need help, please join our [community](http://jclouds.apache.org/community/) and subscribe to the jclouds user mailing list. http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/46f452dd/openstack/pom.xml ---------------------------------------------------------------------- diff --git a/openstack/pom.xml b/openstack/pom.xml new file mode 100644 index 0000000..306c2c2 --- /dev/null +++ b/openstack/pom.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> +<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.jclouds.examples</groupId> + <artifactId>openstack-examples</artifactId> + <version>1.8.0</version> + <name>openstack-examples</name> + + <properties> + <jclouds.version>1.8.0</jclouds.version> + </properties> + + <dependencies> + <!-- jclouds dependencies --> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-slf4j</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-sshj</artifactId> + <version>${jclouds.version}</version> + </dependency> + <!-- jclouds OpenStack dependencies --> + <dependency> + <groupId>org.apache.jclouds.api</groupId> + <artifactId>openstack-keystone</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.api</groupId> + <artifactId>openstack-nova</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>openstack-swift</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.api</groupId> + <artifactId>openstack-cinder</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.api</groupId> + <artifactId>openstack-trove</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>openstack-glance</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>openstack-marconi</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.labs</groupId> + <artifactId>openstack-neutron</artifactId> + <version>${jclouds.version}</version> + </dependency> + <!-- 3rd party dependencies --> + <dependency> + <groupId>ch.qos.logback</groupId> + <artifactId>logback-classic</artifactId> + <version>1.0.13</version> + </dependency> + <dependency> + <groupId>mysql</groupId> + <artifactId>mysql-connector-java</artifactId> + <version>5.1.25</version> + </dependency> + </dependencies> +</project> http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/46f452dd/openstack/src/main/java/org/jclouds/examples/openstack/identity/CreateTenantAndUser.java ---------------------------------------------------------------------- diff --git a/openstack/src/main/java/org/jclouds/examples/openstack/identity/CreateTenantAndUser.java b/openstack/src/main/java/org/jclouds/examples/openstack/identity/CreateTenantAndUser.java new file mode 100644 index 0000000..607fc1f --- /dev/null +++ b/openstack/src/main/java/org/jclouds/examples/openstack/identity/CreateTenantAndUser.java @@ -0,0 +1,125 @@ +/* + * 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.jclouds.examples.openstack.identity; + +import com.google.common.base.Optional; +import com.google.common.collect.ImmutableSet; +import com.google.common.io.Closeables; +import com.google.inject.Module; +import org.jclouds.ContextBuilder; +import org.jclouds.logging.slf4j.config.SLF4JLoggingModule; +import org.jclouds.openstack.keystone.v2_0.KeystoneApi; +import org.jclouds.openstack.keystone.v2_0.domain.Tenant; +import org.jclouds.openstack.keystone.v2_0.domain.User; +import org.jclouds.openstack.keystone.v2_0.extensions.TenantAdminApi; +import org.jclouds.openstack.keystone.v2_0.extensions.UserAdminApi; +import org.jclouds.openstack.keystone.v2_0.options.CreateTenantOptions; +import org.jclouds.openstack.keystone.v2_0.options.CreateUserOptions; + +import java.io.Closeable; +import java.io.IOException; + +public class CreateTenantAndUser implements Closeable { + private final KeystoneApi keystoneApi; + + /** + * The first argument (args[0]) must be your Identity (Keystone) endpoint (e.g. an IP address or URL) + * The second argument (args[1]) must be your tenant name + * The third argument (args[2]) must be your user name + * The fourth argument (args[3]) must be your password + * + * For this example your endpoint must be the *admin endpoint* of your Identity service + * (e.g. "http://111.222.333.444:35357/v2.0/") + */ + public static void main(String[] args) throws IOException { + CreateTenantAndUser createTenantAndUser = new CreateTenantAndUser(args[0], args[1], args[2], args[3]); + + try { + Tenant tenant = createTenantAndUser.createTenant(); + createTenantAndUser.createUser(tenant); + createTenantAndUser.close(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + createTenantAndUser.close(); + } + } + + public CreateTenantAndUser(String endpoint, String tenantName, String userName, String password) { + System.out.format("%s%n", this.getClass().getName()); + + Iterable<Module> modules = ImmutableSet.<Module>of(new SLF4JLoggingModule()); + + String provider = "openstack-keystone"; + String identity = tenantName + ":" + userName; + + keystoneApi = ContextBuilder.newBuilder(provider) + .endpoint(endpoint) + .credentials(identity, password) + .modules(modules) + .buildApi(KeystoneApi.class); + } + + private Tenant createTenant() { + System.out.format(" Create Tenant%n"); + + Optional<? extends TenantAdminApi> tenantAdminApiExtension = keystoneApi.getTenantAdminApi(); + + if (tenantAdminApiExtension.isPresent()) { + System.out.format(" TenantAdminApi is present%n"); + + TenantAdminApi tenantAdminApi = tenantAdminApiExtension.get(); + CreateTenantOptions tenantOptions = CreateTenantOptions.Builder + .description("My New Tenant"); + Tenant tenant = tenantAdminApi.create("newTenant", tenantOptions); + + System.out.format(" %s%n", tenant); + + return tenant; + } else { + System.out.format(" TenantAdminApi is *not* present%n"); + System.exit(1); + + return null; + } + } + + private void createUser(Tenant tenant) { + System.out.format(" Create User%n"); + + Optional<? extends UserAdminApi> userAdminApiExtension = keystoneApi.getUserAdminApi(); + + if (userAdminApiExtension.isPresent()) { + System.out.format(" UserAdminApi is present%n"); + + UserAdminApi userAdminApi = userAdminApiExtension.get(); + CreateUserOptions userOptions = CreateUserOptions.Builder + .tenant(tenant.getId()) + .email("[email protected]"); + User user = userAdminApi.create("newUser", "newPassword", userOptions); + + System.out.format(" %s%n", user); + } else { + System.out.format(" UserAdminApi is *not* present%n"); + System.exit(1); + } + } + + public void close() throws IOException { + Closeables.close(keystoneApi, true); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-examples/blob/46f452dd/openstack/src/main/resources/logback.xml ---------------------------------------------------------------------- diff --git a/openstack/src/main/resources/logback.xml b/openstack/src/main/resources/logback.xml new file mode 100644 index 0000000..4c8f8be --- /dev/null +++ b/openstack/src/main/resources/logback.xml @@ -0,0 +1,89 @@ +<?xml version="1.0"?> +<!-- + + 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. + +--> + +<configuration scan="false"> + <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> + <encoder> + <pattern>- %m%n</pattern> + </encoder> + </appender> + + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds.log</file> + + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds-wire.log</file> + + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds-compute.log</file> + + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <appender name="SSHFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds-ssh.log</file> + + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <root> + <level value="warn" /> + </root> + + <logger name="org.jclouds"> + <level value="DEBUG" /> + <appender-ref ref="FILE" /> + </logger> + + <logger name="jclouds.wire"> + <level value="DEBUG" /> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="jclouds.headers"> + <level value="DEBUG" /> + <appender-ref ref="STDOUT" /> + </logger> + + <logger name="jclouds.compute"> + <level value="DEBUG" /> + <appender-ref ref="COMPUTEFILE" /> + </logger> + + <logger name="jclouds.ssh"> + <level value="DEBUG" /> + <appender-ref ref="SSHFILE" /> + </logger> + +</configuration>
