mirror of https://github.com/apache/jclouds.git
Merge branch 'master' of git@github.com:jclouds/jclouds
* 'master' of git@github.com:jclouds/jclouds: Issue 191: added example to integrate chef with compute fixed parent project refs updated snapshot repository info Issue 280: added orglist command changed default test so that they work with self-signed certs
This commit is contained in:
commit
c1a989c9f6
|
@ -54,7 +54,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
|
|
@ -54,7 +54,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
$HeadURL$ $Revision$ $Date$ Copyright (C) 2010 Cloud Conscious, LLC
|
||||||
|
<info@cloudconscious.com>
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
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.html 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/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>org.jclouds</groupId>
|
||||||
|
<artifactId>jclouds-chef-project</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
<groupId>org.jclouds</groupId>
|
||||||
|
<artifactId>jclouds-chef-compute</artifactId>
|
||||||
|
<name>jclouds chef compute integration</name>
|
||||||
|
<description>provisions nodes with jclouds and kick's off chef to configure and integrate</description>
|
||||||
|
<properties>
|
||||||
|
<!-- for example: ec2, trmk-ecloud, bluelock-vclouddirector, cloudservers, etc -->
|
||||||
|
<jclouds.compute.provider>YOUR_PREFERRED_PROVIDER</jclouds.compute.provider>
|
||||||
|
<!-- leave blank unless you have a different url to override -->
|
||||||
|
<jclouds.compute.endpoint></jclouds.compute.endpoint>
|
||||||
|
<jclouds.compute.identity>YOUR_ACCOUNT</jclouds.compute.identity>
|
||||||
|
<jclouds.compute.credential>YOUR_CREDENTIAL</jclouds.compute.credential>
|
||||||
|
<jclouds.chef.identity>YOUR_USER</jclouds.chef.identity>
|
||||||
|
<jclouds.chef.identity.pem>${user.home}/.chef/${jclouds.chef.identity}.pem</jclouds.chef.identity.pem>
|
||||||
|
<jclouds.opscodeplatform.org>YOUR_ORG</jclouds.opscodeplatform.org>
|
||||||
|
<jclouds.chef.endpoint>https://api.opscode.com/organizations/${jclouds.opscodeplatform.org}</jclouds.chef.endpoint>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<!-- bootstrapping: need to fetch the project POM -->
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>jclouds-googlecode-deploy</id>
|
||||||
|
<url>http://jclouds.googlecode.com/svn/repo</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
|
<snapshots>
|
||||||
|
<enabled>true</enabled>
|
||||||
|
</snapshots>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-chef</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-compute</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-compute</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<type>test-jar</type>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>${project.groupId}</groupId>
|
||||||
|
<artifactId>jclouds-allcompute</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>live</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>integration</id>
|
||||||
|
<phase>integration-test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>test</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>none</exclude>
|
||||||
|
</excludes>
|
||||||
|
<includes>
|
||||||
|
<include>**/*LiveTest.java</include>
|
||||||
|
</includes>
|
||||||
|
<systemProperties>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.compute.provider</name>
|
||||||
|
<value>${jclouds.compute.provider}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.compute.endpoint</name>
|
||||||
|
<value>${jclouds.compute.endpoint}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.compute.identity</name>
|
||||||
|
<value>${jclouds.compute.identity}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.compute.credential</name>
|
||||||
|
<value>${jclouds.compute.credential}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.chef.identity</name>
|
||||||
|
<value>${jclouds.chef.identity}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.chef.identity.pem</name>
|
||||||
|
<value>${jclouds.chef.identity.pem}</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>jclouds.chef.endpoint</name>
|
||||||
|
<value>${jclouds.chef.endpoint}</value>
|
||||||
|
</property>
|
||||||
|
</systemProperties>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
|
|
||||||
|
</project>
|
|
@ -25,7 +25,7 @@
|
||||||
<groupId>org.jclouds</groupId>
|
<groupId>org.jclouds</groupId>
|
||||||
<artifactId>jclouds-chef-project</artifactId>
|
<artifactId>jclouds-chef-project</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
<relativePath>../project/pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>org.jclouds</groupId>
|
<groupId>org.jclouds</groupId>
|
||||||
<artifactId>jclouds-chef</artifactId>
|
<artifactId>jclouds-chef</artifactId>
|
||||||
|
@ -49,7 +49,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
|
|
@ -34,5 +34,6 @@
|
||||||
<modules>
|
<modules>
|
||||||
<module>core</module>
|
<module>core</module>
|
||||||
<module>servlet</module>
|
<module>servlet</module>
|
||||||
|
<module>compute</module>
|
||||||
</modules>
|
</modules>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
<groupId>org.jclouds</groupId>
|
<groupId>org.jclouds</groupId>
|
||||||
<artifactId>jclouds-chef-project</artifactId>
|
<artifactId>jclouds-chef-project</artifactId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
<relativePath>../project/pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>org.jclouds</groupId>
|
<groupId>org.jclouds</groupId>
|
||||||
<artifactId>jclouds-chef-servlet</artifactId>
|
<artifactId>jclouds-chef-servlet</artifactId>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
|
|
@ -43,6 +43,7 @@ import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.SortedSet;
|
import java.util.SortedSet;
|
||||||
import java.util.TreeSet;
|
import java.util.TreeSet;
|
||||||
|
@ -50,6 +51,7 @@ import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
|
|
||||||
|
import org.jclouds.Constants;
|
||||||
import org.jclouds.compute.domain.ComputeMetadata;
|
import org.jclouds.compute.domain.ComputeMetadata;
|
||||||
import org.jclouds.compute.domain.ComputeType;
|
import org.jclouds.compute.domain.ComputeType;
|
||||||
import org.jclouds.compute.domain.Image;
|
import org.jclouds.compute.domain.Image;
|
||||||
|
@ -180,8 +182,11 @@ public abstract class BaseComputeServiceLiveTest {
|
||||||
private void initializeContextAndClient() throws IOException {
|
private void initializeContextAndClient() throws IOException {
|
||||||
if (context != null)
|
if (context != null)
|
||||||
context.close();
|
context.close();
|
||||||
|
Properties props = new Properties();
|
||||||
|
props.setProperty(Constants.PROPERTY_TRUST_ALL_CERTS, "true");
|
||||||
|
props.setProperty(Constants.PROPERTY_RELAX_HOSTNAME, "true");
|
||||||
context = new ComputeServiceContextFactory().createContext(provider, identity, credential, ImmutableSet.of(
|
context = new ComputeServiceContextFactory().createContext(provider, identity, credential, ImmutableSet.of(
|
||||||
new Log4JLoggingModule(), getSshModule()));
|
new Log4JLoggingModule(), getSshModule()), props);
|
||||||
client = context.getComputeService();
|
client = context.getComputeService();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
classpathref="maven-ant-tasks.classpath" />
|
classpathref="maven-ant-tasks.classpath" />
|
||||||
|
|
||||||
<artifact:localRepository id="local.repository" path="${user.home}/.m2/repository" />
|
<artifact:localRepository id="local.repository" path="${user.home}/.m2/repository" />
|
||||||
<artifact:remoteRepository id="jclouds-snapshot.repository" url="http://jclouds.rimuhosting.com/maven2/snapshots" />
|
<artifact:remoteRepository id="jclouds-snapshot.repository" url="https://oss.sonatype.org/content/repositories/snapshots" />
|
||||||
<artifact:remoteRepository id="shrinkwrap.repository" url="http://repository.jboss.org/maven2" />
|
<artifact:remoteRepository id="shrinkwrap.repository" url="http://repository.jboss.org/maven2" />
|
||||||
|
|
||||||
<!-- Setup maven so that we can get latest version of jclouds, shrinkwrap, and jruby -->
|
<!-- Setup maven so that we can get latest version of jclouds, shrinkwrap, and jruby -->
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
</repository>
|
</repository>
|
||||||
<repository>
|
<repository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-rimu-snapshots-nexus</id>
|
||||||
<url>http://jclouds.rimuhosting.com:8081/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
<snapshots>
|
<snapshots>
|
||||||
<enabled>true</enabled>
|
<enabled>true</enabled>
|
||||||
</snapshots>
|
</snapshots>
|
||||||
|
|
|
@ -42,8 +42,8 @@
|
||||||
<uniqueVersion>false</uniqueVersion>
|
<uniqueVersion>false</uniqueVersion>
|
||||||
</repository>
|
</repository>
|
||||||
<snapshotRepository>
|
<snapshotRepository>
|
||||||
<id>jclouds-rimu-snapshots-nexus</id>
|
<id>jclouds-snapshots</id>
|
||||||
<url>http://jclouds.rimuhosting.com/nexus/content/repositories/snapshots</url>
|
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||||
</snapshotRepository>
|
</snapshotRepository>
|
||||||
</distributionManagement>
|
</distributionManagement>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
|
|
||||||
<artifact:localRepository id="local.repository" path="${user.home}/.m2/repository"/>
|
<artifact:localRepository id="local.repository" path="${user.home}/.m2/repository"/>
|
||||||
<artifact:remoteRepository id="jclouds.repository" url="http://jclouds.googlecode.com/svn/repo" />
|
<artifact:remoteRepository id="jclouds.repository" url="http://jclouds.googlecode.com/svn/repo" />
|
||||||
<artifact:remoteRepository id="jclouds-snapshot.repository" url="http://jclouds.rimuhosting.com/maven2/snapshots"/>
|
<artifact:remoteRepository id="jclouds-snapshot.repository" url="https://oss.sonatype.org/content/repositories/snapshots"/>
|
||||||
|
|
||||||
<!-- Setup maven so that we can get latest version of jclouds, jclouds, and jruby -->
|
<!-- Setup maven so that we can get latest version of jclouds, jclouds, and jruby -->
|
||||||
<artifact:dependencies pathId="jclouds.classpath">
|
<artifact:dependencies pathId="jclouds.classpath">
|
||||||
|
|
|
@ -44,7 +44,7 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
public interface VCloudLoginAsyncClient {
|
public interface VCloudLoginAsyncClient {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This request returns a token to use in subsequent requests. After ten minutes of inactivity,
|
* This request returns a token to use in subsequent requests. After 30 minutes of inactivity,
|
||||||
* the token expires and you have to request a new token with this call.
|
* the token expires and you have to request a new token with this call.
|
||||||
*/
|
*/
|
||||||
@POST
|
@POST
|
||||||
|
|
|
@ -27,6 +27,7 @@ import static org.jclouds.vcloud.VCloudMediaType.VAPP_XML;
|
||||||
import static org.jclouds.vcloud.VCloudMediaType.VM_XML;
|
import static org.jclouds.vcloud.VCloudMediaType.VM_XML;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
|
@ -38,6 +39,7 @@ import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
|
|
||||||
import org.jclouds.predicates.validators.DnsNameValidator;
|
import org.jclouds.predicates.validators.DnsNameValidator;
|
||||||
|
import org.jclouds.rest.annotations.Endpoint;
|
||||||
import org.jclouds.rest.annotations.EndpointParam;
|
import org.jclouds.rest.annotations.EndpointParam;
|
||||||
import org.jclouds.rest.annotations.ExceptionParser;
|
import org.jclouds.rest.annotations.ExceptionParser;
|
||||||
import org.jclouds.rest.annotations.MapBinder;
|
import org.jclouds.rest.annotations.MapBinder;
|
||||||
|
@ -52,16 +54,19 @@ import org.jclouds.vcloud.binders.BindCloneVAppParamsToXmlPayload;
|
||||||
import org.jclouds.vcloud.binders.BindDeployVAppParamsToXmlPayload;
|
import org.jclouds.vcloud.binders.BindDeployVAppParamsToXmlPayload;
|
||||||
import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
|
import org.jclouds.vcloud.binders.BindInstantiateVAppTemplateParamsToXmlPayload;
|
||||||
import org.jclouds.vcloud.binders.BindUndeployVAppParamsToXmlPayload;
|
import org.jclouds.vcloud.binders.BindUndeployVAppParamsToXmlPayload;
|
||||||
|
import org.jclouds.vcloud.domain.ReferenceType;
|
||||||
import org.jclouds.vcloud.domain.Task;
|
import org.jclouds.vcloud.domain.Task;
|
||||||
import org.jclouds.vcloud.domain.VApp;
|
import org.jclouds.vcloud.domain.VApp;
|
||||||
import org.jclouds.vcloud.domain.VAppTemplate;
|
import org.jclouds.vcloud.domain.VAppTemplate;
|
||||||
import org.jclouds.vcloud.domain.Vm;
|
import org.jclouds.vcloud.domain.Vm;
|
||||||
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
|
import org.jclouds.vcloud.domain.ovf.OvfEnvelope;
|
||||||
|
import org.jclouds.vcloud.endpoints.OrgList;
|
||||||
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
|
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
|
||||||
import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
|
import org.jclouds.vcloud.functions.OrgNameCatalogNameVAppTemplateNameToEndpoint;
|
||||||
import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
|
import org.jclouds.vcloud.functions.OrgNameVDCNameResourceEntityNameToEndpoint;
|
||||||
import org.jclouds.vcloud.options.CloneVAppOptions;
|
import org.jclouds.vcloud.options.CloneVAppOptions;
|
||||||
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
||||||
|
import org.jclouds.vcloud.xml.OrgListHandler;
|
||||||
import org.jclouds.vcloud.xml.TaskHandler;
|
import org.jclouds.vcloud.xml.TaskHandler;
|
||||||
import org.jclouds.vcloud.xml.VAppHandler;
|
import org.jclouds.vcloud.xml.VAppHandler;
|
||||||
import org.jclouds.vcloud.xml.VAppTemplateHandler;
|
import org.jclouds.vcloud.xml.VAppTemplateHandler;
|
||||||
|
@ -74,11 +79,21 @@ import com.google.common.util.concurrent.ListenableFuture;
|
||||||
* Provides access to VCloud resources via their REST API.
|
* Provides access to VCloud resources via their REST API.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx" />
|
* @see <a href="https://community.vcloudexpress.terremark.com/en-us/discussion_forums/f/60.aspx"
|
||||||
|
* />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@RequestFilters(SetVCloudTokenCookie.class)
|
@RequestFilters(SetVCloudTokenCookie.class)
|
||||||
public interface VCloudAsyncClient extends CommonVCloudAsyncClient {
|
public interface VCloudAsyncClient extends CommonVCloudAsyncClient {
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @see VCloudClient#listOrgs
|
||||||
|
*/
|
||||||
|
@GET
|
||||||
|
@Endpoint(OrgList.class)
|
||||||
|
@XMLResponseParser(OrgListHandler.class)
|
||||||
|
@Consumes(VCloudMediaType.ORGLIST_XML)
|
||||||
|
ListenableFuture<Map<String, ReferenceType>> listOrgs();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see VCloudClient#getVAppTemplate
|
* @see VCloudClient#getVAppTemplate
|
||||||
|
|
|
@ -20,12 +20,14 @@
|
||||||
package org.jclouds.vcloud;
|
package org.jclouds.vcloud;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.jclouds.concurrent.Timeout;
|
import org.jclouds.concurrent.Timeout;
|
||||||
|
import org.jclouds.vcloud.domain.ReferenceType;
|
||||||
import org.jclouds.vcloud.domain.Task;
|
import org.jclouds.vcloud.domain.Task;
|
||||||
import org.jclouds.vcloud.domain.VApp;
|
import org.jclouds.vcloud.domain.VApp;
|
||||||
import org.jclouds.vcloud.domain.VAppTemplate;
|
import org.jclouds.vcloud.domain.VAppTemplate;
|
||||||
|
@ -38,11 +40,20 @@ import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
||||||
* Provides access to VCloud resources via their REST API.
|
* Provides access to VCloud resources via their REST API.
|
||||||
* <p/>
|
* <p/>
|
||||||
*
|
*
|
||||||
* @see <a href="http://communities.vmware.com/community/developer/forums/vcloudapi" />
|
* @see <a
|
||||||
|
* href="http://communities.vmware.com/community/developer/forums/vcloudapi"
|
||||||
|
* />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
|
@Timeout(duration = 300, timeUnit = TimeUnit.SECONDS)
|
||||||
public interface VCloudClient extends CommonVCloudClient {
|
public interface VCloudClient extends CommonVCloudClient {
|
||||||
|
/**
|
||||||
|
* The response to a login request includes a list of the organizations to
|
||||||
|
* which the authenticated user has access.
|
||||||
|
*
|
||||||
|
* @return organizations indexed by name
|
||||||
|
*/
|
||||||
|
Map<String, ReferenceType> listOrgs();
|
||||||
|
|
||||||
VApp instantiateVAppTemplateInVDC(URI vDC, URI template, String appName, InstantiateVAppTemplateOptions... options);
|
VApp instantiateVAppTemplateInVDC(URI vDC, URI template, String appName, InstantiateVAppTemplateOptions... options);
|
||||||
|
|
||||||
|
@ -53,8 +64,9 @@ public interface VCloudClient extends CommonVCloudClient {
|
||||||
OvfEnvelope getOvfEnvelopeForVAppTemplate(URI vAppTemplate);
|
OvfEnvelope getOvfEnvelopeForVAppTemplate(URI vAppTemplate);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns the vapp template corresponding to a catalog item in the catalog associated with the
|
* returns the vapp template corresponding to a catalog item in the catalog
|
||||||
* specified name. Note that the org and catalog parameters can be null to choose default.
|
* associated with the specified name. Note that the org and catalog
|
||||||
|
* parameters can be null to choose default.
|
||||||
*
|
*
|
||||||
* @param orgName
|
* @param orgName
|
||||||
* organization name, or null for the default
|
* organization name, or null for the default
|
||||||
|
@ -64,7 +76,8 @@ public interface VCloudClient extends CommonVCloudClient {
|
||||||
* item you wish to lookup
|
* item you wish to lookup
|
||||||
*
|
*
|
||||||
* @throws NoSuchElementException
|
* @throws NoSuchElementException
|
||||||
* if you specified an org, catalog, or catalog item name that isn't present
|
* if you specified an org, catalog, or catalog item name that
|
||||||
|
* isn't present
|
||||||
*/
|
*/
|
||||||
VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName,
|
VAppTemplate findVAppTemplateInOrgCatalogNamed(@Nullable String orgName, @Nullable String catalogName,
|
||||||
String itemName);
|
String itemName);
|
||||||
|
@ -76,97 +89,109 @@ public interface VCloudClient extends CommonVCloudClient {
|
||||||
Vm getVm(URI vm);
|
Vm getVm(URI vm);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To deploy a vApp, the client makes a request to its action/deploy URL. Deploying a vApp
|
* To deploy a vApp, the client makes a request to its action/deploy URL.
|
||||||
* automatically deploys all of the virtual machines it contains. To deploy a virtual machine,
|
* Deploying a vApp automatically deploys all of the virtual machines it
|
||||||
* the client makes a request to its action/deploy URL.
|
* contains. To deploy a virtual machine, the client makes a request to its
|
||||||
|
* action/deploy URL.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Deploying a Vm implicitly deploys the parent vApp if that vApp is not already deployed.
|
* Deploying a Vm implicitly deploys the parent vApp if that vApp is not
|
||||||
|
* already deployed.
|
||||||
*/
|
*/
|
||||||
Task deployVAppOrVm(URI vAppOrVmId);
|
Task deployVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* like {@link #deployVAppOrVm(URI)}, except deploy transistions to power on state
|
* like {@link #deployVAppOrVm(URI)}, except deploy transistions to power on
|
||||||
|
* state
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Task deployAndPowerOnVAppOrVm(URI vAppOrVmId);
|
Task deployAndPowerOnVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undeploying a vApp powers off or suspends any running virtual machines it contains, then frees
|
* Undeploying a vApp powers off or suspends any running virtual machines it
|
||||||
* the resources reserved for the vApp and sets the vApp’s deploy attribute to a value of false
|
* contains, then frees the resources reserved for the vApp and sets the
|
||||||
* to indicate that it is not deployed.
|
* vApp’s deploy attribute to a value of false to indicate that it is not
|
||||||
|
* deployed.
|
||||||
* <p/>
|
* <p/>
|
||||||
* Undeploying a virtual machine powers off or suspends the virtual machine, then frees the
|
* Undeploying a virtual machine powers off or suspends the virtual machine,
|
||||||
* resources reserved for it and sets the its deploy attribute to a value of false to indicate
|
* then frees the resources reserved for it and sets the its deploy attribute
|
||||||
* that it is not deployed. This operation has no effect on the containing vApp.
|
* to a value of false to indicate that it is not deployed. This operation
|
||||||
|
* has no effect on the containing vApp.
|
||||||
* <h4>NOTE</h4>
|
* <h4>NOTE</h4>
|
||||||
* Using this method will simply power off the vms. In order to save their state, use
|
* Using this method will simply power off the vms. In order to save their
|
||||||
* {@link #undeployAndSaveStateOfVAppOrVm}
|
* state, use {@link #undeployAndSaveStateOfVAppOrVm}
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Task undeployVAppOrVm(URI vAppOrVmId);
|
Task undeployVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* like {@link #undeployVAppOrVm(URI)}, where the undeployed virtual machines are suspended and
|
* like {@link #undeployVAppOrVm(URI)}, where the undeployed virtual machines
|
||||||
* their suspend state saved
|
* are suspended and their suspend state saved
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
Task undeployAndSaveStateOfVAppOrVm(URI vAppOrVmId);
|
Task undeployAndSaveStateOfVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A powerOn request to a vApp URL powers on all of the virtual machines in the vApp, as
|
* A powerOn request to a vApp URL powers on all of the virtual machines in
|
||||||
* specified in the vApp’s StartupSection field.
|
* the vApp, as specified in the vApp’s StartupSection field.
|
||||||
* <p/>
|
* <p/>
|
||||||
* A powerOn request to a virtual machine URL powers on the specified virtual machine and forces
|
* A powerOn request to a virtual machine URL powers on the specified virtual
|
||||||
* deployment of the parent vApp.
|
* machine and forces deployment of the parent vApp.
|
||||||
* <p/>
|
* <p/>
|
||||||
* <h4>NOTE</h4> A powerOn request to a vApp or virtual machine that is undeployed forces
|
* <h4>NOTE</h4> A powerOn request to a vApp or virtual machine that is
|
||||||
* deployment.
|
* undeployed forces deployment.
|
||||||
*/
|
*/
|
||||||
Task powerOnVAppOrVm(URI vAppOrVmId);
|
Task powerOnVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A powerOff request to a vApp URL powers off all of the virtual machines in the vApp, as
|
* A powerOff request to a vApp URL powers off all of the virtual machines in
|
||||||
* specified in its StartupSection field.
|
* the vApp, as specified in its StartupSection field.
|
||||||
* <p/>
|
* <p/>
|
||||||
* A powerOff request to a virtual machine URL powers off the specified virtual machine.
|
* A powerOff request to a virtual machine URL powers off the specified
|
||||||
|
* virtual machine.
|
||||||
*/
|
*/
|
||||||
Task powerOffVAppOrVm(URI vAppOrVmId);
|
Task powerOffVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A shutdown request to a vApp URL shuts down all of the virtual machines in the vApp, as
|
* A shutdown request to a vApp URL shuts down all of the virtual machines in
|
||||||
* specified in its StartupSection field.
|
* the vApp, as specified in its StartupSection field.
|
||||||
* <p/>
|
* <p/>
|
||||||
* A shutdown request to a virtual machine URL shuts down the specified virtual machine.
|
* A shutdown request to a virtual machine URL shuts down the specified
|
||||||
|
* virtual machine.
|
||||||
* <p/>
|
* <p/>
|
||||||
* <h4>NOTE</h4Because this request sends a signal to the guest OS, the vCloud API cannot track
|
* <h4>NOTE</h4Because this request sends a signal to the guest OS, the
|
||||||
* the progress or verify the result of the requested operation. Hence, void is returned
|
* vCloud API cannot track the progress or verify the result of the requested
|
||||||
|
* operation. Hence, void is returned
|
||||||
*/
|
*/
|
||||||
void shutdownVAppOrVm(URI vAppOrVmId);
|
void shutdownVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A reset request to a vApp URL resets all of the virtual machines in the vApp, as specified in
|
* A reset request to a vApp URL resets all of the virtual machines in the
|
||||||
* its StartupSection field.
|
* vApp, as specified in its StartupSection field.
|
||||||
* <p/>
|
* <p/>
|
||||||
* A reset request to a virtual machine URL resets the specified virtual machine.
|
* A reset request to a virtual machine URL resets the specified virtual
|
||||||
|
* machine.
|
||||||
*/
|
*/
|
||||||
Task resetVAppOrVm(URI vAppOrVmId);
|
Task resetVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A reboot request to a vApp URL reboots all of the virtual machines in the vApp, as specified
|
* A reboot request to a vApp URL reboots all of the virtual machines in the
|
||||||
* in its StartupSection field.
|
* vApp, as specified in its StartupSection field.
|
||||||
* <p/>
|
* <p/>
|
||||||
* A reboot request to a virtual machine URL reboots the specified virtual machine.
|
* A reboot request to a virtual machine URL reboots the specified virtual
|
||||||
|
* machine.
|
||||||
* <p/>
|
* <p/>
|
||||||
* <h4>NOTE</h4> Because this request sends a signal to the guest OS, the vCloud API cannot track
|
* <h4>NOTE</h4> Because this request sends a signal to the guest OS, the
|
||||||
* the progress or verify the result of the requested operation. Hence, void is returned
|
* vCloud API cannot track the progress or verify the result of the requested
|
||||||
|
* operation. Hence, void is returned
|
||||||
*/
|
*/
|
||||||
void rebootVAppOrVm(URI vAppOrVmId);
|
void rebootVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A suspend request to a vApp URL suspends all of the virtual machines in the vApp, as specified
|
* A suspend request to a vApp URL suspends all of the virtual machines in
|
||||||
* in its StartupSection field.
|
* the vApp, as specified in its StartupSection field.
|
||||||
* <p/>
|
* <p/>
|
||||||
* A suspend request to a virtual machine URL suspends the specified virtual machine.
|
* A suspend request to a virtual machine URL suspends the specified virtual
|
||||||
|
* machine.
|
||||||
*/
|
*/
|
||||||
Task suspendVAppOrVm(URI vAppOrVmId);
|
Task suspendVAppOrVm(URI vAppOrVmId);
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,7 @@ import org.jclouds.vcloud.domain.ReferenceType;
|
||||||
import org.jclouds.vcloud.domain.VCloudSession;
|
import org.jclouds.vcloud.domain.VCloudSession;
|
||||||
import org.jclouds.vcloud.domain.VDC;
|
import org.jclouds.vcloud.domain.VDC;
|
||||||
import org.jclouds.vcloud.endpoints.Network;
|
import org.jclouds.vcloud.endpoints.Network;
|
||||||
|
import org.jclouds.vcloud.endpoints.OrgList;
|
||||||
import org.jclouds.vcloud.endpoints.TasksList;
|
import org.jclouds.vcloud.endpoints.TasksList;
|
||||||
import org.jclouds.vcloud.functions.AllCatalogItemsInCatalog;
|
import org.jclouds.vcloud.functions.AllCatalogItemsInCatalog;
|
||||||
import org.jclouds.vcloud.functions.AllCatalogsInOrg;
|
import org.jclouds.vcloud.functions.AllCatalogsInOrg;
|
||||||
|
@ -94,7 +95,8 @@ import com.google.inject.name.Names;
|
||||||
import domain.VCloudVersionsAsyncClient;
|
import domain.VCloudVersionsAsyncClient;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configures the VCloud authentication service connection, including logging and http transport.
|
* Configures the VCloud authentication service connection, including logging
|
||||||
|
* and http transport.
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
|
@ -191,6 +193,15 @@ public class CommonVCloudRestClientModule<S extends CommonVCloudClient, A extend
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
@OrgList
|
||||||
|
URI provideOrgListURI(Supplier<VCloudSession> sessionSupplier) {
|
||||||
|
VCloudSession session = sessionSupplier.get();
|
||||||
|
return URI.create(Iterables.getLast(session.getOrgs().values()).getHref().toASCIIString().replaceAll("org/.*",
|
||||||
|
"org"));
|
||||||
|
}
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
public static class OrgMapSupplier implements Supplier<Map<String, ? extends Org>> {
|
public static class OrgMapSupplier implements Supplier<Map<String, ? extends Org>> {
|
||||||
protected final Supplier<VCloudSession> sessionSupplier;
|
protected final Supplier<VCloudSession> sessionSupplier;
|
||||||
|
@ -346,8 +357,7 @@ public class CommonVCloudRestClientModule<S extends CommonVCloudClient, A extend
|
||||||
@Singleton
|
@Singleton
|
||||||
@org.jclouds.vcloud.endpoints.VCloudLogin
|
@org.jclouds.vcloud.endpoints.VCloudLogin
|
||||||
protected URI provideAuthenticationURI(VCloudVersionsAsyncClient versionService,
|
protected URI provideAuthenticationURI(VCloudVersionsAsyncClient versionService,
|
||||||
@Named(PROPERTY_API_VERSION) String version) throws InterruptedException, ExecutionException,
|
@Named(PROPERTY_API_VERSION) String version) throws InterruptedException, ExecutionException, TimeoutException {
|
||||||
TimeoutException {
|
|
||||||
SortedMap<String, URI> versions = versionService.getSupportedVersions().get(180, TimeUnit.SECONDS);
|
SortedMap<String, URI> versions = versionService.getSupportedVersions().get(180, TimeUnit.SECONDS);
|
||||||
checkState(versions.size() > 0, "No versions present");
|
checkState(versions.size() > 0, "No versions present");
|
||||||
checkState(versions.containsKey(version), "version " + version + " not present in: " + versions);
|
checkState(versions.containsKey(version), "version " + version + " not present in: " + versions);
|
||||||
|
@ -454,8 +464,7 @@ public class CommonVCloudRestClientModule<S extends CommonVCloudClient, A extend
|
||||||
protected Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> provideOrgVDCSupplierCache(
|
protected Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> provideOrgVDCSupplierCache(
|
||||||
@Named(PROPERTY_SESSION_INTERVAL) long seconds, final OrgVDCSupplier supplier) {
|
@Named(PROPERTY_SESSION_INTERVAL) long seconds, final OrgVDCSupplier supplier) {
|
||||||
return new RetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>>(
|
return new RetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>>(
|
||||||
authException, seconds,
|
authException, seconds, new Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>>() {
|
||||||
new Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>>() {
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>> get() {
|
public Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>> get() {
|
||||||
return supplier.get();
|
return supplier.get();
|
||||||
|
@ -521,8 +530,7 @@ public class CommonVCloudRestClientModule<S extends CommonVCloudClient, A extend
|
||||||
new Function<org.jclouds.vcloud.domain.Catalog, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>() {
|
new Function<org.jclouds.vcloud.domain.Catalog, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, ? extends CatalogItem> apply(
|
public Map<String, ? extends CatalogItem> apply(org.jclouds.vcloud.domain.Catalog from) {
|
||||||
org.jclouds.vcloud.domain.Catalog from) {
|
|
||||||
return uniqueIndex(allCatalogItemsInCatalog.apply(from), name);
|
return uniqueIndex(allCatalogItemsInCatalog.apply(from), name);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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 org.jclouds.vcloud.domain;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.jclouds.vcloud.domain.ovf.ResourceAllocation;
|
||||||
|
import org.jclouds.vcloud.domain.ovf.System;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The InstantiateVAppTemplateParams element forms the body of an instantiateVappTemplate request.
|
||||||
|
*/
|
||||||
|
public class InstantiateVAppTemplateParams {
|
||||||
|
|
||||||
|
protected final String info;
|
||||||
|
protected final System virtualSystem;
|
||||||
|
protected final Set<ResourceAllocation> resourceAllocations = Sets.newLinkedHashSet();
|
||||||
|
|
||||||
|
public InstantiateVAppTemplateParams(String info, System virtualSystem, Iterable<? extends ResourceAllocation> resourceAllocations) {
|
||||||
|
this.info = info;
|
||||||
|
this.virtualSystem = virtualSystem;
|
||||||
|
Iterables.addAll(this.resourceAllocations, resourceAllocations);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getInfo() {
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
public System getSystem() {
|
||||||
|
return virtualSystem;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<? extends ResourceAllocation> getResourceAllocations() {
|
||||||
|
return resourceAllocations;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "[info=" + getInfo() + ", virtualSystem=" + getSystem() + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + ((info == null) ? 0 : info.hashCode());
|
||||||
|
result = prime * result + ((resourceAllocations == null) ? 0 : resourceAllocations.hashCode());
|
||||||
|
result = prime * result + ((virtualSystem == null) ? 0 : virtualSystem.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
InstantiateVAppTemplateParams other = (InstantiateVAppTemplateParams) obj;
|
||||||
|
if (info == null) {
|
||||||
|
if (other.info != null)
|
||||||
|
return false;
|
||||||
|
} else if (!info.equals(other.info))
|
||||||
|
return false;
|
||||||
|
if (resourceAllocations == null) {
|
||||||
|
if (other.resourceAllocations != null)
|
||||||
|
return false;
|
||||||
|
} else if (!resourceAllocations.equals(other.resourceAllocations))
|
||||||
|
return false;
|
||||||
|
if (virtualSystem == null) {
|
||||||
|
if (other.virtualSystem != null)
|
||||||
|
return false;
|
||||||
|
} else if (!virtualSystem.equals(other.virtualSystem))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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 org.jclouds.vcloud.endpoints;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import javax.inject.Qualifier;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Related to a VCloud express Org List.
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Retention(value = RetentionPolicy.RUNTIME)
|
||||||
|
@Target(value = { ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||||
|
@Qualifier
|
||||||
|
public @interface OrgList {
|
||||||
|
|
||||||
|
}
|
|
@ -45,6 +45,7 @@ import org.jclouds.rest.ConfiguresRestClient;
|
||||||
import org.jclouds.rest.RestClientTest;
|
import org.jclouds.rest.RestClientTest;
|
||||||
import org.jclouds.rest.RestContextFactory;
|
import org.jclouds.rest.RestContextFactory;
|
||||||
import org.jclouds.rest.RestContextFactory.ContextSpec;
|
import org.jclouds.rest.RestContextFactory.ContextSpec;
|
||||||
|
import org.jclouds.rest.functions.MapHttp4xxCodesToExceptions;
|
||||||
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
|
||||||
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
|
import org.jclouds.rest.functions.ReturnVoidOnNotFoundOr404;
|
||||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||||
|
@ -67,6 +68,7 @@ import org.jclouds.vcloud.options.InstantiateVAppTemplateOptions;
|
||||||
import org.jclouds.vcloud.xml.CatalogHandler;
|
import org.jclouds.vcloud.xml.CatalogHandler;
|
||||||
import org.jclouds.vcloud.xml.CatalogItemHandler;
|
import org.jclouds.vcloud.xml.CatalogItemHandler;
|
||||||
import org.jclouds.vcloud.xml.OrgHandler;
|
import org.jclouds.vcloud.xml.OrgHandler;
|
||||||
|
import org.jclouds.vcloud.xml.OrgListHandler;
|
||||||
import org.jclouds.vcloud.xml.OrgNetworkHandler;
|
import org.jclouds.vcloud.xml.OrgNetworkHandler;
|
||||||
import org.jclouds.vcloud.xml.TaskHandler;
|
import org.jclouds.vcloud.xml.TaskHandler;
|
||||||
import org.jclouds.vcloud.xml.TasksListHandler;
|
import org.jclouds.vcloud.xml.TasksListHandler;
|
||||||
|
@ -125,11 +127,11 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
IOException {
|
IOException {
|
||||||
Method method = VCloudAsyncClient.class.getMethod("instantiateVAppTemplateInVDC", URI.class, URI.class,
|
Method method = VCloudAsyncClient.class.getMethod("instantiateVAppTemplateInVDC", URI.class, URI.class,
|
||||||
String.class, InstantiateVAppTemplateOptions[].class);
|
String.class, InstantiateVAppTemplateOptions[].class);
|
||||||
processor.createRequest(method, URI.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), URI
|
processor
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), "CentOS 01", processorCount(1).memory(512)
|
.createRequest(method, URI.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), URI
|
||||||
.disk(1024).addNetworkConfig(
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), "CentOS 01", processorCount(1).memory(
|
||||||
new NetworkConfig(null, URI.create("https://vcenterprise.bluelock.com/api/v1.0/network/1991"),
|
512).disk(1024).addNetworkConfig(
|
||||||
null)));
|
new NetworkConfig(null, URI.create("https://vcenterprise.bluelock.com/api/v1.0/network/1991"), null)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCloneVAppInVDC() throws SecurityException, NoSuchMethodException, IOException {
|
public void testCloneVAppInVDC() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
@ -157,8 +159,8 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
CloneVAppOptions[].class);
|
CloneVAppOptions[].class);
|
||||||
HttpRequest request = processor.createRequest(method, URI
|
HttpRequest request = processor.createRequest(method, URI
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), URI
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), URI
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vapp/201"), "new-linux-server",
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vapp/201"), "new-linux-server", new CloneVAppOptions()
|
||||||
new CloneVAppOptions().deploy().powerOn().withDescription("The description of the new vApp"));
|
.deploy().powerOn().withDescription("The description of the new vApp"));
|
||||||
|
|
||||||
assertRequestLineEquals(request,
|
assertRequestLineEquals(request,
|
||||||
"POST https://vcenterprise.bluelock.com/api/v1.0/vdc/1/action/cloneVApp HTTP/1.1");
|
"POST https://vcenterprise.bluelock.com/api/v1.0/vdc/1/action/cloneVApp HTTP/1.1");
|
||||||
|
@ -173,6 +175,21 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
checkFilters(request);
|
checkFilters(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testlistOrgs() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
|
Method method = VCloudAsyncClient.class.getMethod("listOrgs");
|
||||||
|
HttpRequest request = processor.createRequest(method);
|
||||||
|
|
||||||
|
assertRequestLineEquals(request, "GET https://vcenterprise.bluelock.com/api/v1.0/org HTTP/1.1");
|
||||||
|
assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.orgList+xml\n");
|
||||||
|
assertPayloadEquals(request, null, null, false);
|
||||||
|
|
||||||
|
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||||
|
assertSaxResponseParserClassEquals(method, OrgListHandler.class);
|
||||||
|
assertExceptionParserClassEquals(method, MapHttp4xxCodesToExceptions.class);
|
||||||
|
|
||||||
|
checkFilters(request);
|
||||||
|
}
|
||||||
|
|
||||||
public void testOrg() throws SecurityException, NoSuchMethodException, IOException {
|
public void testOrg() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = VCloudAsyncClient.class.getMethod("getOrg", URI.class);
|
Method method = VCloudAsyncClient.class.getMethod("getOrg", URI.class);
|
||||||
HttpRequest request = processor.createRequest(method, URI
|
HttpRequest request = processor.createRequest(method, URI
|
||||||
|
@ -790,42 +807,17 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
protected Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> provideOrgVDCSupplierCache(
|
protected Supplier<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> provideOrgVDCSupplierCache(
|
||||||
@Named(PROPERTY_SESSION_INTERVAL) long seconds, final OrgVDCSupplier supplier) {
|
@Named(PROPERTY_SESSION_INTERVAL) long seconds, final OrgVDCSupplier supplier) {
|
||||||
|
|
||||||
return Suppliers
|
return Suppliers.<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> ofInstance(ImmutableMap
|
||||||
.<Map<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>>> ofInstance(ImmutableMap
|
.<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>> of("org",
|
||||||
.<String, Map<String, ? extends org.jclouds.vcloud.domain.VDC>> of(
|
|
||||||
"org",
|
|
||||||
|
|
||||||
ImmutableMap
|
ImmutableMap.<String, org.jclouds.vcloud.domain.VDC> of("vdc", new VDCImpl("vdc", null, URI
|
||||||
.<String, org.jclouds.vcloud.domain.VDC> of(
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"), null, null, "description", null,
|
||||||
"vdc",
|
null, null, null, null, ImmutableMap.<String, ReferenceType> of("vapp", new ReferenceTypeImpl(
|
||||||
new VDCImpl(
|
"vapp", "application/vnd.vmware.vcloud.vApp+xml", URI
|
||||||
"vdc",
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/188849-1")), "network",
|
||||||
null,
|
new ReferenceTypeImpl("network", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI
|
||||||
URI
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vdcItem/2"))), null, 0, 0, 0,
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"),
|
false))));
|
||||||
null,
|
|
||||||
null,
|
|
||||||
"description",
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
ImmutableMap
|
|
||||||
.<String, ReferenceType> of(
|
|
||||||
"vapp",
|
|
||||||
new ReferenceTypeImpl(
|
|
||||||
"vapp",
|
|
||||||
"application/vnd.vmware.vcloud.vApp+xml",
|
|
||||||
URI
|
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/188849-1")),
|
|
||||||
"network",
|
|
||||||
new ReferenceTypeImpl(
|
|
||||||
"network",
|
|
||||||
"application/vnd.vmware.vcloud.vAppTemplate+xml",
|
|
||||||
URI
|
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vdcItem/2"))),
|
|
||||||
null, 0, 0, 0, false))));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -840,17 +832,14 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
public Map<String, Org> get() {
|
public Map<String, Org> get() {
|
||||||
return ImmutableMap.<String, Org> of("org", new OrgImpl("org", null, URI
|
return ImmutableMap.<String, Org> of("org", new OrgImpl("org", null, URI
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/org/1"), "org", "description", ImmutableMap
|
.create("https://vcenterprise.bluelock.com/api/v1.0/org/1"), "org", "description", ImmutableMap
|
||||||
.<String, ReferenceType> of("catalog", new ReferenceTypeImpl("catalog",
|
.<String, ReferenceType> of("catalog", new ReferenceTypeImpl("catalog", VCloudMediaType.CATALOG_XML,
|
||||||
VCloudMediaType.CATALOG_XML, URI
|
URI.create("https://vcenterprise.bluelock.com/api/v1.0/catalog/1"))), ImmutableMap
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/catalog/1"))), ImmutableMap
|
|
||||||
.<String, ReferenceType> of("vdc", new ReferenceTypeImpl("vdc", VCloudMediaType.VDC_XML, URI
|
.<String, ReferenceType> of("vdc", new ReferenceTypeImpl("vdc", VCloudMediaType.VDC_XML, URI
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"))), ImmutableMap
|
.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1"))), ImmutableMap
|
||||||
.<String, ReferenceType> of("network", new ReferenceTypeImpl("network",
|
.<String, ReferenceType> of("network", new ReferenceTypeImpl("network", VCloudMediaType.NETWORK_XML,
|
||||||
VCloudMediaType.NETWORK_XML, URI
|
URI.create("https://vcenterprise.bluelock.com/api/v1.0/network/1"))), new ReferenceTypeImpl(
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/network/1"))),
|
"tasksList", VCloudMediaType.TASKSLIST_XML, URI
|
||||||
new ReferenceTypeImpl("tasksList", VCloudMediaType.TASKSLIST_XML, URI
|
.create("https://vcenterprise.bluelock.com/api/v1.0/tasksList/1")), ImmutableList.<Task> of()));
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/tasksList/1")), ImmutableList
|
|
||||||
.<Task> of()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -866,12 +855,11 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
return ImmutableMap.<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>> of("org",
|
return ImmutableMap.<String, Map<String, ? extends org.jclouds.vcloud.domain.Catalog>> of("org",
|
||||||
|
|
||||||
ImmutableMap.<String, org.jclouds.vcloud.domain.Catalog> of("catalog", new CatalogImpl("catalog", "type",
|
ImmutableMap.<String, org.jclouds.vcloud.domain.Catalog> of("catalog", new CatalogImpl("catalog", "type",
|
||||||
URI.create("https://vcenterprise.bluelock.com/api/v1.0/catalog/1"), null, "description",
|
URI.create("https://vcenterprise.bluelock.com/api/v1.0/catalog/1"), null, "description", ImmutableMap
|
||||||
ImmutableMap.<String, ReferenceType> of("item", new ReferenceTypeImpl("item",
|
.<String, ReferenceType> of("item", new ReferenceTypeImpl("item",
|
||||||
"application/vnd.vmware.vcloud.catalogItem+xml", URI
|
"application/vnd.vmware.vcloud.catalogItem+xml", URI
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/1")),
|
.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/1")), "template",
|
||||||
"template", new ReferenceTypeImpl("template",
|
new ReferenceTypeImpl("template", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI
|
||||||
"application/vnd.vmware.vcloud.vAppTemplate+xml", URI
|
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/2"))),
|
.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/2"))),
|
||||||
ImmutableList.<Task> of(), true)));
|
ImmutableList.<Task> of(), true)));
|
||||||
}
|
}
|
||||||
|
@ -885,25 +873,13 @@ public class VCloudAsyncClientTest extends RestClientTest<VCloudAsyncClient> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>> get() {
|
public Map<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>> get() {
|
||||||
return ImmutableMap
|
return ImmutableMap.<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>> of(
|
||||||
.<String, Map<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>>> of(
|
"org", ImmutableMap.<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>> of(
|
||||||
"org",
|
"catalog", ImmutableMap.<String, org.jclouds.vcloud.domain.CatalogItem> of("template",
|
||||||
ImmutableMap
|
new CatalogItemImpl("template", URI
|
||||||
.<String, Map<String, ? extends org.jclouds.vcloud.domain.CatalogItem>> of(
|
.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/2"), "description",
|
||||||
"catalog",
|
new ReferenceTypeImpl("template", "application/vnd.vmware.vcloud.vAppTemplate+xml",
|
||||||
ImmutableMap
|
URI.create("https://vcenterprise.bluelock.com/api/v1.0/vAppTemplate/2")),
|
||||||
.<String, org.jclouds.vcloud.domain.CatalogItem> of(
|
|
||||||
"template",
|
|
||||||
new CatalogItemImpl(
|
|
||||||
"template",
|
|
||||||
URI
|
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/2"),
|
|
||||||
"description",
|
|
||||||
new ReferenceTypeImpl(
|
|
||||||
"template",
|
|
||||||
"application/vnd.vmware.vcloud.vAppTemplate+xml",
|
|
||||||
URI
|
|
||||||
.create("https://vcenterprise.bluelock.com/api/v1.0/vAppTemplate/2")),
|
|
||||||
ImmutableMap.<String, String> of()))));
|
ImmutableMap.<String, String> of()))));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,17 @@ public class VCloudClientLiveTest extends CommonVCloudClientLiveTest<VCloudClien
|
||||||
credential = checkNotNull(System.getProperty("vcloud.credential"), "vcloud.credential");
|
credential = checkNotNull(System.getProperty("vcloud.credential"), "vcloud.credential");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testListOrgs() throws Exception {
|
||||||
|
for (ReferenceType response : connection.listOrgs().values()) {
|
||||||
|
assertNotNull(response);
|
||||||
|
assertNotNull(response.getName());
|
||||||
|
assertNotNull(response.getHref());
|
||||||
|
assertEquals(connection.getOrg(response.getHref()).getName(), response.getName());
|
||||||
|
assertEquals(connection.findOrgNamed(response.getName()).getName(), response.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetVAppTemplate() throws Exception {
|
public void testGetVAppTemplate() throws Exception {
|
||||||
Org org = connection.findOrgNamed(null);
|
Org org = connection.findOrgNamed(null);
|
||||||
|
|
Loading…
Reference in New Issue