blob: 9b7a7c894f39ab91dd02b670e01d44b1f36ecf48 [file] [log] [blame]
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.test;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Throwables.propagate;
import static com.google.common.collect.Iterables.transform;
import static com.google.common.collect.Sets.newLinkedHashSet;
import static com.google.common.util.concurrent.Futures.immediateFuture;
import static com.google.common.util.concurrent.Futures.transform;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.util.List;
import java.util.Set;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
import org.jclouds.Constants;
import org.jclouds.blobstore.LocalAsyncBlobStore;
import org.jclouds.blobstore.domain.Blob;
import org.jclouds.blobstore.domain.PageSet;
import org.jclouds.blobstore.domain.StorageMetadata;
import org.jclouds.chef.ChefAsyncApi;
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.options.CreateClientOptions;
import org.jclouds.chef.options.SearchOptions;
import org.jclouds.io.Payload;
import org.jclouds.lifecycle.Closer;
import org.jclouds.util.Strings2;
import com.google.common.base.Function;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
/**
* In-memory chef simulator.
*
* @author Adrian Cole
* @deprecated {@link TransientChefAsyncApi} interface will be removed in jclouds 1.7.
*/
@Deprecated
public class TransientChefAsyncApi implements ChefAsyncApi {
@Singleton
private static class StorageMetadataToName implements Function<PageSet<? extends StorageMetadata>, Set<String>> {
@Override
public Set<String> apply(PageSet<? extends StorageMetadata> from) {
return newLinkedHashSet(transform(from, new Function<StorageMetadata, String>() {
@Override
public String apply(StorageMetadata from) {
return from.getName();
}
}));
}
}
@Singleton
private static class BlobToDatabagItem implements Function<Blob, DatabagItem> {
@Override
public DatabagItem apply(Blob from) {
try {
return from == null ? null : new DatabagItem(from.getMetadata().getName(), Strings2.toStringAndClose(from
.getPayload().getInput()));
} catch (IOException e) {
propagate(e);
return null;
}
}
}
private final LocalAsyncBlobStore databags;
private final ListeningExecutorService userExecutor;
private final BlobToDatabagItem blobToDatabagItem;
private final StorageMetadataToName storageMetadataToName;
private final Closer closer;
@Inject
TransientChefAsyncApi(@Named("databags") LocalAsyncBlobStore databags, StorageMetadataToName storageMetadataToName,
BlobToDatabagItem blobToDatabagItem,
@Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor, Closer closer) {
this.databags = checkNotNull(databags, "databags");
this.storageMetadataToName = checkNotNull(storageMetadataToName, "storageMetadataToName");
this.blobToDatabagItem = checkNotNull(blobToDatabagItem, "blobToDatabagItem");
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
this.closer = checkNotNull(closer, "closer");
}
@Override
public ListenableFuture<Boolean> clientExists(String clientname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Sandbox> commitSandbox(String id, boolean isCompleted) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Client> createClient(String clientname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Client> createClient(String clientname, CreateClientOptions options) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Void> createDatabag(String databagName) {
return transform(databags.createContainerInLocation(null, databagName), new Function<Boolean, Void>() {
public Void apply(Boolean input) {
return null;
}
});
}
@Override
public ListenableFuture<DatabagItem> createDatabagItem(String databagName, DatabagItem databagItem) {
Blob blob = databags.blobBuilder(databagItem.getId()).payload(databagItem.toString()).build();
databags.putBlob(databagName, blob);
return immediateFuture(databagItem);
}
@Override
public ListenableFuture<Void> createNode(Node node) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Void> createRole(Role role) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Boolean> databagExists(String databagName) {
return databags.containerExists(databagName);
}
@Override
public ListenableFuture<Boolean> databagItemExists(String databagName, String databagItemId) {
return databags.blobExists(databagName, databagItemId);
}
@Override
public ListenableFuture<Client> deleteClient(String clientname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<CookbookVersion> deleteCookbook(String cookbookName, String version) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Void> deleteDatabag(String databagName) {
return databags.deleteContainer(databagName);
}
@Override
public ListenableFuture<DatabagItem> deleteDatabagItem(String databagName, String databagItemId) {
return immediateFuture(blobToDatabagItem.apply(databags.getContext().createBlobMap(databagName)
.remove(databagItemId)));
}
@Override
public ListenableFuture<Node> deleteNode(String nodename) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Role> deleteRole(String rolename) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Client> generateKeyForClient(String clientname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Client> getClient(String clientname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<CookbookVersion> getCookbook(String cookbookName, String version) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<DatabagItem> getDatabagItem(String databagName, String databagItemId) {
return transform(databags.getBlob(databagName, databagItemId), blobToDatabagItem, userExecutor);
}
@Override
public ListenableFuture<Node> getNode(String nodename) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Role> getRole(String rolename) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<UploadSandbox> getUploadSandboxForChecksums(Set<List<Byte>> md5s) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> getVersionsOfCookbook(String cookbookName) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> listClients() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> listCookbooks() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> listDatabagItems(String databagName) {
return transform(databags.list(databagName), storageMetadataToName, userExecutor);
}
@Override
public ListenableFuture<Set<String>> listDatabags() {
return transform(databags.list(), storageMetadataToName, userExecutor);
}
@Override
public ListenableFuture<Set<String>> listNodes() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> listRoles() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> listSearchIndexes() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Boolean> nodeExists(String nodename) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Boolean> roleExists(String rolename) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Client>> searchClients() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Client>> searchClients(SearchOptions options) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends DatabagItem>> searchDatabag(String databagName) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends DatabagItem>> searchDatabag(String databagName,
SearchOptions options) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Node>> searchNodes() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Node>> searchNodes(SearchOptions options) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Role>> searchRoles() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Role>> searchRoles(SearchOptions options) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<CookbookVersion> updateCookbook(String cookbookName, String version, CookbookVersion cookbook) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<DatabagItem> updateDatabagItem(String databagName, DatabagItem item) {
return createDatabagItem(databagName, item);
}
@Override
public ListenableFuture<Node> updateNode(Node node) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Role> updateRole(Role role) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Void> uploadContent(URI location, Payload content) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<InputStream> getResourceContents(Resource resource) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<String>> listEnvironments() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Void> createEnvironment(Environment environment) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Environment> deleteEnvironment(String environmentname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Environment> getEnvironment(String environmentname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Environment> updateEnvironment(Environment environment) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<CookbookDefinition>> listEnvironmentCookbooks(String environmentname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<Set<CookbookDefinition>> listEnvironmentCookbooks(String environmentname, String numversions) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<CookbookDefinition> getEnvironmentCookbook(String environmentname, String cookbookname) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<CookbookDefinition> getEnvironmentCookbook(String environmentname, String cookbookname, String numversions) {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Environment>> searchEnvironments() {
throw new UnsupportedOperationException();
}
@Override
public ListenableFuture<? extends SearchResult<? extends Environment>> searchEnvironments(SearchOptions options) {
throw new UnsupportedOperationException();
}
@Override
public void close() throws IOException {
closer.close();
}
}