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/11/23 23:11:15 UTC

[10/11] jclouds-chef git commit: Removed all code after promoting, to avoid confusion

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/ChefService.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/ChefService.java b/core/src/main/java/org/jclouds/chef/ChefService.java
deleted file mode 100644
index 040107a..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java b/core/src/main/java/org/jclouds/chef/binders/BindChecksumsToJsonPayload.java
deleted file mode 100644
index 9a744a3..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java b/core/src/main/java/org/jclouds/chef/binders/BindCreateClientOptionsToJsonPayload.java
deleted file mode 100644
index b719c66..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java b/core/src/main/java/org/jclouds/chef/binders/BindGenerateKeyForClientToJsonPayload.java
deleted file mode 100644
index 4bd5821..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/DatabagItemId.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/DatabagItemId.java b/core/src/main/java/org/jclouds/chef/binders/DatabagItemId.java
deleted file mode 100644
index 5dd5a62..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/EnvironmentName.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/EnvironmentName.java b/core/src/main/java/org/jclouds/chef/binders/EnvironmentName.java
deleted file mode 100644
index 1650521..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/NodeName.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/NodeName.java b/core/src/main/java/org/jclouds/chef/binders/NodeName.java
deleted file mode 100644
index 5277895..0000000
--- a/core/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-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/binders/RoleName.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/binders/RoleName.java b/core/src/main/java/org/jclouds/chef/binders/RoleName.java
deleted file mode 100644
index aa78a06..0000000
--- a/core/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();
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java b/core/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
deleted file mode 100644
index 2fc4201..0000000
--- a/core/src/main/java/org/jclouds/chef/config/BaseChefHttpApiModule.java
+++ /dev/null
@@ -1,208 +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.config;
-
-import static com.google.common.base.Suppliers.compose;
-import static com.google.common.base.Suppliers.memoizeWithExpiration;
-import static com.google.common.base.Throwables.propagate;
-import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
-import static org.jclouds.chef.config.ChefProperties.CHEF_VALIDATOR_CREDENTIAL;
-import static org.jclouds.chef.config.ChefProperties.CHEF_VALIDATOR_NAME;
-import static org.jclouds.crypto.Pems.privateKeySpec;
-
-import java.io.IOException;
-import java.security.PrivateKey;
-import java.security.spec.InvalidKeySpecException;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.Client;
-import org.jclouds.chef.functions.BootstrapConfigForGroup;
-import org.jclouds.chef.functions.ClientForGroup;
-import org.jclouds.chef.functions.RunListForGroup;
-import org.jclouds.chef.handlers.ChefApiErrorRetryHandler;
-import org.jclouds.chef.handlers.ChefErrorHandler;
-import org.jclouds.crypto.Crypto;
-import org.jclouds.crypto.Pems;
-import org.jclouds.date.DateService;
-import org.jclouds.date.TimeStamp;
-import org.jclouds.domain.Credentials;
-import org.jclouds.domain.JsonBall;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.HttpRetryHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.rest.ConfiguresHttpApi;
-import org.jclouds.rest.config.HttpApiModule;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Charsets;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Supplier;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.CacheLoader;
-import com.google.common.cache.LoadingCache;
-import com.google.common.io.ByteSource;
-import com.google.inject.ConfigurationException;
-import com.google.inject.Injector;
-import com.google.inject.Key;
-import com.google.inject.Provides;
-import com.google.inject.name.Names;
-
-/**
- * Configures the Chef connection.
- */
-@ConfiguresHttpApi
-public abstract class BaseChefHttpApiModule<S> extends HttpApiModule<S> {
-
-   @Provides
-   @TimeStamp
-   protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
-      return cache.get();
-   }
-
-   /**
-    * borrowing concurrency code to ensure that caching takes place properly
-    */
-   @Provides
-   @TimeStamp
-   Supplier<String> provideTimeStampCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds, final DateService dateService) {
-      return memoizeWithExpiration(new Supplier<String>() {
-         @Override
-         public String get() {
-            return dateService.iso8601SecondsDateFormat();
-         }
-      }, seconds, TimeUnit.SECONDS);
-   }
-
-   // TODO: potentially change this
-   @Provides
-   @Singleton
-   public Supplier<PrivateKey> supplyKey(final LoadingCache<Credentials, PrivateKey> keyCache,
-         @org.jclouds.location.Provider final Supplier<Credentials> creds) {
-      return compose(new Function<Credentials, PrivateKey>() {
-         @Override
-         public PrivateKey apply(Credentials in) {
-            return keyCache.getUnchecked(in);
-         }
-      }, creds);
-   }
-
-   @Provides
-   @Singleton
-   LoadingCache<Credentials, PrivateKey> privateKeyCache(PrivateKeyForCredentials loader) {
-      // throw out the private key related to old credentials
-      return CacheBuilder.newBuilder().maximumSize(2).build(loader);
-   }
-
-   /**
-    * it is relatively expensive to extract a private key from a PEM. cache the
-    * relationship between current credentials so that the private key is only
-    * recalculated once.
-    */
-   @VisibleForTesting
-   @Singleton
-   private static class PrivateKeyForCredentials extends CacheLoader<Credentials, PrivateKey> {
-      private final Crypto crypto;
-
-      @Inject
-      private PrivateKeyForCredentials(Crypto crypto) {
-         this.crypto = crypto;
-      }
-
-      @Override
-      public PrivateKey load(Credentials in) {
-         try {
-            return crypto.rsaKeyFactory().generatePrivate(
-                  privateKeySpec(ByteSource.wrap(in.credential.getBytes(Charsets.UTF_8))));
-         } catch (InvalidKeySpecException e) {
-            throw propagate(e);
-         } catch (IOException e) {
-            throw propagate(e);
-         }
-      }
-   }
-
-   @Provides
-   @Singleton
-   @Validator
-   public Optional<String> provideValidatorName(Injector injector) {
-      // Named properties can not be injected as optional here, so let's use the
-      // injector to bypass it
-      Key<String> key = Key.get(String.class, Names.named(CHEF_VALIDATOR_NAME));
-      try {
-         return Optional.<String> of(injector.getInstance(key));
-      } catch (ConfigurationException ex) {
-         return Optional.<String> absent();
-      }
-   }
-
-   @Provides
-   @Singleton
-   @Validator
-   public Optional<PrivateKey> provideValidatorCredential(Crypto crypto, Injector injector)
-         throws InvalidKeySpecException, IOException {
-      // Named properties can not be injected as optional here, so let's use the
-      // injector to bypass it
-      Key<String> key = Key.get(String.class, Names.named(CHEF_VALIDATOR_CREDENTIAL));
-      try {
-         String validatorCredential = injector.getInstance(key);
-         PrivateKey validatorKey = crypto.rsaKeyFactory().generatePrivate(
-               Pems.privateKeySpec(ByteSource.wrap(validatorCredential.getBytes(Charsets.UTF_8))));
-         return Optional.<PrivateKey> of(validatorKey);
-      } catch (ConfigurationException ex) {
-         return Optional.<PrivateKey> absent();
-      }
-   }
-
-   @Provides
-   @Singleton
-   CacheLoader<String, List<String>> runListForGroup(RunListForGroup runListForGroup) {
-      return CacheLoader.from(runListForGroup);
-   }
-
-   @Provides
-   @Singleton
-   CacheLoader<String, ? extends JsonBall> bootstrapConfigForGroup(BootstrapConfigForGroup bootstrapConfigForGroup) {
-      return CacheLoader.from(bootstrapConfigForGroup);
-   }
-
-   @Provides
-   @Singleton
-   CacheLoader<String, Client> groupToClient(ClientForGroup clientForGroup) {
-      return CacheLoader.from(clientForGroup);
-   }
-
-   @Override
-   protected void bindErrorHandlers() {
-      bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ChefErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ChefErrorHandler.class);
-      bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ChefErrorHandler.class);
-   }
-
-   @Override
-   protected void bindRetryHandlers() {
-      bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(ChefApiErrorRetryHandler.class);
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java b/core/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
deleted file mode 100644
index a5fd231..0000000
--- a/core/src/main/java/org/jclouds/chef/config/ChefBootstrapModule.java
+++ /dev/null
@@ -1,121 +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.config;
-
-import static org.jclouds.chef.config.ChefProperties.CHEF_GEM_SYSTEM_VERSION;
-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 static org.jclouds.chef.config.ChefProperties.CHEF_VERSION;
-
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.scriptbuilder.domain.Statement;
-import org.jclouds.scriptbuilder.domain.StatementList;
-import org.jclouds.scriptbuilder.statements.chef.InstallChefGems;
-import org.jclouds.scriptbuilder.statements.chef.InstallChefUsingOmnibus;
-import org.jclouds.scriptbuilder.statements.ruby.InstallRuby;
-import org.jclouds.scriptbuilder.statements.ruby.InstallRubyGems;
-
-import com.google.common.base.Optional;
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-import com.google.inject.Provides;
-
-/**
- * Provides bootstrap configuration for nodes.
- */
-public class ChefBootstrapModule extends AbstractModule {
-
-   @Provides
-   @Named("installChefGems")
-   @Singleton
-   Statement installChefGems(BootstrapProperties bootstrapProperties) {
-      InstallRubyGems installRubyGems = InstallRubyGems.builder()
-            .version(bootstrapProperties.gemSystemVersion().orNull())
-            .updateSystem(bootstrapProperties.updateGemSystem(), bootstrapProperties.gemSystemVersion().orNull())
-            .updateExistingGems(bootstrapProperties.updateGems()) //
-            .build();
-
-      Statement installChef = InstallChefGems.builder().version(bootstrapProperties.chefVersion().orNull()).build();
-
-      return new StatementList(InstallRuby.builder().build(), installRubyGems, installChef);
-   }
-
-   @Provides
-   @Named("installChefOmnibus")
-   @Singleton
-   Statement installChefUsingOmnibus() {
-      return new InstallChefUsingOmnibus();
-   }
-
-   @Provides
-   @InstallChef
-   @Singleton
-   Statement installChef(BootstrapProperties bootstrapProperties, @Named("installChefGems") Statement installChefGems,
-         @Named("installChefOmnibus") Statement installChefOmnibus) {
-      return bootstrapProperties.useOmnibus() ? installChefOmnibus : installChefGems;
-   }
-
-   @Singleton
-   private static class BootstrapProperties {
-      @Named(CHEF_VERSION)
-      @Inject(optional = true)
-      private String chefVersionProperty;
-
-      @Named(CHEF_GEM_SYSTEM_VERSION)
-      @Inject(optional = true)
-      private String gemSystemVersionProperty;
-
-      @Named(CHEF_UPDATE_GEM_SYSTEM)
-      @Inject
-      private String updateGemSystemProeprty;
-
-      @Named(CHEF_UPDATE_GEMS)
-      @Inject
-      private String updateGemsProperty;
-
-      @Named(CHEF_USE_OMNIBUS)
-      @Inject
-      private String useOmnibus;
-
-      public Optional<String> chefVersion() {
-         return Optional.fromNullable(chefVersionProperty);
-      }
-
-      public Optional<String> gemSystemVersion() {
-         return Optional.fromNullable(gemSystemVersionProperty);
-      }
-
-      public boolean updateGemSystem() {
-         return Boolean.parseBoolean(updateGemSystemProeprty);
-      }
-
-      public boolean updateGems() {
-         return Boolean.parseBoolean(updateGemsProperty);
-      }
-
-      public boolean useOmnibus() {
-         return Boolean.parseBoolean(useOmnibus);
-      }
-   }
-
-   @Override
-   protected void configure() {
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java b/core/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java
deleted file mode 100644
index ffd3b0b..0000000
--- a/core/src/main/java/org/jclouds/chef/config/ChefHttpApiModule.java
+++ /dev/null
@@ -1,28 +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.config;
-
-import org.jclouds.chef.ChefApi;
-import org.jclouds.rest.ConfiguresHttpApi;
-
-/**
- * Configures the Chef connection.
- */
-@ConfiguresHttpApi
-public class ChefHttpApiModule extends BaseChefHttpApiModule<ChefApi> {
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/ChefParserModule.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/ChefParserModule.java b/core/src/main/java/org/jclouds/chef/config/ChefParserModule.java
deleted file mode 100644
index c214236..0000000
--- a/core/src/main/java/org/jclouds/chef/config/ChefParserModule.java
+++ /dev/null
@@ -1,321 +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.config;
-
-import static com.google.common.base.Objects.equal;
-import static com.google.common.base.Objects.toStringHelper;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.lang.reflect.Type;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-import java.security.spec.InvalidKeySpecException;
-import java.util.Map;
-import java.util.Set;
-
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.jclouds.chef.domain.DatabagItem;
-import org.jclouds.chef.functions.ParseCookbookDefinitionFromJson;
-import org.jclouds.chef.functions.ParseCookbookVersionsV09FromJson;
-import org.jclouds.chef.functions.ParseCookbookVersionsV10FromJson;
-import org.jclouds.chef.functions.ParseKeySetFromJson;
-import org.jclouds.chef.suppliers.ChefVersionSupplier;
-import org.jclouds.crypto.Crypto;
-import org.jclouds.crypto.Pems;
-import org.jclouds.http.HttpResponse;
-import org.jclouds.json.config.GsonModule.DateAdapter;
-import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
-import org.jclouds.json.internal.NullFilteringTypeAdapterFactories.MapTypeAdapterFactory;
-import org.jclouds.json.internal.NullHackJsonLiteralAdapter;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Function;
-import com.google.common.base.Objects;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Maps;
-import com.google.common.io.ByteSource;
-import com.google.gson.Gson;
-import com.google.gson.JsonDeserializationContext;
-import com.google.gson.JsonDeserializer;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParseException;
-import com.google.gson.JsonSyntaxException;
-import com.google.gson.TypeAdapter;
-import com.google.gson.internal.JsonReaderInternalAccess;
-import com.google.gson.stream.JsonReader;
-import com.google.gson.stream.JsonWriter;
-import com.google.inject.AbstractModule;
-import com.google.inject.ImplementedBy;
-import com.google.inject.Provides;
-
-public class ChefParserModule extends AbstractModule {
-   @ImplementedBy(PrivateKeyAdapterImpl.class)
-   public interface PrivateKeyAdapter extends JsonDeserializer<PrivateKey> {
-
-   }
-
-   @Singleton
-   public static class PrivateKeyAdapterImpl implements PrivateKeyAdapter {
-      private final Crypto crypto;
-
-      @Inject
-      PrivateKeyAdapterImpl(Crypto crypto) {
-         this.crypto = crypto;
-      }
-
-      @Override
-      public PrivateKey deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
-            throws JsonParseException {
-         String keyText = json.getAsString().replaceAll("\\n", "\n");
-         try {
-            return crypto.rsaKeyFactory().generatePrivate(
-                  Pems.privateKeySpec(ByteSource.wrap(keyText.getBytes(Charsets.UTF_8))));
-         } catch (UnsupportedEncodingException e) {
-            Throwables.propagate(e);
-            return null;
-         } catch (InvalidKeySpecException e) {
-            Throwables.propagate(e);
-            return null;
-         } catch (IOException e) {
-            Throwables.propagate(e);
-            return null;
-         }
-      }
-   }
-
-   @ImplementedBy(PublicKeyAdapterImpl.class)
-   public interface PublicKeyAdapter extends JsonDeserializer<PublicKey> {
-
-   }
-
-   @Singleton
-   public static class PublicKeyAdapterImpl implements PublicKeyAdapter {
-      private final Crypto crypto;
-
-      @Inject
-      PublicKeyAdapterImpl(Crypto crypto) {
-         this.crypto = crypto;
-      }
-
-      @Override
-      public PublicKey deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
-            throws JsonParseException {
-         String keyText = json.getAsString().replaceAll("\\n", "\n");
-         try {
-            return crypto.rsaKeyFactory().generatePublic(
-                  Pems.publicKeySpec(ByteSource.wrap(keyText.getBytes(Charsets.UTF_8))));
-         } catch (UnsupportedEncodingException e) {
-            Throwables.propagate(e);
-            return null;
-         } catch (InvalidKeySpecException e) {
-            Throwables.propagate(e);
-            return null;
-         } catch (IOException e) {
-            Throwables.propagate(e);
-            return null;
-         }
-      }
-   }
-
-   @ImplementedBy(X509CertificateAdapterImpl.class)
-   public interface X509CertificateAdapter extends JsonDeserializer<X509Certificate> {
-
-   }
-
-   @Singleton
-   public static class X509CertificateAdapterImpl implements X509CertificateAdapter {
-      private final Crypto crypto;
-
-      @Inject
-      X509CertificateAdapterImpl(Crypto crypto) {
-         this.crypto = crypto;
-      }
-
-      @Override
-      public X509Certificate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
-            throws JsonParseException {
-         String keyText = json.getAsString().replaceAll("\\n", "\n");
-         try {
-            return Pems.x509Certificate(ByteSource.wrap(keyText.getBytes(Charsets.UTF_8)),
-                  crypto.certFactory());
-         } catch (UnsupportedEncodingException e) {
-            Throwables.propagate(e);
-            return null;
-         } catch (IOException e) {
-            Throwables.propagate(e);
-            return null;
-         } catch (CertificateException e) {
-            Throwables.propagate(e);
-            return null;
-         }
-      }
-   }
-
-   /**
-    * writes or reads the literal directly
-    */
-   @Singleton
-   public static class DataBagItemAdapter extends NullHackJsonLiteralAdapter<DatabagItem> {
-      final Gson gson = new Gson();
-
-      @Override
-      protected DatabagItem createJsonLiteralFromRawJson(String text) {
-         IdHolder idHolder = gson.fromJson(text, IdHolder.class);
-         checkState(idHolder.id != null,
-               "databag item must be a json hash ex. {\"id\":\"item1\",\"my_key\":\"my_data\"}; was %s", text);
-         text = text.replaceFirst(String.format("\\{\"id\"[ ]?:\"%s\",", idHolder.id), "{");
-         return new DatabagItem(idHolder.id, text);
-      }
-
-      @Override
-      protected String toString(DatabagItem value) {
-         String text = value.toString();
-
-         try {
-            IdHolder idHolder = gson.fromJson(text, IdHolder.class);
-            if (idHolder.id == null) {
-               text = text.replaceFirst("\\{", String.format("{\"id\":\"%s\",", value.getId()));
-            } else {
-               checkArgument(value.getId().equals(idHolder.id),
-                     "incorrect id in databagItem text, should be %s: was %s", value.getId(), idHolder.id);
-            }
-         } catch (JsonSyntaxException e) {
-            throw new IllegalArgumentException(e);
-         }
-
-         return text;
-      }
-   }
-
-   private static class IdHolder {
-      private String id;
-   }
-
-   // The NullFilteringTypeAdapterFactories.MapTypeAdapter class is final. Do
-   // the same logic here
-   private static final class KeepLastRepeatedKeyMapTypeAdapter<K, V> extends TypeAdapter<Map<K, V>> {
-
-      protected final TypeAdapter<K> keyAdapter;
-      protected final TypeAdapter<V> valueAdapter;
-
-      protected KeepLastRepeatedKeyMapTypeAdapter(TypeAdapter<K> keyAdapter, TypeAdapter<V> valueAdapter) {
-         this.keyAdapter = keyAdapter;
-         this.valueAdapter = valueAdapter;
-         nullSafe();
-      }
-
-      public void write(JsonWriter out, Map<K, V> value) throws IOException {
-         if (value == null) {
-            out.nullValue();
-            return;
-         }
-         out.beginObject();
-         for (Map.Entry<K, V> element : value.entrySet()) {
-            out.name(String.valueOf(element.getKey()));
-            valueAdapter.write(out, element.getValue());
-         }
-         out.endObject();
-      }
-
-      public Map<K, V> read(JsonReader in) throws IOException {
-         Map<K, V> result = Maps.newHashMap();
-         in.beginObject();
-         while (in.hasNext()) {
-            JsonReaderInternalAccess.INSTANCE.promoteNameToValue(in);
-            K name = keyAdapter.read(in);
-            V value = valueAdapter.read(in);
-            if (value != null) {
-               // If there are repeated keys, overwrite them to only keep the last one
-               result.put(name, value);
-            }
-         }
-         in.endObject();
-         return ImmutableMap.copyOf(result);
-      }
-
-      @Override
-      public int hashCode() {
-         return Objects.hashCode(keyAdapter, valueAdapter);
-      }
-
-      @Override
-      public boolean equals(Object obj) {
-         if (this == obj)
-            return true;
-         if (obj == null || getClass() != obj.getClass())
-            return false;
-         KeepLastRepeatedKeyMapTypeAdapter<?, ?> that = KeepLastRepeatedKeyMapTypeAdapter.class.cast(obj);
-         return equal(this.keyAdapter, that.keyAdapter) && equal(this.valueAdapter, that.valueAdapter);
-      }
-
-      @Override
-      public String toString() {
-         return toStringHelper(this).add("keyAdapter", keyAdapter).add("valueAdapter", valueAdapter).toString();
-      }
-   }
-
-   public static class KeepLastRepeatedKeyMapTypeAdapterFactory extends MapTypeAdapterFactory {
-
-      public KeepLastRepeatedKeyMapTypeAdapterFactory() {
-         super(Map.class);
-      }
-
-      @SuppressWarnings("unchecked")
-      @Override
-      protected <K, V, T> TypeAdapter<T> newAdapter(TypeAdapter<K> keyAdapter, TypeAdapter<V> valueAdapter) {
-         return (TypeAdapter<T>) new KeepLastRepeatedKeyMapTypeAdapter<K, V>(keyAdapter, valueAdapter);
-      }
-   }
-
-   @Provides
-   @Singleton
-   public Map<Type, Object> provideCustomAdapterBindings(DataBagItemAdapter adapter, PrivateKeyAdapter privateAdapter,
-         PublicKeyAdapter publicAdapter, X509CertificateAdapter certAdapter) {
-      return ImmutableMap.<Type, Object> of(DatabagItem.class, adapter, PrivateKey.class, privateAdapter,
-            PublicKey.class, publicAdapter, X509Certificate.class, certAdapter);
-   }
-
-   @Provides
-   @Singleton
-   @CookbookParser
-   public Function<HttpResponse, Set<String>> provideCookbookDefinitionAdapter(ChefVersionSupplier chefVersionSupplier,
-         ParseCookbookDefinitionFromJson v10parser, ParseKeySetFromJson v09parser) {
-      return chefVersionSupplier.get() >= 10 ? v10parser : v09parser;
-   }
-
-   @Provides
-   @Singleton
-   @CookbookVersionsParser
-   public Function<HttpResponse, Set<String>> provideCookbookDefinitionAdapter(ChefVersionSupplier chefVersionSupplier,
-         ParseCookbookVersionsV10FromJson v10parser, ParseCookbookVersionsV09FromJson v09parser) {
-      return chefVersionSupplier.get() >= 10 ? v10parser : v09parser;
-   }
-
-   @Override
-   protected void configure() {
-      bind(DateAdapter.class).to(Iso8601DateAdapter.class);
-      bind(MapTypeAdapterFactory.class).to(KeepLastRepeatedKeyMapTypeAdapterFactory.class);
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/ChefProperties.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/ChefProperties.java b/core/src/main/java/org/jclouds/chef/config/ChefProperties.java
deleted file mode 100644
index 211b5d6..0000000
--- a/core/src/main/java/org/jclouds/chef/config/ChefProperties.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.config;
-
-
-/**
- * Configuration properties and constants used in Chef connections.
- */
-public interface ChefProperties {
-
-   /**
-    * The name of the Chef logger.
-    */
-   public static final String CHEF_LOGGER = "jclouds.chef";
-
-   /**
-    * Databag that holds chef bootstrap hints, should be a json ball in the
-    * following format:
-    * <p>
-    * {"tag":{"run_list":["recipe[apache2]"]}}
-    */
-   public static final String CHEF_BOOTSTRAP_DATABAG = "chef.bootstrap-databag";
-
-   /**
-    * The name of the validator client used to allow nodes to autoregister in
-    * the Chef server.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_VALIDATOR_NAME = "chef.validator-name";
-
-   /**
-    * The credential of the validator client used to allow nodes to autoregister
-    * in the Chef server.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_VALIDATOR_CREDENTIAL = "chef.validator-credential";
-
-   /**
-    * The version of the Chef gem to install when bootstrapping nodes.
-    * <p>
-    * If this property is not set, by default the latest available Chef gem will
-    * be installed. The values can be fixed versions such as '0.10.8' or
-    * constrained values such as '>= 0.10.8'.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_VERSION = "chef.version";
-
-   /**
-    * Boolean property. Default (false).
-    * <p>
-    * When bootstrapping a node, forces a gem system update before installing
-    * the Chef gems.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_UPDATE_GEM_SYSTEM = "chef.update-gem-system";
-
-   /**
-    * To be used in conjunction with {@link #CHEF_UPDATE_GEM_SYSTEM}. This
-    * property will force the version of RubyGems to update the system to.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_GEM_SYSTEM_VERSION = "chef.gem-system-version";
-
-   /**
-    * Boolean property. Default (false).
-    * <p>
-    * When bootstrapping a node, updates the existing gems before installing
-    * Chef.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_UPDATE_GEMS = "chef.update-gems";
-
-   /**
-    * Boolean property. Default (true).
-    * <p>
-    * When bootstrapping a node, install the Chef client using the Omnibus
-    * installer.
-    * <p>
-    * This property must be set prior to running the
-    * {@link ChefService#createBootstrapScriptForGroup(String)} method.
-    */
-   public static final String CHEF_USE_OMNIBUS = "chef.use-omnibus";
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/CookbookParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/CookbookParser.java b/core/src/main/java/org/jclouds/chef/config/CookbookParser.java
deleted file mode 100644
index 34eedde..0000000
--- a/core/src/main/java/org/jclouds/chef/config/CookbookParser.java
+++ /dev/null
@@ -1,41 +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.config;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- * Used to configure the cookbook Json parser.
- * <p>
- * Chef Server version 0.9 and 0.10 return a different Json when rquesting the
- * cookbook definitions. This annotation can be used to setup the cookbook
- * parser.
- */
-@Target({ METHOD, PARAMETER, FIELD })
-@Retention(RUNTIME)
-@Qualifier
-public @interface CookbookParser {
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java b/core/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java
deleted file mode 100644
index c946917..0000000
--- a/core/src/main/java/org/jclouds/chef/config/CookbookVersionsParser.java
+++ /dev/null
@@ -1,41 +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.config;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- * Used to configure the cookbook versions Json parser.
- * <p>
- * Chef Server version 0.9 and 0.10 return a different Json when rquesting the
- * cookbook versions. This annotation can be used to setup the cookbook versions
- * parser.
- */
-@Target({ METHOD, PARAMETER, FIELD })
-@Retention(RUNTIME)
-@Qualifier
-public @interface CookbookVersionsParser {
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/InstallChef.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/InstallChef.java b/core/src/main/java/org/jclouds/chef/config/InstallChef.java
deleted file mode 100644
index d40ae91..0000000
--- a/core/src/main/java/org/jclouds/chef/config/InstallChef.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.config;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- * Used to configure the Chef install script.
- */
-@Target({ METHOD, PARAMETER, FIELD })
-@Retention(RUNTIME)
-@Qualifier
-public @interface InstallChef {
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/config/Validator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/config/Validator.java b/core/src/main/java/org/jclouds/chef/config/Validator.java
deleted file mode 100644
index 99825d8..0000000
--- a/core/src/main/java/org/jclouds/chef/config/Validator.java
+++ /dev/null
@@ -1,40 +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.config;
-
-import static java.lang.annotation.ElementType.METHOD;
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.ElementType.FIELD;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-import javax.inject.Qualifier;
-
-/**
- * Used to configure the validator client information.
- * <p>
- * In a Chef server it must be only one validator client. This client is used by
- * new nodes to autoregister themselves in the Chef server.
- */
-@Target({ METHOD, PARAMETER, FIELD })
-@Retention(RUNTIME)
-@Qualifier
-public @interface Validator {
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/domain/Attribute.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/domain/Attribute.java b/core/src/main/java/org/jclouds/chef/domain/Attribute.java
deleted file mode 100644
index 34be6b7..0000000
--- a/core/src/main/java/org/jclouds/chef/domain/Attribute.java
+++ /dev/null
@@ -1,235 +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.domain;
-
-import static org.jclouds.chef.util.CollectionUtils.copyOfOrEmpty;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-import java.util.List;
-import java.util.Set;
-
-import org.jclouds.domain.JsonBall;
-import org.jclouds.javax.annotation.Nullable;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.gson.annotations.SerializedName;
-
-/**
- * An attribute in a cookbook metadata.
- */
-public class Attribute {
-   public static Builder builder() {
-      return new Builder();
-   }
-
-   public static class Builder {
-      private String required;
-      private boolean calculated;
-      private ImmutableSet.Builder<String> choice = ImmutableSet.builder();
-      private JsonBall defaultValue;
-      private String type;
-      private ImmutableList.Builder<String> recipes = ImmutableList.builder();
-      private String displayName;
-      private String description;
-
-      public Builder required(String required) {
-         this.required = checkNotNull(required, "required");
-         return this;
-      }
-
-      public Builder calculated(boolean calculated) {
-         this.calculated = calculated;
-         return this;
-      }
-
-      public Builder choice(String choice) {
-         this.choice.add(checkNotNull(choice, "choice"));
-         return this;
-      }
-
-      public Builder choices(Iterable<String> choices) {
-         this.choice.addAll(checkNotNull(choices, "choices"));
-         return this;
-      }
-
-      public Builder defaultValue(JsonBall defaultValue) {
-         this.defaultValue = checkNotNull(defaultValue, "defaultValue");
-         return this;
-      }
-
-      public Builder type(String type) {
-         this.type = checkNotNull(type, "type");
-         return this;
-      }
-
-      public Builder recipe(String recipe) {
-         this.recipes.add(checkNotNull(recipe, "recipe"));
-         return this;
-      }
-
-      public Builder recipes(Iterable<String> recipes) {
-         this.recipes.addAll(checkNotNull(recipes, "recipes"));
-         return this;
-      }
-
-      public Builder displayName(String displayName) {
-         this.displayName = checkNotNull(displayName, "displayName");
-         return this;
-      }
-
-      public Builder description(String description) {
-         this.description = checkNotNull(description, "description");
-         return this;
-      }
-
-      public Attribute build() {
-         return new Attribute(required, calculated, choice.build(), defaultValue, type, recipes.build(), displayName,
-               description);
-      }
-   }
-
-   private final String required;
-   private final boolean calculated;
-   private final Set<String> choice;
-   @SerializedName("default")
-   private final JsonBall defaultValue;
-   private final String type;
-   private final List<String> recipes;
-   @SerializedName("display_name")
-   private final String displayName;
-   private final String description;
-
-   @ConstructorProperties({ "required", "calculated", "choice", "default", "type", "recipes", "display_name",
-         "description" })
-   protected Attribute(String required, boolean calculated, @Nullable Set<String> choice, JsonBall defaultValue,
-         String type, @Nullable List<String> recipes, String displayName, String description) {
-      this.required = required;
-      this.calculated = calculated;
-      this.choice = copyOfOrEmpty(choice);
-      this.defaultValue = defaultValue;
-      this.type = type;
-      this.recipes = copyOfOrEmpty(recipes);
-      this.displayName = displayName;
-      this.description = description;
-   }
-
-   public String getRequired() {
-      return required;
-   }
-
-   public boolean isCalculated() {
-      return calculated;
-   }
-
-   public Set<String> getChoice() {
-      return choice;
-   }
-
-   public JsonBall getDefaultValue() {
-      return defaultValue;
-   }
-
-   public String getType() {
-      return type;
-   }
-
-   public List<String> getRecipes() {
-      return recipes;
-   }
-
-   public String getDisplayName() {
-      return displayName;
-   }
-
-   public String getDescription() {
-      return description;
-   }
-
-   @Override
-   public int hashCode() {
-      final int prime = 31;
-      int result = 1;
-      result = prime * result + (calculated ? 1231 : 1237);
-      result = prime * result + ((choice == null) ? 0 : choice.hashCode());
-      result = prime * result + ((defaultValue == null) ? 0 : defaultValue.hashCode());
-      result = prime * result + ((description == null) ? 0 : description.hashCode());
-      result = prime * result + ((displayName == null) ? 0 : displayName.hashCode());
-      result = prime * result + ((recipes == null) ? 0 : recipes.hashCode());
-      result = prime * result + ((required == null) ? 0 : required.hashCode());
-      result = prime * result + ((type == null) ? 0 : type.hashCode());
-      return result;
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj)
-         return true;
-      if (obj == null)
-         return false;
-      if (getClass() != obj.getClass())
-         return false;
-      Attribute other = (Attribute) obj;
-      if (calculated != other.calculated)
-         return false;
-      if (choice == null) {
-         if (other.choice != null)
-            return false;
-      } else if (!choice.equals(other.choice))
-         return false;
-      if (defaultValue == null) {
-         if (other.defaultValue != null)
-            return false;
-      } else if (!defaultValue.equals(other.defaultValue))
-         return false;
-      if (description == null) {
-         if (other.description != null)
-            return false;
-      } else if (!description.equals(other.description))
-         return false;
-      if (displayName == null) {
-         if (other.displayName != null)
-            return false;
-      } else if (!displayName.equals(other.displayName))
-         return false;
-      if (recipes == null) {
-         if (other.recipes != null)
-            return false;
-      } else if (!recipes.equals(other.recipes))
-         return false;
-      if (required == null) {
-         if (other.required != null)
-            return false;
-      } else if (!required.equals(other.required))
-         return false;
-      if (type == null) {
-         if (other.type != null)
-            return false;
-      } else if (!type.equals(other.type))
-         return false;
-      return true;
-   }
-
-   @Override
-   public String toString() {
-      return "Attribute [calculated=" + calculated + ", choice=" + choice + ", defaultValue=" + defaultValue
-            + ", description=" + description + ", displayName=" + displayName + ", recipes=" + recipes + ", required="
-            + required + ", type=" + type + "]";
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java b/core/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java
deleted file mode 100644
index c10c150..0000000
--- a/core/src/main/java/org/jclouds/chef/domain/BootstrapConfig.java
+++ /dev/null
@@ -1,95 +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.domain;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.List;
-
-import org.jclouds.domain.JsonBall;
-
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-
-/**
- * Configures how the nodes in a group will bootstrap.
- * 
- * @since 1.7
- */
-public class BootstrapConfig {
-   public static Builder builder() {
-      return new Builder();
-   }
-
-   public static class Builder {
-      private ImmutableList.Builder<String> runList = ImmutableList.builder();
-      private String environment;
-      private JsonBall attribtues;
-
-      /**
-       * Sets the run list that will be executed in the nodes of the group.
-       */
-      public Builder runList(Iterable<String> runList) {
-         this.runList.addAll(checkNotNull(runList, "runList"));
-         return this;
-      }
-
-      /**
-       * Sets the environment where the nodes in the group will be deployed.
-       */
-      public Builder environment(String environment) {
-         this.environment = checkNotNull(environment, "environment");
-         return this;
-      }
-
-      /**
-       * Sets the attributes that will be populated to the deployed nodes.
-       */
-      public Builder attributes(JsonBall attributes) {
-         this.attribtues = checkNotNull(attributes, "attributes");
-         return this;
-      }
-
-      public BootstrapConfig build() {
-         return new BootstrapConfig(runList.build(), Optional.fromNullable(environment),
-               Optional.fromNullable(attribtues));
-      }
-   }
-
-   private final List<String> runList;
-   private final Optional<String> environment;
-   private final Optional<JsonBall> attribtues;
-
-   protected BootstrapConfig(List<String> runList, Optional<String> environment, Optional<JsonBall> attribtues) {
-      this.runList = checkNotNull(runList, "runList");
-      this.environment = checkNotNull(environment, "environment");
-      this.attribtues = checkNotNull(attribtues, "attributes");
-   }
-
-   public List<String> getRunList() {
-      return runList;
-   }
-
-   public Optional<String> getEnvironment() {
-      return environment;
-   }
-
-   public Optional<JsonBall> getAttribtues() {
-      return attribtues;
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java b/core/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java
deleted file mode 100644
index e5a48ca..0000000
--- a/core/src/main/java/org/jclouds/chef/domain/ChecksumStatus.java
+++ /dev/null
@@ -1,102 +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.domain;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import java.beans.ConstructorProperties;
-import java.net.URI;
-
-import com.google.gson.annotations.SerializedName;
-
-/**
- * The checksum of an uploaded resource.
- */
-public class ChecksumStatus {
-   public static Builder builder() {
-      return new Builder();
-   }
-
-   public static class Builder {
-      private URI url;
-      private boolean needsUpload;
-
-      public Builder url(URI url) {
-         this.url = checkNotNull(url, "url");
-         return this;
-      }
-
-      public Builder needsUpload(boolean needsUpload) {
-         this.needsUpload = needsUpload;
-         return this;
-      }
-
-      public ChecksumStatus build() {
-         return new ChecksumStatus(url, needsUpload);
-      }
-   }
-
-   private final URI url;
-   @SerializedName("needs_upload")
-   private final boolean needsUpload;
-
-   @ConstructorProperties({ "url", "needs_upload" })
-   protected ChecksumStatus(URI url, boolean needsUpload) {
-      this.url = url;
-      this.needsUpload = needsUpload;
-   }
-
-   public URI getUrl() {
-      return url;
-   }
-
-   public boolean needsUpload() {
-      return needsUpload;
-   }
-
-   @Override
-   public int hashCode() {
-      final int prime = 31;
-      int result = 1;
-      result = prime * result + (needsUpload ? 1231 : 1237);
-      result = prime * result + ((url == null) ? 0 : url.hashCode());
-      return result;
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj)
-         return true;
-      if (obj == null)
-         return false;
-      if (getClass() != obj.getClass())
-         return false;
-      ChecksumStatus other = (ChecksumStatus) obj;
-      if (needsUpload != other.needsUpload)
-         return false;
-      if (url == null) {
-         if (other.url != null)
-            return false;
-      } else if (!url.equals(other.url))
-         return false;
-      return true;
-   }
-
-   @Override
-   public String toString() {
-      return "ChecksumStatus [needsUpload=" + needsUpload + ", url=" + url + "]";
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-chef/blob/cffeede4/core/src/main/java/org/jclouds/chef/domain/Client.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/domain/Client.java b/core/src/main/java/org/jclouds/chef/domain/Client.java
deleted file mode 100644
index 7335609..0000000
--- a/core/src/main/java/org/jclouds/chef/domain/Client.java
+++ /dev/null
@@ -1,182 +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.domain;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.beans.ConstructorProperties;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-
-import org.jclouds.javax.annotation.Nullable;
-
-import com.google.gson.annotations.SerializedName;
-
-/**
- * Client object.
- */
-public class Client {
-   public static Builder builder() {
-      return new Builder();
-   }
-
-   public static class Builder {
-      private X509Certificate certificate;
-      private PrivateKey privateKey;
-      private String orgname;
-      private String clientname;
-      private String name;
-      private boolean validator;
-
-      public Builder certificate(X509Certificate certificate) {
-         this.certificate = checkNotNull(certificate, "certificate");
-         return this;
-      }
-
-      public Builder privateKey(PrivateKey privateKey) {
-         this.privateKey = checkNotNull(privateKey, "privateKey");
-         return this;
-      }
-
-      public Builder orgname(String orgname) {
-         this.orgname = checkNotNull(orgname, "orgname");
-         return this;
-      }
-
-      public Builder clientname(String clientname) {
-         this.clientname = checkNotNull(clientname, "clientname");
-         return this;
-      }
-
-      public Builder name(String name) {
-         this.name = checkNotNull(name, "name");
-         return this;
-      }
-
-      public Builder isValidator(boolean validator) {
-         this.validator = validator;
-         return this;
-      }
-
-      public Client build() {
-         return new Client(certificate, orgname, clientname, name, validator, privateKey);
-      }
-   }
-
-   private final X509Certificate certificate;
-   @SerializedName("private_key")
-   private final PrivateKey privateKey;
-   private final String orgname;
-   private final String clientname;
-   private final String name;
-   private final boolean validator;
-
-   @ConstructorProperties({ "certificate", "orgname", "clientname", "name", "validator", "private_key" })
-   protected Client(X509Certificate certificate, String orgname, String clientname, String name, boolean validator,
-         @Nullable PrivateKey privateKey) {
-      this.certificate = certificate;
-      this.orgname = orgname;
-      this.clientname = clientname;
-      this.name = name;
-      this.validator = validator;
-      this.privateKey = privateKey;
-   }
-
-   public PrivateKey getPrivateKey() {
-      return privateKey;
-   }
-
-   public X509Certificate getCertificate() {
-      return certificate;
-   }
-
-   public String getOrgname() {
-      return orgname;
-   }
-
-   public String getClientname() {
-      return clientname;
-   }
-
-   public String getName() {
-      return name;
-   }
-
-   public boolean isValidator() {
-      return validator;
-   }
-
-   @Override
-   public int hashCode() {
-      final int prime = 31;
-      int result = 1;
-      result = prime * result + ((certificate == null) ? 0 : certificate.hashCode());
-      result = prime * result + ((clientname == null) ? 0 : clientname.hashCode());
-      result = prime * result + ((name == null) ? 0 : name.hashCode());
-      result = prime * result + ((orgname == null) ? 0 : orgname.hashCode());
-      result = prime * result + ((privateKey == null) ? 0 : privateKey.hashCode());
-      result = prime * result + (validator ? 1231 : 1237);
-      return result;
-   }
-
-   @Override
-   public boolean equals(Object obj) {
-      if (this == obj)
-         return true;
-      if (obj == null)
-         return false;
-      if (getClass() != obj.getClass())
-         return false;
-      Client other = (Client) obj;
-      if (certificate == null) {
-         if (other.certificate != null)
-            return false;
-      } else if (!certificate.equals(other.certificate))
-         return false;
-      if (clientname == null) {
-         if (other.clientname != null)
-            return false;
-      } else if (!clientname.equals(other.clientname))
-         return false;
-      if (name == null) {
-         if (other.name != null)
-            return false;
-      } else if (!name.equals(other.name))
-         return false;
-      if (orgname == null) {
-         if (other.orgname != null)
-            return false;
-      } else if (!orgname.equals(other.orgname))
-         return false;
-      if (privateKey == null) {
-         if (other.privateKey != null)
-            return false;
-      } else if (!privateKey.equals(other.privateKey))
-         return false;
-      if (validator != other.validator)
-         return false;
-      return true;
-   }
-
-   @Override
-   public String toString() {
-      return "Client [name=" + name + ", clientname=" + clientname + ", orgname=" + orgname + ", isValidator="
-            + validator + ", certificate=" + certificate + ", privateKey=" + (privateKey == null ? "not " : "")
-            + "present]";
-   }
-
-}