mirror of https://github.com/apache/jclouds.git
Issue 191: added databag support
This commit is contained in:
parent
7a593a1630
commit
60908bfb6e
|
@ -450,7 +450,7 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest {
|
||||||
blob = context.getBlobStore().getBlob(containerName, blob.getMetadata().getName());
|
blob = context.getBlobStore().getBlob(containerName, blob.getMetadata().getName());
|
||||||
String returnedString = getContentAsStringOrNullAndClose(blob);
|
String returnedString = getContentAsStringOrNullAndClose(blob);
|
||||||
assertEquals(returnedString, "foo");
|
assertEquals(returnedString, "foo");
|
||||||
assertEquals(blob.getPayload().getContentType(), "text/csv");
|
assert blob.getPayload().getContentType().startsWith("text/csv") : blob.getPayload().getContentType();
|
||||||
PageSet<? extends StorageMetadata> set = context.getBlobStore().list(containerName);
|
PageSet<? extends StorageMetadata> set = context.getBlobStore().list(containerName);
|
||||||
assert set.size() == 1 : set;
|
assert set.size() == 1 : set;
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -91,5 +91,11 @@
|
||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.danlarkin</groupId>
|
||||||
|
<artifactId>clojure-json</artifactId>
|
||||||
|
<version>1.1</version>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|
|
@ -21,10 +21,12 @@
|
||||||
:doc "A clojure binding to the jclouds chef interface."}
|
:doc "A clojure binding to the jclouds chef interface."}
|
||||||
org.jclouds.chef
|
org.jclouds.chef
|
||||||
(:use org.jclouds.core (core))
|
(:use org.jclouds.core (core))
|
||||||
|
(:require (org.danlarkin [json :as json]))
|
||||||
(:import
|
(:import
|
||||||
java.util.Properties
|
java.util.Properties
|
||||||
[org.jclouds.chef ChefClient
|
[org.jclouds.chef ChefClient
|
||||||
ChefService ChefContext ChefContextFactory]))
|
ChefService ChefContext ChefContextFactory]
|
||||||
|
[org.jclouds.chef.domain DatabagItem]))
|
||||||
(try
|
(try
|
||||||
(use '[clojure.contrib.reflect :only [get-field]])
|
(use '[clojure.contrib.reflect :only [get-field]])
|
||||||
(catch Exception e
|
(catch Exception e
|
||||||
|
@ -71,6 +73,14 @@
|
||||||
(chef-context? (first args)) (.getChefService (first args))
|
(chef-context? (first args)) (.getChefService (first args))
|
||||||
:else (apply chef-service 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*)
|
(def *chef*)
|
||||||
|
|
||||||
(defmacro with-chef-service
|
(defmacro with-chef-service
|
||||||
|
@ -83,10 +93,71 @@
|
||||||
"Retrieve the names of the existing nodes in your chef server."
|
"Retrieve the names of the existing nodes in your chef server."
|
||||||
([] (nodes *chef*))
|
([] (nodes *chef*))
|
||||||
([#^ChefService chef]
|
([#^ChefService chef]
|
||||||
(seq (.listNodes (.getApi (.getContext chef))))))
|
(seq (.listNodes (as-chef-api chef)))))
|
||||||
|
|
||||||
(defn nodes-with-details
|
(defn nodes-with-details
|
||||||
"Retrieve the existing nodes in your chef server including all details."
|
"Retrieve the existing nodes in your chef server including all details."
|
||||||
([] (nodes *chef*))
|
([] (nodes *chef*))
|
||||||
([#^ChefService chef]
|
([#^ChefService chef]
|
||||||
(seq (.listNodesDetails chef))))
|
(seq (.listNodesDetails chef))))
|
||||||
|
|
||||||
|
(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 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
|
||||||
|
"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"
|
||||||
|
([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)]
|
||||||
|
(json/decode-from-str (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"
|
||||||
|
([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)]
|
||||||
|
(json/decode-from-str (str (.updateDatabagItem (as-chef-api chef) databag
|
||||||
|
(DatabagItem. (get value-json :id) value-str))))))))
|
||||||
|
|
|
@ -383,7 +383,7 @@ public interface ChefClient {
|
||||||
Set<String> listDatabags();
|
Set<String> listDatabags();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gets an existing databag.
|
* creates a databag.
|
||||||
*
|
*
|
||||||
* @throws AuthorizationException
|
* @throws AuthorizationException
|
||||||
* <p/>
|
* <p/>
|
||||||
|
|
Loading…
Reference in New Issue