You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2017/07/10 18:39:50 UTC

[2/2] jclouds git commit: Remove clojure bindings

Remove clojure bindings

These have not seen any development in many years.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/0bc935dd
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/0bc935dd
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/0bc935dd

Branch: refs/heads/master
Commit: 0bc935dd57dc8009731d05c533edd831c8642664
Parents: e446b5b
Author: Andrew Gaul <ga...@apache.org>
Authored: Sun Oct 23 05:21:40 2016 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Mon Jul 10 11:39:11 2017 -0700

----------------------------------------------------------------------
 apis/chef/src/main/clojure/org/jclouds/chef.clj | 261 -----------
 .../src/test/clojure/org/jclouds/chef_test.clj  |  70 ---
 apis/ec2/pom.xml                                |   9 -
 .../src/main/clojure/org/jclouds/ec2/ami2.clj   |  84 ----
 .../src/main/clojure/org/jclouds/ec2/ebs2.clj   | 286 ------------
 .../clojure/org/jclouds/ec2/elastic_ip2.clj     |  80 ----
 .../clojure/org/jclouds/ec2/security_group2.clj |  99 ----
 blobstore/pom.xml                               |   4 -
 .../src/main/clojure/org/jclouds/blobstore2.clj | 327 --------------
 .../clojure/org/jclouds/blobstore2_test.clj     | 205 ---------
 compute/pom.xml                                 |   9 -
 .../src/main/clojure/org/jclouds/compute2.clj   | 450 -------------------
 .../src/main/clojure/org/jclouds/modules.clj    |  88 ----
 .../src/main/clojure/org/jclouds/predicate.clj  |  32 --
 .../test/clojure/org/jclouds/compute2_test.clj  | 158 -------
 .../src/test/clojure/org/jclouds/ssh_test.clj   | 105 -----
 core/pom.xml                                    |   4 -
 core/src/main/clojure/org/jclouds/core.clj      | 213 ---------
 core/src/test/clojure/org/jclouds/core_test.clj |  78 ----
 project/pom.xml                                 |  63 ---
 providers/aws-ec2/pom.xml                       |   9 -
 .../src/main/clojure/org/jclouds/aws/ec2.clj    |  62 ---
 .../test/clojure/org/jclouds/aws/ec2_test.clj   |  32 --
 23 files changed, 2728 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/chef/src/main/clojure/org/jclouds/chef.clj
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/clojure/org/jclouds/chef.clj b/apis/chef/src/main/clojure/org/jclouds/chef.clj
deleted file mode 100644
index 964cd00..0000000
--- a/apis/chef/src/main/clojure/org/jclouds/chef.clj
+++ /dev/null
@@ -1,261 +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.
-;
-
-(ns 
-  #^{:author "Adrian Cole"
-     :doc "A clojure binding to the jclouds chef interface.
-
-Here's a quick example of how to manipulate a databag on the Chef Platform, 
-which is basically Chef Server as a Service.
-
-(use 'org.jclouds.chef)
-
-(def client \"YOUR_CLIENT\")
-;; load the rsa key from ~/.chef/CLIENT_NAME.pem
-(def credential (load-pem client))
-
-;; create a connection to the chef platform
-(def chef (chef-service \"chef\" client credential :chef.endpoint \"https://api.opscode.com/organizations/YOUR_ORG\"))
-
-(with-chef-service [chef]
-  (create-databag \"cluster-config\")
-  (update-databag-item \"cluster-config\" {:id \"master\" :name \"myhost.com\"})) 
-
-;; note that you can create your chef connection like this to do in-memory testing
-(def chef (chef-service \"transientchef\" \"\" \"\"))
-
-See http://code.google.com/p/jclouds for details."}
-  org.jclouds.chef
-  (:use  [org.jclouds.core])
-  (:require (org.danlarkin [json :as json]))
-  (:import 
-        java.util.Properties
-        [org.jclouds ContextBuilder]
-        [org.jclouds.chef ChefClient
-          ChefService ChefContext]
-        [org.jclouds.chef.domain DatabagItem]))
-(try
- (use '[clojure.contrib.reflect :only [get-field]])
- (catch Exception e
-   (use '[clojure.contrib.java-utils
-          :only [wall-hack-field]
-          :rename {wall-hack-field get-field}])))
-
-(defn load-pem
-  "get the pem associated with the supplied identity"
-  ([#^String identity]
-     (slurp (str (. System getProperty "user.home") "/.chef/" identity ".pem"))))
-
-;; TODO find a way to pass the chef provider by default
-
-(defn chef-service
-  "Create a logged in context to a chef server.
-
-provider \"chef\" is a remote connection, and you can pass the option
-   :chef.endpoint \"https://url\" to override the endpoint
-
-provider \"transientchef\" is for in-memory when you are looking to do 
-unit testing"
-  ([#^String provider #^String identity #^String credential & options]
-    (let [module-keys (set (keys module-lookup))
-          ext-modules (filter #(module-keys %) options)
-          opts (apply hash-map (filter #(not (module-keys %)) options))]
-      (.. (ContextBuilder/newBuilder provider)
-          (credentials provider-identity provider-credential)
-          (modules (apply modules (concat ext-modules (opts :extensions))))
-          (overrides (reduce #(do (.put %1 (name (first %2)) (second %2)) %1)
-            (Properties.) (dissoc opts :extensions)))
-          (build ChefContext)
-          (getChefService)))))
-
-(defn chef-context
-  "Returns a chef context from a chef service."
-  [#^ChefService chef]
-  (.getContext chef))
-
-(defn chef-service?
-  [object]
-  (instance? ChefService object))
-
-(defn chef-context?
-  [object]
-  (instance? ChefContext object))
-
-(defn as-chef-service
-  "Tries hard to produce a chef service from its input arguments"
-  [& args]
-  (cond
-   (chef-service? (first args)) (first args)
-   (chef-context? (first args)) (.getChefService (first args))
-   :else (apply chef-service args)))
-
-(defn as-chef-api
-  "Tries hard to produce a chef client from its input arguments"
-  [& args]
-  (cond
-   (chef-service? (first args)) (.getApi (.getContext (first args)))
-   (chef-context? (first args)) (.getApi (first args))
-   :else (.getApi (.getContext (apply chef-service args)))))
-
-(def *chef*)
-
-(defmacro with-chef-service
-  "Specify the default chef service"
-  [[& chef-or-args] & body]
-  `(binding [*chef* (as-chef-service ~@chef-or-args)]
-     ~@body))
-
-(defn nodes
-  "Retrieve the names of the existing nodes in your chef server."
-  ([] (nodes *chef*))
-  ([#^ChefService chef]
-    (seq (.listNodes (as-chef-api chef)))))
-
-(defn nodes-with-details
-  "Retrieve the existing nodes in your chef server including all details."
-  ([] (nodes *chef*))
-  ([#^ChefService chef]
-    (seq (.listNodes chef))))
-
-(defn clients
-  "Retrieve the names of the existing clients in your chef server."
-  ([] (clients *chef*))
-  ([#^ChefService chef]
-    (seq (.listClients (as-chef-api chef)))))
-
-(defn clients-with-details
-  "Retrieve the existing clients in your chef server including all details."
-  ([] (clients *chef*))
-  ([#^ChefService chef]
-    (seq (.listClients chef))))
-
-(defn cookbooks
-  "Retrieve the names of the existing cookbooks in your chef server."
-  ([] (cookbooks *chef*))
-  ([#^ChefService chef]
-    (seq (.listCookbooks (as-chef-api chef)))))
-
-(defn cookbook-versions
-  "Retrieve the versions of an existing cookbook in your chef server."
-  ([name] (cookbook-versions *chef*))
-  ([#^ChefService name chef]
-    (seq (.getVersionsOfCookbook (as-chef-api chef) name))))
-
-(defn cookbook-versions-with-details
-  "Retrieve the existing cookbook versions in your chef server including all details."
-  ([] (cookbook-versions *chef*))
-  ([#^ChefService chef]
-    (seq (.listCookbookVersions chef))))
-
-(defn update-run-list
-  "Updates the run-list associated with a tag"
-  ([run-list tag] (update-run-list run-list tag *chef*))
-  ([run-list tag #^ChefService chef]
-    (.updateRunListForTag chef run-list tag)))
-
-(defn run-list
-  "Retrieves the run-list associated with a tag"
-  ([tag] (run-list tag *chef*))
-  ([tag #^ChefService chef]
-    (seq (.getRunListForTag chef tag))))
-
-(defn create-bootstrap
-  "creates a client and bootstrap script associated with a tag"
-  ([tag] (create-bootstrap tag *chef*))
-  ([tag #^ChefService chef]
-    (.createClientAndBootstrapScriptForTag chef tag)))
-
-(defn databags
-  "Retrieve the names of the existing data bags in your chef server."
-  ([] (databags *chef*))
-  ([#^ChefService chef]
-    (seq (.listDatabags (as-chef-api chef)))))
-
-(defn databag-exists?
-  "Predicate to check presence of a databag"
-  ([databag-name]
-     (databag-exists? databag-name *chef*))
-  ([databag-name #^ChefService chef]
-     (.databagExists (as-chef-api chef) databag-name)))
-
-(defn delete-databag
-  "Delete a data bag, including its items"
-  ([databag]
-    (delete-databag databag *chef*))
-  ([databag chef]
-    (.deleteDatabag (as-chef-api chef) databag)))
-
-(defn create-databag
-  "create a data bag"
-  ([databag]
-    (create-databag databag *chef*))
-  ([databag chef]
-    (.createDatabag (as-chef-api chef) databag)))
-
-(defn databag-items
-  "Retrieve the names of the existing items in a data bag in your chef server."
-  ([databag]
-    (databag-items databag *chef*))
-  ([databag chef]
-    (seq (.listDatabagItems (as-chef-api chef) databag))))
-
-(defn databag-item-exists?
-  "Predicate to check presence of a databag item"
-  ([databag-name item-id]
-     (databag-item-exists? databag-name item-id *chef*))
-  ([databag-name item-id #^ChefService chef]
-     (.databagExists (as-chef-api chef) databag-name item-id)))
-
-(defn databag-item
-  "Get an item from the data bag"
-  ([databag item-id]
-    (databag-item databag item-id *chef*))
-  ([databag item-id chef]
-    (json/decode-from-str (str (.getDatabagItem (as-chef-api chef) databag item-id)))))
-
-(defn delete-databag-item
-  "delete an item from the data bag"
-  ([databag item-id]
-    (delete-databag-item databag item-id *chef*))
-  ([databag item-id chef]
-    (.deleteDatabagItem (as-chef-api chef) databag item-id)))
-
-(defn create-databag-item
-  "put a new item in the data bag.  Note the Map you pass must have an :id key:
-
-ex.
-  (create-databag-item \"cluster-config\" {:id \"master\" :name \"myhost.com\"}))"
-  ([databag value]
-    (create-databag-item databag value *chef*))
-  ([databag value chef]
-    (let [value-str (json/encode-to-str value)]
-      (let [value-json (json/decode-from-str value-str)]
-        (.createDatabagItem  (as-chef-api chef) databag 
-          (DatabagItem. (get value-json :id) value-str))))))
-
-(defn update-databag-item
-  "updates an existing item in the data bag.  Note the Map you pass must have an :id key:
-
-ex.
-  (update-databag-item \"cluster-config\" {:id \"master\" :name \"myhost.com\"}))"
-  ([databag value]
-    (update-databag-item databag value *chef*))
-  ([databag value chef]
-    (let [value-str (json/encode-to-str value)]
-      (let [value-json (json/decode-from-str value-str)]
-        (.updateDatabagItem  (as-chef-api chef) databag 
-          (DatabagItem. (get value-json :id) value-str))))))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/chef/src/test/clojure/org/jclouds/chef_test.clj
----------------------------------------------------------------------
diff --git a/apis/chef/src/test/clojure/org/jclouds/chef_test.clj b/apis/chef/src/test/clojure/org/jclouds/chef_test.clj
deleted file mode 100644
index bc542f1..0000000
--- a/apis/chef/src/test/clojure/org/jclouds/chef_test.clj
+++ /dev/null
@@ -1,70 +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.
-;
-
-(ns org.jclouds.chef-test
-  (:use [org.jclouds.chef] :reload-all)
-  (:use [clojure.test]))
-
-(defn clean-stub-fixture
-  "This should allow basic tests to easily be run with another service."
-  [service account key & options]
-  (fn [f]
- (with-chef-service [(apply chef-service service account key options)]
-(doseq [databag (databags)]
-  (delete-databag databag))
-(f))))
-
-(use-fixtures :each (clean-stub-fixture "transientchef" "" ""))
-
-(deftest chef-service?-test
-  (is (chef-service? *chef*)))
-
-(deftest as-chef-service-test
-  (is (chef-service? (chef-service "transientchef" "" "")))
-  (is (chef-service? (as-chef-service *chef*)))
-  (is (chef-service? (as-chef-service (chef-context *chef*)))))
-
-(deftest create-existing-databag-test
-  (is (not (databag-exists? "")))
-  (create-databag "fred")
-  (is (databag-exists? "fred")))
-
-(deftest create-databag-test
-  (create-databag "fred")
-  (is (databag-exists? "fred")))
-
-(deftest databags-test
-  (is (empty? (databags)))
-  (create-databag "fred")
-  (is (= 1 (count (databags)))))
-
-(deftest databag-items-test
-  (create-databag "databag")
-  (is (empty? (databag-items "databag")))
-  (is (create-databag-item "databag" {:id "databag-item1" :value "databag-value1"}))
-  (is (create-databag-item "databag" {:id "databag-item2" :value "databag-value2"}))
-  (is (= 2 (count (databag-items "databag")))))
-
-(deftest databag-item-test
-  (create-databag "databag")
-  (is (create-databag-item "databag" {:id "databag-item1" :value "databag-value1"}))
-  (is (create-databag-item "databag" {:id "databag-item2" :value "databag-value2"}))
-  (is (= {:id "databag-item2" :value "databag-value2"} (databag-item "databag" "databag-item2"))))
-
-(deftest run-list-test
-  (update-run-list #{"recipe[foo]"} "tag")
-  (is (= ["recipe[foo]"] (run-list "tag"))))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/ec2/pom.xml
----------------------------------------------------------------------
diff --git a/apis/ec2/pom.xml b/apis/ec2/pom.xml
index e648bd7..d6cf48c 100644
--- a/apis/ec2/pom.xml
+++ b/apis/ec2/pom.xml
@@ -105,15 +105,6 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>com.theoryinpractise</groupId>
-        <artifactId>clojure-maven-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-
   <profiles>
     <profile>
       <id>live</id>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/ec2/src/main/clojure/org/jclouds/ec2/ami2.clj
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/clojure/org/jclouds/ec2/ami2.clj b/apis/ec2/src/main/clojure/org/jclouds/ec2/ami2.clj
deleted file mode 100644
index d58eb6b..0000000
--- a/apis/ec2/src/main/clojure/org/jclouds/ec2/ami2.clj
+++ /dev/null
@@ -1,84 +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.
-;
-
-(ns
-  #^{:author "Hunter Hutchinson, hunter.hutchinson@gmail.com"
-     :doc "A clojure binding to the jclouds AMI service interface."}
-  org.jclouds.ec2.ami2
-  (:use org.jclouds.compute2)
-  (:import org.jclouds.aws.domain.Region
-    org.jclouds.ec2.features.AMIApi
-    org.jclouds.ec2.options.CreateImageOptions
-    org.jclouds.compute.domain.NodeMetadata
-    (org.jclouds.ec2.domain Volume Volume$Status Snapshot Snapshot$Status AvailabilityZoneInfo)))
-
-(defn ^org.jclouds.ec2.features.AMIApi
-  ami-service
-  ""
-  [compute]
-  (-> compute
-    .getContext
-    .getProviderSpecificContext
-    .getApi
-    .getAMIApi().get))
-
-(defn get-region
-  "Coerces the first parameter into a Region string; strings, keywords, and
-   NodeMetadata instances are acceptable arguments. An optional second argument
-   is returned if the first cannot be coerced into a region string.
-   Returns nil otherwise."
-  ([v] (get-region v nil))
-  ([v default-region]
-    (cond
-      (string? v) v
-      (keyword? v) (name v)
-      (instance? NodeMetadata v) (let [zone (location v)]
-      ; no easier way to go from zone -> region?
-      (if (> (.indexOf zone "-") -1)
-        (subs zone 0 (-> zone count dec))
-        zone))
-      :else default-region)))
-
-(defn- as-string
-  [v]
-  (cond
-    (string? v) v
-    (keyword? v) (name v)
-    :else v))
-
-(defn- get-string
-  [map key]
-  (as-string (get map key)))
-
-(defn- as-int
-  [v]
-  (cond
-    (number? v) (int v)
-    (string? v) (Integer/parseInt v)
-    :else (throw (IllegalArgumentException.
-    (str "Don't know how to convert object of type " (class v) " to a string")))))
-
-(defn create-image-in-region
-  ([compute region name node-id description]
-     (.createImageInRegion (ami-service compute)
-                              (get-region region)
-                              (as-string name)
-                              (as-string node-id)
-                              (into-array CreateImageOptions
-                                          (when description
-                                            [(.withDescription (CreateImageOptions.) description)])))))
-

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/ec2/src/main/clojure/org/jclouds/ec2/ebs2.clj
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/clojure/org/jclouds/ec2/ebs2.clj b/apis/ec2/src/main/clojure/org/jclouds/ec2/ebs2.clj
deleted file mode 100644
index 2bde9a5..0000000
--- a/apis/ec2/src/main/clojure/org/jclouds/ec2/ebs2.clj
+++ /dev/null
@@ -1,286 +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.
-;
-
-(ns
-  #^{:author "Chas Emerick, cemerick@snowtide.com"
-     :doc "A clojure binding to the jclouds EBS service interface."}
-  org.jclouds.ec2.ebs2
-  (:use org.jclouds.compute2 [clojure.core.incubator :only (-?>)])
-  (:import org.jclouds.aws.domain.Region
-    org.jclouds.compute.domain.NodeMetadata
-    (org.jclouds.ec2.domain Volume Volume$Status Snapshot Snapshot$Status AvailabilityZoneInfo)
-    (org.jclouds.ec2.options DescribeSnapshotsOptions DetachVolumeOptions CreateSnapshotOptions)))
-(defn snapshot?
-  "Returns true iff the argument is a org.jclouds.ec2.domain.Snapshot."
-  [s]
-  (instance? Snapshot s))
-
-(defn volume?
-  "Returns true iff the argument is a org.jclouds.ec2.domain.Volume."
-  [v]
-  (instance? Volume v))
-
-(defn ^org.jclouds.ec2.services.ElasticBlockStoreClient
-  ebs-service
-  ""
-  [compute]
-  (-> compute
-    .getContext
-    .getProviderSpecificContext
-    .getApi
-    .getElasticBlockStoreServices))
-
-(defn get-region
-  "Coerces the first parameter into a Region string; strings, keywords, and
-   NodeMetadata instances are acceptable arguments. An optional second argument
-   is returned if the first cannot be coerced into a region string.
-   Returns nil otherwise."
-  ([v] (get-region v nil))
-  ([v default-region]
-    (cond
-      (string? v) v
-      (keyword? v) (name v)
-      (instance? NodeMetadata v) (let [zone (location v)]
-      ; no easier way to go from zone -> region?
-      (if (> (.indexOf zone "-") -1)
-        (subs zone 0 (-> zone count dec))
-        zone))
-      :else default-region)))
-
-(defn get-volume-id
-  "Returns a string volume ID taken from the given string, keyword, or Volume argument."
-  [v]
-  (cond
-    (instance? Volume v) (.getId ^Volume v)
-    (keyword? v) (name v)
-    (string? v) v
-    :else (throw (IllegalArgumentException.
-    (str "Can't obtain volume id from argument of type " (class v))))))
-
-(defn volumes
-  "Returns a set of org.jclouds.ec2.domain.Volume instances corresponding to the
-   volumes in the specified region (defaulting to your account's default region)."
-  [compute & [region & volume-ids]]
-  (set
-    (.describeVolumesInRegion (ebs-service compute)
-      (get-region region)
-      (into-array String (map get-volume-id
-        (if (get-region region)
-          volume-ids
-          (when region (cons region volume-ids))))))))
-
-(defn- as-string
-  [v]
-  (cond
-    (string? v) v
-    (keyword? v) (name v)
-    :else v))
-(defn- get-string
-  [map key]
-  (as-string (get map key)))
-
-(defn- as-int
-  [v]
-  (cond
-    (number? v) (int v)
-    (string? v) (Integer/parseInt v)
-    :else (throw (IllegalArgumentException.
-    (str "Don't know how to convert object of type " (class v) " to a string")))))
-
-(defn- snapshot-options
-  [optmap]
-  (let [string-array #(let [v (% optmap)]
-    (into-array String (cond
-      (keyword? v) [(name v)]
-      (string? v) [v]
-      :else (map as-string v))))]
-    (-> (DescribeSnapshotsOptions.)
-      (.ownedBy (string-array :owner))
-      (.snapshotIds (string-array :ids))
-      (.restorableBy (string-array :restorable-by)))))
-
-(defn snapshots
-  "Returns a set of org.jclouds.aws.ec2.domain.Snapshot instances that match
-   the criteria provided.  Options include:
-
-   :region - region string, keyword, or NodeMetadata
-   :owner - AWS account id (or \"amazon\" or \"self\")
-   :restorable-by - AWS account id
-
-   Multiple values for each type of criteria can be provided by passing a seq
-   of the appropriate types as values."
-  [compute & options]
-  (let [options (apply hash-map options)
-        region (:region options)
-        options (snapshot-options (dissoc options :region))]
-    (set
-      (.describeSnapshotsInRegion (ebs-service compute)
-        (get-region region)
-        (into-array DescribeSnapshotsOptions [options])))))
-
-(defn create-snapshot
-  "Creates a snapshot of a volume in the specified region with an optional description.
-   If provided, the description must be < 255 characters in length. Returns the
-   org.jclouds.aws.ec2.domain.Snapshot object representing the created snapshot."
-  ([compute ^Volume volume] (create-snapshot compute volume nil))
-  ([compute ^Volume volume description] (create-snapshot compute (.getRegion volume) (.getId volume) description))
-  ([compute region volume-id description]
-    (.createSnapshotInRegion (ebs-service compute)
-      (get-region region)
-      (as-string volume-id)
-      (into-array CreateSnapshotOptions (when description
-        [(.withDescription (CreateSnapshotOptions.) description)])))))
-
-(defn delete-snapshot
-  "Deletes a snapshot in the specified region."
-  ([compute ^Snapshot snapshot] (delete-snapshot compute (.getRegion snapshot) (.getId snapshot)))
-  ([compute region snapshot-id]
-    (.deleteSnapshotInRegion (ebs-service compute)
-      (get-region region)
-      (as-string snapshot-id))))
-
-(defn get-zone
-  [v]
-  (cond
-    (instance? AvailabilityZoneInfo v) (.getZone v)
-    (instance? NodeMetadata v) (location ^NodeMetadata v)
-    (string? v) v
-    (keyword? v) (name v)
-    :else (throw (IllegalArgumentException.
-    (str "Can't obtain zone from argument of type " (class v))))))
-
-(defn attach-volume
-  "Attaches a volume to an instance, returning the resulting org.jclouds.aws.ec2.domain.Attachment."
-  ([compute ^NodeMetadata node volume device]
-    (attach-volume compute node (.getProviderId node) (get-volume-id volume) device))
-  ([compute region instance-id volume-id device]
-    (apply #(.attachVolumeInRegion (ebs-service compute)
-      (get-region region) % %2 %3)
-      (map as-string [volume-id instance-id device]))))
-
-(defn detach-volume
-  "Detaches a volume from the instance to which it is currently attached.
-   The volume may be specified with a Volume instance, a string, or a keyword.
-   Providing a logical true value for the :force option will cause the volume
-   to be forcibly detached, regardless of whether it is in-use (mounted) or not.
-
-   If the volume is specified as a string or keyword, one of the following options
-   is additionally required:
-
-   :region - the region where the volume is allocated
-   :node - a node in the region where the volume is allocated
-
-   FYI: It appears that issuing a detatch-volume command while the volume in question is mounted
-   will cause the volume to be detatched immediately upon the volume beign unmounted."
-  [compute volume & options]
-  (let [options (apply hash-map options)
-        volume-id (get-volume-id volume)
-        region (get-region (if (instance? Volume volume)
-      (.getRegion volume)
-      (or (:region options) (:node options))))]
-    (when (not region)
-      (throw (IllegalArgumentException.
-        "Must specify volume's region via :region or :node options, or by providing a Volume instance.")))
-    (.detachVolumeInRegion (ebs-service compute)
-      region
-      volume-id
-      (boolean (:force options))
-      (into-array DetachVolumeOptions []))))
-
-(defn create-volume
-  "Creates a new volume given a set of options:
-
-   - one of :zone (keyword, string, or AvailabilityZoneInfo) or :node (NodeMetadata)
-   - one or both of :snapshot (keyword, string, or Snapshot instance) or :size
-     (string, keyword, or number)
-   - :device (string or keyword) provided *only* when you want to attach the new volume to
-     the :node you specified!
-
-   Returns a vector of [created org.jclouds.ec2.domain.Volume,
-                        optional org.jclouds.ec2.domain.Attachment]
-
-   Note that specifying :node instead of :zone will only attach the created volume
-   :device is also provided.  Otherwise, the node is only used to obtain the desired
-   availability zone.
-
-   Note also that if :device and :node are specified, and the attach operation fails,
-   you will have \"leaked\" the newly-created volume
-   (volume creation and attachment cannot be done atomically)."
-  [compute & options]
-  (when (-> options count odd?)
-    (throw (IllegalArgumentException. "Must provide key-value pairs, e.g. :zone :us-east-1d :size 200")))
-  (let [options (apply hash-map options)
-        snapshot (get-string options :snapshot)
-        snapshot (if (snapshot? snapshot) (.getId snapshot) snapshot)
-        size (-?> (get-string options :size) as-int)
-        ^NodeMetadata node (:node options)
-        zone (or node (get-string options :zone))
-        zone (if zone
-      (get-zone zone)
-      (throw (IllegalArgumentException. "Must supply a :zone or :node option.")))
-        ebs (ebs-service compute)]
-    (when (and (:device options) (not node))
-      (throw (IllegalArgumentException. "Cannot create and attach new volume; no :node specified")))
-    (let [new-volume (cond
-      (and snapshot size) (.createVolumeFromSnapshotInAvailabilityZone ebs zone size snapshot)
-      snapshot (.createVolumeFromSnapshotInAvailabilityZone ebs zone snapshot)
-      size (.createVolumeInAvailabilityZone ebs zone size)
-      :else (throw (IllegalArgumentException. "Must supply :size and/or :snapshot options.")))]
-      [new-volume (when (:device options)
-        (attach-volume compute node new-volume (as-string (:device options))))])))
-
-(defn delete-volume
-  "Deletes a volume in the specified region."
-  ([compute ^Volume volume]
-    (delete-volume (.getRegion volume) (.getId volume)))
-  ([compute region volume-id]
-    (.deleteVolumeInRegion (ebs-service compute)
-      (get-region region)
-      (as-string volume-id))))
-
-(defn status
-  "Returns the status of the given entity; works for Volumes and Snapshots."
-  [k]
-  (.getStatus k))
-
-(defn status-available?
-  [^Volume v]
-  (= Volume$Status/AVAILABLE (status v)))
-
-(defn status-creating?
-  [^Volume v]
-  (= Volume$Status/CREATING (status v)))
-
-(defn status-deleting?
-  [^Volume v]
-  (= Volume$Status/DELETING (status v)))
-
-(defn status-in-use?
-  [^Volume v]
-  (= Volume$Status/IN_USE (status v)))
-
-(defn status-completed?
-  [^Snapshot s]
-  (= Snapshot$Status/COMPLETED (status s)))
-
-(defn status-error?
-  [^Snapshot s]
-  (= Snapshot$Status/ERROR (status s)))
-
-(defn status-pending?
-  [^Snapshot s]
-  (= Snapshot$Status/PENDING (status s)))
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/ec2/src/main/clojure/org/jclouds/ec2/elastic_ip2.clj
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/clojure/org/jclouds/ec2/elastic_ip2.clj b/apis/ec2/src/main/clojure/org/jclouds/ec2/elastic_ip2.clj
deleted file mode 100644
index 68c372f..0000000
--- a/apis/ec2/src/main/clojure/org/jclouds/ec2/elastic_ip2.clj
+++ /dev/null
@@ -1,80 +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.
-;
-
-(ns 
-  #^{:author "Chas Emerick, cemerick@snowtide.com"
-     :doc "A clojure binding for the jclouds AWS elastic IP address interface."}
-  org.jclouds.ec2.elastic-ip2
-  (:require (org.jclouds [compute2 :as compute])
-    [org.jclouds.ec2.ebs2 :as ebs])
-  (:import org.jclouds.compute.domain.NodeMetadata
-    (org.jclouds.ec2.domain PublicIpInstanceIdPair)))
-
-(defn ^org.jclouds.ec2.features.ElasticIPAddressApi
-  eip-service
-  "Returns an ElasticIPAddressApi for the given ComputeService"
-  [compute]
-  (-> compute
-    .getContext .getProviderSpecificContext .getApi .getElasticIPAddressApi().get))
-
-(defn allocate
-  "Claims a new elastic IP address within the (optionally) specified region for your account.
-   Region may be a string, keyword, or a node from which the region
-   is inferred.  Returns the IP address as a string."
-  ([compute] (allocate compute nil))
-  ([compute region]
-    (.allocateAddressInRegion (eip-service compute) (ebs/get-region region))))
-
-(defn associate
-  "Associates an elastic IP address with a node."
-  ([compute ^NodeMetadata node public-ip]
-    (associate node public-ip (.getProviderId node)))
-  ([compute region public-ip instance-id]
-    (.associateAddressInRegion (eip-service compute)
-      (ebs/get-region region)
-      public-ip
-      instance-id)))
-
-(defn addresses
-  "Returns a map of elastic IP addresses to maps with slots:
-
-   :region - the region (string/keyword/NodeMetadata) the IP address is allocated within
-   :node-id - the ID of the instance with which the IP address is associated (optional)
-
-   You may optionally specify which IP addresses you would like to query."
-  ([compute] (addresses compute nil))
-  ([compute region & public-ips]
-    (into {} (for [^PublicIpInstanceIdPair pair (.describeAddressesInRegion (eip-service compute)
-                                                   (ebs/get-region region)
-                                                   (into-array String public-ips))]
-               [(.getPublicIp pair) (merge {:region (.getRegion pair)}
-                                      (when (.getInstanceId pair) {:node-id (.getInstanceId pair)}))]))))
-
-(defn dissociate
-  "Dissociates an elastic IP address from the node with which it is currently associated."
-  [compute region public-ip]
-  (.disassociateAddressInRegion (eip-service compute)
-    (ebs/get-region region)
-    public-ip))
-
-(defn release
-  "Disclaims an elastic IP address from your account."
-  ([compute public-ip] (release compute public-ip nil))
-  ([compute public-ip region]
-    (.releaseAddressInRegion (eip-service compute)
-      (ebs/get-region region)
-      public-ip)))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/apis/ec2/src/main/clojure/org/jclouds/ec2/security_group2.clj
----------------------------------------------------------------------
diff --git a/apis/ec2/src/main/clojure/org/jclouds/ec2/security_group2.clj b/apis/ec2/src/main/clojure/org/jclouds/ec2/security_group2.clj
deleted file mode 100644
index a4f33cf..0000000
--- a/apis/ec2/src/main/clojure/org/jclouds/ec2/security_group2.clj
+++ /dev/null
@@ -1,99 +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.
-;
-
-(ns
-  #^{:author "Juegen Hoetzel, juergen@archlinux.org"
-     :doc "A clojure binding for the jclouds AWS security group interface."}
-  org.jclouds.ec2.security-group2
-  (:require (org.jclouds [compute2 :as compute])
-    [org.jclouds.ec2.ebs2 :as ebs])
-  (:import org.jclouds.ec2.domain.SecurityGroup
-           org.jclouds.ec2.features.SecurityGroupApi
-           org.jclouds.net.domain.IpProtocol))
-
-(defn #^SecurityGroupApi
-  sg-service
-  "Returns the SecurityGroup Api associated with the specified  compute service."
-  [compute]
-  (-> compute .getContext .getProviderSpecificContext .getApi .getSecurityGroupApi().get))
-
-(defn create-group
-  "Creates a new security group.
-
-  e.g. (create-group compute \"Database Server\" \"Description for group\" :region :us-west-1)"
-  [compute name & {:keys [description region]}]
-  (.createSecurityGroupInRegion (sg-service compute) (ebs/get-region region) name (or description name)))
-
-(defn delete-group
-  "Deletes a security group.
-
-  e.g. (delete-group compute \"Database Server\" :region :us-west-1)"
-  [compute name & {:keys [region]}]
-  (.deleteSecurityGroupInRegion (sg-service compute) (ebs/get-region region) name))
-
-(defn groups
-  "Returns a map of GroupName -> org.jclouds.ec2.domain.SecurityGroup instances.
-
-   e.g. (groups compute :region :us-east-1)"
-  [compute & {:keys [region]}]
-  (into {} (for [#^SecurityGroup group (.describeSecurityGroupsInRegion (sg-service compute)
-                                                                        (ebs/get-region region)
-                                                                        (into-array String '()))]
-             [(.getName group) group])))
-
-(defn get-protocol [v]
-  "Coerce argument to a IP Protocol."
-  (cond
-   (instance? IpProtocol v) v
-   (keyword? v) (if-let [p (get {:tcp IpProtocol/TCP
-                                 :udp IpProtocol/UDP
-                                 :icmp IpProtocol/ICMP}
-                                v)]
-                  p
-                  (throw (IllegalArgumentException.
-                          (str "Can't obtain IP protocol from " v " (valid :tcp, :udp and :icmp)"))))
-   (nil? v) IpProtocol/TCP
-   :else (throw (IllegalArgumentException.
-                 (str "Can't obtain IP protocol from argument of type " (type v))))))
-
-(defn authorize
-  "Adds permissions to a security group.
-
-   e.g. (authorize compute \"jclouds#webserver#us-east-1\" 80 :ip-range \"0.0.0.0/0\")
-        (authorize compute \"jclouds#webserver#us-east-1\" [1000,2000] :protocol :udp)"
-
-  [compute group-name port & {:keys [protocol ip-range region]}]
-  (let [group ((groups compute :region region) group-name)
-        [from-port to-port] (if (number? port) [port port] port)]
-    (if group
-      (.authorizeSecurityGroupIngressInRegion
-       (sg-service compute) (ebs/get-region region) (.getName group) (get-protocol protocol) from-port to-port (or ip-range "0.0.0.0/0"))
-      (throw (IllegalArgumentException.
-              (str "Can't find security group for name " group-name))))))
-
-(defn revoke
-  "Revokes permissions from a security group.
-
-   e.g. (revoke compute 80 \"jclouds#webserver#us-east-1\" :protocol :tcp 80 80 :ip-range \"0.0.0.0/0\")"
-  [compute group-name port & {:keys [protocol ip-range region]}]
-  (let [group ((groups compute :region region) group-name)
-        [from-port to-port] (if (number? port) [port port] port)]
-    (if group
-     (.revokeSecurityGroupIngressInRegion
-      (sg-service compute) (ebs/get-region region) (.getName group) (get-protocol protocol) from-port to-port (or ip-range "0.0.0.0/0"))
-     (throw (IllegalArgumentException.
-             (str "Can't find security group for name " group-name))))))
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/blobstore/pom.xml
----------------------------------------------------------------------
diff --git a/blobstore/pom.xml b/blobstore/pom.xml
index 783dc0e..e6fa1d9 100644
--- a/blobstore/pom.xml
+++ b/blobstore/pom.xml
@@ -73,10 +73,6 @@
   <build>
     <plugins>
       <plugin>
-        <groupId>com.theoryinpractise</groupId>
-        <artifactId>clojure-maven-plugin</artifactId>
-      </plugin>
-      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <executions>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/blobstore/src/main/clojure/org/jclouds/blobstore2.clj
----------------------------------------------------------------------
diff --git a/blobstore/src/main/clojure/org/jclouds/blobstore2.clj b/blobstore/src/main/clojure/org/jclouds/blobstore2.clj
deleted file mode 100644
index 35635f4..0000000
--- a/blobstore/src/main/clojure/org/jclouds/blobstore2.clj
+++ /dev/null
@@ -1,327 +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.
-;
-
-(ns org.jclouds.blobstore2
-  "A clojure binding for the jclouds BlobStore.
-
-Current supported services are:
-   [transient, filesystem, azureblob, atmos, walrus, scaleup-storage,
-    ninefold-storage, googlestorage, synaptic, peer1-storage, aws-s3,
-    eucalyptus-partnercloud-s3, cloudfiles-us, cloudfiles-uk, swift,
-    scality-rs2, hosteurope-storage, tiscali-storage]
-
-Here's a quick example of how to view resources in rackspace
-
-    (use 'org.jclouds.blobstore2)
-
-    (def user \"rackspace_username\")
-    (def password \"rackspace_password\")
-    (def blobstore-name \"cloudfiles\")
-
-    (def the-blobstore (blobstore blobstore-name user password))
-
-    (pprint (locations the-blobstore))
-    (pprint (containers the-blobstore))
-    (pprint (blobs the-blobstore your_container_name))
-
-See http://code.google.com/p/jclouds for details."
-  (:use [org.jclouds.core])
-  (:import [java.io File FileOutputStream OutputStream]
-           java.util.Properties
-           [org.jclouds ContextBuilder]
-           [org.jclouds.blobstore
-            domain.BlobBuilder BlobStore BlobStoreContext
-            domain.BlobMetadata domain.StorageMetadata domain.PageSet
-            domain.Blob domain.internal.BlobBuilderImpl options.PutOptions
-            options.PutOptions$Builder
-            options.CreateContainerOptions options.ListContainerOptions]
-           [org.jclouds.io Payload Payloads]
-           java.util.Arrays
-           [java.security DigestOutputStream MessageDigest]
-           com.google.common.collect.ImmutableSet
-           com.google.common.net.MediaType
-           com.google.common.io.ByteSource))
-
-;;
-;; Payload support for creating Blobs.
-;;
-
-(defprotocol PayloadSource
-  "Various types can have PayloadSource extended onto them so that they are
-   easily coerced into a Payload."
-  (^Payload payload [arg] "Coerce arg into a Payload."))
-
-(extend-protocol PayloadSource
-  Payload
-  (payload [p] p)
-  java.io.InputStream
-  (payload [is] (Payloads/newInputStreamPayload is))
-  String
-  (payload [s] (Payloads/newStringPayload s))
-  java.io.File
-  (payload [f] (Payloads/newFilePayload f))
-  ByteSource
-  (payload [bs] (Payloads/newByteSourcePayload bs)))
-
-;; something in clojure 1.3 (namespaces?) does not like a private type called byte-array-type,
-;; so we refer to (class (make-array ...)) directly; and it only parses if it is its own block,
-;; hence separating it from the above
-(extend-protocol PayloadSource
-  (class (make-array Byte/TYPE 0))
-  (payload [ba] (Payloads/newByteArrayPayload ba)))
-
-(defn blobstore
-  "Create a logged in context.
-Options can also be specified for extension modules
-     :log4j :enterprise :ning :apachehc :bouncycastle :joda :gae"
-  [^String provider ^String provider-identity ^String provider-credential
-   & options]
-  (let [module-keys (set (keys module-lookup))
-        ext-modules (filter #(module-keys %) options)
-        opts (apply hash-map (filter #(not (module-keys %)) options))]
-    (let [^BlobStoreContext
-          context (.. (ContextBuilder/newBuilder provider)
-                      (credentials provider-identity provider-credential)
-                      (modules (apply modules (concat ext-modules (opts :extensions))))
-                      (overrides (reduce #(do (.put ^Properties %1 (name (first %2)) (second %2)) %1)
-                                         (Properties.) (dissoc opts :extensions)))
-                      (buildView BlobStoreContext))]
-    (.getBlobStore context))))
-
-(defn blobstore-context
-  "Returns a blobstore context from a blobstore."
-  [^BlobStore blobstore]
-  (.getContext ^BlobStore blobstore))
-
-(defn blob?
-  [object]
-  (instance? Blob))
-
-(defn blobstore?
-  [object]
-  (instance? BlobStore object))
-
-(defn blobstore-context?
-  [object]
-  (instance? BlobStoreContext object))
-
-(defn containers
-  "List all containers in a blobstore."
-  [^BlobStore blobstore] (.list ^BlobStore blobstore))
-
-(def ^{:private true} list-option-map
-  {:after-marker #(.afterMarker ^ListContainerOptions %1 ^String %2)
-   :in-directory #(.inDirectory ^ListContainerOptions %1 %2)
-   :max-results #(.maxResults ^ListContainerOptions %1 ^Integer %2)
-   :with-details #(when %2 (.withDetails ^ListContainerOptions %1))
-   :recursive #(when %2 (.recursive ^ListContainerOptions %1))})
-
-(defn blobs
-  "Returns a set of blobs in the given container, as directed by the
-   query options below.
-   Options are:
-     :after-marker string
-     :in-directory path
-     :max-results n
-     :with-details true
-     :recursive true"
-  [^BlobStore blobstore container-name & args]
-  (let [options (apply hash-map args)
-        list-options (reduce
-                      (fn [lco [k v]]
-                        ((list-option-map k) lco v)
-                        lco)
-                      (ListContainerOptions.)
-                      options)]
-    (.list blobstore container-name list-options)))
-
-(defn- container-seq-chunk
-  [^BlobStore blobstore container prefix marker]
-  (apply blobs blobstore container
-         (concat (when prefix
-                   [:in-directory prefix])
-                 (when (string? marker)
-                   [:after-marker marker]))))
-
-(defn- container-seq-chunks [^BlobStore blobstore container prefix marker]
-  (when marker ;; When getNextMarker returns null, there's no more.
-    (let [chunk (container-seq-chunk blobstore container prefix marker)]
-      (lazy-seq (cons chunk
-                      (container-seq-chunks blobstore container prefix
-                                            (.getNextMarker ^PageSet chunk)))))))
-
-(defn- concat-elements
-  "Make a lazy concatenation of the lazy sequences contained in coll.
-   Lazily evaluates coll.
-   Note: (apply concat coll) or (lazy-cat coll) are not lazy wrt coll itself."
-  [coll]
-  (if-let [s (seq coll)]
-    (lazy-seq (concat (first s) (concat-elements (next s))))))
-
-(defn container-seq
-  "Returns a lazy seq of all blobs in the given container."
-  ([^BlobStore blobstore container]
-     (container-seq blobstore container nil))
-  ([^BlobStore blobstore container prefix]
-     ;; :start has no special meaning, it is just a non-null (null indicates
-     ;; end), non-string (markers are strings).
-     (concat-elements (container-seq-chunks blobstore container prefix
-                                            :start))))
-
-(defn locations
-  "Retrieve the available container locations for the blobstore context."
-  [^BlobStore blobstore]
-  (seq (.listAssignableLocations blobstore)))
-
-(defn create-container
-  "Create a container."
-  [^BlobStore blobstore container-name & {:keys [location public-read?]}]
-  (let [cco (CreateContainerOptions.)
-        cco (if public-read? (.publicRead cco) cco)]
-    (.createContainerInLocation blobstore location container-name cco)))
-
-(defn clear-container
-  "Clear a container."
-  [^BlobStore blobstore container-name]
-  (.clearContainer blobstore container-name))
-
-(defn delete-container
-  "Delete a container."
-  [^BlobStore blobstore container-name]
-  (.deleteContainer blobstore container-name))
-
-(defn delete-container-if-empty
-  "Delete a container if empty."
-  [^BlobStore blobstore container-name]
-  (.deleteContainerIfEmpty blobstore container-name))
-
-(defn container-exists?
-  "Predicate to check presence of a container"
-  [^BlobStore blobstore container-name]
-  (.containerExists blobstore container-name))
-
-(defn directory-exists?
-  "Predicate to check presence of a directory"
-  [^BlobStore blobstore container-name path]
-  (.directoryExists blobstore container-name path))
-
-(defn create-directory
-  "Create a directory path."
-  [^BlobStore blobstore container-name path]
-  (.createDirectory blobstore container-name path))
-
-(defn delete-directory
-  "Delete a directory path."
-  [^BlobStore blobstore container-name path]
-  (.deleteDirectory blobstore container-name path))
-
-(defn blob-exists?
-  "Predicate to check presence of a blob"
-  [^BlobStore blobstore container-name path]
-  (.blobExists blobstore container-name path))
-
-(defn put-blob
-  "Put a blob.  Metadata in the blob determines location."
-  [^BlobStore blobstore container-name blob & {:keys [multipart?]}]
-  (let [options (if multipart?
-                  (PutOptions$Builder/multipart)
-                  (PutOptions.))]
-    (.putBlob blobstore container-name blob options)))
-
-(defn blob-metadata
-  "Get metadata from given path"
-  [^BlobStore blobstore container-name path]
-  (.blobMetadata blobstore container-name path))
-
-(defn ^Blob get-blob
-  "Get blob from given path"
-  [^BlobStore blobstore container-name path]
-  (.getBlob blobstore container-name path))
-
-(defn sign-get
-  "Get a signed http GET request for manipulating a blob in another
-   application, Ex. curl."
-  [^BlobStore blobstore container-name name]
-  (.signGetBlob (.. blobstore getContext getSigner) container-name name))
-
-(defn sign-put
-  "Get a signed http PUT request for manipulating a blob in another
-   application, Ex. curl. A Blob with at least the name and content-length
-   must be given."
-  [^BlobStore blobstore container-name ^Blob blob]
-  (.signPutBlob (.. blobstore getContext getSigner)
-                container-name
-                blob))
-
-(defn sign-delete
-  "Get a signed http DELETE request for manipulating a blob in another
-  application, Ex. curl."
-  [^BlobStore blobstore container-name name]
-  (.signRemoveBlob (.. blobstore getContext getSigner) container-name name))
-
-(defn get-blob-stream
-  "Get an inputstream from the blob at a given path"
-  [^BlobStore blobstore container-name path]
-  (.getInput ^Payload (.getPayload (get-blob blobstore container-name path))))
-
-(defn remove-blob
-  "Remove blob from given path"
-  [^BlobStore blobstore container-name path]
-  (.removeBlob blobstore container-name path))
-
-(defn count-blobs
-  "Count blobs"
-  [^BlobStore blobstore container-name]
-  (.countBlobs blobstore container-name))
-
-(defn blob
-  "Create a new blob with the specified payload and options.
-
-   The payload argument can be anything accepted by the PayloadSource protocol."
-  ([^String name &
-    {:keys [payload content-type content-length content-md5
-            content-disposition content-encoding content-language metadata]}]
-     (let [blob-builder (.name (BlobBuilderImpl.) name)
-           blob-builder (if payload
-                          (.payload blob-builder
-                                    (org.jclouds.blobstore2/payload payload))
-                          (.forSigning blob-builder))
-           blob-builder (if content-length ;; Special case, arg is prim.
-                          (.contentLength blob-builder content-length)
-                          blob-builder)
-           blob-builder (if content-type
-                          (.contentType blob-builder content-type)
-                          blob-builder)
-           blob-builder (if content-md5
-                          (.contentMD5 blob-builder content-md5)
-                          blob-builder)]
-       (doto blob-builder
-         (.contentDisposition content-disposition)
-         (.contentEncoding content-encoding)
-         (.contentLanguage content-language)
-         (.userMetadata metadata))
-       (.build blob-builder))))
-
-(define-accessors StorageMetadata "blob" type id name
-  location-id uri last-modified)
-(define-accessors BlobMetadata "blob" content-type)
-
-(defn blob-etag [^Blob blob]
-  (.getETag blob))
-
-(defn blob-md5 [^Blob blob]
-  (.getContentMD5 blob))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/blobstore/src/test/clojure/org/jclouds/blobstore2_test.clj
----------------------------------------------------------------------
diff --git a/blobstore/src/test/clojure/org/jclouds/blobstore2_test.clj b/blobstore/src/test/clojure/org/jclouds/blobstore2_test.clj
deleted file mode 100644
index 055e155..0000000
--- a/blobstore/src/test/clojure/org/jclouds/blobstore2_test.clj
+++ /dev/null
@@ -1,205 +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.
-;
-
-(ns org.jclouds.blobstore2-test
-  (:use [org.jclouds.blobstore2] :reload-all)
-  (:use [clojure.test])
-  (:import [java.io ByteArrayInputStream ByteArrayOutputStream
-            StringBufferInputStream]
-           [org.jclouds.util Strings2]
-           com.google.common.hash.Hashing
-           com.google.common.io.ByteSource))
-
-(defn clean-stub-fixture
-  "This should allow basic tests to easily be run with another service."
-  [blobstore]
-  (fn [f]
-    (doseq [container (containers blobstore)]
-      (delete-container blobstore (.getName container)))
-    (f)))
-
-(def blobstore-stub (blobstore "transient" "" ""))
-
-(use-fixtures :each (clean-stub-fixture blobstore-stub))
-
-(deftest blobstore?-test
-  (is (blobstore? blobstore-stub)))
-
-(deftest as-blobstore-test
-  (is (blobstore? (blobstore "transient" "user" "password"))))
-
-(deftest create-existing-container-test
-  (is (not (container-exists? blobstore-stub "")))
-  (is (create-container blobstore-stub "fred"))
-  (is (container-exists? blobstore-stub "fred")))
-
-(deftest create-container-test
-  (is (create-container blobstore-stub "fred"))
-  (is (container-exists? blobstore-stub "fred")))
-
-(deftest locations-test
-  (is (not (empty? (locations blobstore-stub))))
-  (is (create-container blobstore-stub "fred"
-                        :location (first (locations blobstore-stub)))))
-
-(deftest containers-test
-  (is (empty? (containers blobstore-stub)))
-  (is (create-container blobstore-stub "fred"))
-  (is (= 1 (count (containers blobstore-stub)))))
-
-(deftest blobs-test
-  (is (create-container blobstore-stub "container"))
-  (is (empty? (blobs blobstore-stub "container")))
-  (is (put-blob blobstore-stub "container"
-                (blob "blob1" :payload "blob1")))
-  (is (put-blob blobstore-stub "container"
-                (blob "blob2" :payload "blob2")))
-  (is (= 2 (count (blobs blobstore-stub "container"))))
-  (is (= 1 (count (blobs blobstore-stub "container" :max-results 1))))
-  (create-directory blobstore-stub "container" "dir")
-  (is (put-blob blobstore-stub "container"
-                (blob "dir/blob2" :payload "blob2")))
-  (is (put-blob blobstore-stub "container"
-                (blob "dir/blob3" :payload "blob3")))
-  (is (= 4 (count-blobs blobstore-stub "container")))
-  (is (= 4 (count (blobs blobstore-stub "container"))))
-  (is (= 5 (count (blobs blobstore-stub "container" :recursive true))))
-  (is (= 4 (count (blobs blobstore-stub "container" :with-details true))))
-  ;; jclouds will list dir and dir/
-  (is (= 2 (count (blobs blobstore-stub "container" :in-directory "dir")))))
-
-(deftest large-container-list-test
-  (let [container-name "test"
-        total-blobs 5000]
-    ;; create a container full of blobs
-    (create-container blobstore-stub container-name)
-    (dotimes [i total-blobs] (put-blob blobstore-stub container-name
-                                       (blob (str i)
-                                             :payload (str i))))
-    ;; verify
-    (is (= total-blobs (count-blobs blobstore-stub container-name)))))
-
-(deftest container-seq-test
-  (is (create-container blobstore-stub "container"))
-  (is (empty? (container-seq blobstore-stub "container")))
-  (is (empty? (container-seq blobstore-stub "container" "/a"))))
-
-(deftest get-blob-test
-  (is (create-container blobstore-stub "blob"))
-  (is (put-blob blobstore-stub "blob"
-                (blob "blob1" :payload "blob1")))
-  (is (put-blob blobstore-stub "blob"
-                (blob "blob2" :payload "blob2")))
-  (is (= "blob2" (Strings2/toStringAndClose (get-blob-stream blobstore-stub
-                                                             "blob" "blob2")))))
-
-(deftest put-blob-test
-  ;; Check multipart works
-  (is (create-container blobstore-stub "blobs"))
-  (is (put-blob blobstore-stub "blobs"
-                (blob "blob1" :payload "blob1")
-                :multipart? true))
-  (is (= 1 (count (blobs blobstore-stub "blobs")))))
-
-(deftest sign-get-test
-  (let [request (sign-get blobstore-stub "container" "path")]
-    (is (= "http://localhost/container/path" (str (.getEndpoint request))))
-    (is (= "GET" (.getMethod request)))))
-
-(deftest sign-put-test
-  (let [request (sign-put blobstore-stub "container"
-                          (blob "path" :content-length 10))]
-    (is (= "http://localhost/container/path" (str (.getEndpoint request))))
-    (is (= "PUT" (.getMethod request)))
-    (is (= "10" (first (.get (.getHeaders request) "Content-Length"))))
-    (is (= "application/unknown"
-         (first (.get (.getHeaders request) "Content-Type"))))))
-
-(deftest sign-put-with-headers-test
-  (let [request (sign-put blobstore-stub
-                 "container"
-                 (blob "path"
-                       :content-length 10
-                       :content-type "x"
-                       :content-language "en"
-                       :content-disposition "f"
-                       :content-encoding "g"))]
-    (is (= "PUT" (.getMethod request)))
-    (is (= "10" (first (.get (.getHeaders request) "Content-Length"))))
-    (is (= "x" (first (.get (.getHeaders request) "Content-Type"))))
-    (is (= "en" (first (.get (.getHeaders request) "Content-Language"))))
-    (is (= "f" (first (.get (.getHeaders request) "Content-Disposition"))))
-    (is (= "g" (first (.get (.getHeaders request) "Content-Encoding"))))))
-
-(deftest sign-delete-test
-  (let [request (sign-delete blobstore-stub "container" "path")]
-    (is (= "http://localhost/container/path" (str (.getEndpoint request))))
-    (is (= "DELETE" (.getMethod request)))))
-
-(deftest blob-test
-  (let [byte-source (ByteSource/wrap (.getBytes "test-payload"))
-        a-blob (blob "test-name"
-                     :payload byte-source
-                     :content-md5 (.asBytes (.hash byte-source (Hashing/md5))))]
-    (is (= (seq (.. a-blob (getPayload) (getContentMetadata) (getContentMD5)))
-           (seq (.digest (doto (java.security.MessageDigest/getInstance "MD5")
-                               (.reset)
-                               (.update (.getBytes "test-payload")))))))))
-
-(deftest payload-protocol-test
-  (is (instance? org.jclouds.io.Payload (payload "test")))
-  (is (blob "blob1" :payload (payload "blob1")))
-  (is (create-container blobstore-stub "container"))
-  (is (= "blob1"
-         (do
-           (put-blob blobstore-stub "container"
-                     (blob "blob1"
-                           :payload "blob1"))
-           (Strings2/toStringAndClose (get-blob-stream blobstore-stub
-                                                       "container" "blob1")))))
-  (is (= "blob2"
-         (do
-           (put-blob blobstore-stub "container"
-                     (blob "blob2"
-                           :payload (StringBufferInputStream. "blob2")))
-           (Strings2/toStringAndClose (get-blob-stream blobstore-stub
-                                                       "container" "blob2")))))
-  (is (= "blob3"
-         (do
-           (put-blob blobstore-stub "container"
-                     (blob "blob3"
-                           :payload (.getBytes "blob3")))
-           (Strings2/toStringAndClose (get-blob-stream blobstore-stub
-                                                       "container" "blob3")))))
-
-  (is (= "blob4"
-         (do
-           (put-blob blobstore-stub "container"
-                     (blob "blob4"
-                           :payload (ByteArrayInputStream. (.getBytes "blob4"))))
-           (Strings2/toStringAndClose (get-blob-stream blobstore-stub
-                                                       "container" "blob4")))))
-
-  (is (= "blob5"
-         (do
-           (put-blob blobstore-stub "container"
-                     (blob "blob5"
-                           :payload (ByteSource/wrap (.getBytes "blob5"))))
-           (Strings2/toStringAndClose (get-blob-stream blobstore-stub
-                                                       "container" "blob5"))))))
-
-;; TODO: more tests involving blob-specific functions

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/compute/pom.xml
----------------------------------------------------------------------
diff --git a/compute/pom.xml b/compute/pom.xml
index 67ae7bb..ccca06e 100644
--- a/compute/pom.xml
+++ b/compute/pom.xml
@@ -71,13 +71,4 @@
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>com.theoryinpractise</groupId>
-        <artifactId>clojure-maven-plugin</artifactId>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/compute/src/main/clojure/org/jclouds/compute2.clj
----------------------------------------------------------------------
diff --git a/compute/src/main/clojure/org/jclouds/compute2.clj b/compute/src/main/clojure/org/jclouds/compute2.clj
deleted file mode 100644
index f9653a4..0000000
--- a/compute/src/main/clojure/org/jclouds/compute2.clj
+++ /dev/null
@@ -1,450 +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.
-;
-
-(ns org.jclouds.compute2
-  "A clojure binding to the jclouds ComputeService.
-
- jclouds supports many compute providers including Amazon EC2 (aws-ec2),
- Rackspace Cloud Servers (cloudservers-us), GoGrid (gogrid), 
- There are over a dozen to choose from.  
-
- Current supported providers are available via the following dependency:
-  org.jclouds/jclouds-allcompute
-
- You can inquire about which providers are loaded via the following:
-  (seq (org.jclouds.providers.Providers/allCompute))
-  (seq (org.jclouds.apis.Apis/allCompute))
-
-Here's an example of getting some compute configuration from rackspace:
-
-  (use 'org.jclouds.compute2)
-  (use 'clojure.pprint)
-
-  (def provider \"cloudservers-us\")
-  (def provider-identity \"username\")
-  (def provider-credential \"password\")
-
-  ;; create a compute service
-  (def compute
-    (compute-service provider provider-identity provider-credential))
-
-  (pprint (locations compute))
-  (pprint (images compute))
-  (pprint (nodes compute))
-  (pprint (hardware-profiles compute)))
-
-Here's an example of creating and running a small linux node in the group webserver:
-
-  ;; create a compute service using ssh and log4j extensions
-  (def compute
-    (compute-service
-      provider provider-identity provider-credential :sshj :log4j))
-
-  (create-node \"webserver\" compute)
-
-  See http://code.google.com/p/jclouds for details.
-  "
-  (:use org.jclouds.core
-    (org.jclouds predicate) [clojure.core.incubator :only (-?>)])
-  (:import java.io.File
-    java.util.Properties
-    [org.jclouds ContextBuilder]
-    [org.jclouds.domain Location]
-    [org.jclouds.compute
-     ComputeService ComputeServiceContext]
-    [org.jclouds.compute.domain
-     Template TemplateBuilder ComputeMetadata NodeMetadata Hardware
-     OsFamily Image]
-    [org.jclouds.compute.options TemplateOptions RunScriptOptions
-     RunScriptOptions$Builder]
-    [org.jclouds.compute.predicates
-     NodePredicates]
-    [com.google.common.collect ImmutableSet])
-  )
-
-(defn compute-service
-  "Create a logged in context."
-  ([#^String provider #^String provider-identity #^String provider-credential
-    & options]
-    (let [module-keys (set (keys module-lookup))
-          ext-modules (filter #(module-keys %) options)
-          opts (apply hash-map (filter #(not (module-keys %)) options))]
-      (.. (ContextBuilder/newBuilder provider)
-          (credentials provider-identity provider-credential)
-          (modules (apply modules (concat ext-modules (opts :extensions))))
-          (overrides (reduce #(do (.put %1 (name (first %2)) (second %2)) %1)
-            (Properties.) (dissoc opts :extensions)))
-          (buildView ComputeServiceContext)
-          (getComputeService))))
-  ([#^ComputeServiceContext compute-context]
-    (.getComputeService compute-context)))
-
-(defn compute-context
-  "Returns a compute context from a compute service."
-  [compute]
-  (.getContext compute))
-
-(defn compute-service?
-  [object]
-  (instance? ComputeService object))
-
-(defn compute-context?
-  [object]
-  (instance? ComputeServiceContext object))
-
-(defn locations
-  "Retrieve the available compute locations for the compute context."
-  ([#^ComputeService compute]
-    (seq (.listAssignableLocations compute))))
-
-(defn nodes
-  "Retrieve the existing nodes for the compute context."
-  ([#^ComputeService compute]
-    (seq (.listNodes compute))))
-
-(defn nodes-with-details
-  "Retrieve the existing nodes for the compute context."
-  ([#^ComputeService compute]
-    (seq (.listNodesDetailsMatching compute (NodePredicates/all)))))
-
-(defn nodes-with-details-matching
-  "List details for all nodes matching fn pred.
-  pred should be a fn of one argument that takes a ComputeMetadata and returns true or false.
-  "
-  ([#^ComputeService compute pred]
-    (seq (.listNodesDetailsMatching compute (to-predicate pred)))))
-
-(defn nodes-in-group
-  "list details of all the nodes in the given group."
-  ([#^ComputeService compute #^String group]
-    (filter #(= (.getGroup %) group) (nodes-with-details compute))))
-
-(defn images
-  "Retrieve the available images for the compute context."
-  ([#^ComputeService compute]
-    (seq (.listImages compute))))
-
-(defn hardware-profiles
-  "Retrieve the available node hardware profiles for the compute context."
-  ([#^ComputeService compute]
-    (seq (.listHardwareProfiles compute))))
-
-(defn default-template
-  ([#^ComputeService compute]
-    (.. compute (templateBuilder)
-      (options
-        (org.jclouds.compute.options.TemplateOptions$Builder/authorizePublicKey
-          (slurp (str (. System getProperty "user.home") "/.ssh/id_rsa.pub"))))
-      build)))
-
-(defn create-nodes
-  "Create the specified number of nodes using the default or specified
-   template.
-  ;; Simplest way to add 2 small linux nodes to the group webserver is to run
-  (create-nodes \"webserver\" 2 compute)
-  ;; Note that this will actually add another 2 nodes to the set called
-  ;; \"webserver\""
-  ([group count compute]
-    (create-nodes
-      group count (default-template compute) compute))
-  ([#^ComputeService compute group count template]
-    (seq
-      (.createNodesInGroup compute group count template))))
-
-(defn create-node
-  "Create a node using the default or specified template.
-
-  ;; simplest way to add a small linux node to the group webserver is to run
-  (create-node \"webserver\" compute)
-
-  ;; Note that this will actually add another node to the set called
-  ;;  \"webserver\""
-  ([compute group]
-    (create-node compute group (default-template compute)))
-  ([compute group template]
-    (first (create-nodes compute group 1 template))))
-
-(defn #^NodeMetadata node-details
-  "Retrieve the node metadata, given its id."
-  ([#^ComputeService compute id]
-    (.getNodeMetadata compute id)))
-
-(defn suspend-nodes-matching
-  "Suspend all nodes matching the fn pred.
-  pred should be a fn of one argument that takes a ComputeMetadata and returns true or false."
-  ([#^ComputeService compute pred]
-    (.suspendNodesMatching compute (to-predicate pred))))
-
-(defn suspend-node
-  "Suspend a node, given its id."
-  ([#^ComputeService compute id]
-    (.suspendNode compute id)))
-
-(defn resume-nodes-matching
-  "Suspend all the nodes in the fn pred.
-  pred should be a fn of one argument that takes a ComputeMetadata and returns true or false."
-  ([#^ComputeService compute pred]
-    (.resumeNodesMatching compute (to-predicate pred))))
-
-(defn resume-node
-  "Resume a node, given its id."
-  ([#^ComputeService compute id]
-    (.resumeNode compute id)))
-
-(defn reboot-nodes-matching
-  "Reboot all the nodes in the fn pred.
-  pred should be a fn of one argument that takes a ComputeMetadata and returns true or false."
-  ([#^ComputeService compute pred]
-    (.rebootNodesMatching compute (to-predicate pred))))
-
-(defn reboot-node
-  "Reboot a node, given its id."
-  ([#^ComputeService compute id]
-    (.rebootNode compute id)))
-
-(defn destroy-nodes-matching
-  "Destroy all the nodes in the fn pred.
-  pred should be a fn of one argument that takes a ComputeMetadata and returns true or false.
- 
-  ;; destroy all nodes
-  (destroy-nodes-matching compute (constantly true))
-  "
-  ([#^ComputeService compute pred]
-    (.destroyNodesMatching compute (to-predicate pred))))
-
-(defn destroy-node
-  "Destroy a node, given its id."
-  ([#^ComputeService compute id]
-    (.destroyNode compute id)))
-
-(defn run-script-on-node
-  "Run a script on a node"
-  ([#^ComputeService compute id command #^RunScriptOptions options]
-    (.runScriptOnNode compute id command options)))
-
-(defn run-script-on-nodes-matching
-  "Run a script on the nodes matching the given predicate"
-  ([#^ComputeService compute pred command #^RunScriptOptions options]
-    (.runScriptOnNodesMatching compute (to-predicate pred) command options)))
-
-(defmacro status-predicate [node status]
-  `(= (.getStatus ~node)
-    (. org.jclouds.compute.domain.NodeMetadata$Status ~status)))
-
-(defn pending?
-  "Predicate for the node being in transition"
-  [#^NodeMetadata node]
-  (status-predicate node PENDING))
-
-(defn running?
-  "Predicate for the node being available for requests."
-  [#^NodeMetadata node]
-  (status-predicate node RUNNING))
-
-(defn terminated?
-  "Predicate for the node being halted."
-  [#^NodeMetadata node]
-  (or
-    (= node nil)
-    (status-predicate node TERMINATED)))
-
-(defn suspended?
-  "Predicate for the node being suspended."
-  [#^NodeMetadata node]
-  (status-predicate node SUSPENDED))
-
-(defn error-status?
-  "Predicate for the node being in an error status."
-  [#^NodeMetadata node]
-  (status-predicate node ERROR))
-
-(defn unrecognized-status?
-  "Predicate for the node being in an unrecognized status."
-  [#^NodeMetadata node]
-  (status-predicate node UNRECOGNIZED))
-
-(defn in-group?
-  "Returns a predicate fn which returns true if the node is in the given group, false otherwise"
-  [group]
-  #(= (.getGroup %) group))
-
-(defn public-ips
-  "Returns the node's public ips"
-  [#^NodeMetadata node]
-  (.getPublicAddresses node))
-
-(defn private-ips
-  "Returns the node's private ips"
-  [#^NodeMetadata node]
-  (.getPrivateAddresses node))
-
-(defn group
-  "Returns a the node's group"
-  [#^NodeMetadata node]
-  (.getGroup node))
-
-(defn hostname
-  "Returns the compute node's name"
-  [#^ComputeMetadata node]
-  (.getName node))
-
-(defn location
-  "Returns the compute node's location id"
-  [#^ComputeMetadata node]
-  (-?> node .getLocation .getId))
-
-(defn id
-  "Returns the compute node's id"
-  [#^ComputeMetadata node]
-  (.getId node))
-
-(define-accessors Template image hardware location options)
-(define-accessors Image version os-family os-description architecture)
-(define-accessors Hardware processors ram volumes)
-(define-accessors NodeMetadata "node" credentials hardware status group)
-
-(def
-  ^{:doc "TemplateBuilder functions" :private true}
-  template-map
-  (merge
-    (make-option-map
-      kw-memfn-0arg [:smallest :fastest :biggest :any])
-    (make-option-map
-      kw-memfn-1arg
-      [:from-hardware :from-image :from-template
-       :os-family :location-id :image-id :hardware-id :hypervisor-matches 
-       :os-name-matches :os-description-matches :os-version-matches
-       :os-arch-matches :os-64-bit :image-name-matches
-       :image-version-matches :image-description-matches :image-matches
-       :min-cores :min-ram :min-disk])))
-
-(def
-  ^{:doc "TemplateOptions functions" :private true}
-  options-map
-  (merge
-    (make-option-map
-      kw-memfn-0arg
-      [;; ec2
-         :no-key-pair
-       ;; aws-ec2
-         :enable-monitoring :no-placement-group])
-    (make-option-map
-      kw-memfn-1arg
-      [;; RunScriptOptions
-         :override-login-credentials
-         :override-login-user
-         :override-login-password :override-login-private-key
-         :override-authenticate-sudo
-         
-         :name-task :run-as-root :wrap-in-init-script :block-on-complete
-         :block-on-port
-       ;; TemplateOptions
-         :run-script :install-private-key :authorize-public-key :tags
-       ;; cloudstack
-         :security-group-id :network-id :network-ids :setup-static-nat
-         :ip-on-default-network :ips-to-networks
-       ;; ec2
-         :security-groups :user-data :block-device-mappings
-         :unmap-device-named
-       ;; cloudstack ec2
-         :key-pair
-       ;; aws-ec2
-         :placement-group :subnet-id :spot-price :spot-options
-         :iam-instance-profile-name :iam-instance-profile-arn
-       ;; cloudstack aws-ec2
-         :security-group-ids
-       ;; softlayer
-         :domain-name])
-    (make-option-map
-      kw-memfn-varargs
-      [;; from TemplateOptions
-         :inbound-ports])
-    (make-option-map
-      kw-memfn-2arg
-      [;; from TemplateOptions
-         :block-on-port
-       ;; ec2 options
-         :map-ephemeral-device-to-device-name])
-    {:map-ebs-snapshot-to-device-name
-     (kw-memfn-apply :map-ebs-snapshot-to-device-name
-       device-name snapshot-id size-in-gib delete-on-termination)
-     :map-new-volume-to-device-name
-     (kw-memfn-apply :map-new-volume-to-device-name
-       device-name size-in-gib delete-on-termination)}))
-
-(def
-  ^{:doc "All receognised options"}
-  known-template-options
-  (set (mapcat keys [options-map template-map])))
-
-(defn os-families []
-  (. OsFamily values))
-
-(def enum-map {:os-family (os-families)})
-
-(defn translate-enum-value [kword value]
-  (or (-> (filter #(= (name value) (str %)) (kword enum-map)) first)
-    value))
-
-(defn apply-option [builder option-map option value]
-  (when-let [f (option-map option)]
-    (f builder (translate-enum-value option value))))
-
-(defn build-template
-  "Creates a template that can be used to run nodes.
-
-The :os-family key expects a keyword version of OsFamily,
-  eg. :os-family :ubuntu.
-
-The :smallest, :fastest, :biggest, and :any keys expect a
-boolean value.
-
-Options correspond to TemplateBuilder methods."
-  [#^ComputeService compute
-   {:keys [from-hardware from-image from-template
-       os-family location-id image-id hardware-id
-       os-name-matches os-description-matches os-version-matches
-       os-arch-matches os-64-bit mage-name-matches
-       image-version-matches image-description-matches image-matches
-       min-cores min-ram min-disk smallest fastest biggest any]
-    :as options}]
-  (let [builder (.. compute (templateBuilder))]
-    (doseq [[option value] options]
-      (when-not (known-template-options option)
-        (throw (Exception. (format "Invalid template builder option : %s" option))))
-      ;; apply template builder options
-      (try
-        (apply-option builder template-map option value)
-        (catch Exception e
-          (throw (Exception. 
-            (format
-              "Problem applying template builder %s with value %s: %s"
-              option (pr-str value) (.getMessage e))
-            e)))))
-    (let [template (.build builder)
-          template-options (.getOptions template)]
-      (doseq [[option value] options]
-        ;; apply template option options
-        (try
-          (apply-option template-options options-map option value)
-          (catch Exception e
-            (throw (Exception. 
-              (format
-                "Problem applying template option %s with value %s: %s"
-                option (pr-str value) (.getMessage e))
-              e)))))
-      template)))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/compute/src/main/clojure/org/jclouds/modules.clj
----------------------------------------------------------------------
diff --git a/compute/src/main/clojure/org/jclouds/modules.clj b/compute/src/main/clojure/org/jclouds/modules.clj
deleted file mode 100644
index 9383090..0000000
--- a/compute/src/main/clojure/org/jclouds/modules.clj
+++ /dev/null
@@ -1,88 +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.
-;
-
-(defn compute-module
-  []
-  (org.jclouds.compute.config.JCloudsNativeComputeServiceAdapterContextModule 
-    (class ComputeService)
-    (class ComputeService)
-    (defrecord ClojureComputeServiceAdapter []
-          org.jclouds.compute.JCloudsNativeComputeServiceAdapter
-          (^NodeMetadata createNodeWithGroupEncodedIntoNameThenStoreCredentials [this ^String group ^String name ^Template template ^Map credentialStore]
-            ())
-          (^Iterable listNodes [this ]
-            ())
-          (^Iterable listImages [this ]
-            ())
-          (^Iterable listHardwareProfiles [this ]
-            ())
-          (^Iterable listLocations [this ]
-            ())
-          (^NodeMetadata getNode [this ^String id]
-            ())
-          (^void destroyNode [this ^String id]
-            ())
-          (^void rebootNode  [this ^String id]
-            ())
-          (^void suspendNode [this ^String id]
-            ())
-          (^void resumeNode [this ^String id]
-            ()))))
-
-(defn compute-context [^RestContextSpec spec] 
-  (.createContext (ComputeServiceContextFactory.)  spec))
-
-(^RestContextSpec defn context-spec [^StandaloneComputeServiceContextModule module]
-  (StandaloneComputeServiceContextSpec. "servermanager", "http://host", "1", "", "identity", "credential", module, (ImmutableSet/of)))
-
-(defrecord NodeListComputeService
-    [node-list]
-    org.jclouds.compute.ComputeService
-    (listNodes [_] node-list)
-    (getNodeMetadata
-     [_ id]
-     (some #(= (.getId %) id) node-list))
-    (listNodesDetailsMatching
-     [_ predicate]
-     (filter #(.apply predicate %) node-list)))
-
-(defn ssh-client-factory
-  "Pass in a function that reifies org.jclouds.ssh.SshClient"
-  [ctor]
-  (reify
-   org.jclouds.ssh.SshClient$Factory
-   (^org.jclouds.ssh.SshClient create
-    [_ ^IPSocket socket ^Credentials credentials]
-    (ctor socket credentials))
-   (^org.jclouds.ssh.SshClient create
-    [_ ^IPSocket socket ^String username ^String password-or-key]
-    (ctor socket username password-or-key))
-   (^org.jclouds.ssh.SshClient create
-    [_ ^IPSocket socket ^String username ^bytes password-or-key]
-    (ctor socket username password-or-key))))
-
-(defn ssh-module
-  "Create a module that specifies the factory for creating an ssh service"
-  [^org.jclouds.ssh.SshClient$Factory factory]
-  (let [binder (atom nil)]
-    (reify
-     com.google.inject.Module
-     (configure
-      [this abinder]
-      (reset! binder abinder)
-      (.. @binder (bind org.jclouds.ssh.SshClient$Factory)
-          (toInstance factory))))))

http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/compute/src/main/clojure/org/jclouds/predicate.clj
----------------------------------------------------------------------
diff --git a/compute/src/main/clojure/org/jclouds/predicate.clj b/compute/src/main/clojure/org/jclouds/predicate.clj
deleted file mode 100644
index 901a89d..0000000
--- a/compute/src/main/clojure/org/jclouds/predicate.clj
+++ /dev/null
@@ -1,32 +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.
-;
-
-(ns org.jclouds.predicate)
-
-(defprotocol Coercions
-  "Protocol for coercing between predicate-like things, like
-  Clojure fns and com.google.common.base.Predicate."
-  (to-predicate [p]))
-
-(extend-protocol Coercions
-  clojure.lang.IFn
-  (to-predicate [p]
-    (reify com.google.common.base.Predicate
-      (apply [this input] (p input))))
-
-  com.google.common.base.Predicate
-  (to-predicate [p] p))
\ No newline at end of file