| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| |
| |
| Copyright (C) 2009 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. |
| ==================================================================== |
| |
| --> |
| <project name="shrinkblob" default="shrinkblob" basedir="." xmlns:artifact="urn:maven-artifact-ant"> |
| |
| <!-- maven must be available before we use it --> |
| <get src="http://apache.imghat.com/maven/binaries/maven-ant-tasks-2.1.0.jar" dest="maven-ant-tasks-2.1.0.jar"/> |
| |
| <!-- initialize maven tasks --> |
| <path id="maven-ant-tasks.classpath" path="maven-ant-tasks-2.1.0.jar" /> |
| <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" |
| classpathref="maven-ant-tasks.classpath" /> |
| |
| <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="shrinkwrap.repository" url="http://repository.jboss.org/maven2" /> |
| |
| <!-- Setup maven so that we can get latest version of jclouds, shrinkwrap, and jruby --> |
| <artifact:dependencies pathId="shrinkwrap.classpath"> |
| <dependency groupId="org.jboss.shrinkwrap" artifactId="shrinkwrap-impl-base" version="1.0.0-alpha-3" /> |
| <dependency groupId="org.jruby" artifactId="jruby" version="1.4.0"/> |
| <dependency groupId="org.jclouds" artifactId="jclouds-aws" version="1.0-beta-3" /> |
| <dependency groupId="org.jclouds" artifactId="jclouds-atmos" version="1.0-beta-3" /> |
| <dependency groupId="org.jclouds" artifactId="jclouds-azure" version="1.0-beta-3" /> |
| <dependency groupId="org.jclouds" artifactId="jclouds-rackspace" version="1.0-beta-3" /> |
| <remoteRepository refid="shrinkwrap.repository" /> |
| <remoteRepository refid="jclouds-snapshot.repository" /> |
| <localRepository refid="local.repository" /> |
| </artifact:dependencies> |
| |
| <input |
| message="What is the directory you'd like to upload?" |
| addproperty="dir" |
| /> |
| |
| <input |
| message="What is the name of the zip you'd like ${dir} stored to?" |
| addproperty="zip" |
| /> |
| |
| <input |
| message="What is the container you wish to store ${zip} in?" |
| addproperty="container" |
| /> |
| |
| <input |
| message="Which service would you like to use (atmos,azureblob,cloudfiles,s3)?" |
| validargs="atmos,azureblob,cloudfiles,s3" |
| addproperty="service" |
| /> |
| |
| <input |
| message="What is your account on ${service}?" |
| addproperty="account" |
| /> |
| |
| <input |
| message="What is the key for ${account}?" |
| addproperty="key" |
| /> |
| |
| <property name="location" value="default" /> |
| |
| <property name="urltoparse" value="blobstore://${account}:${key}@${service}/${container}" /> |
| |
| <target name="export"> |
| <script language="jruby" classpathref="shrinkwrap.classpath"> <![CDATA[ |
| require 'java' |
| require 'jruby/core_ext' |
| include_class 'org.apache.tools.ant.Task' |
| include_class 'org.jclouds.http.HttpUtils' |
| include_class 'org.jclouds.blobstore.BlobStoreContextFactory' |
| include_class 'org.jboss.shrinkwrap.api.Archives' |
| include_class 'org.jboss.shrinkwrap.api.exporter.ZipExporter' |
| include_class 'org.jboss.shrinkwrap.api.importer.ExplodedImporter' |
| include_class 'org.jboss.shrinkwrap.impl.base.ServiceExtensionLoader' |
| |
| # define a new ant task that uses ShrinkWrap to zip up things to a BlobStore |
| class ShrinkBlob < Task |
| def setBlobstore(blobstore) |
| @blobstore = blobstore |
| end |
| |
| def setContainer(container) |
| @container = container |
| end |
| |
| def setZip(zip) |
| @zip = zip |
| end |
| |
| def setDir(dir) |
| @dir = dir |
| end |
| |
| def execute |
| # correct the ant classloader so that extensions can be found |
| java.lang.Thread.currentThread().setContextClassLoader(ServiceExtensionLoader.new().getClass().getClassLoader()) |
| |
| print "creating the archive from ",@dir,"\n" |
| zipStream = Archives.create(@zip, ExplodedImporter.java_class).importDirectory(@dir).as(ZipExporter.java_class).exportZip() |
| |
| destination = HttpUtils.createUri(@blobstore) |
| print "connecting to service ",destination.getHost(),"/",@container,"\n" |
| |
| # array thing is a weird hack since jruby doesn't understand varargs |
| context = BlobStoreContextFactory.new().createContext(destination) |
| context.getBlobStore().createContainerInLocation(@location, @container) |
| |
| print "uploading to ",destination.getHost(),"/",@container,"/",@zip,"\n" |
| context.createInputStreamMap(@container).put(@zip,zipStream); |
| |
| context.close(); |
| end |
| end |
| |
| # make a real java class so that we can register it in ant |
| ShrinkBlob.add_method_signature("execute", [java.lang.Void::TYPE]) |
| ShrinkBlob.add_method_signature("setBlobstore", [java.lang.Void::TYPE, java.lang.String.java_class]) |
| ShrinkBlob.add_method_signature("setContainer", [java.lang.Void::TYPE, java.lang.String.java_class]) |
| ShrinkBlob.add_method_signature("setZip", [java.lang.Void::TYPE, java.lang.String.java_class]) |
| ShrinkBlob.add_method_signature("setDir", [java.lang.Void::TYPE, java.io.File.java_class]) |
| clazz = ShrinkBlob.become_java!; |
| |
| # register the ant task |
| $project.addTaskDefinition("shrinkblob", clazz) |
| ]]></script> |
| </target> |
| |
| <target name="shrinkblob" depends="export" > |
| <shrinkblob blobstore="${urltoparse}" container="${container}" dir="${dir}" zip="${zip}" /> |
| </target> |
| |
| </project> |