http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/components/org.apache.stratos.cloud.controller/pom.xml ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/pom.xml b/components/org.apache.stratos.cloud.controller/pom.xml index 4f2919b..ec808d1 100644 --- a/components/org.apache.stratos.cloud.controller/pom.xml +++ b/components/org.apache.stratos.cloud.controller/pom.xml @@ -17,12 +17,13 @@ # 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"> +<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"> <parent> - <groupId>org.apache.stratos</groupId> - <artifactId>stratos-components-parent</artifactId> - <version>4.1.0-SNAPSHOT</version> + <groupId>org.apache.stratos</groupId> + <artifactId>stratos-components-parent</artifactId> + <version>4.1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> @@ -54,8 +55,8 @@ org.apache.stratos.cloud.controller.topology.*, org.apache.stratos.cloud.controller.iaases.*, org.apache.stratos.cloud.controller.pojo.*, - org.apache.stratos.cloud.controller.deployers.*, - org.apache.stratos.cloud.controller.exception.*, + org.apache.stratos.cloud.controller.deployers.*, + org.apache.stratos.cloud.controller.exception.*, </Export-Package> <Private-Package> !org.apache.stratos.cloud.controller.interfaces.*, @@ -69,18 +70,18 @@ org.apache.stratos.cloud.controller.*, </Private-Package> <Import-Package> - !org.apache.commons.logging, + !org.apache.commons.logging, org.apache.commons.logging; version=0.0.0, org.apache.commons.io.*, org.wso2.carbon.utils.*, <!--org.jclouds.compute*;version="${jclouds.version}";resolution:=optional, - org.jclouds*;version="${jclouds.version}",--> + org.jclouds*;version="${jclouds.version}",--> *; resolution:=optional </Import-Package> <DynamicImport-Package>*</DynamicImport-Package> - + <Axis2Deployer>CloudControllerDeployer</Axis2Deployer> - + </instructions> </configuration> </plugin> @@ -91,171 +92,186 @@ <dependency> <groupId>org.wso2.carbon</groupId> <artifactId>org.wso2.carbon.core</artifactId> - </dependency> + </dependency> <dependency> <groupId>org.wso2.carbon</groupId> <artifactId>org.wso2.carbon.utils</artifactId> - </dependency> + </dependency> <dependency> <groupId>org.apache.stratos</groupId> <artifactId>org.apache.stratos.messaging</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>org.reflections</groupId> - <artifactId>reflections</artifactId> - <version>0.9.9-RC1</version> - </dependency> + <dependency> + <groupId>com.google.guava</groupId> + <artifactId>guava</artifactId> + <version>17.0</version> + </dependency> + <dependency> + <groupId>com.jcraft</groupId> + <artifactId>jsch.agentproxy.jsch</artifactId> + <version>0.0.7</version> + </dependency> + <dependency> + <groupId>com.jcraft</groupId> + <artifactId>jsch.agentproxy.core</artifactId> + <version>0.0.7</version> + </dependency> + <dependency> + <groupId>com.jcraft</groupId> + <artifactId>jsch.agentproxy.connector-factory</artifactId> + <version>0.0.7</version> + </dependency> + <dependency> + <groupId>org.reflections</groupId> + <artifactId>reflections</artifactId> + <version>0.9.9-RC1</version> + </dependency> -<dependency> - <groupId>org.wso2.carbon</groupId> - <artifactId>org.wso2.carbon.securevault</artifactId> - <version>${wso2carbon.version}</version> -</dependency> -<dependency> - <groupId>org.hectorclient.wso2</groupId> - <artifactId>hector-core</artifactId> - <version>1.1.0.wso2v1</version> - <exclusions> - <exclusion> - <groupId>com.google.guava.wso2</groupId> - <artifactId>guava</artifactId> - </exclusion> - </exclusions> - -</dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>14.0.1</version> - </dependency> -<dependency> - <groupId>org.wso2.andes.wso2</groupId> - <artifactId>andes-client</artifactId> - <version>0.13.wso2v3</version> - </dependency> -<dependency> - <groupId>org.apache.geronimo.specs.wso2</groupId> - <artifactId>geronimo-jms_1.1_spec</artifactId> - <version>${orbit.version.geronimo-jms_1.1_spec}</version> - </dependency> + <dependency> + <groupId>org.wso2.carbon</groupId> + <artifactId>org.wso2.carbon.securevault</artifactId> + <version>${wso2carbon.version}</version> + </dependency> + <dependency> + <groupId>org.hectorclient.wso2</groupId> + <artifactId>hector-core</artifactId> + <version>1.1.0.wso2v1</version> + <exclusions> + <exclusion> + <groupId>com.google.guava.wso2</groupId> + <artifactId>guava</artifactId> + </exclusion> + </exclusions> -<dependency> - <groupId>org.wso2.carbon</groupId> - <artifactId>org.wso2.carbon.analytics.hive.stub</artifactId> - <version>4.2.0</version> -</dependency> + </dependency> + <dependency> + <groupId>org.wso2.andes.wso2</groupId> + <artifactId>andes-client</artifactId> + <version>0.13.wso2v3</version> + </dependency> + <dependency> + <groupId>org.apache.geronimo.specs.wso2</groupId> + <artifactId>geronimo-jms_1.1_spec</artifactId> + <version>${orbit.version.geronimo-jms_1.1_spec}</version> + </dependency> - <!-- jclouds dependencies --> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-core</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-compute</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds.driver</groupId> - <artifactId>jclouds-bouncycastle</artifactId> - <version>${jclouds.version}</version> - <exclusions> - <exclusion> - <groupId>org.bouncycastle</groupId> - <artifactId>bcprov-jdk16</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.apache.jclouds.driver</groupId> - <artifactId>jclouds-sshj</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds.driver</groupId> - <artifactId>jclouds-log4j</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds.driver</groupId> - <artifactId>jclouds-enterprise</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>ec2</artifactId> - <version>1.7.1-stratos</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>aws-ec2</artifactId> - <version>1.7.1-stratos</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>openstack-nova</artifactId> - <version>1.7.1-stratos</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds.api</groupId> - <artifactId>openstack-keystone</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-scriptbuilder</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.stratos</groupId> - <artifactId>vcloud</artifactId> - <version>1.7.1-stratos</version> - </dependency> + <dependency> + <groupId>org.wso2.carbon</groupId> + <artifactId>org.wso2.carbon.analytics.hive.stub</artifactId> + <version>4.2.0</version> + </dependency> - <dependency> - <groupId>com.jamesmurty.utils.wso2</groupId> - <artifactId>java-xmlbuilder</artifactId> - <version>0.4.wso2v1</version> - </dependency> - <dependency> - <groupId>com.google.code.gson</groupId> - <artifactId>gson</artifactId> - <version>${gson2.version}</version> - </dependency> - <dependency> - <groupId>com.google.guice.wso2</groupId> - <artifactId>guice</artifactId> - <version>${google.guice.wso2.version}</version> - </dependency> - <dependency> - <groupId>com.google.guice.assistedinject.wso2</groupId> - <artifactId>guice-assistedinject</artifactId> - <version>${com.google.guice.assistedinject.wso2.version}</version> - </dependency> - <dependency> - <groupId>com.sun.jersey</groupId> - <artifactId>jersey-core</artifactId> - <version>${sun.jersey.version}</version> - </dependency> - <dependency> - <groupId>net.oauth.core</groupId> - <artifactId>oauth</artifactId> - <version>20100527</version> - </dependency> - <dependency> - <groupId>commons-io.wso2</groupId> - <artifactId>commons-io</artifactId> - <version>2.0.0.wso2v1</version> - </dependency> - <dependency> - <groupId>rhino.wso2</groupId> - <artifactId>js</artifactId> - <version>1.7.0.R1-wso2v3</version> - </dependency> - <dependency> + <!-- jclouds dependencies --> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-core</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-compute</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-bouncycastle</artifactId> + <version>${jclouds.version}</version> + <exclusions> + <exclusion> + <groupId>org.bouncycastle</groupId> + <artifactId>bcprov-jdk16</artifactId> + </exclusion> + </exclusions> + </dependency> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-sshj</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-log4j</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.driver</groupId> + <artifactId>jclouds-enterprise</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.stratos</groupId> + <artifactId>ec2</artifactId> + <version>1.8.0-stratos</version> + </dependency> + <dependency> + <groupId>org.apache.stratos</groupId> + <artifactId>aws-ec2</artifactId> + <version>1.8.0-stratos</version> + </dependency> + <dependency> + <groupId>org.apache.stratos</groupId> + <artifactId>openstack-nova</artifactId> + <version>1.8.0-stratos</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds.api</groupId> + <artifactId>openstack-keystone</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.jclouds</groupId> + <artifactId>jclouds-scriptbuilder</artifactId> + <version>${jclouds.version}</version> + </dependency> + <dependency> + <groupId>org.apache.stratos</groupId> + <artifactId>vcloud</artifactId> + <version>1.8.0-stratos</version> + </dependency> + + <dependency> + <groupId>com.jamesmurty.utils.wso2</groupId> + <artifactId>java-xmlbuilder</artifactId> + <version>0.4.wso2v1</version> + </dependency> + <dependency> + <groupId>com.google.code.gson</groupId> + <artifactId>gson</artifactId> + <version>${gson2.version}</version> + </dependency> + <dependency> + <groupId>com.google.guice.wso2</groupId> + <artifactId>guice</artifactId> + <version>${google.guice.wso2.version}</version> + </dependency> + <dependency> + <groupId>com.google.guice.assistedinject.wso2</groupId> + <artifactId>guice-assistedinject</artifactId> + <version>${com.google.guice.assistedinject.wso2.version}</version> + </dependency> + <dependency> + <groupId>com.sun.jersey</groupId> + <artifactId>jersey-core</artifactId> + <version>${sun.jersey.version}</version> + </dependency> + <dependency> + <groupId>net.oauth.core</groupId> + <artifactId>oauth</artifactId> + <version>20100527</version> + </dependency> + <dependency> + <groupId>commons-io.wso2</groupId> + <artifactId>commons-io</artifactId> + <version>2.0.0.wso2v1</version> + </dependency> + <dependency> + <groupId>rhino.wso2</groupId> + <artifactId>js</artifactId> + <version>1.7.0.R1-wso2v3</version> + </dependency> + <dependency> <groupId>org.wso2.carbon</groupId> <artifactId>org.wso2.carbon.databridge.agent.thrift</artifactId> <version>4.2.0</version>
http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java index 2c0b27c..1c953a8 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java @@ -18,6 +18,7 @@ */ package org.apache.stratos.cloud.controller.iaases; +import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; @@ -46,7 +47,6 @@ import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.options.TemplateOptions; import org.jclouds.openstack.nova.v2_0.NovaApi; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; -import org.jclouds.openstack.nova.v2_0.NovaAsyncApi; import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions; import org.jclouds.openstack.nova.v2_0.domain.FloatingIP; import org.jclouds.openstack.nova.v2_0.domain.HostAggregate; @@ -55,7 +55,7 @@ import org.jclouds.openstack.nova.v2_0.domain.Network; import org.jclouds.openstack.nova.v2_0.domain.Volume; import org.jclouds.openstack.nova.v2_0.domain.VolumeAttachment; import org.jclouds.openstack.nova.v2_0.domain.zonescoped.AvailabilityZone; -import org.jclouds.openstack.nova.v2_0.extensions.AvailabilityZoneAPI; +import org.jclouds.openstack.nova.v2_0.extensions.AvailabilityZoneApi; import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi; import org.jclouds.openstack.nova.v2_0.extensions.HostAggregateApi; import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi; @@ -199,8 +199,8 @@ public class OpenstackNovaIaas extends Iaas { ComputeServiceContext context = iaasInfo.getComputeService() .getContext(); - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - KeyPairApi api = nova.getApi().getKeyPairExtensionForZone(region).get(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + KeyPairApi api = novaApi.getKeyPairExtensionForZone(region).get(); KeyPair keyPair = api.createWithPublicKey(keyPairName, publicKey); @@ -228,8 +228,8 @@ public class OpenstackNovaIaas extends Iaas { String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo); - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - FloatingIPApi floatingIp = nova.getApi().getFloatingIPExtensionForZone( + NovaApi novaApi = context.unwrapApi(NovaApi.class); + FloatingIPApi floatingIp = novaApi.getFloatingIPExtensionForZone( region).get(); String ip = null; @@ -311,11 +311,10 @@ public class OpenstackNovaIaas extends Iaas { ComputeServiceContext context = iaasInfo.getComputeService() .getContext(); - NovaApi novaClient = context.unwrap(NovaApiMetadata.CONTEXT_TOKEN).getApi(); String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo); - FloatingIPApi floatingIp = novaClient.getFloatingIPExtensionForZone( - region).get(); + FloatingIPApi floatingIp = context.unwrapApi(NovaApi.class).getFloatingIPExtensionForZone( + region).get(); if(log.isDebugEnabled()) { log.debug("OpenstackNovaIaas:associatePredefinedAddress:floatingip:" + floatingIp); @@ -403,9 +402,8 @@ public class OpenstackNovaIaas extends Iaas { String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo); - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - FloatingIPApi floatingIPApi = nova.getApi() - .getFloatingIPExtensionForZone(region).get(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + FloatingIPApi floatingIPApi = novaApi.getFloatingIPExtensionForZone(region).get(); for (FloatingIP floatingIP : floatingIPApi.list()) { if (floatingIP.getIp().equals(ip)) { @@ -439,8 +437,8 @@ public class OpenstackNovaIaas extends Iaas { } ComputeServiceContext context = iaasInfo.getComputeService().getContext(); - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - Set<String> zones = nova.getApi().getConfiguredZones(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + Set<String> zones = novaApi.getConfiguredZones(); for (String configuredZone : zones) { if (region.equalsIgnoreCase(configuredZone)) { if (log.isDebugEnabled()) { @@ -467,9 +465,9 @@ public class OpenstackNovaIaas extends Iaas { throw new InvalidZoneException(msg); } ComputeServiceContext context = iaasInfo.getComputeService().getContext(); - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - AvailabilityZoneAPI zoneApi = nova.getApi().getAvailabilityZoneApi(region); - for (AvailabilityZone z : zoneApi.list()) { + NovaApi novaApi = context.unwrapApi(NovaApi.class); + Optional<? extends AvailabilityZoneApi> availabilityZoneApi = novaApi.getAvailabilityZoneApi(region); + for (AvailabilityZone z : availabilityZoneApi.get().list()) { if (zone.equalsIgnoreCase(z.getName())) { if (log.isDebugEnabled()) { @@ -495,8 +493,8 @@ public class OpenstackNovaIaas extends Iaas { throw new InvalidHostException(msg); } ComputeServiceContext context = iaasInfo.getComputeService().getContext(); - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - HostAggregateApi hostApi = nova.getApi().getHostAggregateExtensionForZone(zone).get(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + HostAggregateApi hostApi = novaApi.getHostAggregateExtensionForZone(zone).get(); for (HostAggregate hostAggregate : hostApi.list()) { for (String configuredHost : hostAggregate.getHosts()) { if (host.equalsIgnoreCase(configuredHost)) { @@ -529,9 +527,9 @@ public class OpenstackNovaIaas extends Iaas { return null; } ComputeServiceContext context = iaasInfo.getComputeService().getContext(); - - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - VolumeApi volumeApi = nova.getApi().getVolumeExtensionForZone(region).get(); + + NovaApi novaApi = context.unwrapApi(NovaApi.class); + VolumeApi volumeApi = novaApi.getVolumeExtensionForZone(region).get(); Volume volume; if(StringUtils.isEmpty(snapshotId)){ if(log.isDebugEnabled()){ @@ -578,8 +576,8 @@ public class OpenstackNovaIaas extends Iaas { IaasProvider iaasInfo = getIaasProvider(); String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo); ComputeServiceContext context = iaasInfo.getComputeService().getContext();; - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - VolumeApi volumeApi = nova.getApi().getVolumeExtensionForZone(region).get(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + VolumeApi volumeApi = novaApi.getVolumeExtensionForZone(region).get(); Volume.Status volumeStatus = this.getVolumeStatus(volumeApi, volumeId); while(volumeStatus != expectedStatus){ @@ -629,9 +627,9 @@ public class OpenstackNovaIaas extends Iaas { return null; } - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - VolumeApi volumeApi = nova.getApi().getVolumeExtensionForZone(region).get(); - VolumeAttachmentApi volumeAttachmentApi = nova.getApi().getVolumeAttachmentExtensionForZone(region).get(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + VolumeApi volumeApi = novaApi.getVolumeExtensionForZone(region).get(); + VolumeAttachmentApi volumeAttachmentApi = novaApi.getVolumeAttachmentExtensionForZone(region).get(); Volume.Status volumeStatus = this.getVolumeStatus(volumeApi, volumeId); @@ -698,8 +696,8 @@ public class OpenstackNovaIaas extends Iaas { log.debug(String.format("Starting to detach volume %s from the instance %s", volumeId, instanceId)); } - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - VolumeAttachmentApi api = nova.getApi().getVolumeAttachmentExtensionForZone(region).get(); + NovaApi novaApi = context.unwrapApi(NovaApi.class); + VolumeAttachmentApi api = novaApi.getVolumeAttachmentExtensionForZone(region).get(); if (api.detachVolumeFromServer(volumeId, instanceId)) { log.info(String.format("Detachment of Volume [id]: %s from instance [id]: %s was successful. [region] : %s of Iaas : %s", volumeId, instanceId, region, iaasInfo)); }else{ @@ -721,9 +719,9 @@ public class OpenstackNovaIaas extends Iaas { log.fatal(String.format("Cannot delete the volume [id]: %s of the [region] : %s of Iaas : %s", volumeId, region, iaasInfo)); return; } - - RestContext<NovaApi, NovaAsyncApi> nova = context.unwrap(); - VolumeApi api = nova.getApi().getVolumeExtensionForZone(region).get(); + + NovaApi novaApi = context.unwrapApi(NovaApi.class); + VolumeApi api = novaApi.getVolumeExtensionForZone(region).get(); if (api.delete(volumeId)) { log.info(String.format("Deletion of Volume [id]: %s was successful. [region] : %s of Iaas : %s", volumeId, region, iaasInfo)); } http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/README.md ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/README.md b/dependencies/jclouds/apis/docker/1.7.1-stratos/README.md deleted file mode 100644 index 3ce8cf0..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# Docker as a local cloud provider -jclouds-docker is a local cloud provider modelled on [docker](http://www.docker.io). Similar to other jclouds supported -providers, it supports the same portable abstractions offered by jclouds. - -##Setup - -Please follow these steps to configure your workstation for jclouds-docker: - -- install the latest Docker release (please visit http://www.docker.io/gettingstarted/) - -If you are on OS X, please consider [boot2docker](http://docs.docker.io/en/latest/installation/mac/) as simplified -way to install docker locally. - -#How it works - - - --------------- ------------- - | Image(s) | | Node(s) | - --------------- ------------- - --------- docker remote api ---------------------------------------- - | jclouds | ---------------------------> | DOCKER_HOST | - --------- ---------------------------------------- - -##Components - -- jclouds \- acts as a java client to access to docker features -- DOCKER_HOST \- hosts Docker API, NB: jclouds-docker assumes that the latest Docker is installed -- Image \- it is a docker image that can be started. -- Node \- is a docker container - -## Assumptions - -- jclouds-docker assumes that the images specified using the template are ssh'able. -- jclouds-docker will mount ${user.home} to /root of the container - --------------- - -#Notes: -- jclouds-docker is still at alpha stage please report any issues you find at [jclouds issues](https://github.com/jclouds/jclouds/issues?state=open) -- jclouds-docker has been tested on Mac OSX, it might work on Linux iff vbox is running and set up correctly. However, it will not currently run on Windows. - --------------- - -#Troubleshooting -As jclouds docker support is quite new, issues may occasionally arise. Please follow these steps to get things going again: - -1. Remove all containers - - `$ docker ps -a -q | xargs docker stop | xargs docker rm` -2. remove all the images - - `$ docker images -q | xargs docker rmi` http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/pom.xml ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/pom.xml b/dependencies/jclouds/apis/docker/1.7.1-stratos/pom.xml deleted file mode 100644 index 0fb9b96..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/pom.xml +++ /dev/null @@ -1,145 +0,0 @@ -<?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/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.jclouds.labs</groupId> - <artifactId>jclouds-labs</artifactId> - <version>1.7.1</version> - </parent> - - <!-- TODO: when out of labs, switch to org.jclouds.provider --> - <groupId>org.apache.stratos</groupId> - <artifactId>docker</artifactId> - <name>jclouds docker API</name> - <version>1.7.1-stratos</version> - <description>ComputeService binding to the Docker API</description> - <packaging>bundle</packaging> - - <properties> - <jclouds.version>1.7.1</jclouds.version> - <test.docker.endpoint>https://localhost:4243</test.docker.endpoint> - <test.docker.api-version>1.10</test.docker.api-version> - <test.docker.identity>FIXME</test.docker.identity> - <test.docker.credential>FIXME</test.docker.credential> - <jclouds.osgi.export>org.jclouds.docker*;version="${project.version}"</jclouds.osgi.export> - <jclouds.osgi.import> - org.jclouds.compute.internal;version="${jclouds.version}", - org.jclouds.rest.internal;version="${jclouds.version}", - org.jclouds*;version="${jclouds.version}", - * - </jclouds.osgi.import> - </properties> - - <dependencies> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-core</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-compute</artifactId> - <version>${jclouds.version}</version> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-compress</artifactId> - <version>1.5</version> - </dependency> - - <dependency> - <groupId>org.apache.jclouds.driver</groupId> - <artifactId>jclouds-sshj</artifactId> - <version>${jclouds.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-core</artifactId> - <version>${jclouds.version}</version> - <type>test-jar</type> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.jclouds</groupId> - <artifactId>jclouds-compute</artifactId> - <version>${jclouds.version}</version> - <type>test-jar</type> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.jclouds.driver</groupId> - <artifactId>jclouds-slf4j</artifactId> - <version>${jclouds.version}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>ch.qos.logback</groupId> - <artifactId>logback-classic</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>com.squareup.okhttp</groupId> - <artifactId>mockwebserver</artifactId> - <scope>test</scope> - <exclusions> - <!-- Already provided by jclouds-sshj --> - <exclusion> - <groupId>org.bouncycastle</groupId> - <artifactId>bcprov-jdk15on</artifactId> - </exclusion> - </exclusions> - </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> - <systemPropertyVariables> - <test.docker.endpoint>${test.docker.endpoint}</test.docker.endpoint> - <test.docker.api-version>${test.docker.api-version}</test.docker.api-version> - <test.docker.credential>${test.docker.identity}</test.docker.credential> - <test.docker.credential>${test.docker.credential}</test.docker.credential> - </systemPropertyVariables> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - </profiles> - -</project> http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApi.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApi.java deleted file mode 100644 index 9fe6135..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApi.java +++ /dev/null @@ -1,38 +0,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. - */ -package org.jclouds.docker; - -import org.jclouds.docker.compute.features.RemoteApi; -import org.jclouds.rest.annotations.Delegate; - -import java.io.Closeable; - -/** - * Provides synchronous access to Docker Remote API. - * - * @author Andrea Turli - * @see <a href="http://docs.docker.io/en/latest/api/docker_remote_api_v1.8/#docker-remote-api-v1-8"></a> - */ -public interface DockerApi extends Closeable { - - /** - * Provides synchronous access to Docker Remote API features. - */ - @Delegate - RemoteApi getRemoteApi(); - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java deleted file mode 100644 index c627d82..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/DockerApiMetadata.java +++ /dev/null @@ -1,100 +0,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. - */ -package org.jclouds.docker; - -import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE; -import static org.jclouds.reflect.Reflection2.typeToken; -import java.net.URI; -import java.util.Properties; - -import org.jclouds.Constants; -import org.jclouds.apis.ApiMetadata; -import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.compute.config.ComputeServiceProperties; -import org.jclouds.docker.compute.config.DockerComputeServiceContextModule; -import org.jclouds.docker.config.DockerHttpApiModule; -import org.jclouds.docker.config.DockerParserModule; -import org.jclouds.rest.internal.BaseHttpApiMetadata; - -import com.google.common.collect.ImmutableSet; -import com.google.inject.Module; - -/** - * Implementation of {@link BaseHttpApiMetadata} for the Docker API - * - * @author Andrea Turli - */ -public class DockerApiMetadata extends BaseHttpApiMetadata<DockerApi> { - - @Override - public Builder toBuilder() { - return new Builder().fromApiMetadata(this); - } - - public DockerApiMetadata() { - this(new Builder()); - } - - protected DockerApiMetadata(Builder builder) { - super(builder); - } - - public static Properties defaultProperties() { - Properties properties = BaseHttpApiMetadata.defaultProperties(); - properties.setProperty(Constants.PROPERTY_MAX_RETRIES, "15"); - properties.setProperty("jclouds.ssh.retry-auth", "true"); - properties.setProperty(Constants.PROPERTY_CONNECTION_TIMEOUT, "1200000"); // 15 minutes - properties.setProperty(ComputeServiceProperties.IMAGE_LOGIN_USER, "root:password"); - properties.setProperty(TEMPLATE, "osFamily=UBUNTU,os64Bit=true,osVersionMatches=1[012].[01][04]"); - return properties; - } - - public static class Builder extends BaseHttpApiMetadata.Builder<DockerApi, Builder> { - - protected Builder() { - super(DockerApi.class); - id("docker") - .name("Docker API") - .identityName("user") - .credentialName("password") - .documentation(URI.create("http://docs.docker.io/en/latest/api/docker_remote_api/")) - .version("1.10") - .defaultEndpoint("http://127.0.0.1:4243") - .defaultProperties(DockerApiMetadata.defaultProperties()) - .view(typeToken(ComputeServiceContext.class)) - .defaultModules(ImmutableSet.<Class<? extends Module>>of( - DockerHttpApiModule.class, - DockerParserModule.class, - DockerComputeServiceContextModule.class)); - } - - @Override - public DockerApiMetadata build() { - return new DockerApiMetadata(this); - } - - @Override - protected Builder self() { - return this; - } - - @Override - public Builder fromApiMetadata(ApiMetadata in) { - return this; - } - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java deleted file mode 100644 index ea485d2..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/binders/BindInputStreamToRequest.java +++ /dev/null @@ -1,74 +0,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. - */ -package org.jclouds.docker.binders; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; - -import javax.annotation.Resource; -import javax.inject.Named; -import javax.inject.Singleton; -import javax.ws.rs.core.MediaType; - -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.docker.compute.features.internal.Archives; -import org.jclouds.http.HttpRequest; -import org.jclouds.io.Payload; -import org.jclouds.io.Payloads; -import org.jclouds.logging.Logger; -import org.jclouds.rest.Binder; - -import com.google.common.base.Throwables; -import com.google.common.io.Files; - -/** - * @author Andrea Turli - */ -@Singleton -public class BindInputStreamToRequest implements Binder { - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - @SuppressWarnings("unchecked") - @Override - public <R extends HttpRequest> R bindToRequest(R request, Object input) { - checkArgument(checkNotNull(input, "input") instanceof File, "this binder is only valid for File!"); - checkNotNull(request, "request"); - - File dockerFile = (File) input; - File tmpDir = Files.createTempDir(); - final File targetFile = new File(tmpDir + File.separator + "Dockerfile"); - try { - Files.copy(dockerFile, targetFile); - File archive = Archives.tar(tmpDir, File.createTempFile("archive", ".tar")); - FileInputStream data = new FileInputStream(archive); - Payload payload = Payloads.newInputStreamPayload(data); - payload.getContentMetadata().setContentLength(data.getChannel().size()); - payload.getContentMetadata().setContentType(MediaType.TEXT_PLAIN); - request.setPayload(payload); - } catch (IOException e) { - logger.error(e, "Couldn't create a tarball for %s", targetFile); - throw Throwables.propagate(e); - } - return request; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java deleted file mode 100644 index 7368299..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/config/DockerComputeServiceContextModule.java +++ /dev/null @@ -1,73 +0,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. - */ -package org.jclouds.docker.compute.config; - -import com.google.common.base.Function; -import com.google.common.base.Optional; -import com.google.inject.Injector; -import com.google.inject.TypeLiteral; -import org.jclouds.compute.ComputeServiceAdapter; -import org.jclouds.compute.config.ComputeServiceAdapterContextModule; -import org.jclouds.compute.domain.Hardware; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.extensions.ImageExtension; -import org.jclouds.compute.options.TemplateOptions; -import org.jclouds.docker.compute.extensions.DockerImageExtension; -import org.jclouds.docker.compute.functions.ContainerToNodeMetadata; -import org.jclouds.docker.compute.functions.ImageToImage; -import org.jclouds.docker.compute.functions.StateToStatus; -import org.jclouds.docker.compute.options.DockerTemplateOptions; -import org.jclouds.docker.compute.strategy.DockerComputeServiceAdapter; -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.domain.Image; -import org.jclouds.docker.domain.State; -import org.jclouds.domain.Location; -import org.jclouds.functions.IdentityFunction; - -/** - * @author Andrea Turli - */ -public class DockerComputeServiceContextModule extends - ComputeServiceAdapterContextModule<Container, Hardware, Image, Location> { - - @Override - protected void configure() { - super.configure(); - bind(new TypeLiteral<ComputeServiceAdapter<Container, Hardware, Image, Location>>() { - }).to(DockerComputeServiceAdapter.class); - bind(new TypeLiteral<Function<Container, NodeMetadata>>() { - }).to(ContainerToNodeMetadata.class); - bind(new TypeLiteral<Function<Image, org.jclouds.compute.domain.Image>>() { - }).to(ImageToImage.class); - bind(new TypeLiteral<Function<Hardware, Hardware>>() { - }).to(Class.class.cast(IdentityFunction.class)); - bind(new TypeLiteral<Function<Location, Location>>() { - }).to(Class.class.cast(IdentityFunction.class)); - bind(new TypeLiteral<Function<State, NodeMetadata.Status>>() { - }).to(StateToStatus.class); - bind(TemplateOptions.class).to(DockerTemplateOptions.class); - - bind(new TypeLiteral<ImageExtension>() { - }).to(DockerImageExtension.class); - } - - @Override - protected Optional<ImageExtension> provideImageExtension(Injector i) { - return Optional.of(i.getInstance(ImageExtension.class)); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/extensions/DockerImageExtension.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/extensions/DockerImageExtension.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/extensions/DockerImageExtension.java deleted file mode 100644 index 8b4820d..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/extensions/DockerImageExtension.java +++ /dev/null @@ -1,120 +0,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. - */ -package org.jclouds.docker.compute.extensions; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE; -import java.util.NoSuchElementException; -import java.util.concurrent.Callable; -import java.util.concurrent.atomic.AtomicReference; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.Constants; -import org.jclouds.compute.domain.CloneImageTemplate; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.ImageTemplate; -import org.jclouds.compute.domain.ImageTemplateBuilder; -import org.jclouds.compute.extensions.ImageExtension; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.docker.DockerApi; -import org.jclouds.docker.compute.functions.ImageToImage; -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.options.CommitOptions; -import org.jclouds.logging.Logger; - -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; -import com.google.common.util.concurrent.Atomics; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.UncheckedTimeoutException; - -/** - * Docker implementation of {@link org.jclouds.compute.extensions.ImageExtension} - * - * @author Andrea Turli - */ -@Singleton -public class DockerImageExtension implements ImageExtension { - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - private Logger logger = Logger.NULL; - private final DockerApi api; - private final ListeningExecutorService userExecutor; - private final Predicate<AtomicReference<Image>> imageAvailablePredicate; - - @Inject - public DockerImageExtension(DockerApi api, @Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService - userExecutor, @Named(TIMEOUT_IMAGE_AVAILABLE) Predicate<AtomicReference<Image>> imageAvailablePredicate) { - this.api = checkNotNull(api, "api"); - this.userExecutor = checkNotNull(userExecutor, "userExecutor"); - this.imageAvailablePredicate = checkNotNull(imageAvailablePredicate, "imageAvailablePredicate"); - } - - @Override - public ImageTemplate buildImageTemplateFromNode(String name, final String id) { - Container container = api.getRemoteApi().inspectContainer(id); - if (container == null) - throw new NoSuchElementException("Cannot find container with id: " + id); - CloneImageTemplate template = new ImageTemplateBuilder.CloneImageTemplateBuilder().nodeId(id).name(name).build(); - return template; - } - - @Override - public ListenableFuture<Image> createImage(ImageTemplate template) { - checkArgument(template instanceof CloneImageTemplate, - " docker only currently supports creating images through cloning."); - CloneImageTemplate cloneTemplate = (CloneImageTemplate) template; - - Container container = api.getRemoteApi().inspectContainer(cloneTemplate.getSourceNodeId()); - CommitOptions options = CommitOptions.Builder.containerId(container.getId()).tag(cloneTemplate.getName()); - org.jclouds.docker.domain.Image dockerImage = api.getRemoteApi().commit(options); - - dockerImage = org.jclouds.docker.domain.Image.builder().fromImage(dockerImage) - .repoTags(ImmutableList.of(cloneTemplate.getName() + ":latest")) - .build(); - - logger.info(">> Registered new image %s, waiting for it to become available.", dockerImage.getId()); - final AtomicReference<Image> image = Atomics.newReference(new ImageToImage().apply(dockerImage)); - return userExecutor.submit(new Callable<Image>() { - @Override - public Image call() throws Exception { - if (imageAvailablePredicate.apply(image)) - return image.get(); - throw new UncheckedTimeoutException("Image was not created within the time limit: " + image.get()); - } - }); - } - - @Override - public boolean deleteImage(String id) { - try { - api.getRemoteApi().deleteImage(id); - } catch (Exception e) { - logger.error(e, "Could not delete image with id %s ", id); - return false; - } - return true; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/RemoteApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/RemoteApi.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/RemoteApi.java deleted file mode 100644 index bc4abff..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/RemoteApi.java +++ /dev/null @@ -1,275 +0,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. - */ -package org.jclouds.docker.compute.features; - -import java.io.Closeable; -import java.io.File; -import java.io.InputStream; -import java.util.Set; - -import javax.inject.Named; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; - -import org.jclouds.Fallbacks; -import org.jclouds.docker.binders.BindInputStreamToRequest; -import org.jclouds.docker.domain.Config; -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.domain.HostConfig; -import org.jclouds.docker.domain.Image; -import org.jclouds.docker.domain.Version; -import org.jclouds.docker.options.BuildOptions; -import org.jclouds.docker.options.CommitOptions; -import org.jclouds.docker.options.CreateImageOptions; -import org.jclouds.docker.options.DeleteImageOptions; -import org.jclouds.docker.options.ListContainerOptions; -import org.jclouds.docker.options.ListImageOptions; -import org.jclouds.docker.options.RemoveContainerOptions; -import org.jclouds.io.Payload; -import org.jclouds.rest.annotations.BinderParam; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.Headers; -import org.jclouds.rest.binders.BindToJsonPayload; - -/** - * @author Andrea Turli - */ -@Consumes(MediaType.APPLICATION_JSON) -public interface RemoteApi extends Closeable { - - /** - * Get the information of the current docker version. - * - * @return The information of the current docker version. - */ - @Named("version") - @GET - @Path("/version") - Version getVersion(); - - /** - * List all running containers - * - * @return a set of containers - */ - @Named("containers:list") - @GET - @Path("/containers/json") - @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class) - Set<Container> listContainers(); - - /** - * List all running containers - * - * @param options the options to list the containers (@see ListContainerOptions) - * @return a set of containers - */ - @Named("containers:list") - @GET - @Path("/containers/json") - @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class) - Set<Container> listContainers(ListContainerOptions options); - - /** - * Create a container - * - * @param name the name for the new container. Must match /?[a-zA-Z0-9_-]+. - * @param config the containerâs configuration (@see BindToJsonPayload) - * @return a new container - */ - @Named("container:create") - @POST - @Path("/containers/create") - Container createContainer(@QueryParam("name") String name, @BinderParam(BindToJsonPayload.class) Config config); - - /** - * Return low-level information on the container id - * @param containerId The id of the container to get. - * @return The details of the container or <code>null</code> if the container with the given id doesn't exist. - */ - @Named("container:inspect") - @GET - @Path("/containers/{id}/json") - @Fallback(Fallbacks.NullOnNotFoundOr404.class) - Container inspectContainer(@PathParam("id") String containerId); - - /** - * Remove the container by id from the filesystem - * - * @param containerId The id of the container to be removed. - */ - @Named("container:delete") - @DELETE - @Path("/containers/{id}") - void removeContainer(@PathParam("id") String containerId); - - /** - * Remove the container by id from the filesystem - * - * @param containerId The id of the container to be removed. - * @param options the operationâs configuration (@see RemoveContainerOptions) - */ - @Named("container:delete") - @DELETE - @Path("/containers/{id}") - void removeContainer(@PathParam("id") String containerId, RemoveContainerOptions options); - - /** - * Start a container by id. - * - * @param containerId The id of the container to be started. - */ - @Named("container:start") - @POST - @Path("/containers/{id}/start") - void startContainer(@PathParam("id") String containerId); - - /** - * Start a container. - * - * @param containerId The id of the container to be started. - * @param hostConfig the containerâs host configuration - */ - @Named("container:start") - @POST - @Path("/containers/{id}/start") - void startContainer(@PathParam("id") String containerId, @BinderParam(BindToJsonPayload.class) HostConfig hostConfig); - - /** - * Stop a container by id. - * - * @param containerId The id of the container to be stopped. - * @return the stream of the stop execution. - */ - @Named("container:stop") - @POST - @Path("/containers/{id}/stop") - void stopContainer(@PathParam("id") String containerId); - - /** - * Create a new image from a containerâs changes - * - * @param options the commitâs configuration (@see CommitOptions) - * @return a new image created from the current container's status. - */ - @Named("container:commit") - @POST - @Path("/commit") - Image commit(CommitOptions options); - - /** - * List images - * - * @return the images available. - */ - @Named("images:list") - @GET - @Path("/images/json") - @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class) - Set<Image> listImages(); - - /** - * List images - * - * @param options the configuration to list images (@see ListImageOptions) - * @return the images available. - */ - @Named("images:list") - @GET - @Path("/images/json") - @Fallback(Fallbacks.EmptySetOnNotFoundOr404.class) - Set<Image> listImages(ListImageOptions options); - - /** - * Inspect an image - * - * @param imageId The id of the image to inspect. - * @return low-level information on the image name - */ - @Named("image:inspect") - @GET - @Path("/images/{name}/json") - Image inspectImage(@PathParam("name") String imageName); - - /** - * Create an image, either by pull it from the registry or by importing it - * - * @param options the configuration to create an image (@see CreateImageOptions) - * @return a stream of the image creation. - */ - @Named("image:create") - @POST - @Path("/images/create") - InputStream createImage(CreateImageOptions options); - - /** - * Delete an image. - * - * @param name the image name to be deleted - * @return the stream of the deletion execution. - */ - @Named("image:delete") - @DELETE - @Path("/images/{name}") - InputStream deleteImage(@PathParam("name") String name); - - /** - * Remove the image from the filesystem by name - * - * @param name the name of the image to be removed - * @param options the image deletion's options (@see DeleteImageOptions) - * @return the stream of the deletion execution. - */ - @Named("image:delete") - @DELETE - @Path("/images/{name}") - InputStream deleteImage(@PathParam("name") String name, DeleteImageOptions options); - - /** - * Build an image from Dockerfile via stdin - * - * @param inputStream The stream must be a tar archive compressed with one of the following algorithms: identity - * (no compression), gzip, bzip2, xz. - * @param options the image build's options (@see BuildOptions) - * @return a stream of the build execution - */ - @Named("image:build") - @POST - @Path("/build") - @Headers(keys = "Content-Type", values = "application/tar") - InputStream build(Payload inputStream, BuildOptions options); - - /** - * Build an image from Dockerfile via stdin - * - * @param dockerFile The file to be compressed with one of the following algorithms: identity, gzip, bzip2, xz.* - * @param options the image build's options (@see BuildOptions) - * @return a stream of the build execution - */ - @Named("image:build") - @POST - @Path("/build") - @Headers(keys = "Content-Type", values = "application/tar") - InputStream build(@BinderParam(BindInputStreamToRequest.class) File dockerFile, BuildOptions options); - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/internal/Archives.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/internal/Archives.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/internal/Archives.java deleted file mode 100644 index 49641b9..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/features/internal/Archives.java +++ /dev/null @@ -1,96 +0,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. - */ -package org.jclouds.docker.compute.features.internal; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.collect.Iterables.getLast; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -import org.apache.commons.compress.archivers.tar.TarArchiveEntry; -import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; - -import com.google.common.base.Splitter; - -/** - * @author Andrea Turli - */ -public class Archives { - - public static File tar(File baseDir, String archivePath) throws IOException { - // Check that the directory is a directory, and get its contents - checkArgument(baseDir.isDirectory(), "%s is not a directory", baseDir); - File[] files = baseDir.listFiles(); - File tarFile = new File(archivePath); - - String token = getLast(Splitter.on("/").split(archivePath.substring(0, archivePath.lastIndexOf("/")))); - - byte[] buf = new byte[1024]; - int len; - TarArchiveOutputStream tos = new TarArchiveOutputStream(new FileOutputStream(tarFile)); - tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); - for (File file : files) { - TarArchiveEntry tarEntry = new TarArchiveEntry(file); - tarEntry.setName("/" + getLast(Splitter.on(token).split(file.toString()))); - tos.putArchiveEntry(tarEntry); - if (!file.isDirectory()) { - FileInputStream fin = new FileInputStream(file); - BufferedInputStream in = new BufferedInputStream(fin); - while ((len = in.read(buf)) != -1) { - tos.write(buf, 0, len); - } - in.close(); - } - tos.closeArchiveEntry(); - } - tos.close(); - return tarFile; - } - - public static File tar(File baseDir, File tarFile) throws IOException { - // Check that the directory is a directory, and get its contents - checkArgument(baseDir.isDirectory(), "%s is not a directory", baseDir); - File[] files = baseDir.listFiles(); - - String token = getLast(Splitter.on("/").split(baseDir.getAbsolutePath())); - - byte[] buf = new byte[1024]; - int len; - TarArchiveOutputStream tos = new TarArchiveOutputStream(new FileOutputStream(tarFile)); - tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); - for (File file : files) { - TarArchiveEntry tarEntry = new TarArchiveEntry(file); - tarEntry.setName("/" + getLast(Splitter.on(token).split(file.toString()))); - tos.putArchiveEntry(tarEntry); - if (!file.isDirectory()) { - FileInputStream fin = new FileInputStream(file); - BufferedInputStream in = new BufferedInputStream(fin); - while ((len = in.read(buf)) != -1) { - tos.write(buf, 0, len); - } - in.close(); - } - tos.closeArchiveEntry(); - } - tos.close(); - return tarFile; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java deleted file mode 100644 index 8cbcd6c..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ContainerToNodeMetadata.java +++ /dev/null @@ -1,131 +0,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. - */ -package org.jclouds.docker.compute.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.getOnlyElement; -import java.net.URI; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; - -import org.jclouds.compute.domain.HardwareBuilder; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.domain.NodeMetadataBuilder; -import org.jclouds.compute.domain.OperatingSystem; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.domain.Processor; -import org.jclouds.compute.functions.GroupNamingConvention; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.docker.domain.Container; -import org.jclouds.docker.domain.Port; -import org.jclouds.docker.domain.State; -import org.jclouds.domain.LocationBuilder; -import org.jclouds.domain.LocationScope; -import org.jclouds.logging.Logger; -import org.jclouds.providers.ProviderMetadata; - -import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; -import com.google.inject.Singleton; - -/** - * @author Andrea Turli - */ -@Singleton -public class ContainerToNodeMetadata implements Function<Container, NodeMetadata> { - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - private final ProviderMetadata providerMetadata; - private final Function<State, NodeMetadata.Status> toPortableStatus; - private final GroupNamingConvention nodeNamingConvention; - - @Inject - public ContainerToNodeMetadata(ProviderMetadata providerMetadata, Function<State, - NodeMetadata.Status> toPortableStatus, GroupNamingConvention.Factory namingConvention) { - this.providerMetadata = checkNotNull(providerMetadata, "providerMetadata"); - this.toPortableStatus = checkNotNull(toPortableStatus, "toPortableStatus cannot be null"); - this.nodeNamingConvention = checkNotNull(namingConvention, "namingConvention").createWithoutPrefix(); - } - - @Override - public NodeMetadata apply(Container container) { - String name = cleanUpName(container.getName()); - String group = nodeNamingConvention.extractGroup(name); - NodeMetadataBuilder builder = new NodeMetadataBuilder(); - builder.ids(container.getId()) - .name(name) - .group(group) - .hostname(container.getConfig().getHostname()) - // TODO Set up hardware - .hardware(new HardwareBuilder() - .id("") - .ram(container.getConfig().getMemory()) - .processor(new Processor(container.getConfig().getCpuShares(), container.getConfig().getCpuShares())) - .build()); - // TODO Set up location properly - LocationBuilder locationBuilder = new LocationBuilder(); - locationBuilder.description(""); - locationBuilder.id(""); - locationBuilder.scope(LocationScope.HOST); - builder.location(locationBuilder.build()); - builder.status(toPortableStatus.apply(container.getState())); - builder.imageId(container.getImage()); - builder.loginPort(getLoginPort(container)); - builder.publicAddresses(getPublicIpAddresses()); - builder.privateAddresses(getPrivateIpAddresses(container)); - builder.operatingSystem(OperatingSystem.builder().description("linux").family(OsFamily.LINUX).build()); - return builder.build(); - } - - private String cleanUpName(String name) { - return name.startsWith("/") ? name.substring(1) : name; - } - - private Iterable<String> getPrivateIpAddresses(Container container) { - if (container.getNetworkSettings() == null) return ImmutableList.of(); - return ImmutableList.of(container.getNetworkSettings().getIpAddress()); - } - - private List<String> getPublicIpAddresses() { - String dockerIpAddress = URI.create(providerMetadata.getEndpoint()).getHost(); - return ImmutableList.of(dockerIpAddress); - } - - protected static int getLoginPort(Container container) { - if (container.getNetworkSettings() != null) { - Map<String, List<Map<String,String>>> ports = container.getNetworkSettings().getPorts(); - if(ports != null) { - return Integer.parseInt(getOnlyElement(ports.get("22/tcp")).get("HostPort")); - } - // this is needed in case the container list is coming from listContainers - } else if (container.getPorts() != null) { - for (Port port : container.getPorts()) { - if (port.getPrivatePort() == 22) { - return port.getPublicPort(); - } - } - } - throw new IllegalStateException("Cannot determine the login port for " + container.getId()); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java deleted file mode 100644 index bcbc53f..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/ImageToImage.java +++ /dev/null @@ -1,104 +0,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. - */ -package org.jclouds.docker.compute.functions; - -import com.google.common.base.Function; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.ImageBuilder; -import org.jclouds.compute.domain.OperatingSystem; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.logging.Logger; - -import javax.annotation.Resource; -import javax.inject.Named; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.get; - -/** - * @author Andrea Turli - */ -public class ImageToImage implements Function<org.jclouds.docker.domain.Image, org.jclouds.compute.domain.Image> { - - private static final String CENTOS = "centos"; - private static final String UBUNTU = "ubuntu"; - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - @Override - public Image apply(org.jclouds.docker.domain.Image from) { - checkNotNull(from, "image"); - String description = checkNotNull(Iterables.getFirst(from.getRepoTags(), null)); - - OsFamily osFamily = osFamily().apply(description); - String osVersion = parseVersion(description); - - OperatingSystem os = OperatingSystem.builder() - .description(description) - .family(osFamily) - .version(osVersion) - .is64Bit(is64bit(from)) - .build(); - - return new ImageBuilder() - .ids(from.getId()) - .name(get(Splitter.on(":").split(description), 0)) - .description(description) - .operatingSystem(os) - .status(Image.Status.AVAILABLE) - .build(); - } - - private boolean is64bit(org.jclouds.docker.domain.Image inspectedImage) { - if(inspectedImage.getArchitecture() == null) return true; - return inspectedImage.getArchitecture().matches("x86_64|amd64"); - } - - /** - * Parses the item description to determine the OSFamily - * - * @return the @see OsFamily or OsFamily.UNRECOGNIZED - */ - private Function<String, OsFamily> osFamily() { - return new Function<String, OsFamily>() { - OsFamily osFamily = OsFamily.UNRECOGNIZED; - - @Override - public OsFamily apply(final String description) { - if (description != null) { - if (description.contains(CENTOS)) osFamily = OsFamily.CENTOS; - else if (description.contains(UBUNTU)) - osFamily = OsFamily.UBUNTU; - } - logger.debug("os family for item: %s is %s", description, osFamily); - return osFamily; - } - }; - } - - private String parseVersion(String description) { - String version = get(Splitter.on(":").split(description), 1); - logger.debug("os version for item: %s is %s", description, version); - return version; - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/89fab312/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java b/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java deleted file mode 100644 index d2df146..0000000 --- a/dependencies/jclouds/apis/docker/1.7.1-stratos/src/main/java/org/jclouds/docker/compute/functions/StateToStatus.java +++ /dev/null @@ -1,40 +0,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. - */ -package org.jclouds.docker.compute.functions; - -import com.google.common.base.Function; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.domain.NodeMetadata.Status; -import org.jclouds.docker.domain.State; - -import javax.inject.Singleton; - -/** - * Transforms an {@link org.jclouds.docker.domain.Container} to the jclouds portable model. - * - * @author Andrea Turli - */ -@Singleton -public class StateToStatus implements Function<State, Status> { - - @Override - public Status apply(final State state) { - if (state == null) return Status.UNRECOGNIZED; - return state.isRunning() ? NodeMetadata.Status.RUNNING : NodeMetadata.Status.SUSPENDED; - } - -}
