You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2014/07/29 00:51:16 UTC

[10/10] git commit: Revert "Move jclouds-chef to the main jclouds repo"

Revert "Move jclouds-chef to the main jclouds repo"

This change will be added again after the 1.8.0 release.

This reverts commit 867c7a407c1db8f56ff3211d70481755cf71440f.


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

Branch: refs/heads/master
Commit: 8cb2cb449b9761a92013b34849b53214b886022f
Parents: 867c7a4
Author: Ignasi Barrera <na...@apache.org>
Authored: Tue Jul 29 00:38:46 2014 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Jul 29 00:38:46 2014 +0200

----------------------------------------------------------------------
 apis/chef/pom.xml                               | 131 ---
 apis/chef/src/main/clojure/org/jclouds/chef.clj | 261 ------
 .../src/main/java/org/jclouds/chef/ChefApi.java | 853 -------------------
 .../java/org/jclouds/chef/ChefApiMetadata.java  | 110 ---
 .../main/java/org/jclouds/chef/ChefContext.java |  37 -
 .../main/java/org/jclouds/chef/ChefService.java | 263 ------
 .../binders/BindChecksumsToJsonPayload.java     |  54 --
 .../BindCreateClientOptionsToJsonPayload.java   |  71 --
 .../BindGenerateKeyForClientToJsonPayload.java  |  35 -
 .../org/jclouds/chef/binders/DatabagItemId.java |  32 -
 .../jclouds/chef/binders/EnvironmentName.java   |  31 -
 .../java/org/jclouds/chef/binders/NodeName.java |  32 -
 .../java/org/jclouds/chef/binders/RoleName.java |  32 -
 .../chef/config/BaseChefHttpApiModule.java      | 208 -----
 .../chef/config/ChefBootstrapModule.java        | 121 ---
 .../jclouds/chef/config/ChefHttpApiModule.java  |  28 -
 .../jclouds/chef/config/ChefParserModule.java   | 321 -------
 .../org/jclouds/chef/config/ChefProperties.java | 110 ---
 .../org/jclouds/chef/config/CookbookParser.java |  41 -
 .../chef/config/CookbookVersionsParser.java     |  41 -
 .../org/jclouds/chef/config/InstallChef.java    |  37 -
 .../java/org/jclouds/chef/config/Validator.java |  40 -
 .../java/org/jclouds/chef/domain/Attribute.java | 235 -----
 .../jclouds/chef/domain/BootstrapConfig.java    |  95 ---
 .../org/jclouds/chef/domain/ChecksumStatus.java | 102 ---
 .../java/org/jclouds/chef/domain/Client.java    | 182 ----
 .../jclouds/chef/domain/CookbookDefinition.java | 217 -----
 .../jclouds/chef/domain/CookbookVersion.java    | 369 --------
 .../org/jclouds/chef/domain/DatabagItem.java    |  63 --
 .../org/jclouds/chef/domain/Environment.java    | 178 ----
 .../java/org/jclouds/chef/domain/Metadata.java  | 447 ----------
 .../main/java/org/jclouds/chef/domain/Node.java | 263 ------
 .../java/org/jclouds/chef/domain/Resource.java  | 169 ----
 .../main/java/org/jclouds/chef/domain/Role.java | 205 -----
 .../java/org/jclouds/chef/domain/Sandbox.java   | 195 -----
 .../org/jclouds/chef/domain/SearchResult.java   |  46 -
 .../org/jclouds/chef/domain/UploadSandbox.java  | 136 ---
 .../jclouds/chef/filters/SignedHeaderAuth.java  | 200 -----
 .../chef/functions/BootstrapConfigForGroup.java |  61 --
 .../jclouds/chef/functions/ClientForGroup.java  |  69 --
 .../chef/functions/GroupToBootScript.java       | 130 ---
 ...seCookbookDefinitionCheckingChefVersion.java |  49 --
 .../ParseCookbookDefinitionFromJson.java        |  50 --
 .../ParseCookbookDefinitionFromJsonv10.java     |  52 --
 .../ParseCookbookDefinitionListFromJsonv10.java |  63 --
 ...arseCookbookVersionsCheckingChefVersion.java |  49 --
 .../ParseCookbookVersionsV09FromJson.java       |  49 --
 .../ParseCookbookVersionsV10FromJson.java       |  59 --
 .../ParseErrorFromJsonOrReturnBody.java         |  55 --
 .../chef/functions/ParseKeySetFromJson.java     |  45 -
 .../functions/ParseSearchClientsFromJson.java   |  35 -
 .../functions/ParseSearchDatabagFromJson.java   |  77 --
 .../ParseSearchEnvironmentsFromJson.java        |  35 -
 .../functions/ParseSearchNodesFromJson.java     |  35 -
 .../functions/ParseSearchResultFromJson.java    |  50 --
 .../functions/ParseSearchRolesFromJson.java     |  35 -
 .../jclouds/chef/functions/RunListForGroup.java |  61 --
 .../jclouds/chef/functions/UriForResource.java  |  42 -
 .../chef/handlers/ChefApiErrorRetryHandler.java |  67 --
 .../jclouds/chef/handlers/ChefErrorHandler.java |  81 --
 .../jclouds/chef/internal/BaseChefService.java  | 299 -------
 .../jclouds/chef/internal/ChefContextImpl.java  |  55 --
 .../chef/options/CreateClientOptions.java       |  64 --
 .../org/jclouds/chef/options/SearchOptions.java |  95 ---
 .../predicates/CookbookVersionPredicates.java   |  93 --
 .../strategy/CleanupStaleNodesAndClients.java   |  32 -
 ...reateNodeAndPopulateAutomaticAttributes.java |  33 -
 .../chef/strategy/DeleteAllClientsInList.java   |  34 -
 .../chef/strategy/DeleteAllNodesInList.java     |  31 -
 .../org/jclouds/chef/strategy/ListClients.java  |  32 -
 .../chef/strategy/ListCookbookVersions.java     |  32 -
 .../ListCookbookVersionsInEnvironment.java      |  37 -
 .../jclouds/chef/strategy/ListEnvironments.java |  31 -
 .../org/jclouds/chef/strategy/ListNodes.java    |  32 -
 .../chef/strategy/ListNodesInEnvironment.java   |  32 -
 .../UpdateAutomaticAttributesOnNode.java        |  31 -
 .../internal/BaseListCookbookVersionsImpl.java  |  97 ---
 .../strategy/internal/BaseListNodesImpl.java    |  77 --
 .../CleanupStaleNodesAndClientsImpl.java        | 102 ---
 ...eNodeAndPopulateAutomaticAttributesImpl.java |  83 --
 .../internal/DeleteAllClientsInListImpl.java    |  85 --
 .../internal/DeleteAllNodesInListImpl.java      |  81 --
 .../chef/strategy/internal/ListClientsImpl.java | 109 ---
 .../internal/ListCookbookVersionsImpl.java      |  60 --
 .../ListCookbookVersionsInEnvironmentImpl.java  | 117 ---
 .../strategy/internal/ListEnvironmentsImpl.java |  96 ---
 .../chef/strategy/internal/ListNodesImpl.java   |  62 --
 .../internal/ListNodesInEnvironmentImpl.java    |  62 --
 .../UpdateAutomaticAttributesOnNodeImpl.java    |  75 --
 .../chef/suppliers/ChefVersionSupplier.java     |  73 --
 .../org/jclouds/chef/test/TransientChefApi.java | 387 ---------
 .../chef/test/TransientChefApiMetadata.java     |  75 --
 .../test/config/TransientChefApiModule.java     | 116 ---
 .../java/org/jclouds/chef/util/ChefUtils.java   |  71 --
 .../org/jclouds/chef/util/CollectionUtils.java  |  69 --
 .../org/jclouds/chef/util/RunListBuilder.java   |  83 --
 .../main/java/org/jclouds/ohai/Automatic.java   |  33 -
 .../org/jclouds/ohai/AutomaticSupplier.java     |  48 --
 .../org/jclouds/ohai/config/ConfiguresOhai.java |  28 -
 .../org/jclouds/ohai/config/JMXOhaiModule.java  |  48 --
 .../org/jclouds/ohai/config/OhaiModule.java     | 183 ----
 .../ohai/functions/ByteArrayToMacAddress.java   |  51 --
 .../ohai/functions/MapSetToMultimap.java        |  42 -
 .../jclouds/ohai/functions/NestSlashKeys.java   | 156 ----
 .../ohai/suppliers/UptimeSecondsSupplier.java   |  44 -
 .../services/org.jclouds.apis.ApiMetadata       |   2 -
 .../src/test/clojure/org/jclouds/chef_test.clj  |  70 --
 .../org/jclouds/chef/BaseChefApiExpectTest.java |  44 -
 .../org/jclouds/chef/ChefApiExpectTest.java     | 279 ------
 .../java/org/jclouds/chef/ChefApiLiveTest.java  |  32 -
 .../org/jclouds/chef/ChefApiMetadataTest.java   |  33 -
 .../test/java/org/jclouds/chef/ChefApiTest.java | 741 ----------------
 .../BindHexEncodedMD5sToJsonPayloadTest.java    |  70 --
 .../chef/config/ChefParserModuleTest.java       |  93 --
 .../chef/filters/SignedHeaderAuthTest.java      | 213 -----
 .../functions/BootstrapConfigForGroupTest.java  |  74 --
 .../chef/functions/ClientForGroupTest.java      | 106 ---
 .../chef/functions/GroupToBootScriptTest.java   | 230 -----
 .../chef/functions/ParseClientFromJsonTest.java |  98 ---
 ...okbookDefinitionCheckingChefVersionTest.java |  62 --
 .../ParseCookbookDefinitionFromJsonTest.java    |  72 --
 .../ParseCookbookDefinitionFromJsonv10Test.java |  74 --
 ...seCookbookDefinitionListFromJsonv10Test.java |  92 --
 .../ParseCookbookVersionFromJsonTest.java       | 129 ---
 ...CookbookVersionsCheckingChefVersionTest.java |  62 --
 .../ParseCookbookVersionsV09FromJsonTest.java   |  61 --
 .../ParseCookbookVersionsV10FromJsonTest.java   |  68 --
 .../functions/ParseDataBagItemFromJsonTest.java |  65 --
 .../ParseErrorFromJsonOrReturnBodyTest.java     |  42 -
 .../chef/functions/ParseKeySetFromJsonTest.java |  66 --
 .../chef/functions/ParseNodeFromJsonTest.java   |  73 --
 .../functions/ParseSandboxFromJsonTest.java     |  71 --
 .../ParseSearchDataBagItemFromJsonTest.java     |  62 --
 .../ParseUploadSandboxFromJsonTest.java         |  87 --
 .../chef/functions/RunListForGroupTest.java     |  92 --
 .../chef/functions/UriForResourceTest.java      |  54 --
 .../handlers/ChefApiErrorRetryHandlerTest.java  | 115 ---
 .../chef/internal/BaseChefApiLiveTest.java      | 542 ------------
 .../jclouds/chef/internal/BaseChefLiveTest.java |  96 ---
 .../chef/internal/BaseChefServiceTest.java      |  99 ---
 .../chef/internal/BaseStubbedOhaiLiveTest.java  |  60 --
 ...CleanupStaleNodesAndClientsImplLiveTest.java |  61 --
 ...PopulateAutomaticAttributesImplLiveTest.java |  62 --
 ...eAndPopulateAutomaticAttributesImplTest.java |  61 --
 ...DeleteAllApisAndNodesInListImplLiveTest.java |  64 --
 ...okbookVersionsInEnvironmentImplLiveTest.java | 217 -----
 .../internal/ListNodesImplLiveTest.java         |  82 --
 .../ListNodesInEnvironmentImplLiveTest.java     |  86 --
 ...teAutomaticAttributesOnNodeImplLiveTest.java |  61 --
 ...UpdateAutomaticAttributesOnNodeImplTest.java |  63 --
 .../chef/suppliers/ChefVersionSupplierTest.java |  47 -
 .../test/TransientChefApiIntegrationTest.java   |  69 --
 .../chef/test/TransientChefApiMetadataTest.java |  33 -
 .../org/jclouds/chef/util/ChefUtilsTest.java    |  57 --
 .../jclouds/chef/util/RunListBuilderTest.java   |  71 --
 .../java/org/jclouds/ohai/config/JMXTest.java   |  82 --
 .../org/jclouds/ohai/config/OhaiModuleTest.java | 147 ----
 .../functions/ByteArrayToMacAddressTest.java    |  33 -
 .../ohai/functions/NestSlashKeysTest.java       | 117 ---
 .../resources/apache-chef-demo-cookbook.json    |  46 -
 apis/chef/src/test/resources/bootstrap-env.sh   |  56 --
 apis/chef/src/test/resources/bootstrap.sh       |  56 --
 apis/chef/src/test/resources/brew-cookbook.json |  48 --
 apis/chef/src/test/resources/client.json        |   8 -
 apis/chef/src/test/resources/clients_list.json  |   5 -
 apis/chef/src/test/resources/data_list.json     |   4 -
 apis/chef/src/test/resources/env_cookbooks.json |  20 -
 .../src/test/resources/environment_recipes.json |   6 -
 .../chef/src/test/resources/mysql-cookbook.json | 268 ------
 apis/chef/src/test/resources/node.json          |  10 -
 apis/chef/src/test/resources/nodes_list.json    |   5 -
 apis/chef/src/test/resources/privkey.txt        |  27 -
 apis/chef/src/test/resources/pubkey.txt         |   9 -
 apis/chef/src/test/resources/roles_list.json    |   4 -
 apis/chef/src/test/resources/sandbox.json       |  12 -
 apis/chef/src/test/resources/search_role.json   |  34 -
 .../src/test/resources/search_role_empty.json   |   5 -
 .../src/test/resources/tomcat-cookbook.json     | 121 ---
 apis/chef/src/test/resources/upload-site.json   |  13 -
 apis/pom.xml                                    |   1 -
 project/pom.xml                                 |   2 -
 providers/enterprise-chef/pom.xml               | 110 ---
 .../enterprisechef/EnterpriseChefApi.java       | 124 ---
 .../EnterpriseChefApiMetadata.java              |  82 --
 .../EnterpriseChefProviderMetadata.java         |  86 --
 .../BindGroupToUpdateRequestJsonPayload.java    |  79 --
 .../enterprisechef/binders/GroupName.java       |  38 -
 .../config/EnterpriseChefHttpApiModule.java     |  36 -
 .../jclouds/enterprisechef/domain/Group.java    | 211 -----
 .../org/jclouds/enterprisechef/domain/User.java | 220 -----
 .../org.jclouds.providers.ProviderMetadata      |   1 -
 .../EnterpriseChefApiExpectTest.java            | 209 -----
 .../EnterpriseChefApiLiveTest.java              | 122 ---
 .../EnterpriseChefProviderMetadataTest.java     |  31 -
 ...BindGroupToUpdateRequestJsonPayloadTest.java |  82 --
 .../enterprisechef/binders/GroupNameTest.java   |  40 -
 .../src/test/resources/group-update.json        |   1 -
 .../src/test/resources/group.json               |  14 -
 .../src/test/resources/groups.json              |   7 -
 .../src/test/resources/user.json                |   9 -
 providers/pom.xml                               |   1 -
 201 files changed, 18721 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/pom.xml
