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:49 UTC
[1/2] jclouds git commit: Remove clojure bindings
Repository: jclouds
Updated Branches:
refs/heads/master e446b5b8b -> 0bc935dd5
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/compute/src/test/clojure/org/jclouds/compute2_test.clj
----------------------------------------------------------------------
diff --git a/compute/src/test/clojure/org/jclouds/compute2_test.clj b/compute/src/test/clojure/org/jclouds/compute2_test.clj
deleted file mode 100644
index 379c26f..0000000
--- a/compute/src/test/clojure/org/jclouds/compute2_test.clj
+++ /dev/null
@@ -1,158 +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-test
- (:use [org.jclouds.compute2] :reload-all)
- (:use clojure.test)
- (:require [org.jclouds.ssh-test :as ssh-test])
- (:import
- org.jclouds.compute.domain.OsFamily
- java.net.InetAddress
- org.jclouds.scriptbuilder.domain.Statements
- org.jclouds.compute.options.TemplateOptions
- org.jclouds.compute.options.TemplateOptions$Builder
- org.jclouds.compute.options.RunScriptOptions
- org.jclouds.compute.options.RunScriptOptions$Builder
- org.jclouds.domain.LoginCredentials
- java.util.NoSuchElementException
- ))
-
-(defmacro with-private-vars [[ns fns] & tests]
- "Refers private fns from ns and runs tests in context. From users mailing
-list, Alan Dipert and MeikelBrandmeyer."
- `(let ~(reduce #(conj %1 %2 `@(ns-resolve '~ns '~%2)) [] fns)
- ~@tests))
-
-(deftest os-families-test
- (is (some #{"centos"} (map str (os-families)))))
-
-(def compute-stub (compute-service "stub" "compute2.clj" "" :extensions [(ssh-test/ssh-test-client ssh-test/no-op-ssh-client)]))
-
-(defn clean-stub-fixture
- "This should allow basic tests to easily be run with another service."
- [compute-service]
- (fn [f]
- (doseq [node (nodes compute-service)]
- (destroy-node compute-service (.getId node)))
- (f)))
-
-(use-fixtures :each (clean-stub-fixture compute-stub))
-
-(deftest compute-service?-test
- (is (compute-service? compute-stub)))
-
-(deftest as-compute-service-test
- (is (compute-service? (compute-service "stub" "compute2.clj" "")))
- (is (compute-service? compute-stub))
- (is (compute-service? (compute-service (compute-context compute-stub)))))
-
-(deftest nodes-test
- (is (create-node compute-stub "fred" (build-template compute-stub {} )))
- (is (= 1 (count (nodes-in-group compute-stub "fred"))))
- ;; pass in a function that selects node metadata based on NodeMetadata field
- (is (= 1 (count (nodes-with-details-matching compute-stub (in-group? "fred")))))
- ;; or make your query inline
- (is (= 1 (count (nodes-with-details-matching compute-stub #(= (.getGroup %) "fred")))))
- ;; or get real fancy, and use the underlying Predicate object jclouds uses
- (is (= 1 (count (nodes-with-details-matching compute-stub
- (reify com.google.common.base.Predicate
- (apply [this input] (= (.getGroup input) "fred")))))))
- (is (= 0 (count (nodes-with-details-matching compute-stub (in-group? "othergroup")))))
- (suspend-nodes-matching compute-stub (in-group? "fred"))
- (is (suspended? (first (nodes-with-details-matching compute-stub (in-group? "fred")))))
- (resume-nodes-matching compute-stub (in-group? "fred"))
- (is (running? (first (nodes-in-group compute-stub "fred"))))
- (reboot-nodes-matching compute-stub (in-group? "fred"))
- (is (running? (first (nodes-in-group compute-stub "fred"))))
- (is (create-nodes compute-stub "fred" 2 (build-template compute-stub {} )))
- (is (= 3 (count (nodes-in-group compute-stub "fred"))))
- (is (= "fred" (group (first (nodes compute-stub)))))
- (destroy-nodes-matching compute-stub (in-group? "fred"))
- (is (terminated? (first (nodes-in-group compute-stub "fred")))))
-
-(defn localhost? [node]
- "Returns true if the localhost address is in the node's private ips"
- (seq? (some #(= "localhost" %) (private-ips node))))
-
-(deftest compound-predicate-test
- (is (create-node compute-stub "my-group" (build-template compute-stub {})))
- (is (= 0 (count (nodes-with-details-matching compute-stub #(and (suspended? %) (not (localhost? %)))))))
- (is (= 0 (count (nodes-with-details-matching compute-stub #(and (suspended? %) (localhost? %))))))
- (is (= 0 (count (nodes-with-details-matching compute-stub #(and (running? %) (localhost? %))))))
- (is (= 1 (count (nodes-with-details-matching compute-stub #(and (running? %) (not (localhost? %))))))))
-
-(deftest run-script-on-nodes-matching-with-options-test
- (let [echo (Statements/exec "echo hello")
- script-options (.. (RunScriptOptions$Builder/overrideLoginCredentials (.build (.password (.user (org.jclouds.domain.LoginCredentials/builder) "user") "pwd")))
- (runAsRoot false)
- (wrapInInitScript false))
- pred #(= (.getGroup %) "scriptednode")]
- (is (create-node compute-stub "scriptednode" (build-template compute-stub {})))
- (is (run-script-on-nodes-matching compute-stub pred echo script-options))
- (is (thrown? NoSuchElementException
- (run-script-on-nodes-matching compute-stub #(= (.getGroup %) "nonexistingnode") echo script-options)))))
-
-(deftest run-script-on-node-with-options-test
- (let [echo (Statements/exec "echo hello")
- script-options (.. (RunScriptOptions$Builder/overrideLoginCredentials (.build (.password (.user (org.jclouds.domain.LoginCredentials/builder) "user") "pwd")))
- (runAsRoot false)
- (wrapInInitScript false))
- test_node (create-node compute-stub "scriptednode" (build-template compute-stub {}))]
- (is (run-script-on-node compute-stub (id test_node) echo script-options))
- (is (thrown? NoSuchElementException
- (run-script-on-node compute-stub "nonexistingnode" echo script-options)))))
-
-(deftest build-template-test
- (let [service (compute-service "stub" "compute2.clj" "")]
- (testing "nullary"
- (is (>= (-> (build-template service {:fastest true})
- bean :hardware bean :processors first bean :cores)
- 8.0)))
- (testing "one arg"
- (is (> (-> (build-template service {:min-ram 512})
- bean :hardware bean :ram)
- 512))
- (let [credentials (.build (.password (.user (org.jclouds.domain.LoginCredentials/builder) "user") "pwd"))
- f (juxt #(.identity %) #(.credential %))
- template (build-template
- service
- {:override-login-credentials credentials})
- node (create-node service "something" template)]
- (is (= (-> node bean :credentials f)
- (f credentials)))
- (let [identity "fred"
- f #(.identity %)
- template (build-template service {:override-login-user identity})
- node (create-node service "something" template)]
- (is (= (-> node bean :credentials f) identity)))
- (let [credential "fred"
- f #(.credential %)
- template (build-template
- service {:override-login-password credential})
- node (create-node service "something" template)]
- (is (= (-> node bean :credentials f) credential)))))
- (testing "enumerated"
- (is (= OsFamily/CENTOS
- (-> (build-template service {:os-family :centos})
- bean :image bean :operatingSystem bean :family))))
- (testing "varags"
- (is (java.util.Arrays/equals
- (int-array [22 8080])
- (-> (build-template service {:inbound-ports [22 8080]})
- bean :options bean :inboundPorts))))
- (testing "invalid"
- (is (thrown? Exception (build-template service {:xx :yy}))))))
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/compute/src/test/clojure/org/jclouds/ssh_test.clj
----------------------------------------------------------------------
diff --git a/compute/src/test/clojure/org/jclouds/ssh_test.clj b/compute/src/test/clojure/org/jclouds/ssh_test.clj
deleted file mode 100644
index 494c936..0000000
--- a/compute/src/test/clojure/org/jclouds/ssh_test.clj
+++ /dev/null
@@ -1,105 +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.ssh-test
- (:require
- [clojure.tools.logging :as logging])
- (:import
- org.jclouds.ssh.SshClient
- org.jclouds.domain.Credentials
- org.jclouds.domain.LoginCredentials
- org.jclouds.io.Payload
- com.google.common.net.HostAndPort
- org.jclouds.compute.domain.ExecResponse))
-
-(defn instantiate [impl-class & args]
- (let [constructor (first
- (filter
- (fn [c] (= (count args) (count (.getParameterTypes c))))
- (.getDeclaredConstructors impl-class)))]
- (.newInstance impl-class (object-array args))))
-
-
-
-
-;; define an instance or implementation of the following interfaces:
-
-(defn maybe-invoke [f & args]
- (when f
- (apply f args)))
-
-(defn default-exec
- "Default exec function - replies to ./runscript status by returning 1"
- [cmd]
- (merge
- {:exit (Integer. 0) :err "stderr" :out "stdout"}
- (condp = cmd
- "/tmp/init-bootstrap status" {:exit (Integer. 1) :out "[]"}
- {})))
-
-
-(deftype NoOpClient
- [socket username password]
- SshClient
- (connect [this])
- (disconnect [this])
- (exec [this cmd]
- (logging/info (format "ssh cmd: %s" cmd))
- (let [response (default-exec cmd)]
- (ExecResponse. (:out response) (:err response) (:exit response))))
- (get [this path] )
- (^void put [this ^String path ^String content])
- (^void put [this ^String path ^org.jclouds.io.Payload content])
- (getUsername [this] username)
- (getHostAddress [this] (.getHostText socket)) )
-
-(defn no-op-ssh-client
- [socket username password]
- (NoOpClient. socket username password))
-
-
-(deftype SshClientFactory
- [factory-fn]
- org.jclouds.ssh.SshClient$Factory
- (^org.jclouds.ssh.SshClient
- create
- [_ ^HostAndPort socket ^LoginCredentials credentials]
- (factory-fn socket (.identity credentials) (.credential credentials)))
- )
-
-(deftype Module
- [factory binder]
- com.google.inject.Module
- (configure
- [this abinder]
- (reset! binder abinder)
- (.. @binder (bind org.jclouds.ssh.SshClient$Factory)
- (toInstance factory))))
-
-(defn ssh-test-module
- "Create a module that specifies the factory for creating a test service"
- [factory]
- (let [binder (atom nil)]
- (Module. factory binder)))
-
-(defn ssh-test-client
- "Create a module that can be passed to a compute-context, and which implements
-an ssh client with the provided map of function implementations. Keys are
-clojurefied versions of org.jclouds.ssh.SshClient's methods"
- [factory-fn]
- (ssh-test-module (SshClientFactory. factory-fn)))
-
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/core/pom.xml
----------------------------------------------------------------------
diff --git a/core/pom.xml b/core/pom.xml
index 5c27f57..e806169 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -111,10 +111,6 @@
<build>
<plugins>
<plugin>
- <groupId>com.theoryinpractise</groupId>
- <artifactId>clojure-maven-plugin</artifactId>
- </plugin>
- <plugin>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/core/src/main/clojure/org/jclouds/core.clj
----------------------------------------------------------------------
diff --git a/core/src/main/clojure/org/jclouds/core.clj b/core/src/main/clojure/org/jclouds/core.clj
deleted file mode 100644
index 766f142..0000000
--- a/core/src/main/clojure/org/jclouds/core.clj
+++ /dev/null
@@ -1,213 +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.core
- "Core functionality used across blobstore and compute."
- (:use clojure.tools.logging)
- (:import java.io.File
- (com.google.common.collect ImmutableSet))
- (:require [clojure.string :as string]))
-
-(def ^{:dynamic :true} module-lookup
- {:log4j 'org.jclouds.logging.log4j.config.Log4JLoggingModule
- :slf4j 'org.jclouds.logging.slf4j.config.SLF4JLoggingModule
- :lognull 'org.jclouds.logging.config.NullLoggingModule
- :ssh 'org.jclouds.ssh.jsch.config.JschSshClientModule
- :jsch 'org.jclouds.ssh.jsch.config.JschSshClientModule
- :sshj 'org.jclouds.sshj.config.SshjSshClientModule
- :enterprise 'org.jclouds.enterprise.config.EnterpriseConfigurationModule
- :apachehc 'org.jclouds.http.apachehc.config.ApacheHCHttpCommandExecutorServiceModule
- :okhttp 'org.jclouds.http.okhttp.config.OkHttpCommandExecutorServiceModule
- :bouncycastle 'org.jclouds.encryption.bouncycastle.config.BouncyCastleCryptoModule
- :joda 'org.jclouds.date.joda.config.JodaDateServiceModule
- :gae 'org.jclouds.gae.config.GoogleAppEngineConfigurationModule})
-
-(defn- instantiate [sym]
- (let [loader (.getContextClassLoader (Thread/currentThread))]
- (try
- (.newInstance #^Class (.loadClass loader (name sym)))
- (catch java.lang.ClassNotFoundException e
- (warn (str "Could not find " (name sym) " module.
-Ensure the module is on the classpath. You are maybe missing a dependency on
- org.jclouds/jclouds-jsch
- org.jclouds/jclouds-log4j
- org.jclouds/jclouds-ning
- or org.jclouds/jclouds-enterprise."))))))
-
-(defn modules
- "Build a list of modules suitable for passing to compute or blobstore context"
- [& modules]
- (.build #^com.google.common.collect.ImmutableSet$Builder
- (reduce #(.add #^com.google.common.collect.ImmutableSet$Builder %1 %2)
- (com.google.common.collect.ImmutableSet/builder)
- (filter (complement nil?)
- (map #(cond
- (keyword? %) (-> % module-lookup instantiate)
- (symbol? %) (instantiate %)
- :else %)
- modules)))))
-
-;;; Functions and macros to map keywords to java member functions
-(defn dashed [a]
- (apply
- str (interpose "-" (map string/lower-case (re-seq #"[A-Z][^A-Z]*" a)))))
-
-(defn ^String map-str
- "Apply f to each element of coll, concatenate all results into a
- String."
- [f coll]
- (apply str (map f coll)))
-
-(defn camelize
- "Takes a string, or anything named, and converts it to camel case
- (capitalised initial component"
- [a]
- (map-str string/capitalize (.split (name a) "-")))
-
-(defn camelize-mixed
- "Takes a string, or anything named, and converts it to mixed camel case
- (lower case initial component)"
- [a]
- (let [c (.split (name a) "-")]
- (apply str (string/lower-case (first c)) (map string/capitalize (rest c)))))
-
-(defn kw-fn-symbol
- "Converts a keyword into a camel cased symbol corresponding to a function
- name"
- [kw]
- (symbol (camelize-mixed kw)))
-
-(defmacro memfn-apply
- "Expands into a function that takes one argument,"
- [fn-name & args]
- `(fn [target# [~@args]]
- ((memfn ~fn-name ~@args) target# ~@args)))
-
-(defmacro kw-memfn
- "Expands into code that creates a function that expects to be passed an
- object and any args, and calls the instance method corresponding to
- the camel cased version of the passed keyword, passing the arguments."
- [kw & args]
- `(memfn ~(kw-fn-symbol kw) ~@args))
-
-(defmacro kw-memfn-apply
- "Expands into code that creates a function that expects to be passed an object
- and an arg vector containing the args, and calls the instance method
- corresponding to the camel cased version of the passed keyword, passing the
- arguments."
- [kw & args]
- `(fn [target# [~@args]]
- ((memfn ~(kw-fn-symbol kw) ~@args) target# ~@args)))
-
-(defmacro kw-memfn-0arg
- "Expands into code that creates a function that expects to be passed an
- object, and calls the instance method corresponding to the camel cased
- version of the passed keyword if the argument is non-nil."
- [kw]
- `(fn [target# arg#]
- (if arg#
- ((kw-memfn ~kw) target#)
- target#)))
-
-(defmacro kw-memfn-1arg
- "Expands into code that creates a function that expects to be passed an object
- and an arg, and calls the instance method corresponding to the camel cased
- version of the passed keyword, passing the argument."
- [kw]
- `(kw-memfn ~kw a#))
-
-(defmacro kw-memfn-2arg
- "Expands into code that creates a function that expects to be passed an object
- and an arg vector containing 2 args, and calls the instance method
- corresponding to the camel cased version of the passed keyword, passing the
- arguments."
- [kw]
- `(kw-memfn-apply ~kw a# b#))
-
-;; (defmacro memfn-overloads
-;; "Construct a function that applies arguments to the given member function."
-;; [name]
-;; `(fn [target# args#]
-;; (condp = (count args#)
-;; 0 (. target# (~name))
-;; 1 (. target# (~name (first args#)))
-;; 2 (. target# (~name (first args#) (second args#)))
-;; 3 (. target# (~name (first args#) (second args#) (nth args# 2)))
-;; 4 (. target#
-;; (~name (first args#) (second args#) (nth args# 2) (nth args# 3)))
-;; 5 (. target#
-;; (~name (first args#) (second args#) (nth args# 2) (nth args# 3)
-;; (nth args# 4)))
-;; (throw
-;; (java.lang.IllegalArgumentException.
-;; (str
-;; "too many arguments passed. Limit 5, passed " (count args#)))))))
-
-;; (defmacro kw-memfn-overloads
-;; "Expands into code that creates a function that expects to be passed an
-;; object and an arg vector, and calls the instance method corresponding to
-;; the camel cased version of the passed keyword, passing the arguments.
-;; The function accepts different arities at runtime."
-;; [kw]
-;; `(memfn-overloads ~(kw-fn-symbol kw)))
-
-(defmacro memfn-varargs
- "Construct a function that applies an argument sequence to the given member
- function, which accepts varargs. array-fn should accept a sequence and
- return a suitable array for passing as varargs."
- [name array-fn]
- `(fn [target# args#]
- (. target#
- (~name
- (if (or (seq? args#) (vector? args#)) (~array-fn args#) args#)))))
-
-(defmacro kw-memfn-varargs
- "Expands into code that creates a function that expects to be passed an
- object and an arg vector, and calls the instance method corresponding to
- the camel cased version of the passed keyword, passing the arguments.
- The function accepts different arities at runtime."
- ([kw] `(kw-memfn-varargs ~kw int-array))
- ([kw array-fn] `(memfn-varargs ~(kw-fn-symbol kw) ~array-fn)))
-
-(defmacro make-option-map
- "Builds a literal map from keyword, to a call on macro f with the keyword
- as an argument."
- [f keywords]
- `(hash-map
- ~@(reduce (fn [v# k#] (conj (conj v# k#) `(~f ~k#))) [] keywords)))
-
-(defmacro define-accessor
- [class property obj-name]
- (list 'defn (symbol (str obj-name "-" (name property)))
- (vector (with-meta (symbol obj-name) {:tag (.getName class)}))
- (list
- (symbol (str ".get" (camelize (name property))))
- (symbol obj-name))))
-
-(defmacro define-accessors
- "Defines read accessors, modelled on class-name-property-name. If the second
- argument is a string, it is used instead of the class-name prefix."
- [class & properties]
- (let [obj-name (if (string? (first properties))
- (first properties)
- (dashed (.getName class)))
- properties (if (string? (first properties))
- (rest properties)
- properties)]
- `(do
- ~@(for [property properties]
- `(define-accessor ~class ~property ~obj-name)))))
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/core/src/test/clojure/org/jclouds/core_test.clj
----------------------------------------------------------------------
diff --git a/core/src/test/clojure/org/jclouds/core_test.clj b/core/src/test/clojure/org/jclouds/core_test.clj
deleted file mode 100644
index eba4f5c..0000000
--- a/core/src/test/clojure/org/jclouds/core_test.clj
+++ /dev/null
@@ -1,78 +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.core-test
- (:use
- org.jclouds.core
- clojure.test))
-
-(defmacro with-private-vars [[ns fns] & tests]
- "Refers private fns from ns and runs tests in context. From users mailing
-list, Alan Dipert and MeikelBrandmeyer."
- `(let ~(reduce #(conj %1 %2 `@(ns-resolve '~ns '~%2)) [] fns)
- ~@tests))
-
-(with-private-vars [org.jclouds.core [instantiate]]
- (deftest instantiate-test
- (is (instance? String (instantiate 'java.lang.String)))))
-
-(deftest modules-empty-test
- (is (.isEmpty (modules))))
-
-(deftest modules-instantiate-test
- (binding [module-lookup
- (assoc module-lookup
- :string 'java.lang.String)]
- (is (instance? String (first (modules :string))))
- (is (= 1 (count (modules :string)))))
- (testing "pre-instantiated"
- (is (instance? String (first (modules "string")))))
- (testing "symbol"
- (is (instance? String (first (modules 'java.lang.String))))))
-
-(deftest modules-instantiate-fail-test
- (binding [module-lookup
- (assoc module-lookup
- :non-existing 'this.doesnt.Exist)]
- (is (.isEmpty (modules :non-existing)))))
-
-(deftest kw-fn-symbol-test
- (is (= 'aB (kw-fn-symbol :a-b))))
-
-
-(deftest memfn-apply-test
- (is (= "Ab" ((memfn-apply concat s) "A" ["b"])))
- (is (= "Ac" ((memfn-apply replace a b) "Ab" ["b" "c"]))))
-
-(deftest kw-memfn-test
- (is (= "a" ((kw-memfn :to-lower-case) "A")))
- (is (= "Ab" ((kw-memfn :concat s) "A" "b")))
- (is (= "Ab" ((kw-memfn-apply :concat s) "A" ["b"])))
- (is (= "Ac" ((kw-memfn-apply :replace a b) "Ab" ["b" "c"]))))
-
-(deftest kw-memfn-0arg-test
- (is (= "a" ((kw-memfn-0arg :to-lower-case) "A" true)))
- (is (= "A" ((kw-memfn-0arg :to-lower-case) "A" nil))))
-
-(deftest kw-memfn-1arg-test
- (is (= "Ab" ((kw-memfn-1arg :concat) "A" "b"))))
-
-(deftest kw-memfn-2arg-test
- (is (= "Ac" ((kw-memfn-2arg :replace) "Ab" ["b" "c"]))))
-
-(deftest kw-memfn-varargs-test
- (is (fn? (kw-memfn-varargs :replace))))
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/project/pom.xml
----------------------------------------------------------------------
diff --git a/project/pom.xml b/project/pom.xml
index 24cbab1..33a19ba 100644
--- a/project/pom.xml
+++ b/project/pom.xml
@@ -221,7 +221,6 @@
<maven.compile.target>1.6</maven.compile.target>
<maven.compile.deprecation>true</maven.compile.deprecation>
<maven.site.url.base>gitsite:git@github.com/jclouds/jclouds-maven-site.git</maven.site.url.base>
- <clojure.version>1.3.0</clojure.version>
<guava.version>16.0.1</guava.version>
<guava.osgi.import>com.google.common.*;version="[16.0.1,20.0.0)"</guava.osgi.import>
<guice.version>3.0</guice.version>
@@ -250,21 +249,6 @@
<dependencyManagement>
<dependencies>
<dependency>
- <groupId>org.clojure</groupId>
- <artifactId>clojure</artifactId>
- <version>${clojure.version}</version>
- </dependency>
- <dependency>
- <groupId>org.clojure</groupId>
- <artifactId>tools.logging</artifactId>
- <version>0.2.3</version>
- </dependency>
- <dependency>
- <groupId>org.clojure</groupId>
- <artifactId>core.incubator</artifactId>
- <version>0.1.0</version>
- </dependency>
- <dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
@@ -394,21 +378,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>org.clojure</groupId>
- <artifactId>clojure</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.clojure</groupId>
- <artifactId>tools.logging</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
- <groupId>org.clojure</groupId>
- <artifactId>core.incubator</artifactId>
- <optional>true</optional>
- </dependency>
- <dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
@@ -423,9 +392,6 @@
<build>
<resources>
<resource>
- <directory>src/main/clojure</directory>
- </resource>
- <resource>
<directory>src/main/resources</directory>
</resource>
<!-- For AutoService generated services. -->
@@ -438,9 +404,6 @@
</resources>
<testResources>
<testResource>
- <directory>src/test/clojure</directory>
- </testResource>
- <testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
@@ -1129,32 +1092,6 @@
<version>1.2</version>
</plugin>
<plugin>
- <groupId>com.theoryinpractise</groupId>
- <artifactId>clojure-maven-plugin</artifactId>
- <version>1.3.10</version>
- <configuration>
- <sourceDirectories>
- <sourceDirectory>src/main/clojure</sourceDirectory>
- </sourceDirectories>
- <testSourceDirectories>
- <testSourceDirectory>src/test/clojure</testSourceDirectory>
- </testSourceDirectories>
- <clojureOptions>-Xms128m -Xmx512m -Djava.awt.headless=true -XX:MaxPermSize=256m -Xss256k</clojureOptions>
- <warnOnReflection>true</warnOnReflection>
- <compileDeclaredNamespaceOnly>true</compileDeclaredNamespaceOnly>
- <testDeclaredNamespaceOnly>false</testDeclaredNamespaceOnly>
- </configuration>
- <executions>
- <execution>
- <id>test-clojure</id>
- <phase>test</phase>
- <goals>
- <goal>test</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9</version>
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/providers/aws-ec2/pom.xml
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/pom.xml b/providers/aws-ec2/pom.xml
index 9553a38..2d72bf1 100644
--- a/providers/aws-ec2/pom.xml
+++ b/providers/aws-ec2/pom.xml
@@ -125,15 +125,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/providers/aws-ec2/src/main/clojure/org/jclouds/aws/ec2.clj
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/main/clojure/org/jclouds/aws/ec2.clj b/providers/aws-ec2/src/main/clojure/org/jclouds/aws/ec2.clj
deleted file mode 100644
index 7bacecc..0000000
--- a/providers/aws-ec2/src/main/clojure/org/jclouds/aws/ec2.clj
+++ /dev/null
@@ -1,62 +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.aws.ec2
- "AWS EC2 specific functionality"
- (:require
- [org.jclouds.core :as core])
- (:import
- org.jclouds.aws.ec2.domain.SpotInstanceRequest
- org.jclouds.aws.ec2.options.RequestSpotInstancesOptions))
-
-(def
- ^{:doc "TemplateBuilder functions" :private true}
- spot-option-map
- (core/make-option-map
- core/kw-memfn-1arg
- [:valid-from :valid-until :type :launch-group :availability-zone-group]))
-
-(defn spot-types []
- (. org.jclouds.aws.ec2.domain.SpotInstanceRequest$Type values))
-
-(def enum-map {:type (spot-types)})
-
-(defn translate-enum-value [kword value]
- (or (-> (filter #(= (name value) (str %)) (kword enum-map)) first)
- value))
-
-(defn apply-option
- [options [option value]]
- (when-let [f (spot-option-map option)]
- (f options (translate-enum-value option value)))
- options)
-
-(defn spot-options
- "Build a spot request options object, for passing to the :spot-options
- key of the template builder options.
-
- Takes a hash-map of keys and values that correspond to the methods of
- RequestSpotInstancesOptions.
-
- Options are:
- :valid-from :valid-until :type :launch-group :availability-zone-group
-
- :type takes either :one-time or :persistent"
- [request-map]
- (reduce
- apply-option
- (RequestSpotInstancesOptions.) request-map))
http://git-wip-us.apache.org/repos/asf/jclouds/blob/0bc935dd/providers/aws-ec2/src/test/clojure/org/jclouds/aws/ec2_test.clj
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/test/clojure/org/jclouds/aws/ec2_test.clj b/providers/aws-ec2/src/test/clojure/org/jclouds/aws/ec2_test.clj
deleted file mode 100644
index bd00ef7..0000000
--- a/providers/aws-ec2/src/test/clojure/org/jclouds/aws/ec2_test.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.aws.ec2-test
- (:use
- org.jclouds.aws.ec2
- clojure.test))
-
-(deftest translate-enum-value-test
- (is (= org.jclouds.aws.ec2.domain.SpotInstanceRequest$Type/ONE_TIME
- (org.jclouds.aws.ec2/translate-enum-value :type :one-time))))
-
-(deftest spot-options-est
- (is (spot-options {:type :one-time
- :valid-from (java.util.Date.)
- :valid-until (java.util.Date.)
- :launch-group "lg"
- :availability-zone-group "ag"})))
[2/2] jclouds git commit: Remove clojure bindings
Posted by ga...@apache.org.
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