You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by de...@apache.org on 2016/02/22 13:20:23 UTC
[10/11] jclouds-labs git commit: Remove ProfitBricks
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
deleted file mode 100644
index 1414c69..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/snapshot/UpdateSnapshotRequestBinder.java
+++ /dev/null
@@ -1,53 +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.profitbricks.binder.snapshot;
-
-import static java.lang.String.format;
-import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder;
-import org.jclouds.profitbricks.domain.Snapshot;
-
-public class UpdateSnapshotRequestBinder extends BaseProfitBricksRequestBinder<Snapshot.Request.UpdatePayload> {
-
- protected final StringBuilder requestBuilder;
-
- protected UpdateSnapshotRequestBinder() {
- super("snapshot");
- this.requestBuilder = new StringBuilder(128);
- }
-
- @Override
- protected String createPayload(Snapshot.Request.UpdatePayload payload) {
- requestBuilder.append("<ws:updateSnapshot>")
- .append("<request>")
- .append(format("<snapshotId>%s</snapshotId>", payload.id()))
- .append(format("<description>%s</description>", payload.description()))
- .append(format("<snapshotName>%s</snapshotName>", payload.name()))
- .append(formatIfNotEmpty("<bootable>%s</bootable>", payload.bootable()))
- .append(formatIfNotEmpty("<osType>%s</osType>", payload.osType()))
- .append(formatIfNotEmpty("<cpuHotPlug>%s</cpuHotPlug>", payload.isCpuHotPlug()))
- .append(formatIfNotEmpty("<cpuHotUnPlug>%s</cpuHotUnPlug>", payload.isCpuHotUnPlug()))
- .append(formatIfNotEmpty("<ramHotPlug>%s</ramHotPlug>", payload.isRamHotPlug()))
- .append(formatIfNotEmpty("<ramHotUnPlug>%s</ramHotUnPlug>", payload.isRamHotUnPlug()))
- .append(formatIfNotEmpty("<nicHotPlug>%s</nicHotPlug>", payload.isNicHotPlug()))
- .append(formatIfNotEmpty("<nicHotUnPlug>%s</nicHotUnPlug>", payload.isNicHotUnPlug()))
- .append(formatIfNotEmpty("<discVirtioHotPlug>%s</discVirtioHotPlug>", payload.isDiscVirtioHotPlug()))
- .append(formatIfNotEmpty("<discVirtioHotUnPlug>%s</discVirtioHotUnPlug>", payload.isDiscVirtioHotUnPlug()))
- .append("</request>")
- .append("</ws:updateSnapshot>");
- return requestBuilder.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java
deleted file mode 100644
index 2c2e08d..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/ConnectStorageToServerRequestBinder.java
+++ /dev/null
@@ -1,45 +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.profitbricks.binder.storage;
-
-import static java.lang.String.format;
-
-import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder;
-import org.jclouds.profitbricks.domain.Storage;
-
-public class ConnectStorageToServerRequestBinder extends BaseProfitBricksRequestBinder<Storage.Request.ConnectPayload> {
-
- protected final StringBuilder requestBuilder;
-
- ConnectStorageToServerRequestBinder() {
- super("storage");
- this.requestBuilder = new StringBuilder(128 * 2);
- }
-
- @Override
- protected String createPayload(Storage.Request.ConnectPayload payload) {
- requestBuilder.append("<ws:connectStorageToServer>")
- .append("<request>")
- .append(format("<storageId>%s</storageId>", payload.storageId()))
- .append(format("<serverId>%s</serverId>", payload.serverId()))
- .append(formatIfNotEmpty("<busType>%s</busType>", payload.busType()))
- .append(formatIfNotEmpty("<deviceNumber>%s</deviceNumber>", payload.deviceNumber()))
- .append("</request>")
- .append("</ws:connectStorageToServer>");
- return requestBuilder.toString();
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java
deleted file mode 100644
index 9681b64..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/CreateStorageRequestBinder.java
+++ /dev/null
@@ -1,46 +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.profitbricks.binder.storage;
-
-import static java.lang.String.format;
-import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder;
-import org.jclouds.profitbricks.domain.Storage;
-
-public class CreateStorageRequestBinder extends BaseProfitBricksRequestBinder<Storage.Request.CreatePayload> {
-
- protected final StringBuilder requestBuilder;
-
- CreateStorageRequestBinder() {
- super("storage");
- this.requestBuilder = new StringBuilder(128 * 2);
- }
-
- @Override
- protected String createPayload(Storage.Request.CreatePayload payload) {
- requestBuilder.append("<ws:createStorage>")
- .append("<request>")
- .append(format("<dataCenterId>%s</dataCenterId>", payload.dataCenterId()))
- .append(formatIfNotEmpty("<storageName>%s</storageName>", payload.name()))
- .append(format("<size>%.0f</size>", payload.size()))
- .append(formatIfNotEmpty("<mountImageId>%s</mountImageId>", payload.mountImageId()))
- .append(formatIfNotEmpty("<profitBricksImagePassword>%s</profitBricksImagePassword>", payload.imagePassword()))
- .append("</request>")
- .append("</ws:createStorage>");
- return requestBuilder.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java b/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java
deleted file mode 100644
index 9a80b83..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/binder/storage/UpdateStorageRequestBinder.java
+++ /dev/null
@@ -1,47 +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.profitbricks.binder.storage;
-
-import static java.lang.String.format;
-import org.jclouds.profitbricks.binder.BaseProfitBricksRequestBinder;
-import org.jclouds.profitbricks.domain.Storage;
-
-public class UpdateStorageRequestBinder extends BaseProfitBricksRequestBinder<Storage.Request.UpdatePayload> {
-
- protected final StringBuilder requestBuilder;
-
- UpdateStorageRequestBinder() {
- super("storage");
- this.requestBuilder = new StringBuilder(128 * 2);
- }
-
- @Override
- protected String createPayload(Storage.Request.UpdatePayload payload) {
- requestBuilder
- .append("<ws:updateStorage>")
- .append("<request>")
- .append(format("<storageId>%s</storageId>", payload.id()))
- .append(formatIfNotEmpty("<size>%.0f</size>", payload.size()))
- .append(formatIfNotEmpty("<storageName>%s</storageName>", payload.name()))
- .append(formatIfNotEmpty("<mountImageId>%s</mountImageId>", payload.mountImageId()))
- .append("</request>")
- .append("</ws:updateStorage>");
-
- return requestBuilder.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java
deleted file mode 100644
index fe02c41..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/ProfitBricksComputeServiceAdapter.java
+++ /dev/null
@@ -1,483 +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.profitbricks.compute;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static com.google.common.collect.Iterables.transform;
-import static com.google.common.util.concurrent.Futures.allAsList;
-import static com.google.common.util.concurrent.Futures.getUnchecked;
-import static java.lang.String.format;
-import static org.jclouds.Constants.PROPERTY_USER_THREADS;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
-
-import java.util.List;
-import java.util.concurrent.Callable;
-
-import javax.annotation.Resource;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.compute.ComputeServiceAdapter;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.HardwareBuilder;
-import org.jclouds.compute.domain.Processor;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.compute.domain.Volume;
-import org.jclouds.compute.domain.internal.VolumeImpl;
-import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.compute.util.ComputeServiceUtils;
-import org.jclouds.domain.Location;
-import org.jclouds.domain.LocationScope;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.logging.Logger;
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.compute.concurrent.ProvisioningJob;
-import org.jclouds.profitbricks.compute.concurrent.ProvisioningManager;
-import org.jclouds.profitbricks.compute.function.ProvisionableToImage;
-import org.jclouds.profitbricks.compute.strategy.TemplateWithDataCenter;
-import org.jclouds.profitbricks.domain.AvailabilityZone;
-import org.jclouds.profitbricks.domain.DataCenter;
-import org.jclouds.profitbricks.domain.Image;
-import org.jclouds.profitbricks.domain.Provisionable;
-import org.jclouds.profitbricks.domain.Server;
-import org.jclouds.profitbricks.domain.Snapshot;
-import org.jclouds.profitbricks.domain.Storage;
-import org.jclouds.profitbricks.features.ServerApi;
-import org.jclouds.profitbricks.util.Passwords;
-import org.jclouds.rest.ResourceNotFoundException;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.inject.Inject;
-
-@Singleton
-public class ProfitBricksComputeServiceAdapter implements ComputeServiceAdapter<Server, Hardware, Provisionable, Location> {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
-
- private final ProfitBricksApi api;
- private final Predicate<String> waitDcUntilAvailable;
- private final ListeningExecutorService executorService;
- private final ProvisioningJob.Factory jobFactory;
- private final ProvisioningManager provisioningManager;
-
- private static final Integer DEFAULT_LAN_ID = 1;
-
- @Inject
- ProfitBricksComputeServiceAdapter(ProfitBricksApi api,
- @Named(POLL_PREDICATE_DATACENTER) Predicate<String> waitDcUntilAvailable,
- @Named(PROPERTY_USER_THREADS) ListeningExecutorService executorService,
- ProvisioningJob.Factory jobFactory,
- ProvisioningManager provisioningManager) {
- this.api = api;
- this.waitDcUntilAvailable = waitDcUntilAvailable;
- this.executorService = executorService;
- this.jobFactory = jobFactory;
- this.provisioningManager = provisioningManager;
- }
-
- @Override
- public NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, Template template) {
- checkArgument(template instanceof TemplateWithDataCenter, "This implementation requires a TemplateWithDataCenter");
- return createNodeWithGroupEncodedIntoName(group, name, TemplateWithDataCenter.class.cast(template));
- }
-
- protected NodeAndInitialCredentials<Server> createNodeWithGroupEncodedIntoName(String group, String name, TemplateWithDataCenter template) {
- checkArgument(template.getLocation().getScope() == LocationScope.ZONE, "Template must use a ZONE-scoped location");
- final String dataCenterId = template.getDataCenter().id();
-
- Hardware hardware = template.getHardware();
-
- TemplateOptions options = template.getOptions();
- final String loginUser = isNullOrEmpty(options.getLoginUser()) ? "root" : options.getLoginUser();
- final String password = options.hasLoginPassword() ? options.getLoginPassword() : Passwords.generate();
-
- final org.jclouds.compute.domain.Image image = template.getImage();
-
- // provision all storages based on hardware
- List<? extends Volume> volumes = hardware.getVolumes();
- List<String> storageIds = Lists.newArrayListWithExpectedSize(volumes.size());
-
- int i = 1;
- for (final Volume volume : volumes)
- try {
- logger.trace("<< provisioning storage '%s'", volume);
- final Storage.Request.CreatePayload.Builder storageBuilder = Storage.Request.creatingBuilder();
- if (i == 1) {
- storageBuilder.mountImageId(image.getId());
- // we don't need to pass password to the API if we're using a snapshot
- Provisionable.Type provisionableType = Provisionable.Type.fromValue(
- image.getUserMetadata().get(ProvisionableToImage.KEY_PROVISIONABLE_TYPE));
- if (provisionableType == Provisionable.Type.IMAGE)
- storageBuilder.imagePassword(password);
- }
- storageBuilder.dataCenterId(dataCenterId)
- .name(format("%s-disk-%d", name, i++))
- .size(volume.getSize());
-
- String storageId = (String) provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
-
- @Override
- public Object get() {
- return api.storageApi().createStorage(storageBuilder.build());
- }
- }));
-
- storageIds.add(storageId);
- logger.trace(">> provisioning complete for storage. returned id='%s'", storageId);
- } catch (Exception ex) {
- if (i - 1 == 1) // if first storage (one with image) provisioning fails; stop method
- throw Throwables.propagate(ex);
- logger.warn(ex, ">> failed to provision storage. skipping..");
- }
-
- int lanId = DEFAULT_LAN_ID;
- if (options.getNetworks() != null)
- try {
- String networkId = Iterables.get(options.getNetworks(), 0);
- lanId = Integer.valueOf(networkId);
- } catch (Exception ex) {
- logger.warn("no valid network id found from options. using default id='%d'", DEFAULT_LAN_ID);
- }
-
- Double cores = ComputeServiceUtils.getCores(hardware);
-
- // provision server and connect boot storage (first provisioned)
- String serverId = null;
- try {
- String storageBootDeviceId = Iterables.get(storageIds, 0); // must have atleast 1
- final Server.Request.CreatePayload serverRequest = Server.Request.creatingBuilder()
- .dataCenterId(dataCenterId)
- .name(name)
- .bootFromStorageId(storageBootDeviceId)
- .cores(cores.intValue())
- .ram(hardware.getRam())
- .availabilityZone(AvailabilityZone.AUTO)
- .hasInternetAccess(true)
- .lanId(lanId)
- .build();
- logger.trace("<< provisioning server '%s'", serverRequest);
-
- serverId = (String) provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
-
- @Override
- public Object get() {
- return api.serverApi().createServer(serverRequest);
- }
- }));
- logger.trace(">> provisioning complete for server. returned id='%s'", serverId);
-
- } catch (Exception ex) {
- logger.error(ex, ">> failed to provision server. rollbacking..");
- destroyStorages(storageIds, dataCenterId);
- throw Throwables.propagate(ex);
- }
-
- // connect the rest of storages to server; delete if fails
- final int storageCount = storageIds.size();
- for (int j = 1; j < storageCount; j++) { // skip first; already connected
- String storageId = storageIds.get(j);
- try {
- logger.trace("<< connecting storage '%s' to server '%s'", storageId, serverId);
- final Storage.Request.ConnectPayload request = Storage.Request.connectingBuilder()
- .storageId(storageId)
- .serverId(serverId)
- .build();
-
- provisioningManager.provision(jobFactory.create(group, new Supplier<Object>() {
-
- @Override
- public Object get() {
- return api.storageApi().connectStorageToServer(request);
- }
- }));
-
- logger.trace(">> storage connected.");
- } catch (Exception ex) {
- // delete unconnected storage
- logger.warn(ex, ">> failed to connect storage '%s'. deleting..", storageId);
- destroyStorage(storageId, dataCenterId);
- }
- }
-
- // Last paranoid check
- waitDcUntilAvailable.apply(dataCenterId);
-
- LoginCredentials serverCredentials = LoginCredentials.builder()
- .user(loginUser)
- .password(password)
- .build();
-
- Server server = getNode(serverId);
-
- return new NodeAndInitialCredentials<Server>(server, serverId, serverCredentials);
- }
-
- @Override
- public Iterable<Hardware> listHardwareProfiles() {
- // Max [cores=48] [disk size per storage=2048GB] [ram=200704 MB]
- List<Hardware> hardwares = Lists.newArrayList();
- for (int core = 1; core <= 48; core++)
- for (int ram : new int[]{1024, 2 * 1024, 4 * 1024, 8 * 1024,
- 10 * 1024, 16 * 1024, 24 * 1024, 28 * 1024, 32 * 1024})
- for (float size : new float[]{10, 20, 30, 50, 80, 100, 150, 200, 250, 500}) {
- String id = String.format("cpu=%d,ram=%s,disk=%f", core, ram, size);
- hardwares.add(new HardwareBuilder()
- .ids(id)
- .ram(ram)
- .hypervisor("kvm")
- .name(id)
- .processor(new Processor(core, 1d))
- .volume(new VolumeImpl(size, true, true))
- .build());
- }
- return hardwares;
- }
-
- @Override
- public Iterable<Provisionable> listImages() {
- // fetch images..
- ListenableFuture<List<Image>> images = executorService.submit(new Callable<List<Image>>() {
-
- @Override
- public List<Image> call() throws Exception {
- logger.trace("<< fetching images..");
- // Filter HDD types only, since JClouds doesn't have a concept of "CD-ROM" anyway
- Iterable<Image> filteredImages = Iterables.filter(api.imageApi().getAllImages(), new Predicate<Image>() {
-
- @Override
- public boolean apply(Image image) {
- return image.type() == Image.Type.HDD;
- }
- });
- logger.trace(">> images fetched.");
-
- return ImmutableList.copyOf(filteredImages);
- }
-
- });
- // and snapshots at the same time
- ListenableFuture<List<Snapshot>> snapshots = executorService.submit(new Callable<List<Snapshot>>() {
-
- @Override
- public List<Snapshot> call() throws Exception {
- logger.trace("<< fetching snapshots");
- List<Snapshot> remoteSnapshots = api.snapshotApi().getAllSnapshots();
- logger.trace(">> snapshots feched.");
-
- return remoteSnapshots;
- }
-
- });
-
- return Iterables.concat(getUnchecked(images), getUnchecked(snapshots));
- }
-
- @Override
- public Provisionable getImage(String id) {
- // try search images
- logger.trace("<< searching for image with id=%s", id);
- Image image = api.imageApi().getImage(id);
- if (image != null) {
- logger.trace(">> found image [%s].", image.name());
- return image;
- }
- // try search snapshots
- logger.trace("<< not found from images. searching for snapshot with id=%s", id);
- Snapshot snapshot = api.snapshotApi().getSnapshot(id);
- if (snapshot != null) {
- logger.trace(">> found snapshot [%s]", snapshot.name());
- return snapshot;
- }
- throw new ResourceNotFoundException("No image/snapshot with id '" + id + "' was found");
- }
-
- @Override
- public Iterable<Location> listLocations() {
- // Will never be called
- throw new UnsupportedOperationException("Locations are configured in jclouds properties");
- }
-
- @Override
- public Server getNode(String id) {
- logger.trace("<< searching for server with id=%s", id);
-
- Server server = api.serverApi().getServer(id);
- if (server != null)
- logger.trace(">> found server [%s]", server.name());
- return server;
- }
-
- @Override
- public void destroyNode(String nodeId) {
- ServerApi serverApi = api.serverApi();
- Server server = serverApi.getServer(nodeId);
- if (server != null) {
- String dataCenterId = server.dataCenter().id();
- for (Storage storage : server.storages())
- destroyStorage(storage.id(), dataCenterId);
-
- try {
- destroyServer(nodeId, dataCenterId);
- } catch (Exception ex) {
- logger.warn(ex, ">> failed to delete server with id=%s", nodeId);
- }
- }
- }
-
- @Override
- public void rebootNode(final String id) {
- // Fail pre-emptively if not found
- final Server node = getRequiredNode(id);
- final DataCenter dataCenter = node.dataCenter();
- provisioningManager.provision(jobFactory.create(dataCenter.id(), new Supplier<Object>() {
-
- @Override
- public Object get() {
- api.serverApi().resetServer(id);
-
- return node;
- }
- }));
- }
-
- @Override
- public void resumeNode(final String id) {
- final Server node = getRequiredNode(id);
- if (node.status() == Server.Status.RUNNING)
- return;
-
- final DataCenter dataCenter = node.dataCenter();
- provisioningManager.provision(jobFactory.create(dataCenter.id(), new Supplier<Object>() {
-
- @Override
- public Object get() {
- api.serverApi().startServer(id);
-
- return node;
- }
- }));
- }
-
- @Override
- public void suspendNode(final String id) {
- final Server node = getRequiredNode(id);
- // Intentionally didn't include SHUTDOWN (only achieved via UI; soft-shutdown).
- // A SHUTOFF server is no longer billed, so we execute method for all other status
- if (node.status() == Server.Status.SHUTOFF)
- return;
-
- final DataCenter dataCenter = node.dataCenter();
- provisioningManager.provision(jobFactory.create(dataCenter.id(), new Supplier<Object>() {
-
- @Override
- public Object get() {
- api.serverApi().stopServer(id);
-
- return node;
- }
- }));
- }
-
- @Override
- public Iterable<Server> listNodes() {
- logger.trace(">> fetching all servers..");
- List<Server> servers = api.serverApi().getAllServers();
- logger.trace(">> servers fetched.");
- return servers;
- }
-
- @Override
- public Iterable<Server> listNodesByIds(final Iterable<String> ids) {
- // Only fetch the requested nodes. Do it in parallel.
- ListenableFuture<List<Server>> futures = allAsList(transform(ids,
- new Function<String, ListenableFuture<Server>>() {
-
- @Override
- public ListenableFuture<Server> apply(final String input) {
- return executorService.submit(new Callable<Server>() {
-
- @Override
- public Server call() throws Exception {
- return getNode(input);
- }
- });
- }
- }));
-
- return getUnchecked(futures);
- }
-
- private void destroyServer(final String serverId, final String dataCenterId) {
- try {
- logger.trace("<< deleting server with id=%s", serverId);
- provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
-
- @Override
- public Object get() {
- api.serverApi().deleteServer(serverId);
-
- return serverId;
- }
- }));
- logger.trace(">> server '%s' deleted.", serverId);
- } catch (Exception ex) {
- logger.warn(ex, ">> failed to delete server with id=%s", serverId);
- }
- }
-
- private void destroyStorages(List<String> storageIds, String dataCenterId) {
- for (String storageId : storageIds)
- destroyStorage(storageId, dataCenterId);
- }
-
- private void destroyStorage(final String storageId, final String dataCenterId) {
- try {
- logger.trace("<< deleting storage with id=%s", storageId);
- provisioningManager.provision(jobFactory.create(dataCenterId, new Supplier<Object>() {
-
- @Override
- public Object get() {
- api.storageApi().deleteStorage(storageId);
-
- return storageId;
- }
- }));
- logger.trace(">> storage '%s' deleted.", storageId);
- } catch (Exception ex) {
- logger.warn(ex, ">> failed to delete storage with id=%s", storageId);
- }
- }
-
- private Server getRequiredNode(String nodeId) {
- Server node = getNode(nodeId);
- if (node == null)
- throw new ResourceNotFoundException("Node with id'" + nodeId + "' was not found.");
- return node;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java
deleted file mode 100644
index 7da7d3c..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningJob.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.profitbricks.compute.concurrent;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
-
-import java.util.concurrent.Callable;
-
-import javax.inject.Named;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.inject.Inject;
-import com.google.inject.assistedinject.Assisted;
-
-public class ProvisioningJob implements Callable {
-
- public interface Factory {
-
- ProvisioningJob create(String group, Supplier<Object> operation);
- }
-
- private final Predicate<String> waitDataCenterUntilReady;
- private final String group;
- private final Supplier<Object> operation;
-
- @Inject
- ProvisioningJob(@Named(POLL_PREDICATE_DATACENTER) Predicate<String> waitDataCenterUntilReady,
- @Assisted String group, @Assisted Supplier<Object> operation) {
- this.waitDataCenterUntilReady = waitDataCenterUntilReady;
- this.group = checkNotNull(group, "group cannot be null");
- this.operation = checkNotNull(operation, "operation cannot be null");
- }
-
- @Override
- public Object call() throws Exception {
- waitDataCenterUntilReady.apply(group);
- Object obj = operation.get();
- waitDataCenterUntilReady.apply(group);
-
- return obj;
- }
-
- public String getGroup() {
- return group;
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java
deleted file mode 100644
index 820cafe..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/concurrent/ProvisioningManager.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.profitbricks.compute.concurrent;
-
-import static com.google.common.util.concurrent.Futures.getUnchecked;
-import static com.google.common.util.concurrent.MoreExecutors.listeningDecorator;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.annotation.Resource;
-
-import org.jclouds.concurrent.config.WithSubmissionTrace;
-import org.jclouds.logging.Logger;
-
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- * Delegates {@link Job} to single-threaded executor services based on it's group.
- *
- */
-public final class ProvisioningManager implements Closeable {
-
- @Resource
- private Logger logger = Logger.NULL;
-
- private final Map<String, ListeningExecutorService> workers
- = new ConcurrentHashMap<String, ListeningExecutorService>(1);
-
- private final AtomicBoolean terminated = new AtomicBoolean(false);
-
- public Object provision(ProvisioningJob job) {
- if (terminated.get()) {
- logger.warn("Job(%s) submitted but the provisioning manager is already closed", job);
- return null;
- }
-
- logger.debug("Job(%s) submitted to group '%s'", job, job.getGroup());
- ListeningExecutorService workerGroup = getWorkerGroup(job.getGroup());
- return getUnchecked(workerGroup.submit(job));
- }
-
- protected ListeningExecutorService newExecutorService() {
- return WithSubmissionTrace.wrap(listeningDecorator(Executors.newSingleThreadExecutor()));
- }
-
- private void newWorkerGroupIfAbsent(String name) {
- if (!workers.containsKey(name))
- workers.put(name, newExecutorService());
- }
-
- private ListeningExecutorService getWorkerGroup(String name) {
- newWorkerGroupIfAbsent(name);
- return workers.get(name);
- }
-
- @Override
- public void close() throws IOException {
- terminated.set(true); // Do not allow to enqueue more jobs
- Collection<ListeningExecutorService> executors = workers.values();
- for (ListeningExecutorService executor : executors) {
- List<Runnable> runnables = executor.shutdownNow();
- if (!runnables.isEmpty())
- logger.warn("when shutting down executor %s, runnables outstanding: %s", executor, runnables);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
deleted file mode 100644
index abc732d..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/config/ProfitBricksComputeServiceContextModule.java
+++ /dev/null
@@ -1,223 +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.profitbricks.compute.config;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_INITIAL_PERIOD;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_MAX_PERIOD;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_SNAPSHOT;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.TIMEOUT_DATACENTER_AVAILABLE;
-import static org.jclouds.util.Predicates2.retry;
-
-import java.util.concurrent.TimeUnit;
-
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.compute.ComputeServiceAdapter;
-import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Volume;
-import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet;
-import org.jclouds.domain.Location;
-import org.jclouds.functions.IdentityFunction;
-import org.jclouds.lifecycle.Closer;
-import org.jclouds.location.suppliers.ImplicitLocationSupplier;
-import org.jclouds.location.suppliers.implicit.OnlyLocationOrFirstZone;
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.compute.ProfitBricksComputeServiceAdapter;
-import org.jclouds.profitbricks.compute.concurrent.ProvisioningJob;
-import org.jclouds.profitbricks.compute.concurrent.ProvisioningManager;
-import org.jclouds.profitbricks.compute.function.ProvisionableToImage;
-import org.jclouds.profitbricks.compute.function.ServerToNodeMetadata;
-import org.jclouds.profitbricks.compute.function.StorageToVolume;
-import org.jclouds.profitbricks.compute.strategy.AssignDataCenterToTemplate;
-import org.jclouds.profitbricks.domain.Provisionable;
-import org.jclouds.profitbricks.domain.ProvisioningState;
-import org.jclouds.profitbricks.domain.Server;
-import org.jclouds.profitbricks.domain.Storage;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.inject.Inject;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-import com.google.inject.TypeLiteral;
-import com.google.inject.assistedinject.FactoryModuleBuilder;
-
-
-public class ProfitBricksComputeServiceContextModule extends
- ComputeServiceAdapterContextModule<Server, Hardware, Provisionable, Location> {
-
- @SuppressWarnings("unchecked")
- @Override
- protected void configure() {
- super.configure();
-
- install(new FactoryModuleBuilder().build(ProvisioningJob.Factory.class));
-
- bind(ImplicitLocationSupplier.class).to(OnlyLocationOrFirstZone.class).in(Scopes.SINGLETON);
-
- bind(CreateNodesInGroupThenAddToSet.class).to(AssignDataCenterToTemplate.class).in(Scopes.SINGLETON);
-
- bind(new TypeLiteral<ComputeServiceAdapter<Server, Hardware, Provisionable, Location>>() {
- }).to(ProfitBricksComputeServiceAdapter.class);
-
- bind(new TypeLiteral<Function<Server, NodeMetadata>>() {
- }).to(ServerToNodeMetadata.class);
-
- bind(new TypeLiteral<Function<Provisionable, Image>>() {
- }).to(ProvisionableToImage.class);
-
- bind(new TypeLiteral<Function<Storage, Volume>>() {
- }).to(StorageToVolume.class);
-
- bind(new TypeLiteral<Function<Hardware, Hardware>>() {
- }).to(Class.class.cast(IdentityFunction.class));
- }
-
- @Provides
- @Singleton
- @Named(POLL_PREDICATE_DATACENTER)
- Predicate<String> provideDataCenterAvailablePredicate(
- final ProfitBricksApi api, ComputeConstants constants) {
- return retry(new DataCenterProvisioningStatePredicate(
- api, ProvisioningState.AVAILABLE),
- constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
- }
-
- @Provides
- @Named(TIMEOUT_NODE_RUNNING)
- Predicate<String> provideServerRunningPredicate(final ProfitBricksApi api, ComputeConstants constants) {
- return retry(new ServerStatusPredicate(
- api, Server.Status.RUNNING),
- constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
- }
-
- @Provides
- @Named(TIMEOUT_NODE_SUSPENDED)
- Predicate<String> provideServerSuspendedPredicate(final ProfitBricksApi api, ComputeConstants constants) {
- return retry(new ServerStatusPredicate(
- api, Server.Status.SHUTOFF),
- constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
- }
-
- @Provides
- @Singleton
- ProvisioningManager provideProvisioningManager(Closer closer) {
- ProvisioningManager provisioningManager = new ProvisioningManager();
- closer.addToClose(provisioningManager);
-
- return provisioningManager;
- }
-
- @Provides
- @Singleton
- @Named(POLL_PREDICATE_SNAPSHOT)
- Predicate<String> provideSnapshotAvailablePredicate(final ProfitBricksApi api, ComputeConstants constants) {
- return retry(new SnapshotProvisioningStatePredicate(
- api, ProvisioningState.AVAILABLE),
- constants.pollTimeout(), constants.pollPeriod(), constants.pollMaxPeriod(), TimeUnit.SECONDS);
- }
-
- static class DataCenterProvisioningStatePredicate implements Predicate<String> {
-
- private final ProfitBricksApi api;
- private final ProvisioningState expectedState;
-
- public DataCenterProvisioningStatePredicate(ProfitBricksApi api, ProvisioningState expectedState) {
- this.api = checkNotNull(api, "api must not be null");
- this.expectedState = checkNotNull(expectedState, "expectedState must not be null");
- }
-
- @Override
- public boolean apply(String input) {
- checkNotNull(input, "datacenter id");
- return api.dataCenterApi().getDataCenterState(input) == expectedState;
- }
-
- }
-
- static class ServerStatusPredicate implements Predicate<String> {
-
- private final ProfitBricksApi api;
- private final Server.Status expectedStatus;
-
- public ServerStatusPredicate(ProfitBricksApi api, Server.Status expectedStatus) {
- this.api = checkNotNull(api, "api must not be null");
- this.expectedStatus = checkNotNull(expectedStatus, "expectedStatus must not be null");
- }
-
- @Override
- public boolean apply(String input) {
- checkNotNull(input, "server id");
- return api.serverApi().getServer(input).status() == expectedStatus;
- }
-
- }
-
- static class SnapshotProvisioningStatePredicate implements Predicate<String> {
-
- private final ProfitBricksApi api;
- private final ProvisioningState expectedState;
-
- public SnapshotProvisioningStatePredicate(ProfitBricksApi api, ProvisioningState expectedState) {
- this.api = checkNotNull(api, "api must not be null");
- this.expectedState = checkNotNull(expectedState, "expectedState must not be null");
- }
-
- @Override
- public boolean apply(String input) {
- checkNotNull(input, "snapshot id");
- return api.snapshotApi().getSnapshot(input).state() == expectedState;
- }
-
- }
-
- @Singleton
- public static class ComputeConstants {
-
- @Inject
- @Named(TIMEOUT_DATACENTER_AVAILABLE)
- private String pollTimeout;
-
- @Inject
- @Named(POLL_INITIAL_PERIOD)
- private String pollPeriod;
-
- @Inject
- @Named(POLL_MAX_PERIOD)
- private String pollMaxPeriod;
-
- public long pollTimeout() {
- return Long.parseLong(pollTimeout);
- }
-
- public long pollPeriod() {
- return Long.parseLong(pollPeriod);
- }
-
- public long pollMaxPeriod() {
- return Long.parseLong(pollMaxPeriod);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java
deleted file mode 100644
index 5b27370..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ProvisionableToImage.java
+++ /dev/null
@@ -1,241 +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.profitbricks.compute.function;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.find;
-import static org.jclouds.location.predicates.LocationPredicates.idEquals;
-
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import org.jclouds.collect.Memoized;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.ImageBuilder;
-import org.jclouds.compute.domain.OperatingSystem;
-import org.jclouds.compute.domain.OsFamily;
-import org.jclouds.domain.Location;
-import org.jclouds.profitbricks.domain.OsType;
-import org.jclouds.profitbricks.domain.ProvisioningState;
-import org.jclouds.profitbricks.domain.Snapshot;
-import org.jclouds.profitbricks.domain.Provisionable;
-
-import com.google.common.base.Function;
-import com.google.common.base.Strings;
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableMap;
-import com.google.inject.Inject;
-
-public class ProvisionableToImage implements Function<Provisionable, Image> {
-
- public static final String KEY_PROVISIONABLE_TYPE = "provisionableType";
-
- private final ImageToImage fnImageToImage;
- private final SnapshotToImage fnSnapshotToImage;
-
- @Inject
- ProvisionableToImage(@Memoized Supplier<Set<? extends Location>> locations) {
- this.fnImageToImage = new ImageToImage(locations);
- this.fnSnapshotToImage = new SnapshotToImage(locations);
- }
-
- @Override
- public Image apply(Provisionable input) {
- checkNotNull(input, "Cannot convert null input");
-
- if (input instanceof org.jclouds.profitbricks.domain.Image)
- return fnImageToImage.apply((org.jclouds.profitbricks.domain.Image) input);
-
- else if (input instanceof Snapshot)
- return fnSnapshotToImage.apply((Snapshot) input);
-
- else
- throw new UnsupportedOperationException("No implementation found for provisionable of concrete type '"
- + input.getClass().getCanonicalName() + "'");
- }
-
- private static OsFamily mapOsFamily(OsType osType) {
- if (osType == null)
- return OsFamily.UNRECOGNIZED;
- switch (osType) {
- case WINDOWS:
- return OsFamily.WINDOWS;
- case LINUX:
- return OsFamily.LINUX;
- case UNRECOGNIZED:
- case OTHER:
- default:
- return OsFamily.UNRECOGNIZED;
- }
- }
-
- private static class ImageToImage implements ImageFunction<org.jclouds.profitbricks.domain.Image> {
-
- private static final Pattern HAS_NUMBERS = Pattern.compile(".*\\d+.*");
-
- private final Supplier<Set<? extends Location>> locations;
-
- ImageToImage(Supplier<Set<? extends Location>> locations) {
- this.locations = locations;
- }
-
- @Override
- public Image apply(org.jclouds.profitbricks.domain.Image from) {
- String desc = from.name();
- OsFamily osFamily = parseOsFamily(desc, from.osType());
- Location location = find(locations.get(), idEquals(from.location().getId()));
-
- OperatingSystem os = OperatingSystem.builder()
- .description(osFamily.value())
- .family(osFamily)
- .version(parseVersion(desc))
- .is64Bit(is64Bit(desc, from.type()))
- .build();
-
- return addTypeMetadata(new ImageBuilder()
- .ids(from.id())
- .name(desc)
- .location(location)
- .status(Image.Status.AVAILABLE)
- .operatingSystem(os))
- .build();
- }
-
- private OsFamily parseOsFamily(String from, OsType fallbackValue) {
- if (from != null)
- try {
- // ProfitBricks images names are usually in format:
- // [osType]-[version]-[subversion]-..-[date-created]
- String desc = from.toUpperCase().split("-")[0];
- OsFamily osFamily = OsFamily.fromValue(desc);
- checkArgument(osFamily != OsFamily.UNRECOGNIZED);
-
- return osFamily;
- } catch (Exception ex) {
- // do nothing
- }
- return mapOsFamily(fallbackValue);
- }
-
- private String parseVersion(String from) {
- if (from != null) {
- String[] split = from.toLowerCase().split("-");
- if (split.length >= 2) {
- int i = 1; // usually on second token
- String version = split[i];
- while (!HAS_NUMBERS.matcher(version).matches())
- version = split[++i];
- return version;
- }
- }
- return "";
- }
-
- private boolean is64Bit(String from, org.jclouds.profitbricks.domain.Image.Type type) {
- switch (type) {
- case CDROM:
- if (!Strings.isNullOrEmpty(from))
- return from.matches("x86_64|amd64");
- case HDD: // HDD provided by ProfitBricks are always 64-bit
- default:
- return true;
- }
- }
-
- @Override
- public ImageBuilder addTypeMetadata(ImageBuilder builder) {
- return builder.userMetadata(ImmutableMap.of(KEY_PROVISIONABLE_TYPE, Provisionable.Type.IMAGE.toString()));
- }
- }
-
- private static class SnapshotToImage implements ImageFunction<Snapshot> {
-
- private final Supplier<Set<? extends Location>> locations;
-
- SnapshotToImage(Supplier<Set<? extends Location>> locations) {
- this.locations = locations;
- }
-
- @Override
- public Image apply(Snapshot from) {
- String textToParse = from.name() + from.description();
- OsFamily osFamily = parseOsFamily(textToParse, from.osType());
- Location location = find(locations.get(), idEquals(from.location().getId()));
-
- OperatingSystem os = OperatingSystem.builder()
- .description(osFamily.value())
- .family(osFamily)
- .is64Bit(true)
- .version("00.00")
- .build();
-
- return addTypeMetadata(new ImageBuilder()
- .ids(from.id())
- .name(from.name())
- .description(from.description())
- .location(location)
- .status(mapStatus(from.state()))
- .operatingSystem(os))
- .build();
- }
-
- private OsFamily parseOsFamily(String text, OsType fallbackValue) {
- if (text != null)
- try {
- // Attempt parsing OsFamily by scanning name and description
- // @see ProfitBricksComputeServiceAdapter#L190
- OsFamily[] families = OsFamily.values();
- for (OsFamily family : families)
- if (text.contains(family.value()))
- return family;
- } catch (Exception ex) {
- // do nothing
- }
- return mapOsFamily(fallbackValue);
- }
-
- static Image.Status mapStatus(ProvisioningState state) {
- if (state == null)
- return Image.Status.UNRECOGNIZED;
- switch (state) {
- case AVAILABLE:
- return Image.Status.AVAILABLE;
- case DELETED:
- return Image.Status.DELETED;
- case ERROR:
- return Image.Status.ERROR;
- case INACTIVE:
- case INPROCESS:
- return Image.Status.PENDING;
- default:
- return Image.Status.UNRECOGNIZED;
- }
- }
-
- @Override
- public ImageBuilder addTypeMetadata(ImageBuilder builder) {
- return builder.userMetadata(ImmutableMap.of(KEY_PROVISIONABLE_TYPE, Provisionable.Type.SNAPSHOT.toString()));
- }
- }
-
- private interface ImageFunction<T extends Provisionable> extends Function<T, Image> {
-
- ImageBuilder addTypeMetadata(ImageBuilder builder);
-
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java
deleted file mode 100644
index 9831c6f..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/ServerToNodeMetadata.java
+++ /dev/null
@@ -1,168 +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.profitbricks.compute.function;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Predicates.not;
-import static com.google.common.collect.Iterables.find;
-import static org.jclouds.location.predicates.LocationPredicates.idEquals;
-
-import java.util.List;
-import java.util.Set;
-
-import org.jclouds.collect.Memoized;
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.HardwareBuilder;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.NodeMetadataBuilder;
-import org.jclouds.compute.domain.OperatingSystem;
-import org.jclouds.compute.domain.OsFamily;
-import org.jclouds.compute.domain.Processor;
-import org.jclouds.compute.domain.Volume;
-import org.jclouds.compute.functions.GroupNamingConvention;
-import org.jclouds.domain.Location;
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.domain.DataCenter;
-import org.jclouds.profitbricks.domain.Nic;
-import org.jclouds.profitbricks.domain.OsType;
-import org.jclouds.profitbricks.domain.Server;
-import org.jclouds.profitbricks.domain.Storage;
-import org.jclouds.util.InetAddresses2.IsPrivateIPAddress;
-
-import com.google.common.base.Function;
-import com.google.common.base.Supplier;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.inject.Inject;
-
-public class ServerToNodeMetadata implements Function<Server, NodeMetadata> {
-
- private final Function<Storage, Volume> fnVolume;
- private final Supplier<Set<? extends Location>> locations;
- private final Function<List<Nic>, List<String>> fnCollectIps;
- private final ProfitBricksApi api;
-
- private final GroupNamingConvention groupNamingConvention;
-
- @Inject
- ServerToNodeMetadata(Function<Storage, Volume> fnVolume,
- @Memoized Supplier<Set<? extends Location>> locations,
- ProfitBricksApi api,
- GroupNamingConvention.Factory groupNamingConvention) {
- this.fnVolume = fnVolume;
- this.locations = locations;
- this.api = api;
- this.groupNamingConvention = groupNamingConvention.createWithoutPrefix();
- this.fnCollectIps = new Function<List<Nic>, List<String>>() {
- @Override
- public List<String> apply(List<Nic> in) {
- List<String> ips = Lists.newArrayListWithExpectedSize(in.size());
- for (Nic nic : in)
- ips.addAll(nic.ips());
- return ips;
- }
- };
- }
-
- @Override
- public NodeMetadata apply(final Server server) {
- checkNotNull(server, "Null server");
- // Location is not populated in the datacenter on a server response
- DataCenter dataCenter = api.dataCenterApi().getDataCenter(server.dataCenter().id());
- Location location = find(locations.get(), idEquals(dataCenter.location().getId()));
-
- float size = 0f;
- List<Volume> volumes = Lists.newArrayList();
- List<Storage> storages = server.storages();
- if (storages != null)
- for (Storage storage : storages) {
- size += storage.size();
- volumes.add(fnVolume.apply(storage));
- }
-
- // Build hardware
- String id = String.format("cpu=%d,ram=%d,disk=%.0f", server.cores(), server.ram(), size);
- Hardware hardware = new HardwareBuilder()
- .ids(id)
- .name(id)
- .ram(server.ram())
- .processor(new Processor(server.cores(), 1d))
- .hypervisor("kvm")
- .volumes(volumes)
- .location(location)
- .build();
-
- // Collect ips
- List<String> addresses = fnCollectIps.apply(server.nics());
-
- // Build node
- NodeMetadataBuilder nodeBuilder = new NodeMetadataBuilder();
- nodeBuilder.ids(server.id())
- .group(groupNamingConvention.extractGroup(server.name()))
- .hostname(server.hostname())
- .name(server.name())
- .backendStatus(server.state().toString())
- .status(mapStatus(server.status()))
- .hardware(hardware)
- .operatingSystem(mapOsType(server.osType()))
- .location(location)
- .privateAddresses(Iterables.filter(addresses, IsPrivateIPAddress.INSTANCE))
- .publicAddresses(Iterables.filter(addresses, not(IsPrivateIPAddress.INSTANCE)));
-
- return nodeBuilder.build();
- }
-
- static NodeMetadata.Status mapStatus(Server.Status status) {
- if (status == null)
- return NodeMetadata.Status.UNRECOGNIZED;
- switch (status) {
- case SHUTDOWN:
- case SHUTOFF:
- case PAUSED:
- return NodeMetadata.Status.SUSPENDED;
- case RUNNING:
- return NodeMetadata.Status.RUNNING;
- case BLOCKED:
- return NodeMetadata.Status.PENDING;
- case CRASHED:
- return NodeMetadata.Status.ERROR;
- default:
- return NodeMetadata.Status.UNRECOGNIZED;
- }
- }
-
- static OperatingSystem mapOsType(OsType osType) {
- if (osType != null)
- switch (osType) {
- case WINDOWS:
- return OperatingSystem.builder()
- .description(OsFamily.WINDOWS.value())
- .family(OsFamily.WINDOWS)
- .build();
- case LINUX:
- return OperatingSystem.builder()
- .description(OsFamily.LINUX.value())
- .family(OsFamily.LINUX)
- .build();
- }
- return OperatingSystem.builder()
- .description(OsFamily.UNRECOGNIZED.value())
- .family(OsFamily.UNRECOGNIZED)
- .build();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java
deleted file mode 100644
index 5557bca..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/function/StorageToVolume.java
+++ /dev/null
@@ -1,47 +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.profitbricks.compute.function;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.compute.domain.Volume;
-import org.jclouds.compute.domain.VolumeBuilder;
-import org.jclouds.profitbricks.domain.Storage;
-
-import com.google.common.base.Function;
-
-public class StorageToVolume implements Function<Storage, Volume> {
-
- @Override
- public Volume apply(Storage storage) {
- checkNotNull(storage, "Null storage");
-
- String device = "";
- if (storage.deviceNumber() != null)
- device = storage.deviceNumber().toString();
-
- return new VolumeBuilder()
- .id(storage.id())
- .size(storage.size())
- .bootDevice(storage.bootDevice())
- .device(device)
- .durable(true)
- .type(Volume.Type.LOCAL)
- .build();
-
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/AssignDataCenterToTemplate.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/AssignDataCenterToTemplate.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/AssignDataCenterToTemplate.java
deleted file mode 100644
index f7db219..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/AssignDataCenterToTemplate.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.profitbricks.compute.strategy;
-
-import static com.google.common.collect.Iterables.find;
-import static org.jclouds.Constants.PROPERTY_USER_THREADS;
-import static org.jclouds.profitbricks.config.ProfitBricksComputeProperties.POLL_PREDICATE_DATACENTER;
-
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.compute.config.CustomizationResponse;
-import org.jclouds.compute.domain.NodeMetadata;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.compute.functions.GroupNamingConvention;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.compute.strategy.CreateNodeWithGroupEncodedIntoName;
-import org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap;
-import org.jclouds.compute.strategy.ListNodesStrategy;
-import org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet;
-import org.jclouds.logging.Logger;
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.domain.DataCenter;
-import org.jclouds.profitbricks.domain.Location;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Multimap;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
-
-/**
- * Attempts to find a valid datacenter in the configured location where the
- * servers will be deployed. If no datacenter is found, one will be created.
- */
-@Beta
-@Singleton
-public class AssignDataCenterToTemplate extends CreateNodesWithGroupEncodedIntoNameThenAddToSet {
-
- @Resource
- @Named(ComputeServiceConstants.COMPUTE_LOGGER)
- protected Logger logger = Logger.NULL;
-
- private final ProfitBricksApi api;
- private final Predicate<String> waitDcUntilAvailable;
-
- @Inject
- protected AssignDataCenterToTemplate(
- CreateNodeWithGroupEncodedIntoName addNodeWithGroupStrategy,
- ListNodesStrategy listNodesStrategy,
- GroupNamingConvention.Factory namingConvention,
- @Named(PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
- CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.Factory customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory,
- ProfitBricksApi api, @Named(POLL_PREDICATE_DATACENTER) Predicate<String> waitDcUntilAvailable) {
- super(addNodeWithGroupStrategy, listNodesStrategy, namingConvention, userExecutor,
- customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory);
- this.api = api;
- this.waitDcUntilAvailable = waitDcUntilAvailable;
- }
-
- @Override
- public Map<?, ListenableFuture<Void>> execute(String group, int count, final Template template,
- Set<NodeMetadata> goodNodes, Map<NodeMetadata, Exception> badNodes,
- Multimap<NodeMetadata, CustomizationResponse> customizationResponses) {
-
- logger.info(">> looking for a datacenter in %s", template.getLocation().getId());
-
- // Try to find an existing datacenter in the selected location
- DataCenter dataCenter = find(api.dataCenterApi().getAllDataCenters(), new Predicate<DataCenter>() {
- @Override
- public boolean apply(DataCenter input) {
- // The location field is not populated when getting the list of datacenters
- DataCenter details = api.dataCenterApi().getDataCenter(input.id());
- return details != null && template.getLocation().getId().equals(details.location().getId());
- }
- }, null);
-
- if (dataCenter == null) {
- String name = namingConvention.create().sharedNameForGroup(group);
- logger.info(">> no datacenter was found. Creating a new one named %s in %s...", name, template.getLocation()
- .getId());
- dataCenter = api.dataCenterApi().createDataCenter(
- DataCenter.Request.creatingPayload(name, Location.fromId(template.getLocation().getId())));
- waitDcUntilAvailable.apply(dataCenter.id());
- }
-
- return super.execute(group, count, new TemplateWithDataCenter(template, dataCenter), goodNodes, badNodes,
- customizationResponses);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/TemplateWithDataCenter.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/TemplateWithDataCenter.java b/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/TemplateWithDataCenter.java
deleted file mode 100644
index dd689d5..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/compute/strategy/TemplateWithDataCenter.java
+++ /dev/null
@@ -1,107 +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.profitbricks.compute.strategy;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import org.jclouds.compute.domain.Hardware;
-import org.jclouds.compute.domain.Image;
-import org.jclouds.compute.domain.Template;
-import org.jclouds.compute.options.TemplateOptions;
-import org.jclouds.domain.Location;
-import org.jclouds.profitbricks.domain.DataCenter;
-
-import com.google.common.annotations.Beta;
-
-/**
- * Extends the default {@link Template} object to provide the {@link DataCenter}
- * where the nodes must be created.
- */
-@Beta
-public class TemplateWithDataCenter implements Template {
-
- private final Template delegate;
-
- private final DataCenter dataCenter;
-
- // For internal use only
- TemplateWithDataCenter(Template delegate, DataCenter dataCenter) {
- this.delegate = checkNotNull(delegate, "delegate cannot be null");
- this.dataCenter = checkNotNull(dataCenter, "dataCenter cannot be null");
- }
-
- public DataCenter getDataCenter() {
- return dataCenter;
- }
-
- public Template clone() {
- return new TemplateWithDataCenter(delegate.clone(), dataCenter);
- }
-
- public Hardware getHardware() {
- return delegate.getHardware();
- }
-
- public Image getImage() {
- return delegate.getImage();
- }
-
- public Location getLocation() {
- return delegate.getLocation();
- }
-
- public TemplateOptions getOptions() {
- return delegate.getOptions();
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((dataCenter == null) ? 0 : dataCenter.hashCode());
- result = prime * result + ((delegate == null) ? 0 : delegate.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;
- TemplateWithDataCenter other = (TemplateWithDataCenter) obj;
- if (dataCenter == null) {
- if (other.dataCenter != null)
- return false;
- } else if (!dataCenter.equals(other.dataCenter))
- return false;
- if (delegate == null) {
- if (other.delegate != null)
- return false;
- } else if (!delegate.equals(other.delegate))
- return false;
- return true;
- }
-
- @Override
- public String toString() {
- return delegate.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java b/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.java
deleted file mode 100644
index eadc038..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksComputeProperties.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.profitbricks.config;
-
-public class ProfitBricksComputeProperties {
-
- public static final String POLL_PREDICATE_DATACENTER = "jclouds.profitbricks.predicate.datacenter";
- public static final String POLL_PREDICATE_SNAPSHOT = "jclouds.profitbricks.predicate.snapshot";
-
- public static final String TIMEOUT_DATACENTER_AVAILABLE = "jclouds.profitbricks.timeout.datacenter-available";
- public static final String POLL_INITIAL_PERIOD = "jclouds.profitbricks.poll-status.initial-period";
- public static final String POLL_MAX_PERIOD = "jclouds.profitbricks.poll-status.poll.max-period";
-
- private ProfitBricksComputeProperties() {
- throw new AssertionError("Intentionally unimplemented");
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java b/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java
deleted file mode 100644
index f95b1b3..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/config/ProfitBricksHttpApiModule.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.profitbricks.config;
-
-import org.jclouds.http.HttpCommandExecutorService;
-import org.jclouds.profitbricks.ProfitBricksApi;
-import org.jclouds.profitbricks.handlers.ProfitBricksHttpErrorHandler;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.http.config.ConfiguresHttpCommandExecutorService;
-import org.jclouds.http.config.SSLModule;
-import org.jclouds.http.functions.ParseSax;
-import org.jclouds.profitbricks.domain.ServiceFault;
-import org.jclouds.profitbricks.http.ResponseStatusFromPayloadHttpCommandExecutorService;
-import org.jclouds.profitbricks.http.parser.ServiceFaultResponseHandler;
-import org.jclouds.rest.ConfiguresHttpApi;
-import org.jclouds.rest.config.HttpApiModule;
-
-import com.google.inject.AbstractModule;
-import com.google.inject.Injector;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-
-/**
- * Configures the ProfitBricks connection.
- */
-@ConfiguresHttpApi
-public class ProfitBricksHttpApiModule extends HttpApiModule<ProfitBricksApi> {
-
- @Override
- protected void bindErrorHandlers() {
- bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(ProfitBricksHttpErrorHandler.class);
- bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(ProfitBricksHttpErrorHandler.class);
- bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(ProfitBricksHttpErrorHandler.class);
- }
-
- @ConfiguresHttpCommandExecutorService
- public static class ProfitBricksHttpCommandExecutorServiceModule extends AbstractModule {
-
- @Override
- protected void configure() {
- install(new SSLModule());
- bind(HttpCommandExecutorService.class).to(ResponseStatusFromPayloadHttpCommandExecutorService.class)
- .in(Scopes.SINGLETON);
- }
-
- @Provides
- public ParseSax<ServiceFault> serviceFaultParser(ParseSax.Factory factory, Injector injector) {
- return factory.create(injector.getInstance(ServiceFaultResponseHandler.class));
- }
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.java
deleted file mode 100644
index a3c50ae..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/AvailabilityZone.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.profitbricks.domain;
-
-import com.google.common.base.Enums;
-
-public enum AvailabilityZone {
-
- AUTO, ZONE_1, ZONE_2, UNRECOGNIZED;
-
- public String value() {
- return name();
- }
-
- public static AvailabilityZone fromValue(String v) {
- return Enums.getIfPresent(AvailabilityZone.class, v).or(UNRECOGNIZED);
- }
-}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/93aff921/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java
----------------------------------------------------------------------
diff --git a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java b/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.java
deleted file mode 100644
index 9bb09ab..0000000
--- a/profitbricks/src/main/java/org/jclouds/profitbricks/domain/DataCenter.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.profitbricks.domain;
-
-import static org.jclouds.profitbricks.util.Preconditions.checkInvalidChars;
-
-import java.util.List;
-
-import org.jclouds.javax.annotation.Nullable;
-
-import com.google.auto.value.AutoValue;
-import com.google.common.collect.ImmutableList;
-
-@AutoValue
-public abstract class DataCenter {
-
- public abstract String id();
-
- @Nullable
- public abstract String name();
-
- public abstract int version();
-
- @Nullable
- public abstract ProvisioningState state();
-
- @Nullable
- public abstract Location location();
-
- @Nullable
- public abstract List<Server> servers();
-
- @Nullable
- public abstract List<Storage> storages();
-
- public static Builder builder() {
- return new AutoValue_DataCenter.Builder()
- .servers(ImmutableList.<Server>of())
- .storages(ImmutableList.<Storage>of());
- }
-
- public abstract Builder toBuilder();
-
- @AutoValue.Builder
- public abstract static class Builder {
-
- public abstract Builder id(String id);
-
- public abstract Builder name(String name);
-
- public abstract Builder version(int version);
-
- public abstract Builder state(ProvisioningState state);
-
- public abstract Builder location(Location location);
-
- public abstract Builder servers(List<Server> servers);
-
- public abstract Builder storages(List<Storage> storages);
-
- abstract DataCenter autoBuild();
-
- public DataCenter build(){
- DataCenter built = autoBuild();
- return built.toBuilder()
- .servers(ImmutableList.copyOf(built.servers()))
- .storages(ImmutableList.copyOf(built.storages()))
- .autoBuild();
- }
-
- }
-
- public static final class Request {
-
- public static CreatePayload creatingPayload(String name, Location location) {
- CreatePayload payload = new AutoValue_DataCenter_Request_CreatePayload(name, location);
- checkInvalidChars(payload.name());
-
- return payload;
- }
-
- public static UpdatePayload updatingPayload(String id, String name) {
- UpdatePayload payload = new AutoValue_DataCenter_Request_UpdatePayload(id, name);
- checkInvalidChars(payload.name());
-
- return payload;
- }
-
- @AutoValue
- public abstract static class CreatePayload {
-
- public abstract String name();
-
- public abstract Location location();
-
- }
-
- @AutoValue
- public abstract static class UpdatePayload {
-
- public abstract String id();
-
- public abstract String name();
-
- }
- }
-}