----------------------------------------------------------------------
diff --git a/apis/chef/pom.xml b/apis/chef/pom.xml
deleted file mode 100644
index 6d0d889..0000000
--- a/apis/chef/pom.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    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.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-    <groupId>org.apache.jclouds</groupId>
-    <artifactId>jclouds-project</artifactId>
-    <version>1.8.0-SNAPSHOT</version>
-    <relativePath>../../project/pom.xml</relativePath>
-  </parent>
-  <groupId>org.apache.jclouds.api</groupId>
-  <artifactId>chef</artifactId>
-  <packaging>bundle</packaging>
-  <name>jclouds Chef api</name>
-  <description>jclouds components to access Chef</description>
-
-  <properties>
-    <test.chef.endpoint>http://localhost:4000</test.chef.endpoint>
-    <test.chef.api-version />
-    <test.chef.build-version />
-    <test.chef.identity>chef-webui</test.chef.identity>
-    <test.chef.credential>${user.home}/.chef/webui.pem</test.chef.credential>
-    <jclouds.osgi.import>org.jclouds*;version=${project.version},*</jclouds.osgi.import>
-    <jclouds.osgi.export>
-      org.jclouds.chef*;version=${project.version};-noimport:=true,
-      org.jclouds.ohai*;version=${project.version};-noimport:=true,
-    </jclouds.osgi.export>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-core</artifactId>
-      <version>${project.version}</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-core</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-scriptbuilder</artifactId>
-      <version>${project.version}</version>
-      <type>jar</type>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-scriptbuilder</artifactId>
-      <version>${project.version}</version>
-      <type>test-jar</type>
-      <scope>test</scope>
-    </dependency>
-    <!--  for ohai -->
-    <dependency>
-        <groupId>com.google.inject.extensions</groupId>
-        <artifactId>guice-multibindings</artifactId>
-        <version>3.0</version>
-    </dependency>
-    <!--  for transient chef provider -->
-    <dependency>
-      <groupId>org.apache.jclouds</groupId>
-      <artifactId>jclouds-blobstore</artifactId>
-      <version>${project.version}</version>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.jclouds.driver</groupId>
-      <artifactId>jclouds-slf4j</artifactId>
-      <version>${project.version}</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>ch.qos.logback</groupId>
-      <artifactId>logback-classic</artifactId>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <profiles>
-    <profile>
-      <id>live</id>
-      <build>
-        <plugins>
-          <plugin>
-            <groupId>org.apache.maven.plugins</groupId>
-            <artifactId>maven-surefire-plugin</artifactId>
-            <executions>
-              <execution>
-                <id>integration</id>
-                <phase>integration-test</phase>
-                <goals>
-                  <goal>test</goal>
-                </goals>
-                <configuration>
-                  <systemPropertyVariables>
-                    <test.chef.endpoint>${test.chef.endpoint}</test.chef.endpoint>
-                    <test.chef.api-version>${test.chef.api-version}</test.chef.api-version>
-                    <test.chef.build-version>${test.chef.build-version}</test.chef.build-version>
-                    <test.chef.identity>${test.chef.identity}</test.chef.identity>
-                    <test.chef.credential>${test.chef.credential}</test.chef.credential>
-                  </systemPropertyVariables>
-                </configuration>
-              </execution>
-            </executions>
-          </plugin>
-        </plugins>
-      </build>
-    </profile>
-  </profiles>
-</project>

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/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 ad0f200..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 Opscode 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 opscode 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/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/ChefApi.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/ChefApi.java b/apis/chef/src/main/java/org/jclouds/chef/ChefApi.java
deleted file mode 100644
index 13f4971..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/ChefApi.java
+++ /dev/null
@@ -1,853 +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.
- */
-package org.jclouds.chef;
-
-import java.io.Closeable;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.List;
-import java.util.Set;
-
-import javax.inject.Named;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.PUT;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.Constants;
-import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
-import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
-import org.jclouds.chef.binders.BindChecksumsToJsonPayload;
-import org.jclouds.chef.binders.BindCreateClientOptionsToJsonPayload;
-import org.jclouds.chef.binders.BindGenerateKeyForClientToJsonPayload;
-import org.jclouds.chef.binders.DatabagItemId;
-import org.jclouds.chef.binders.EnvironmentName;
-import org.jclouds.chef.binders.NodeName;
-import org.jclouds.chef.binders.RoleName;
-import org.jclouds.chef.domain.Client;
-import org.jclouds.chef.domain.CookbookDefinition;
-import org.jclouds.chef.domain.CookbookVersion;
-import org.jclouds.chef.domain.DatabagItem;
-import org.jclouds.chef.domain.Environment;
-import org.jclouds.chef.domain.Node;
-import org.jclouds.chef.domain.Resource;
-import org.jclouds.chef.domain.Role;
-import org.jclouds.chef.domain.Sandbox;
-import org.jclouds.chef.domain.SearchResult;
-import org.jclouds.chef.domain.UploadSandbox;
-import org.jclouds.chef.filters.SignedHeaderAuth;
-import org.jclouds.chef.functions.ParseCookbookDefinitionCheckingChefVersion;
-import org.jclouds.chef.functions.ParseCookbookDefinitionFromJsonv10;
-import org.jclouds.chef.functions.ParseCookbookDefinitionListFromJsonv10;
-import org.jclouds.chef.functions.ParseCookbookVersionsCheckingChefVersion;
-import org.jclouds.chef.functions.ParseKeySetFromJson;
-import org.jclouds.chef.functions.ParseSearchClientsFromJson;
-import org.jclouds.chef.functions.ParseSearchDatabagFromJson;
-import org.jclouds.chef.functions.ParseSearchEnvironmentsFromJson;
-import org.jclouds.chef.functions.ParseSearchNodesFromJson;
-import org.jclouds.chef.functions.ParseSearchRolesFromJson;
-import org.jclouds.chef.functions.UriForResource;
-import org.jclouds.chef.options.CreateClientOptions;
-import org.jclouds.chef.options.SearchOptions;
-import org.jclouds.io.Payload;
-import org.jclouds.rest.annotations.BinderParam;
-import org.jclouds.rest.annotations.EndpointParam;
-import org.jclouds.rest.annotations.Fallback;
-import org.jclouds.rest.annotations.Headers;
-import org.jclouds.rest.annotations.MapBinder;
-import org.jclouds.rest.annotations.ParamParser;
-import org.jclouds.rest.annotations.PayloadParam;
-import org.jclouds.rest.annotations.RequestFilters;
-import org.jclouds.rest.annotations.ResponseParser;
-import org.jclouds.rest.annotations.SelectJson;
-import org.jclouds.rest.annotations.SinceApiVersion;
-import org.jclouds.rest.annotations.SkipEncoding;
-import org.jclouds.rest.annotations.WrapWith;
-import org.jclouds.rest.binders.BindToJsonPayload;
-
-/**
- * Provides synchronous access to Chef.
- */
-@RequestFilters(SignedHeaderAuth.class)
-@Headers(keys = "X-Chef-Version", values = "{" + Constants.PROPERTY_API_VERSION + "}")
-@Consumes(MediaType.APPLICATION_JSON)
-public interface ChefApi extends Closeable {
-
-   // Clients
-
-   /**
-    * Lists the names of the existing clients.
-    * 
-    * @return The names of the existing clients.
-    */
-   @Named("client:list")
-   @GET
-   @Path("/clients")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listClients();
-
-   /**
-    * Gets the details of existing client.
-    * 
-    * @param clientname The name of the client to get.
-    * @return The details of the given client.
-    */
-   @Named("client:get")
-   @GET
-   @Path("/clients/{clientname}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Client getClient(@PathParam("clientname") String clientName);
-
-   /**
-    * Creates a new client.
-    * 
-    * @param clientname The name of the new client
-    * @return The client with the generated private key. This key should be
-    *         stored so client can be properly authenticated .
-    */
-   @Named("client:create")
-   @POST
-   @Path("/clients")
-   @MapBinder(BindToJsonPayload.class)
-   Client createClient(@PayloadParam("name") String clientName);
-
-   /**
-    * Creates a new client with custom options.
-    * 
-    * @param clientname The name of the new client
-    * @param options The options to customize the client creation.
-    * @return The client with the generated private key. This key should be
-    *         stored so client can be properly authenticated .
-    */
-   @Named("client:create")
-   @POST
-   @Path("/clients")
-   @MapBinder(BindCreateClientOptionsToJsonPayload.class)
-   Client createClient(@PayloadParam("name") String clientName, CreateClientOptions options);
-
-   /**
-    * Generates a new key-pair for this client, and return the new private key in
-    * the response body.
-    * 
-    * @param clientname The name of the client.
-    * @return The details of the client with the new private key.
-    */
-   @Named("client:generatekey")
-   @PUT
-   @Path("/clients/{clientname}")
-   Client generateKeyForClient(
-         @PathParam("clientname") @BinderParam(BindGenerateKeyForClientToJsonPayload.class) String clientName);
-
-   /**
-    * Deletes the given client.
-    * 
-    * @param clientname The name of the client to delete.
-    * @return The deleted client.
-    */
-   @Named("client:delete")
-   @DELETE
-   @Path("/clients/{clientname}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Client deleteClient(@PathParam("clientname") String clientName);
-
-   // Cookbooks
-
-   /**
-    * Lists the names of the existing cookbooks.
-    * 
-    * @return The names of the exsisting cookbooks.
-    */
-   @Named("cookbook:list")
-   @GET
-   @Path("/cookbooks")
-   @ResponseParser(ParseCookbookDefinitionCheckingChefVersion.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listCookbooks();
-
-   /**
-    * Lists the cookbooks that are available in the given environment.
-    * 
-    * @param environmentname The name of the environment to get the cookbooks
-    *        from.
-    * @return The definitions of the cookbooks (name, URL and versions) available in
-    *         the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("cookbook:list")
-   @GET
-   @ResponseParser(ParseCookbookDefinitionListFromJsonv10.class)
-   @Path("/environments/{environmentname}/cookbooks")
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<CookbookDefinition> listCookbooksInEnvironment(@PathParam("environmentname") String environmentName);
-
-   /**
-    * Lists the cookbooks that are available in the given environment, limiting
-    * the number of versions returned for each cookbook.
-    * 
-    * @param environmentname The name of the environment to get the cookbooks
-    *        from.
-    * @param numversions The number of cookbook versions to include in the
-    *        response, where n is the number of cookbook versions.
-    * @return The definitions of the cookbooks (name, URL and versions) available in
-    *         the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("cookbook:list")
-   @GET
-   @ResponseParser(ParseCookbookDefinitionListFromJsonv10.class)
-   @Path("/environments/{environmentname}/cookbooks?num_versions={numversions}")
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<CookbookDefinition> listCookbooksInEnvironment(@PathParam("environmentname") String environmentName,
-         @PathParam("numversions") String numVersions);
-
-   /**
-    * Lists the available versions of the given cookbook.
-    * 
-    * @param cookbookName The name of the cookbook.
-    * @return The available versions of the given cookbook.
-    */
-   @Named("cookbook:versions")
-   @GET
-   @Path("/cookbooks/{cookbookname}")
-   @ResponseParser(ParseCookbookVersionsCheckingChefVersion.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listVersionsOfCookbook(@PathParam("cookbookname") String cookbookName);
-
-   /**
-    * Gets the details of the given cookbook, with the links to each resource
-    * such as recipe files, attributes, etc.
-    * 
-    * @param cookbookName The name of the cookbook.
-    * @param version The version of the cookbook to get.
-    * @return The details of the given cookbook.
-    */
-   @Named("cookbook:get")
-   @GET
-   @Path("/cookbooks/{cookbookname}/{version}")
-   @Fallback(NullOnNotFoundOr404.class)
-   CookbookVersion getCookbook(@PathParam("cookbookname") String cookbookName, @PathParam("version") String version);
-
-   /**
-    * Gets the definition of the cookbook in the given environment.
-    * 
-    * @param environmentname The name of the environment.
-    * @param cookbookname The name of the cookbook.
-    * @return The definition of the cookbook (URL and versions) of the cookbook
-    *         in the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:cookbook")
-   @GET
-   @ResponseParser(ParseCookbookDefinitionFromJsonv10.class)
-   @Path("/environments/{environmentname}/cookbooks/{cookbookname}")
-   CookbookDefinition getCookbookInEnvironment(@PathParam("environmentname") String environmentName,
-         @PathParam("cookbookname") String cookbookName);
-
-   /**
-    * Gets the definition of the cookbook in the given environment.
-    * 
-    * @param environmentname The name of the environment.
-    * @param cookbookname The name of the cookbook.
-    * @param numversions The number of cookbook versions to include in the
-    *        response, where n is the number of cookbook versions.
-    * @return The definition of the cookbook (URL and versions) of the cookbook
-    *         in the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:cookbook")
-   @GET
-   @ResponseParser(ParseCookbookDefinitionFromJsonv10.class)
-   @Path("/environments/{environmentname}/cookbooks/{cookbookname}?num_versions={numversions}")
-   CookbookDefinition getCookbookInEnvironment(@PathParam("environmentname") String environmentName,
-         @PathParam("cookbookname") String cookbookName, @PathParam("numversions") String numVersions);
-
-   /**
-    * Lists the names of the recipes in the given environment.
-    * 
-    * @param environmentname The name of the environment.
-    * @return The names of the recipes in the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:recipelist")
-   @GET
-   @Path("/environments/{environmentname}/recipes")
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listRecipesInEnvironment(@PathParam("environmentname") String environmentName);
-
-   /**
-    * Creates or updates the given cookbook.
-    * 
-    * @param cookbookName The name of the cookbook to create or update.
-    * @param version The version of the cookbook to create or update.
-    * @param cookbook The contents of the cookbook to create or update.
-    * @return The details of the created or updated cookbook.
-    */
-   @Named("cookbook:update")
-   @PUT
-   @Path("/cookbooks/{cookbookname}/{version}")
-   CookbookVersion updateCookbook(@PathParam("cookbookname") String cookbookName, @PathParam("version") String version,
-         @BinderParam(BindToJsonPayload.class) CookbookVersion cookbook);
-
-   /**
-    * Deletes the given cookbook.
-    * 
-    * @param cookbookName The name of the cookbook to delete.
-    * @param version The version of the cookbook to delete.
-    * @return The details of the deleted cookbook.
-    */
-   @Named("cookbook:delete")
-   @DELETE
-   @Path("/cookbooks/{cookbookname}/{version}")
-   @Fallback(NullOnNotFoundOr404.class)
-   CookbookVersion deleteCookbook(@PathParam("cookbookname") String cookbookName, @PathParam("version") String version);
-
-   // Data bags
-
-   /**
-    * Lists the names of the existing data bags.
-    * 
-    * @return The names of the existing data bags.
-    */
-   @Named("databag:list")
-   @GET
-   @Path("/data")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listDatabags();
-
-   /**
-    * Creates a new data bag.
-    * 
-    * @param databagName The name for the new data bag.
-    */
-   @Named("databag:create")
-   @POST
-   @Path("/data")
-   void createDatabag(@WrapWith("name") String databagName);
-
-   /**
-    * Deletes a data bag, including its items.
-    * 
-    * @param databagName The name of the data bag to delete.
-    */
-   @Named("databag:delete")
-   @DELETE
-   @Path("/data/{name}")
-   @Fallback(VoidOnNotFoundOr404.class)
-   void deleteDatabag(@PathParam("name") String databagName);
-
-   /**
-    * Lists the names of the items in a data bag.
-    * 
-    * @param databagName The name of the data bag.
-    * @return The names of the items in the given data bag.
-    */
-   @Named("databag:listitems")
-   @GET
-   @Path("/data/{name}")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listDatabagItems(@PathParam("name") String databagName);
-
-   /**
-    * Gets an item in a data bag.
-    * 
-    * @param databagName The name of the data bag.
-    * @param databagItemId The identifier of the item to get.
-    * @return The details of the item in the given data bag.
-    */
-   @Named("databag:getitem")
-   @GET
-   @Path("/data/{databagName}/{databagItemId}")
-   @Fallback(NullOnNotFoundOr404.class)
-   DatabagItem getDatabagItem(@PathParam("databagName") String databagName,
-         @PathParam("databagItemId") String databagItemId);
-
-   /**
-    * Adds an item in a data bag.
-    * 
-    * @param databagName The name of the data bag.
-    * @param The item to add to the data bag.
-    * @param The item just added to the data bag.
-    */
-   @Named("databag:createitem")
-   @POST
-   @Path("/data/{databagName}")
-   DatabagItem createDatabagItem(@PathParam("databagName") String databagName,
-         @BinderParam(BindToJsonPayload.class) DatabagItem databagItem);
-
-   /**
-    * Updates an item in a data bag.
-    * 
-    * @param databagName The name of the data bag.
-    * @param item The new contents for the item in the data bag.
-    * @return The details for the updated item in the data bag.
-    */
-   @Named("databag:updateitem")
-   @PUT
-   @Path("/data/{databagName}/{databagItemId}")
-   DatabagItem updateDatabagItem(
-         @PathParam("databagName") String databagName,
-         @PathParam("databagItemId") @ParamParser(DatabagItemId.class) @BinderParam(BindToJsonPayload.class) DatabagItem item);
-
-   /**
-    * Deletes an item from a data bag.
-    * 
-    * @param databagName The name of the data bag.
-    * @param databagItemId The identifier of the item to delete.
-    * @return The item deleted from the data bag.
-    */
-   @Named("databag:deleteitem")
-   @DELETE
-   @Path("/data/{databagName}/{databagItemId}")
-   @Fallback(NullOnNotFoundOr404.class)
-   @SelectJson("raw_data")
-   DatabagItem deleteDatabagItem(@PathParam("databagName") String databagName,
-         @PathParam("databagItemId") String databagItemId);
-
-   // Environments
-
-   /**
-    * Lists the names of the existing environments.
-    * 
-    * @return The names of the existing environments.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:list")
-   @GET
-   @Path("/environments")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listEnvironments();
-
-   /**
-    * Gets the details of an existing environment.
-    * 
-    * @param environmentname The name of the environment to get.
-    * @return The details of the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:get")
-   @GET
-   @Path("/environments/{environmentname}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Environment getEnvironment(@PathParam("environmentname") String environmentName);
-
-   /**
-    * Creates a new environment.
-    * 
-    * @param environment The environment to create.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:create")
-   @POST
-   @Path("/environments")
-   void createEnvironment(@BinderParam(BindToJsonPayload.class) Environment environment);
-
-   /**
-    * Updates the given environment.
-    * 
-    * @param environment The new details for the environment.
-    * @return The details of the updated environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:update")
-   @PUT
-   @Path("/environments/{environmentname}")
-   Environment updateEnvironment(
-         @PathParam("environmentname") @ParamParser(EnvironmentName.class) @BinderParam(BindToJsonPayload.class) Environment environment);
-
-   /**
-    * Deletes the given environment.
-    * 
-    * @param environmentname The name of the environment to delete.
-    * @return The details of the deleted environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:delete")
-   @DELETE
-   @Path("/environments/{environmentname}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Environment deleteEnvironment(@PathParam("environmentname") String environmentName);
-
-   // Nodes
-
-   /**
-    * Lists the names of the existing nodes.
-    * 
-    * @return The names of the existing nodes.
-    */
-   @Named("node:list")
-   @GET
-   @Path("/nodes")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listNodes();
-
-   /**
-    * Lists the names of the nodes in the given environment.
-    * 
-    * @param environmentname The name of the environment.
-    * @return The names of the existing nodes in the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("environment:nodelist")
-   @GET
-   @Path("/environments/{environmentname}/nodes")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listNodesInEnvironment(@PathParam("environmentname") String environmentName);
-
-   /**
-    * Gets the details of the given node.
-    * 
-    * @param nodename The name of the node to get.
-    * @return The details of the given node.
-    */
-   @Named("node:get")
-   @GET
-   @Path("/nodes/{nodename}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Node getNode(@PathParam("nodename") String nodeName);
-
-   /**
-    * Creates a new node.
-    * 
-    * @param node The details of the node to create.
-    */
-   @Named("node:create")
-   @POST
-   @Path("/nodes")
-   void createNode(@BinderParam(BindToJsonPayload.class) Node node);
-
-   /**
-    * Updates an existing node.
-    * 
-    * @param node The new details for the node.
-    * @return The details of the updated node.
-    */
-   @Named("node:update")
-   @PUT
-   @Path("/nodes/{nodename}")
-   Node updateNode(@PathParam("nodename") @ParamParser(NodeName.class) @BinderParam(BindToJsonPayload.class) Node node);
-
-   /**
-    * Deletes the given node.
-    * 
-    * @param nodename The name of the node to delete.
-    * @return The details of the deleted node.
-    */
-   @Named("node:delete")
-   @DELETE
-   @Path("/nodes/{nodename}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Node deleteNode(@PathParam("nodename") String nodeName);
-
-   // Roles
-
-   /**
-    * Lists the names of the existing roles.
-    * 
-    * @return The names of the existing roles.
-    */
-   @Named("role:list")
-   @GET
-   @Path("/roles")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listRoles();
-
-   /**
-    * Gets the details of the given role.
-    * 
-    * @param rolename The name of the role to get.
-    * @return The details of the given role.
-    */
-   @Named("role:get")
-   @GET
-   @Path("/roles/{rolename}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Role getRole(@PathParam("rolename") String roleName);
-
-   /**
-    * Creates a new role.
-    * 
-    * @param role The details for the new role.
-    */
-   @Named("role:create")
-   @POST
-   @Path("/roles")
-   void createRole(@BinderParam(BindToJsonPayload.class) Role role);
-
-   /**
-    * Updates the given role.
-    * 
-    * @param role The new details for the role.
-    * @return The details of the updated role.
-    */
-   @Named("role:update")
-   @PUT
-   @Path("/roles/{rolename}")
-   Role updateRole(@PathParam("rolename") @ParamParser(RoleName.class) @BinderParam(BindToJsonPayload.class) Role role);
-
-   /**
-    * Deletes the given role.
-    * 
-    * @param rolename The name of the role to delete.
-    * @return The details of the deleted role.
-    */
-   @Named("role:delete")
-   @DELETE
-   @Path("/roles/{rolename}")
-   @Fallback(NullOnNotFoundOr404.class)
-   Role deleteRole(@PathParam("rolename") String roleName);
-
-   // Sandboxes
-
-   /**
-    * Creates a new sandbox.
-    * <p>
-    * It accepts a list of checksums as input and returns the URLs against which
-    * to PUT files that need to be uploaded.
-    * 
-    * @param md5s The raw md5 sums. Uses {@code Bytes.asList()} and
-    *        {@code Bytes.toByteArray()} as necessary
-    * @return The upload sandbox with the URLs against which to PUT files that
-    *         need to be uploaded.
-    */
-   @Named("sandbox:upload")
-   @POST
-   @Path("/sandboxes")
-   UploadSandbox createUploadSandboxForChecksums(@BinderParam(BindChecksumsToJsonPayload.class) Set<List<Byte>> md5s);
-
-   /**
-    * Uploads the given content to the sandbox at the given URI.
-    * <p>
-    * The URI must be obtained, after uploading a sandbox, from the
-    * {@link UploadSandbox#getUri()}.
-    * 
-    * @param location The URI where the upload must be performed.
-    * @param content The contents to upload.
-    */
-   @Named("content:upload")
-   @PUT
-   @Produces("application/x-binary")
-   void uploadContent(@EndpointParam URI location, Payload content);
-
-   /**
-    * Gets the contents of the given resource.
-    * 
-    * @param resource The resource to get.
-    * @return An input stream for the content of the requested resource.
-    */
-   @Named("content:get")
-   @GET
-   @Fallback(NullOnNotFoundOr404.class)
-   @SkipEncoding({ '+', ' ', '/', '=', ':', ';' })
-   InputStream getResourceContents(@EndpointParam(parser = UriForResource.class) Resource resource);
-
-   /**
-    * Confirms if the sandbox is completed or not.
-    * <p>
-    * This method should be used after uploading contents to the sandbox.
-    * 
-    * @param id The id of the sandbox to commit.
-    * @param isCompleted Flag to set if the sandbox is completed or not.
-    * @return The details of the sandbox.
-    */
-   @Named("sandbox:commit")
-   @PUT
-   @Path("/sandboxes/{id}")
-   Sandbox commitSandbox(@PathParam("id") String id, @WrapWith("is_completed") boolean isCompleted);
-
-   // Search
-
-   /**
-    * Lists the names of the available search indexes.
-    * <p>
-    * By default, the "role", "node" and "api" indexes will always be available.
-    * <p>
-    * Note that the search indexes may lag behind the most current data by at
-    * least 10 seconds at any given time - so if you need to write data and
-    * immediately query it, you likely need to produce an artificial delay (or
-    * simply retry until the data is available).
-    * 
-    * @return The names of the available search indexes.
-    */
-   @Named("search:indexes")
-   @GET
-   @Path("/search")
-   @ResponseParser(ParseKeySetFromJson.class)
-   @Fallback(EmptySetOnNotFoundOr404.class)
-   Set<String> listSearchIndexes();
-
-   /**
-    * Searches all clients.
-    * <p>
-    * Note that without any request parameters this will return all of the data
-    * within the index.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:clients")
-   @GET
-   @Path("/search/client")
-   @ResponseParser(ParseSearchClientsFromJson.class)
-   SearchResult<? extends Client> searchClients();
-
-   /**
-    * Searches all clients that match the given options.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:clients")
-   @GET
-   @Path("/search/client")
-   @ResponseParser(ParseSearchClientsFromJson.class)
-   SearchResult<? extends Client> searchClients(SearchOptions options);
-
-   /**
-    * Searches all items in a data bag.
-    * <p>
-    * Note that without any request parameters this will return all of the data
-    * within the index.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:databag")
-   @GET
-   @Path("/search/{databagName}")
-   @ResponseParser(ParseSearchDatabagFromJson.class)
-   SearchResult<? extends DatabagItem> searchDatabagItems(@PathParam("databagName") String databagName);
-
-   /**
-    * Searches all items in a data bag that match the given options.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:databag")
-   @GET
-   @Path("/search/{databagName}")
-   @ResponseParser(ParseSearchDatabagFromJson.class)
-   SearchResult<? extends DatabagItem> searchDatabagItems(@PathParam("databagName") String databagName,
-         SearchOptions options);
-
-   /**
-    * Searches all environments.
-    * <p>
-    * Note that without any request parameters this will return all of the data
-    * within the index.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("search:environments")
-   @GET
-   @Path("/search/environment")
-   @ResponseParser(ParseSearchEnvironmentsFromJson.class)
-   SearchResult<? extends Environment> searchEnvironments();
-
-   /**
-    * Searches all environments that match the given options.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @SinceApiVersion("0.10.0")
-   @Named("search:environments")
-   @GET
-   @Path("/search/environment")
-   @ResponseParser(ParseSearchEnvironmentsFromJson.class)
-   SearchResult<? extends Environment> searchEnvironments(SearchOptions options);
-
-   /**
-    * Searches all nodes.
-    * <p>
-    * Note that without any request parameters this will return all of the data
-    * within the index.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:nodes")
-   @GET
-   @Path("/search/node")
-   @ResponseParser(ParseSearchNodesFromJson.class)
-   SearchResult<? extends Node> searchNodes();
-
-   /**
-    * Searches all nodes that match the given options.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:nodes")
-   @GET
-   @Path("/search/node")
-   @ResponseParser(ParseSearchNodesFromJson.class)
-   SearchResult<? extends Node> searchNodes(SearchOptions options);
-
-   /**
-    * Searches all roles.
-    * <p>
-    * Note that without any request parameters this will return all of the data
-    * within the index.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:roles")
-   @GET
-   @Path("/search/role")
-   @ResponseParser(ParseSearchRolesFromJson.class)
-   SearchResult<? extends Role> searchRoles();
-
-   /**
-    * Searches all roles that match the given options.
-    * 
-    * @return The response contains the total number of rows that matched the
-    *         request, the position this result set returns (useful for paging)
-    *         and the rows themselves.
-    */
-   @Named("search:roles")
-   @GET
-   @Path("/search/role")
-   @ResponseParser(ParseSearchRolesFromJson.class)
-   SearchResult<? extends Role> searchRoles(SearchOptions options);
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/ChefApiMetadata.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/ChefApiMetadata.java b/apis/chef/src/main/java/org/jclouds/chef/ChefApiMetadata.java
deleted file mode 100644
index ede03e9..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/ChefApiMetadata.java
+++ /dev/null
@@ -1,110 +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.
- */
-package org.jclouds.chef;
-
-import static java.util.concurrent.TimeUnit.MINUTES;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
-import static org.jclouds.Constants.PROPERTY_TIMEOUTS_PREFIX;
-import static org.jclouds.chef.config.ChefProperties.CHEF_BOOTSTRAP_DATABAG;
-import static org.jclouds.chef.config.ChefProperties.CHEF_UPDATE_GEMS;
-import static org.jclouds.chef.config.ChefProperties.CHEF_UPDATE_GEM_SYSTEM;
-import static org.jclouds.chef.config.ChefProperties.CHEF_USE_OMNIBUS;
-
-import java.net.URI;
-import java.util.Properties;
-
-import org.jclouds.chef.config.ChefBootstrapModule;
-import org.jclouds.chef.config.ChefHttpApiModule;
-import org.jclouds.chef.config.ChefParserModule;
-import org.jclouds.ohai.config.JMXOhaiModule;
-import org.jclouds.rest.internal.BaseHttpApiMetadata;
-
-import com.google.common.collect.ImmutableSet;
-import com.google.inject.Module;
-
-/**
- * Implementation of {@link ApiMetadata} for OpsCode's Chef api.
- */
-public class ChefApiMetadata extends BaseHttpApiMetadata<ChefApi> {
-
-   /**
-    * The default Chef Server API version to use.
-    */
-   public static final String DEFAULT_API_VERSION = "0.10.8";
-
-   @Override
-   public Builder toBuilder() {
-      return new Builder().fromApiMetadata(this);
-   }
-
-   public ChefApiMetadata() {
-      this(new Builder());
-   }
-
-   protected ChefApiMetadata(Builder builder) {
-      super(builder);
-   }
-
-   public static Properties defaultProperties() {
-      Properties properties = BaseHttpApiMetadata.defaultProperties();
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "default", SECONDS.toMillis(30) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.updateCookbook", MINUTES.toMillis(10) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.createClient", MINUTES.toMillis(2) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.generateKeyForClient", MINUTES.toMillis(2) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.createNode", MINUTES.toMillis(2) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.updateNode", MINUTES.toMillis(10) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.createRole", MINUTES.toMillis(2) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.updateRole", MINUTES.toMillis(10) + "");
-      properties.setProperty(PROPERTY_TIMEOUTS_PREFIX + "ChefApi.createEnvironment", MINUTES.toMillis(2) + "");
-      properties.setProperty(PROPERTY_SESSION_INTERVAL, "1");
-      properties.setProperty(CHEF_BOOTSTRAP_DATABAG, "bootstrap");
-      properties.setProperty(CHEF_UPDATE_GEM_SYSTEM, "false");
-      properties.setProperty(CHEF_UPDATE_GEMS, "false");
-      properties.setProperty(CHEF_USE_OMNIBUS, "true");
-      return properties;
-   }
-
-   public static class Builder extends BaseHttpApiMetadata.Builder<ChefApi, Builder> {
-
-      protected Builder() {
-         id("chef")
-               .name("OpsCode Chef Api")
-               .identityName("User")
-               .credentialName("Certificate")
-               .version(DEFAULT_API_VERSION)
-               .documentation(URI.create("http://wiki.opscode.com/display/chef/Server+API"))
-               .defaultEndpoint("http://localhost:4000")
-               .defaultProperties(ChefApiMetadata.defaultProperties())
-               .view(ChefContext.class)
-               .defaultModules(
-                     ImmutableSet.<Class<? extends Module>> of(ChefHttpApiModule.class, ChefParserModule.class,
-                           ChefBootstrapModule.class, JMXOhaiModule.class));
-      }
-
-      @Override
-      public ChefApiMetadata build() {
-         return new ChefApiMetadata(this);
-      }
-
-      @Override
-      protected Builder self() {
-         return this;
-      }
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/ChefContext.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/ChefContext.java b/apis/chef/src/main/java/org/jclouds/chef/ChefContext.java
deleted file mode 100644
index 7809634..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/ChefContext.java
+++ /dev/null
@@ -1,37 +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.
- */
-package org.jclouds.chef;
-
-import java.io.Closeable;
-
-import org.jclouds.View;
-import org.jclouds.chef.internal.ChefContextImpl;
-
-import com.google.inject.ImplementedBy;
-
-/**
- * Provides an entry point to Chef features.
- */
-@ImplementedBy(ChefContextImpl.class)
-public interface ChefContext extends View, Closeable {
-
-   /**
-    * Provides access to high level Chef features.
-    */
-   ChefService getChefService();
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/ChefService.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/ChefService.java b/apis/chef/src/main/java/org/jclouds/chef/ChefService.java
deleted file mode 100644
index 040107a..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/ChefService.java
+++ /dev/null
@@ -1,263 +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.
- */
-package org.jclouds.chef;
-
-import com.google.common.io.InputSupplier;
-import com.google.inject.ImplementedBy;
-import org.jclouds.chef.domain.BootstrapConfig;
-import org.jclouds.chef.domain.Client;
-import org.jclouds.chef.domain.CookbookVersion;
-import org.jclouds.chef.domain.Environment;
-import org.jclouds.chef.domain.Node;
-import org.jclouds.chef.internal.BaseChefService;
-import org.jclouds.domain.JsonBall;
-import org.jclouds.rest.annotations.SinceApiVersion;
-import org.jclouds.scriptbuilder.domain.Statement;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.concurrent.ExecutorService;
-
-/**
- * Provides high level Chef operations.
- */
-@ImplementedBy(BaseChefService.class)
-public interface ChefService {
-
-   /**
-    * Gets the context that created this service.
-    *
-    * @return The context that created the service.
-    */
-   ChefContext getContext();
-
-   // Crypto
-
-   /**
-    * Encrypts the given input stream.
-    *
-    * @param supplier The input stream to encrypt.
-    * @return The encrypted bytes for the given input stream.
-    * @throws IOException If there is an error reading from the input stream.
-    */
-   byte[] encrypt(InputSupplier<? extends InputStream> supplier) throws IOException;
-
-   /**
-    * Decrypts the given input stream.
-    *
-    * @param supplier The input stream to decrypt.
-    * @return The decrypted bytes for the given input stream.
-    * @throws IOException If there is an error reading from the input stream.
-    */
-   byte[] decrypt(InputSupplier<? extends InputStream> supplier) throws IOException;
-
-   // Bootstrap
-
-   /**
-    * Creates all steps necessary to bootstrap the node.
-    *
-    * @param group corresponds to a configured
-    *              {@link ChefProperties#CHEF_BOOTSTRAP_DATABAG} data bag where
-    *              run_list and other information are stored.
-    * @return The script used to bootstrap the node.
-    */
-   Statement createBootstrapScriptForGroup(String group);
-
-   /**
-    * Configures how the nodes of a certain group will be bootstrapped
-    *
-    * @param group           The group where the given bootstrap configuration will be
-    *                        applied.
-    * @param bootstrapConfig The configuration to be applied to the nodes in the
-    *                        group.
-    */
-   void updateBootstrapConfigForGroup(String group, BootstrapConfig bootstrapConfig);
-
-   /**
-    * Gets the run list for the given group.
-    *
-    * @param The group to get the configured run list for.
-    * @return run list for all nodes bootstrapped with a certain group
-    */
-   List<String> getRunListForGroup(String group);
-
-   /**
-    * Gets the bootstrap configuration for a given group.
-    * <p/>
-    * The bootstrap configuration is a Json object containing the run list and
-    * the configured attributes.
-    *
-    * @param group The name of the group.
-    * @return The bootstrap configuration for the given group.
-    */
-   JsonBall getBootstrapConfigForGroup(String group);
-
-   // Nodes / Clients
-
-   /**
-    * Creates a new node and populates the automatic attributes.
-    *
-    * @param nodeName The name of the node to create.
-    * @param runList  The run list for the created node.
-    * @return The created node with the automatic attributes populated.
-    * @see OhaiModule
-    * @see ChefUtils#ohaiAutomaticAttributeBinder(com.google.inject.Binder)
-    */
-   Node createNodeAndPopulateAutomaticAttributes(String nodeName, Iterable<String> runList);
-
-   /**
-    * Updates and populate the automatic attributes of the given node.
-    *
-    * @param nodeName The node to update.
-    */
-   void updateAutomaticAttributesOnNode(String nodeName);
-
-   /**
-    * Removes the nodes and clients that have been inactive for a given amount of
-    * time.
-    *
-    * @param prefix       The prefix for the nodes and clients to delete.
-    * @param secondsStale The seconds of inactivity to consider a node and
-    *                     client obsolete.
-    */
-   void cleanupStaleNodesAndClients(String prefix, int secondsStale);
-
-   /**
-    * Deletes the given nodes.
-    *
-    * @param names The names of the nodes to delete.
-    */
-   void deleteAllNodesInList(Iterable<String> names);
-
-   /**
-    * Deletes the given clients.
-    *
-    * @param names The names of the client to delete.
-    */
-   void deleteAllClientsInList(Iterable<String> names);
-
-   /**
-    * Lists the details of all existing nodes.
-    *
-    * @return The details of all existing nodes.
-    */
-   Iterable<? extends Node> listNodes();
-
-   /**
-    * Lists the details of all existing nodes, executing concurrently using the executorService.
-    *
-    * @return The details of all existing nodes.
-    */
-   Iterable<? extends Node> listNodes(ExecutorService executorService);
-
-   /**
-    * Lists the details of all existing nodes in the given environment.
-    *
-    * @param environmentName The name fo the environment.
-    * @return The details of all existing nodes in the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   Iterable<? extends Node> listNodesInEnvironment(String environmentName);
-
-   /**
-    * Lists the details of all existing nodes in the given environment, using the ExecutorService to paralleling the execution.
-    *
-    * @param executorService The thread pool used in this operation
-    * @param environmentName The name fo the environment.
-    * @return The details of all existing nodes in the given environment.
-    */
-   @SinceApiVersion("0.10.0")
-   Iterable<? extends Node> listNodesInEnvironment(String environmentName, ExecutorService executorService);
-
-   /**
-    * Lists the details of all existing clients.
-    *
-    * @return The details of all existing clients.
-    */
-   Iterable<? extends Client> listClients();
-
-   /**
-    * Lists the details of all existing clients, but executing concurrently using the threads available in the ExecutorService.
-    *
-    * @return The details of all existing clients.
-    */
-   Iterable<? extends Client> listClients(ExecutorService executorService);
-
-   /**
-    * Lists the details of all existing cookbooks.
-    *
-    * @return The details of all existing cookbooks.
-    */
-   Iterable<? extends CookbookVersion> listCookbookVersions();
-
-   /**
-    * Lists the details of all existing cookbooks. This method is executed concurrently, using the threads available in the ExecutorService.
-    *
-    * @return The details of all existing cookbooks.
-    */
-   Iterable<? extends CookbookVersion> listCookbookVersions(ExecutorService executorService);
-
-   /**
-    * Lists the details of all existing cookbooks in an environment.
-    *
-    * @param environmentName The environment name.
-    * @return The details of all existing cookbooks in an environment.
-    */
-   Iterable<? extends CookbookVersion> listCookbookVersionsInEnvironment(String environmentName);
-
-   /**
-    * Lists the details of all existing cookbooks in an environment.
-
-    * @param executorService The thread pool to do the concurrent execution.
-    * @param environmentName The environment name.
-    * @return The details of all existing cookbooks in an environment.
-    */
-   Iterable<? extends CookbookVersion> listCookbookVersionsInEnvironment(String environmentName, ExecutorService executorService);
-
-   /**
-    * Lists the details of all existing cookbooks in an environment
-    * limiting number of versions.
-    *
-    * @param environmentName The environment name.
-    * @param numVersions     The number of cookbook versions to include.
-    *                        Use 'all' to return all cookbook versions.
-    * @return The details of all existing cookbooks in environment.
-    */
-   Iterable<? extends CookbookVersion> listCookbookVersionsInEnvironment(String environmentName, String numVersions);
-
-   /**
-    * Lists the details of all existing cookbooks in an environment
-    * limiting number of versions.
-    *
-    * @param executorService The executorService used to do this operation concurrently.
-    * @param environmentName The environment name.
-    * @param numVersions     The number of cookbook versions to include.
-    *                        Use 'all' to return all cookbook versions.
-    * @return The details of all existing cookbooks in environment.
-    */
-   Iterable<? extends CookbookVersion> listCookbookVersionsInEnvironment(String environmentName, String numVersions, ExecutorService executorService);
-
-   /**
-    * Lists the details of all existing environments.
-    *
-    * @return The details of all existing environments.
-    */
-   @SinceApiVersion("0.10.0")
-   Iterable<? extends Environment> listEnvironments();
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java b/apis/chef/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java
deleted file mode 100644
index 9a744a3..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java
+++ /dev/null
@@ -1,54 +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.
- */
-package org.jclouds.chef.binders;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.io.BaseEncoding.base16;
-import static com.google.common.primitives.Bytes.toArray;
-
-import java.util.List;
-import java.util.Set;
-
-import javax.inject.Singleton;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.binders.BindToStringPayload;
-
-@Singleton
-public class BindChecksumsToJsonPayload extends BindToStringPayload {
-
-   @SuppressWarnings("unchecked")
-   public HttpRequest bindToRequest(HttpRequest request, Object input) {
-      checkArgument(checkNotNull(input, "input") instanceof Set, "this binder is only valid for Set!");
-
-      Set<List<Byte>> md5s = (Set<List<Byte>>) input;
-
-      StringBuilder builder = new StringBuilder();
-      builder.append("{\"checksums\":{");
-
-      for (List<Byte> md5 : md5s)
-         builder.append(String.format("\"%s\":null,", base16().lowerCase().encode(toArray(md5))));
-      builder.deleteCharAt(builder.length() - 1);
-      builder.append("}}");
-      super.bindToRequest(request, builder.toString());
-      request.getPayload().getContentMetadata().setContentType(MediaType.APPLICATION_JSON);
-      return request;
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java b/apis/chef/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java
deleted file mode 100644
index b719c66..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java
+++ /dev/null
@@ -1,71 +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.
- */
-package org.jclouds.chef.binders;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.jclouds.chef.options.CreateClientOptions;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.json.Json;
-import org.jclouds.rest.binders.BindToJsonPayload;
-import org.jclouds.rest.internal.GeneratedHttpRequest;
-
-import com.google.common.base.Predicates;
-import com.google.common.collect.Iterables;
-
-/**
- * Bind the parameters of a {@link CreateClientOptions} to the payload.
- */
-public class BindCreateClientOptionsToJsonPayload extends BindToJsonPayload {
-   @Inject
-   public BindCreateClientOptionsToJsonPayload(Json jsonBinder) {
-      super(jsonBinder);
-   }
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Map<String, Object> postParams) {
-      checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest,
-            "this binder is only valid for GeneratedHttpRequests");
-      GeneratedHttpRequest gRequest = (GeneratedHttpRequest) request;
-      checkState(gRequest.getInvocation().getArgs() != null, "args should be initialized at this point");
-
-      String name = checkNotNull(postParams.remove("name"), "name").toString();
-      CreateClientOptions options = (CreateClientOptions) Iterables.find(gRequest.getInvocation().getArgs(),
-            Predicates.instanceOf(CreateClientOptions.class));
-
-      return bindToRequest(request, new CreateClientParams(name, options));
-   }
-
-   @SuppressWarnings("unused")
-   private static class CreateClientParams {
-      private String name;
-
-      private boolean admin;
-
-      public CreateClientParams(String name, CreateClientOptions options) {
-         this.name = name;
-         this.admin = options.isAdmin();
-      }
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java b/apis/chef/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java
deleted file mode 100644
index 4bd5821..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java
+++ /dev/null
@@ -1,35 +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.
- */
-package org.jclouds.chef.binders;
-
-import javax.inject.Singleton;
-import javax.ws.rs.core.MediaType;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.binders.BindToStringPayload;
-
-@Singleton
-public class BindGenerateKeyForClientToJsonPayload extends BindToStringPayload {
-
-   @Override
-   public <R extends HttpRequest> R bindToRequest(R request, Object payload) {
-      super.bindToRequest(request, String.format("{\"name\":\"%s\", \"private_key\": true}", payload));
-      request.getPayload().getContentMetadata().setContentType(MediaType.APPLICATION_JSON);
-      return request;
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/DatabagItemId.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/DatabagItemId.java b/apis/chef/src/main/java/org/jclouds/chef/binders/DatabagItemId.java
deleted file mode 100644
index 5dd5a62..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/DatabagItemId.java
+++ /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.
- */
-package org.jclouds.chef.binders;
-
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.DatabagItem;
-
-import com.google.common.base.Function;
-
-@Singleton
-public class DatabagItemId implements Function<Object, String> {
-
-   public String apply(Object from) {
-      return ((DatabagItem) from).getId();
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/EnvironmentName.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/EnvironmentName.java b/apis/chef/src/main/java/org/jclouds/chef/binders/EnvironmentName.java
deleted file mode 100644
index 1650521..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/EnvironmentName.java
+++ /dev/null
@@ -1,31 +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.
- */
-package org.jclouds.chef.binders;
-
-import com.google.common.base.Function;
-import org.jclouds.chef.domain.Environment;
-
-import javax.inject.Singleton;
-
-@Singleton
-public class EnvironmentName implements Function<Object, String> {
-
-   @Override
-   public String apply(Object input) {
-      return ((Environment) input).getName();
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/NodeName.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/NodeName.java b/apis/chef/src/main/java/org/jclouds/chef/binders/NodeName.java
deleted file mode 100644
index 5277895..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/NodeName.java
+++ /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.
- */
-package org.jclouds.chef.binders;
-
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Node;
-
-import com.google.common.base.Function;
-
-@Singleton
-public class NodeName implements Function<Object, String> {
-
-   public String apply(Object from) {
-      return ((Node) from).getName();
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds/blob/8cb2cb44/apis/chef/src/main/java/org/jclouds/chef/binders/RoleName.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/binders/RoleName.java b/apis/chef/src/main/java/org/jclouds/chef/binders/RoleName.java
deleted file mode 100644
index aa78a06..0000000
--- a/apis/chef/src/main/java/org/jclouds/chef/binders/RoleName.java
+++ /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.
- */
-package org.jclouds.chef.binders;
-
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Role;
-
-import com.google.common.base.Function;
-
-@Singleton
-public class RoleName implements Function<Object, String> {
-
-   public String apply(Object from) {
-      return ((Role) from).getName();
-   }
-
-}