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