http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/VolumeApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/VolumeApi.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/VolumeApi.java deleted file mode 100644 index 2f601e9..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/VolumeApi.java +++ /dev/null @@ -1,170 +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.cloudstack.features; - -import java.util.Set; - -import javax.inject.Named; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; - -import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404; -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.Fallbacks.VoidOnNotFoundOr404; -import org.jclouds.cloudstack.domain.AsyncCreateResponse; -import org.jclouds.cloudstack.domain.Volume; -import org.jclouds.cloudstack.filters.AuthenticationFilter; -import org.jclouds.cloudstack.options.ListVolumesOptions; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.OnlyElement; -import org.jclouds.rest.annotations.QueryParams; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.annotations.SelectJson; -import org.jclouds.rest.annotations.Unwrap; - -/** - * Provides synchronous access to cloudstack via their REST API. - * <p/> - * - * @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html" /> - */ -@RequestFilters(AuthenticationFilter.class) -@QueryParams(keys = "response", values = "json") -public interface VolumeApi { - /** - * Create a volume with given name and diskOfferingId - * - * @param name name of the volume - * @param diskOfferingId the ID of the disk offering. - * @param zoneId the ID of the availability zone - * @return AsyncCreateResponse job response used to track creation - */ - @Named("listVolumes") - @GET - @QueryParams(keys = { "command", "listAll" }, values = { "listVolumes", "true" }) - @SelectJson("volume") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(EmptySetOnNotFoundOr404.class) - Set<Volume> listVolumes(ListVolumesOptions... options); - - /** - * Create a volume with given name, size and diskOfferingId - * - * @param name name of the volume - * @param diskOfferingId the ID of the disk offering (the offering should have the custom disk size flag set) - * @param zoneId the ID of the availability zone - * @param size the size of volume required (in GB) - * @return AsyncCreateResponse job response used to track creation - */ - @Named("listVolumes") - @GET - @Consumes(MediaType.APPLICATION_JSON) - @QueryParams(keys = { "command", "listAll" }, values = { "listVolumes", "true" }) - @SelectJson("volume") - @OnlyElement - @Fallback(NullOnNotFoundOr404.class) - Volume getVolume(@QueryParam("id") String id); - - - /** - * Create a volume with given name and snapshotId - * - * @param name name of the volume - * @param snapshotId Snapshot id to be used while creating the volume - * @param zoneId the ID of the availability zone - * @return AsyncCreateResponse job response used to track creation - */ - @Named("createVolume") - @GET - @QueryParams(keys = "command", values = "createVolume") - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - AsyncCreateResponse createVolumeFromDiskOfferingInZone(@QueryParam("name") String name, - @QueryParam("diskofferingid") String diskOfferingId, - @QueryParam("zoneid") String zoneId); - - /** - * List volumes - * - * @return volume list, empty if not found - */ - @GET - @QueryParams(keys = "command", values = "createVolume") - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - AsyncCreateResponse createVolumeFromCustomDiskOfferingInZone(@QueryParam("name") String name, - @QueryParam("diskofferingid") String diskOfferingId, - @QueryParam("zoneid") String zoneId, - @QueryParam("size") int size); - - /** - * Get volume by id - * - * @param id the volume id to retrieve - * @return volume or null if not found - */ - @Named("createVolume") - @GET - @QueryParams(keys = "command", values = "createVolume") - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - AsyncCreateResponse createVolumeFromSnapshotInZone(@QueryParam("name") String name, - @QueryParam("snapshotid") String snapshotId, - @QueryParam("zoneid") String zoneId); - - /** - * Deletes a attached disk volume - * - * @param id id of the volume - */ - @Named("attachVolume") - @GET - @QueryParams(keys = "command", values = "attachVolume") - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - AsyncCreateResponse attachVolume(@QueryParam("id") String volumeId, - @QueryParam("virtualmachineid") String virtualMachineId); - - /** - * Attaches a disk volume to a virtual machine. - * - * @param volumeId the ID of the disk volume - * @param virtualMachineId the ID of the virtual machine - * @return AsyncCreateResponse job response used to track creation - */ - @Named("detachVolume") - @GET - @QueryParams(keys = "command", values = "detachVolume") - @Unwrap - @Consumes(MediaType.APPLICATION_JSON) - AsyncCreateResponse detachVolume(@QueryParam("id") String volumeId); - - /** - * Detaches a disk volume to a virtual machine. - * - * @param volumeId the ID of the disk volume - * @return AsyncCreateResponse job response used to track creation - */ - @Named("deleteVolume") - @GET - @QueryParams(keys = "command", values = "deleteVolume") - @Fallback(VoidOnNotFoundOr404.class) - void deleteVolume(@QueryParam("id") String id); - -}
http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/ZoneApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/ZoneApi.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/ZoneApi.java deleted file mode 100644 index d7e8ff3..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/features/ZoneApi.java +++ /dev/null @@ -1,79 +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.cloudstack.features; - -import java.util.Set; - -import javax.inject.Named; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; - -import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404; -import org.jclouds.Fallbacks.NullOnNotFoundOr404; -import org.jclouds.cloudstack.domain.Zone; -import org.jclouds.cloudstack.filters.AuthenticationFilter; -import org.jclouds.cloudstack.options.ListZonesOptions; -import org.jclouds.rest.annotations.Fallback; -import org.jclouds.rest.annotations.OnlyElement; -import org.jclouds.rest.annotations.QueryParams; -import org.jclouds.rest.annotations.RequestFilters; -import org.jclouds.rest.annotations.SelectJson; - -/** - * Provides synchronous access to cloudstack via their REST API. - * <p/> - * - * @see <a href="http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html" /> - */ -@RequestFilters(AuthenticationFilter.class) -@QueryParams(keys = "response", values = "json") -public interface ZoneApi { - - /** - * Lists zones - * - * @param options - * if present, how to constrain the list. - * @return zones matching query, or empty set, if no zones are found - */ - @Named("listZones") - @GET - @QueryParams(keys = { "command", "listAll" }, values = { "listZones", "true" }) - @SelectJson("zone") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(EmptySetOnNotFoundOr404.class) - Set<Zone> listZones(ListZonesOptions... options); - - /** - * get a specific zone by id - * - * @param id - * zone to get - * @return zone or null if not found - */ - @Named("listZones") - @GET - @QueryParams(keys = { "command", "listAll" }, values = { "listZones", "true" }) - @SelectJson("zone") - @OnlyElement - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(NullOnNotFoundOr404.class) - Zone getZone(@QueryParam("id") String id); - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AddSessionKeyAndJSessionIdToRequest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AddSessionKeyAndJSessionIdToRequest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AddSessionKeyAndJSessionIdToRequest.java deleted file mode 100644 index f08c0e8..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AddSessionKeyAndJSessionIdToRequest.java +++ /dev/null @@ -1,55 +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.cloudstack.filters; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.domain.LoginResponse; -import org.jclouds.http.HttpException; -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpRequest.Builder; - -import com.google.common.base.Supplier; -import com.google.common.net.HttpHeaders; - -/** - * - * @see <a href="http://docs.cloud.com/CloudStack_Documentation/Customizing_the_CloudStack_UI#Cross_Site_Request_Forgery_%28CSRF%29" - * /> - */ -@Singleton -public class AddSessionKeyAndJSessionIdToRequest implements AuthenticationFilter { - - private final Supplier<LoginResponse> loginResponseSupplier; - - @Inject - public AddSessionKeyAndJSessionIdToRequest(Supplier<LoginResponse> loginResponseSupplier) { - this.loginResponseSupplier = loginResponseSupplier; - } - - @Override - public HttpRequest filter(HttpRequest request) throws HttpException { - LoginResponse loginResponse = loginResponseSupplier.get(); - Builder<?> builder = request.toBuilder(); - builder.replaceHeader(HttpHeaders.COOKIE, "JSESSIONID=" + loginResponse.getJSessionId()); - builder.replaceQueryParam("sessionkey", loginResponse.getSessionKey()); - return builder.build(); - - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AuthenticationFilter.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AuthenticationFilter.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AuthenticationFilter.java deleted file mode 100644 index 1e567a6..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/AuthenticationFilter.java +++ /dev/null @@ -1,30 +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.cloudstack.filters; - -import org.jclouds.http.HttpRequestFilter; - -import com.google.inject.ImplementedBy; - -/** - * Marker interface that determines how we authenticate http requests in cloudstack. default to sign - * requests as opposed to login. - */ -@ImplementedBy(QuerySigner.class) -public interface AuthenticationFilter extends HttpRequestFilter { - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/QuerySigner.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/QuerySigner.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/QuerySigner.java deleted file mode 100644 index 04610cc..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/filters/QuerySigner.java +++ /dev/null @@ -1,141 +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.cloudstack.filters; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Throwables.propagate; -import static com.google.common.io.BaseEncoding.base64; -import static com.google.common.io.ByteStreams.readBytes; -import static org.jclouds.Constants.LOGGER_SIGNATURE; -import static org.jclouds.crypto.Macs.asByteProcessor; -import static org.jclouds.http.Uris.uriBuilder; -import static org.jclouds.http.utils.Queries.queryParser; -import static org.jclouds.util.Strings2.toInputStream; - -import java.io.IOException; -import java.security.InvalidKeyException; -import java.util.Map; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import com.google.common.base.Joiner; -import org.jclouds.crypto.Crypto; -import org.jclouds.domain.Credentials; -import org.jclouds.http.HttpException; -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpUtils; -import org.jclouds.http.internal.SignatureWire; -import org.jclouds.location.Provider; -import org.jclouds.logging.Logger; -import org.jclouds.rest.RequestSigner; -import org.jclouds.util.Strings2; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.Multimap; -import com.google.common.io.ByteProcessor; - -/** - * - * @see <a href= "http://download.cloud.com/releases/2.2.0/api/user/2.2api_security_details.html" /> - */ -@Singleton -public class QuerySigner implements AuthenticationFilter, RequestSigner { - - private final SignatureWire signatureWire; - private final Supplier<Credentials> creds; - private final Crypto crypto; - private final HttpUtils utils; - - @Resource - @Named(LOGGER_SIGNATURE) - private Logger signatureLog = Logger.NULL; - - @Inject - public QuerySigner(SignatureWire signatureWire, @Provider Supplier<Credentials> creds, Crypto crypto, HttpUtils utils) { - this.signatureWire = signatureWire; - this.creds = creds; - this.crypto = crypto; - this.utils = utils; - } - - public HttpRequest filter(HttpRequest request) throws HttpException { - checkNotNull(request, "request must be present"); - Multimap<String, String> decodedParams = queryParser().apply(request.getEndpoint().getRawQuery()); - addSigningParams(decodedParams); - String stringToSign = createStringToSign(request, decodedParams); - String signature = sign(stringToSign); - addSignature(decodedParams, signature); - request = request.toBuilder().endpoint(uriBuilder(request.getEndpoint()).query(decodedParams).build()).build(); - utils.logRequest(signatureLog, request, "<<"); - return request; - } - - @VisibleForTesting - void addSignature(Multimap<String, String> params, String signature) { - params.replaceValues("signature", ImmutableList.of(signature)); - } - - @VisibleForTesting - public String sign(String toSign) { - String signature; - try { - ByteProcessor<byte[]> hmacSHA1 = asByteProcessor(crypto.hmacSHA1(creds.get().credential.getBytes())); - signature = base64().encode(readBytes(toInputStream(toSign), hmacSHA1)); - if (signatureWire.enabled()) - signatureWire.input(toInputStream(signature)); - return signature; - } catch (InvalidKeyException e) { - throw propagate(e); - } catch (IOException e) { - throw propagate(e); - } - } - - @VisibleForTesting - public String createStringToSign(HttpRequest request, Multimap<String, String> decodedParams) { - utils.logRequest(signatureLog, request, ">>"); - // encode each parameter value first, - ImmutableSortedSet.Builder<String> builder = ImmutableSortedSet.naturalOrder(); - for (Map.Entry<String, String> entry : decodedParams.entries()) - builder.add(entry.getKey() + "=" + Strings2.urlEncode(entry.getValue())); - // then, lower case the entire query string - String stringToSign = Joiner.on('&').join(builder.build()).toLowerCase(); - if (signatureWire.enabled()) - signatureWire.output(stringToSign); - - return stringToSign; - } - - @VisibleForTesting - void addSigningParams(Multimap<String, String> params) { - params.replaceValues("apiKey", ImmutableList.of(creds.get().identity)); - params.removeAll("signature"); - } - - public String createStringToSign(HttpRequest input) { - Multimap<String, String> decodedParams = queryParser().apply(input.getEndpoint().getQuery()); - addSigningParams(decodedParams); - return createStringToSign(input, decodedParams); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CloudStackFallbacks.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CloudStackFallbacks.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CloudStackFallbacks.java deleted file mode 100644 index 50185ed..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CloudStackFallbacks.java +++ /dev/null @@ -1,52 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.util.concurrent.Futures.immediateFuture; -import static org.jclouds.Fallbacks.valOnNotFoundOr404; -import static org.jclouds.util.Throwables2.getFirstThrowableOfType; - -import org.jclouds.Fallback; - -import com.google.common.util.concurrent.ListenableFuture; - -public final class CloudStackFallbacks { - private CloudStackFallbacks() { - } - - /** - * CloudStack is currently sending 431 errors with the text "Unable to find account owner for ip ". In this case, we - * have to ignore as there's no means for us to avoid the problem, or action to take. - */ - public static final class VoidOnNotFoundOr404OrUnableToFindAccountOwner implements Fallback<Void> { - @Override - public ListenableFuture<Void> create(Throwable t) throws Exception { - return immediateFuture(createOrPropagate(t)); - } - - @Override - public Void createOrPropagate(Throwable t) throws Exception { - IllegalStateException e = getFirstThrowableOfType(checkNotNull(t, "throwable"), IllegalStateException.class); - if (e != null && e.getMessage().indexOf("Unable to find account owner for") != -1) { - return null; - } else { - return valOnNotFoundOr404(null, t); - } - } - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateFirewallRulesForIP.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateFirewallRulesForIP.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateFirewallRulesForIP.java deleted file mode 100644 index dd15e19..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateFirewallRulesForIP.java +++ /dev/null @@ -1,90 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -import java.util.Set; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.AsyncCreateResponse; -import org.jclouds.cloudstack.domain.FirewallRule; -import org.jclouds.cloudstack.domain.PublicIPAddress; -import org.jclouds.cloudstack.options.CreateFirewallRuleOptions; -import org.jclouds.cloudstack.strategy.BlockUntilJobCompletesAndReturnResult; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.logging.Logger; - -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.ImmutableSet.Builder; - -@Singleton -public class CreateFirewallRulesForIP { - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - private final CloudStackApi client; - private final BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult; - private final LoadingCache<String, Set<FirewallRule>> getFirewallRulesByVirtualMachine; - - @Inject - public CreateFirewallRulesForIP(CloudStackApi client, - BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult, - LoadingCache<String, Set<FirewallRule>> getFirewallRulesByVirtualMachine) { - this.client = checkNotNull(client, "client"); - this.blockUntilJobCompletesAndReturnResult = checkNotNull(blockUntilJobCompletesAndReturnResult, - "blockUntilJobCompletesAndReturnResult"); - this.getFirewallRulesByVirtualMachine = checkNotNull(getFirewallRulesByVirtualMachine, - "getFirewallRulesByVirtualMachine"); - } - - public Set<FirewallRule> apply(PublicIPAddress ip, Iterable<Integer> ports) { - return apply(ip, "tcp", ports); - } - - public Set<FirewallRule> apply(PublicIPAddress ip, String protocol, Iterable<Integer> ports) { - checkState(ip.getVirtualMachineId() != null, - "ip %s should be static NATed to a virtual machine before applying rules", ip); - if (Iterables.isEmpty(ports)) - return ImmutableSet.<FirewallRule> of(); - Builder<AsyncCreateResponse> responses = ImmutableSet.builder(); - for (int port : ports) { - AsyncCreateResponse response = client.getFirewallApi().createFirewallRuleForIpAndProtocol(ip.getId(), FirewallRule.Protocol.fromValue(protocol), - CreateFirewallRuleOptions.Builder.startPort(port).endPort(port)); - logger.debug(">> creating firewall rule IPAddress(%s) for protocol(%s), port(%s); response(%s)", - ip.getId(), protocol, port, response); - responses.add(response); - } - Builder<FirewallRule> rules = ImmutableSet.builder(); - for (AsyncCreateResponse response : responses.build()) { - FirewallRule rule = blockUntilJobCompletesAndReturnResult.<FirewallRule> apply(response); - rules.add(rule); - getFirewallRulesByVirtualMachine.asMap().put(ip.getVirtualMachineId(), ImmutableSet.of(rule)); - } - return rules.build(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreatePortForwardingRulesForIP.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreatePortForwardingRulesForIP.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreatePortForwardingRulesForIP.java deleted file mode 100644 index dd09f77..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreatePortForwardingRulesForIP.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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - -import java.util.Set; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.AsyncCreateResponse; -import org.jclouds.cloudstack.domain.IPForwardingRule; -import org.jclouds.cloudstack.domain.PublicIPAddress; -import org.jclouds.cloudstack.strategy.BlockUntilJobCompletesAndReturnResult; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.logging.Logger; - -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.common.collect.ImmutableSet.Builder; - -@Singleton -public class CreatePortForwardingRulesForIP { - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - private final CloudStackApi client; - private final BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult; - private final LoadingCache<String, Set<IPForwardingRule>> getIPForwardingRulesByVirtualMachine; - - @Inject - public CreatePortForwardingRulesForIP(CloudStackApi client, - BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult, - LoadingCache<String, Set<IPForwardingRule>> getIPForwardingRulesByVirtualMachine) { - this.client = checkNotNull(client, "client"); - this.blockUntilJobCompletesAndReturnResult = checkNotNull(blockUntilJobCompletesAndReturnResult, - "blockUntilJobCompletesAndReturnResult"); - this.getIPForwardingRulesByVirtualMachine = checkNotNull(getIPForwardingRulesByVirtualMachine, - "getIPForwardingRulesByVirtualMachine"); - } - - public Set<IPForwardingRule> apply(PublicIPAddress ip, Iterable<Integer> ports) { - return apply(ip, "tcp", ports); - } - - public Set<IPForwardingRule> apply(PublicIPAddress ip, String protocol, Iterable<Integer> ports) { - checkState(ip.getVirtualMachineId() != null, - "ip %s should be static NATed to a virtual machine before applying rules", ip); - if (Iterables.isEmpty(ports)) - return ImmutableSet.<IPForwardingRule> of(); - Builder<AsyncCreateResponse> responses = ImmutableSet.builder(); - for (int port : ports) { - AsyncCreateResponse response = client.getNATApi().createIPForwardingRule(ip.getId(), protocol, port); - logger.debug(">> creating IP forwarding rule IPAddress(%s) for protocol(%s), port(%s); response(%s)", - ip.getId(), protocol, port, response); - responses.add(response); - } - Builder<IPForwardingRule> rules = ImmutableSet.builder(); - for (AsyncCreateResponse response : responses.build()) { - IPForwardingRule rule = blockUntilJobCompletesAndReturnResult.<IPForwardingRule> apply(response); - rules.add(rule); - getIPForwardingRulesByVirtualMachine.asMap().put(ip.getVirtualMachineId(), ImmutableSet.of(rule)); - } - return rules.build(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateSecurityGroupIfNeeded.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateSecurityGroupIfNeeded.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateSecurityGroupIfNeeded.java deleted file mode 100644 index 8360977..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/CreateSecurityGroupIfNeeded.java +++ /dev/null @@ -1,111 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.cloudstack.predicates.SecurityGroupPredicates.portInRangeForCidr; -import static org.jclouds.cloudstack.predicates.ZonePredicates.supportsSecurityGroups; - -import java.util.Set; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.logging.Logger; -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.SecurityGroup; -import org.jclouds.cloudstack.domain.Zone; -import org.jclouds.cloudstack.domain.ZoneSecurityGroupNamePortsCidrs; - -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.base.Supplier; -import com.google.common.cache.LoadingCache; -import com.google.common.collect.ImmutableSet; - -@Singleton -public class CreateSecurityGroupIfNeeded implements Function<ZoneSecurityGroupNamePortsCidrs, SecurityGroup> { - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - protected final CloudStackApi client; - protected final Supplier<LoadingCache<String, Zone>> zoneIdToZone; - protected final Predicate<String> jobComplete; - - @Inject - public CreateSecurityGroupIfNeeded(CloudStackApi client, - Predicate<String> jobComplete, - Supplier<LoadingCache<String, Zone>> zoneIdToZone) { - this.client = checkNotNull(client, "client"); - this.jobComplete = checkNotNull(jobComplete, "jobComplete"); - this.zoneIdToZone = zoneIdToZone; - } - - @Override - public SecurityGroup apply(ZoneSecurityGroupNamePortsCidrs input) { - checkNotNull(input, "input"); - - String zoneId = input.getZone(); - Zone zone = zoneIdToZone.get().getUnchecked(zoneId); - - checkArgument(supportsSecurityGroups().apply(zone), - "Security groups are required, but the zone %s does not support security groups", zoneId); - logger.debug(">> creating securityGroup %s", input); - try { - - SecurityGroup securityGroup = client.getSecurityGroupApi().createSecurityGroup(input.getName()); - - logger.debug("<< created securityGroup(%s)", securityGroup); - ImmutableSet<String> cidrs; - if (!input.getCidrs().isEmpty()) { - cidrs = ImmutableSet.copyOf(input.getCidrs()); - } else { - cidrs = ImmutableSet.of("0.0.0.0/0"); - } - for (int port : input.getPorts()) { - authorizeGroupToItselfAndToTCPPortAndCidr(client, securityGroup, port, cidrs); - } - return securityGroup; - } catch (IllegalStateException e) { - logger.trace("<< trying to find securityGroup(%s): %s", input, e.getMessage()); - SecurityGroup group = client.getSecurityGroupApi().getSecurityGroupByName(input.getName()); - logger.debug("<< reused securityGroup(%s)", group.getId()); - return group; - } - } - - private void authorizeGroupToItselfAndToTCPPortAndCidr(CloudStackApi client, - SecurityGroup securityGroup, - int port, - Set<String> cidrs) { - for (String cidr : cidrs) { - logger.debug(">> authorizing securityGroup(%s) permission to %s on port %d", securityGroup, cidr, port); - if (!portInRangeForCidr(port, cidr).apply(securityGroup)) { - jobComplete.apply(client.getSecurityGroupApi().authorizeIngressPortsToCIDRs(securityGroup.getId(), - "TCP", - port, - port, - ImmutableSet.of(cidr))); - logger.debug("<< authorized securityGroup(%s) permission to %s on port %d", securityGroup, cidr, port); - } - } - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/DateToYyyyMmDd.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/DateToYyyyMmDd.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/DateToYyyyMmDd.java deleted file mode 100644 index cddb19d..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/DateToYyyyMmDd.java +++ /dev/null @@ -1,39 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -import java.text.SimpleDateFormat; -import java.util.Date; - -import com.google.common.base.Function; - -/** - * Convert a Date object into a "yyyy-MM-dd" String - */ -public class DateToYyyyMmDd implements Function<Object, String> { - - public String apply(Object input) { - checkNotNull(input, "input cannot be null"); - checkArgument(input instanceof Date, "input must be a Date"); - - return new SimpleDateFormat("yyyy-MM-dd").format((Date)input); - } - -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetFirewallRulesByVirtualMachine.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetFirewallRulesByVirtualMachine.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetFirewallRulesByVirtualMachine.java deleted file mode 100644 index 3fc73ab..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetFirewallRulesByVirtualMachine.java +++ /dev/null @@ -1,49 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.cache.CacheLoader; -import com.google.common.collect.ImmutableSet; -import java.util.Set; -import javax.inject.Inject; -import javax.inject.Singleton; -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.FirewallRule; -import org.jclouds.cloudstack.options.ListFirewallRulesOptions; - -@Singleton -public class GetFirewallRulesByVirtualMachine extends CacheLoader<String, Set<FirewallRule>> { - private final CloudStackApi client; - - @Inject - public GetFirewallRulesByVirtualMachine(CloudStackApi client) { - this.client = checkNotNull(client, "client"); - } - - /** - * @throws org.jclouds.rest.ResourceNotFoundException - * when there is no ip forwarding rule available for the VM - */ - @Override - public Set<FirewallRule> load(String input) { - String publicIPId = client.getVirtualMachineApi().getVirtualMachine(input).getPublicIPId(); - Set<FirewallRule> rules = client.getFirewallApi() - .listFirewallRules(ListFirewallRulesOptions.Builder.ipAddressId(publicIPId)); - return rules != null ? rules : ImmutableSet.<FirewallRule>of(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetIPForwardingRulesByVirtualMachine.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetIPForwardingRulesByVirtualMachine.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetIPForwardingRulesByVirtualMachine.java deleted file mode 100644 index 02e6fa1..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/GetIPForwardingRulesByVirtualMachine.java +++ /dev/null @@ -1,48 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Set; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.IPForwardingRule; - -import com.google.common.cache.CacheLoader; - -@Singleton -public class GetIPForwardingRulesByVirtualMachine extends CacheLoader<String, Set<IPForwardingRule>> { - private final CloudStackApi client; - - @Inject - public GetIPForwardingRulesByVirtualMachine(CloudStackApi client) { - this.client = checkNotNull(client, "client"); - } - - /** - * @throws org.jclouds.rest.ResourceNotFoundException - * when there is no ip forwarding rule available for the VM - */ - @Override - public Set<IPForwardingRule> load(String input) { - return client.getNATApi().getIPForwardingRulesForVirtualMachine(input); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobFromHttpResponse.java deleted file mode 100644 index 3095729..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobFromHttpResponse.java +++ /dev/null @@ -1,51 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; - -import javax.inject.Singleton; - -import org.jclouds.cloudstack.domain.AsyncJob; -import org.jclouds.domain.JsonBall; -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.UnwrapOnlyJsonValue; - -import com.google.common.base.Function; -import com.google.inject.Inject; - -@Singleton -public class ParseAsyncJobFromHttpResponse implements Function<HttpResponse, AsyncJob<?>> { - private final UnwrapOnlyJsonValue<AsyncJob<Map<String, JsonBall>>> parser; - private final ParseTypedAsyncJob parseTyped; - - @Inject - public ParseAsyncJobFromHttpResponse(ParseTypedAsyncJob parseTyped, - UnwrapOnlyJsonValue<AsyncJob<Map<String, JsonBall>>> parser) { - this.parseTyped = checkNotNull(parseTyped, "parseTyped"); - this.parser = checkNotNull(parser, "parser"); - } - - public AsyncJob<?> apply(HttpResponse response) { - checkNotNull(response, "response"); - AsyncJob<Map<String, JsonBall>> toParse = parser.apply(response); - checkNotNull(toParse, "parsed result from %s", response); - return parseTyped.apply(toParse); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobsFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobsFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobsFromHttpResponse.java deleted file mode 100644 index 59f479f..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseAsyncJobsFromHttpResponse.java +++ /dev/null @@ -1,58 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; -import java.util.Set; - -import javax.inject.Singleton; - -import org.jclouds.cloudstack.domain.AsyncJob; -import org.jclouds.domain.JsonBall; -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.ParseFirstJsonValueNamed; -import org.jclouds.json.internal.GsonWrapper; - -import com.google.common.base.Function; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Iterables; -import com.google.inject.Inject; -import com.google.inject.TypeLiteral; - -@Singleton -public class ParseAsyncJobsFromHttpResponse implements Function<HttpResponse, Set<AsyncJob<?>>> { - private final ParseFirstJsonValueNamed<Set<AsyncJob<Map<String, JsonBall>>>> parser; - private final ParseTypedAsyncJob parseTyped; - - @Inject - public ParseAsyncJobsFromHttpResponse(ParseTypedAsyncJob parseTyped, GsonWrapper gsonView) { - this.parseTyped = checkNotNull(parseTyped, "parseTyped"); - this.parser = new ParseFirstJsonValueNamed<Set<AsyncJob<Map<String, JsonBall>>>>( - checkNotNull(gsonView, "gsonView"), - new TypeLiteral<Set<AsyncJob<Map<String, JsonBall>>>>() { }, - "asyncjobs"); - } - - public Set<AsyncJob<?>> apply(HttpResponse response) { - checkNotNull(response, "response"); - Set<AsyncJob<Map<String, JsonBall>>> toParse = parser.apply(response); - checkNotNull(toParse, "parsed result from %s", response); - return ImmutableSet.copyOf(Iterables.transform(toParse, parseTyped)); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseEventTypesFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseEventTypesFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseEventTypesFromHttpResponse.java deleted file mode 100644 index 552a6e8..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseEventTypesFromHttpResponse.java +++ /dev/null @@ -1,79 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Set; - -import javax.inject.Singleton; - -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.ParseFirstJsonValueNamed; -import org.jclouds.json.internal.GsonWrapper; - -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; -import com.google.inject.Inject; -import com.google.inject.TypeLiteral; - -@Singleton -public class ParseEventTypesFromHttpResponse implements Function<HttpResponse, Set<String>> { - private final ParseFirstJsonValueNamed<Set<EventType>> parser; - - private static class EventType { - private String name; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - EventType that = (EventType) o; - - if (!Objects.equal(name, that.name)) return false; - - return true; - } - - @Override - public int hashCode() { - return Objects.hashCode(name); - } - } - - @Inject - public ParseEventTypesFromHttpResponse(GsonWrapper gsonView) { - this.parser = new ParseFirstJsonValueNamed<Set<EventType>>(checkNotNull(gsonView, "gsonView"), - new TypeLiteral<Set<EventType>>() { - }, "eventtype"); - } - - public Set<String> apply(HttpResponse response) { - checkNotNull(response, "response"); - Set<EventType> toParse = parser.apply(response); - checkNotNull(toParse, "parsed result from %s", response); - Builder<String> builder = ImmutableSet.builder(); - for (EventType entry : toParse) - builder.add(entry.name); - return builder.build(); - } -} - - http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameEntryFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameEntryFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameEntryFromHttpResponse.java deleted file mode 100644 index 936e5aa..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameEntryFromHttpResponse.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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; - -import javax.inject.Singleton; - -import org.jclouds.http.HttpResponse; - -import com.google.common.base.Function; -import com.google.common.collect.Iterables; -import com.google.inject.Inject; - -@Singleton -public class ParseIdToNameEntryFromHttpResponse implements Function<HttpResponse, Map.Entry<String, String>> { - private final ParseIdToNameFromHttpResponse parser; - - @Inject - public ParseIdToNameEntryFromHttpResponse(ParseIdToNameFromHttpResponse parser) { - this.parser = checkNotNull(parser, "parser"); - } - - public Map.Entry<String, String> apply(HttpResponse response) { - checkNotNull(response, "response"); - Map<String, String> toParse = parser.apply(response); - checkNotNull(toParse, "parsed result from %s", response); - return Iterables.getFirst(toParse.entrySet(), null); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameFromHttpResponse.java deleted file mode 100644 index d2ba0a7..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseIdToNameFromHttpResponse.java +++ /dev/null @@ -1,80 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; -import java.util.Set; - -import javax.inject.Singleton; - -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.ParseFirstJsonValueNamed; -import org.jclouds.json.internal.GsonWrapper; - -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSortedMap; -import com.google.common.collect.ImmutableMap.Builder; -import com.google.inject.Inject; -import com.google.inject.TypeLiteral; - -@Singleton -public class ParseIdToNameFromHttpResponse implements Function<HttpResponse, Map<String, String>> { - private final ParseFirstJsonValueNamed<Set<IdName>> parser; - - private static class IdName { - private String id; - private String name; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - IdName that = (IdName) o; - - if (!Objects.equal(id, that.id)) return false; - if (!Objects.equal(name, that.name)) return false; - - return true; - } - - @Override - public int hashCode() { - return Objects.hashCode(id, name); - } - } - - @Inject - public ParseIdToNameFromHttpResponse(GsonWrapper gsonView) { - this.parser = new ParseFirstJsonValueNamed<Set<IdName>>(checkNotNull(gsonView, "gsonView"), - new TypeLiteral<Set<IdName>>() { - }, "oscategory"); - } - - public Map<String, String> apply(HttpResponse response) { - checkNotNull(response, "response"); - Set<IdName> toParse = parser.apply(response); - checkNotNull(toParse, "parsed result from %s", response); - Builder<String, String> builder = ImmutableSortedMap.naturalOrder(); - for (IdName entry : toParse) - builder.put(entry.id, entry.name); - return builder.build(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseLoginResponseFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseLoginResponseFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseLoginResponseFromHttpResponse.java deleted file mode 100644 index 317aa28..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseLoginResponseFromHttpResponse.java +++ /dev/null @@ -1,55 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.Iterables.get; -import static com.google.common.collect.Iterables.getOnlyElement; - -import org.jclouds.cloudstack.domain.LoginResponse; -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.ParseFirstJsonValueNamed; -import org.jclouds.json.internal.GsonWrapper; - -import com.google.common.base.Function; -import com.google.common.base.Splitter; -import com.google.inject.Inject; -import com.google.inject.TypeLiteral; - -public class ParseLoginResponseFromHttpResponse implements Function<HttpResponse, LoginResponse> { - - private ParseFirstJsonValueNamed<LoginResponse> parser; - - @Inject - ParseLoginResponseFromHttpResponse(GsonWrapper gson) { - this.parser = new ParseFirstJsonValueNamed<LoginResponse>(checkNotNull(gson, "gsonView"), - new TypeLiteral<LoginResponse>(){}, "loginresponse"); - } - - @Override - public LoginResponse apply(HttpResponse response) { - checkNotNull(response, "response"); - - LoginResponse login = parser.apply(response); - checkNotNull(login, "loginResponse"); - - String jSessionId = get(Splitter.on("=").split(get(Splitter.on(";").trimResults().split( - getOnlyElement(response.getHeaders().get("Set-Cookie"))), 0)), 1); - - return LoginResponse.builder().fromLoginResponse(login).jSessionId(jSessionId).build(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseNamesFromHttpResponse.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseNamesFromHttpResponse.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseNamesFromHttpResponse.java deleted file mode 100644 index f30c6a4..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseNamesFromHttpResponse.java +++ /dev/null @@ -1,77 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Set; - -import javax.inject.Singleton; - -import org.jclouds.http.HttpResponse; -import org.jclouds.http.functions.ParseFirstJsonValueNamed; -import org.jclouds.json.internal.GsonWrapper; - -import com.google.common.base.Function; -import com.google.common.base.Objects; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSet.Builder; -import com.google.inject.Inject; -import com.google.inject.TypeLiteral; - -@Singleton -public class ParseNamesFromHttpResponse implements Function<HttpResponse, Set<String>> { - private final ParseFirstJsonValueNamed<Set<Name>> parser; - - private static class Name { - private String name; - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - Name that = (Name) o; - - if (!Objects.equal(name, that.name)) return false; - - return true; - } - - @Override - public int hashCode() { - return Objects.hashCode(name); - } - } - - @Inject - public ParseNamesFromHttpResponse(GsonWrapper gsonView) { - this.parser = new ParseFirstJsonValueNamed<Set<Name>>(checkNotNull(gsonView, "gsonView"), - new TypeLiteral<Set<Name>>() { - }, "hypervisor"); - } - - public Set<String> apply(HttpResponse response) { - checkNotNull(response, "response"); - Set<Name> toParse = parser.apply(response); - checkNotNull(toParse, "parsed result from %s", response); - Builder<String> builder = ImmutableSet.builder(); - for (Name entry : toParse) - builder.add(entry.name); - return builder.build(); - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseTypedAsyncJob.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseTypedAsyncJob.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseTypedAsyncJob.java deleted file mode 100644 index 0082ea8..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ParseTypedAsyncJob.java +++ /dev/null @@ -1,129 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import java.util.Map; -import java.util.Map.Entry; - -import javax.annotation.Resource; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.domain.Account; -import org.jclouds.cloudstack.domain.AsyncJob; -import org.jclouds.cloudstack.domain.AsyncJobError; -import org.jclouds.cloudstack.domain.FirewallRule; -import org.jclouds.cloudstack.domain.IPForwardingRule; -import org.jclouds.cloudstack.domain.LoadBalancerRule; -import org.jclouds.cloudstack.domain.Network; -import org.jclouds.cloudstack.domain.PortForwardingRule; -import org.jclouds.cloudstack.domain.PublicIPAddress; -import org.jclouds.cloudstack.domain.SecurityGroup; -import org.jclouds.cloudstack.domain.Snapshot; -import org.jclouds.cloudstack.domain.Template; -import org.jclouds.cloudstack.domain.TemplateExtraction; -import org.jclouds.cloudstack.domain.User; -import org.jclouds.cloudstack.domain.VirtualMachine; -import org.jclouds.cloudstack.domain.Volume; -import org.jclouds.cloudstack.domain.AsyncJob.Builder; -import org.jclouds.cloudstack.domain.AsyncJobError.ErrorCode; -import org.jclouds.domain.JsonBall; -import org.jclouds.json.Json; -import org.jclouds.logging.Logger; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; -import com.google.inject.Inject; - -@Singleton -public class ParseTypedAsyncJob implements Function<AsyncJob<Map<String, JsonBall>>, AsyncJob<?>> { - @Resource - protected Logger logger = Logger.NULL; - - @Inject(optional = true) - @VisibleForTesting - @Named("jclouds.cloudstack.jobresult-type-map") - Map<String, Class<?>> typeMap = ImmutableMap.<String, Class<?>>builder() - .put("user", User.class) - .put("account", Account.class) - .put("securitygroup", SecurityGroup.class) - .put("portforwardingrule", PortForwardingRule.class) - .put("ipforwardingrule", IPForwardingRule.class) - .put("firewallrule", FirewallRule.class) - .put("network", Network.class) - .put("ipaddress", PublicIPAddress.class) - .put("virtualmachine", VirtualMachine.class) - .put("loadbalancer", LoadBalancerRule.class) - .put("snapshot", Snapshot.class) - .put("template", Template.class) - .put("volume", Volume.class).build(); - private final Json json; - - @Inject - public ParseTypedAsyncJob(Json json) { - this.json = checkNotNull(json, "json"); - } - - public AsyncJob<?> apply(AsyncJob<Map<String, JsonBall>> toParse) { - AsyncJob<?> result = toParse; - if (toParse.getResult() != null) { - if (toParse.getResult().size() == 1) { - @SuppressWarnings({"unchecked", "rawtypes"}) - Builder<?, Object> builder = AsyncJob.Builder.fromAsyncJobUntyped((AsyncJob) toParse); - if (toParse.getResult().containsKey("success")) { - builder.result(null); - } else { - Entry<String, JsonBall> entry = Iterables.get(toParse.getResult().entrySet(), 0); - if ("template".equals(entry.getKey())) { - // Sometimes Cloudstack will say 'template' and the payload is a Template object. - // Sometimes Cloudstack will say 'template' and the payload is a TemplateExtraction object. - // The 'state' field only exists on TemplateExtraction, so we can test this to work out what we have actually been given. - Template template = json.fromJson(entry.getValue().toString(), Template.class); - TemplateExtraction templateExtraction = json.fromJson(entry.getValue().toString(), TemplateExtraction.class); - boolean isTemplate = Strings.isNullOrEmpty(templateExtraction.getState()); - builder.result(isTemplate ? template : templateExtraction); - } else if (typeMap.containsKey(entry.getKey())) { - builder.result(json.fromJson(entry.getValue().toString(), typeMap.get(entry.getKey()))); - } else { - logger.warn( - "type key %s not configured. please override default for Map<String, Class<?>> bound to name jclouds.cloudstack.jobresult-type-map", - entry.getKey()); - builder.result(entry.getValue().toString()); - } - } - result = builder.build(); - } else if (toParse.getResult().containsKey("errorcode")) { - @SuppressWarnings({"unchecked", "rawtypes"}) - Builder<?, Object> builder = AsyncJob.Builder.fromAsyncJobUntyped((AsyncJob) toParse); - builder.result(null); // avoid classcastexceptions - builder.error(AsyncJobError.builder().errorCode(ErrorCode.fromValue(toParse.getResult().get("errorcode").toString())) - .errorText(toParse.getResult().containsKey("errortext") ? toParse.getResult().get("errortext").toString().replace("\"", "") : null) - .build()); - result = builder.build(); - } else if (toParse.getResult().size() > 1) { - logger.warn("unexpected size of async job result; expecting a map with a single element", - toParse.getResult()); - } - } - return result; - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ReuseOrAssociateNewPublicIPAddress.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ReuseOrAssociateNewPublicIPAddress.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ReuseOrAssociateNewPublicIPAddress.java deleted file mode 100644 index 7ea19b2..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/ReuseOrAssociateNewPublicIPAddress.java +++ /dev/null @@ -1,101 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Predicates.and; -import static com.google.common.collect.Iterables.find; -import static org.jclouds.cloudstack.options.AssociateIPAddressOptions.Builder.networkId; -import static org.jclouds.cloudstack.options.ListPublicIPAddressesOptions.Builder.allocatedOnly; -import static org.jclouds.cloudstack.predicates.PublicIPAddressPredicates.associatedWithNetwork; -import static org.jclouds.cloudstack.predicates.PublicIPAddressPredicates.available; -import static org.jclouds.compute.reference.ComputeServiceConstants.COMPUTE_LOGGER; - -import java.util.NoSuchElementException; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.AsyncCreateResponse; -import org.jclouds.cloudstack.domain.Network; -import org.jclouds.cloudstack.domain.PublicIPAddress; -import org.jclouds.cloudstack.features.AddressApi; -import org.jclouds.cloudstack.strategy.BlockUntilJobCompletesAndReturnResult; -import org.jclouds.logging.Logger; - -import com.google.common.base.Function; - -@Singleton -public class ReuseOrAssociateNewPublicIPAddress implements Function<Network, PublicIPAddress> { - private final CloudStackApi client; - private final BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult; - @Resource - @Named(COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - @Inject - public ReuseOrAssociateNewPublicIPAddress(CloudStackApi client, - BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult) { - this.client = checkNotNull(client, "client"); - this.blockUntilJobCompletesAndReturnResult = checkNotNull(blockUntilJobCompletesAndReturnResult, - "blockUntilJobCompletesAndReturnResult"); - } - - /** - * Finds existing addresses who are ready for use and not assigned to a - * machine. - * - * @param networkId - * network id to search - * @param client - * address client - * @return address to use - * @throws NoSuchElementException - * if there's no existing ip address that is free for use - */ - public static PublicIPAddress findAvailableAndAssociatedWithNetwork(String networkId, AddressApi client) { - return find(client.listPublicIPAddresses(allocatedOnly(true).networkId(networkId)), - and(associatedWithNetwork(networkId), available())); - } - - public static PublicIPAddress associateIPAddressInNetwork(Network network, CloudStackApi client, - BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult) { - AsyncCreateResponse job = client.getAddressApi().associateIPAddressInZone(network.getZoneId(), - networkId(network.getId())); - PublicIPAddress ip = blockUntilJobCompletesAndReturnResult.<PublicIPAddress> apply(job); - assert ip.getZoneId().equals(network.getZoneId()); - return ip; - } - - @Override - public PublicIPAddress apply(Network input) { - try { - logger.debug(">> looking for existing address in network(%s)", input.getId()); - PublicIPAddress returnVal = findAvailableAndAssociatedWithNetwork(input.getId(), client.getAddressApi()); - logger.debug("<< reused address(%s)", returnVal.getId()); - return returnVal; - } catch (NoSuchElementException e) { - logger.debug(">> associating new address in network(%s)", input.getId()); - PublicIPAddress returnVal = associateIPAddressInNetwork(input, client, blockUntilJobCompletesAndReturnResult); - logger.debug("<< associated address(%s)", returnVal.getId()); - return returnVal; - } - } -} http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/StaticNATVirtualMachineInNetwork.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/StaticNATVirtualMachineInNetwork.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/StaticNATVirtualMachineInNetwork.java deleted file mode 100644 index 87fc128..0000000 --- a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/functions/StaticNATVirtualMachineInNetwork.java +++ /dev/null @@ -1,78 +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.cloudstack.functions; - -import static com.google.common.base.Preconditions.checkNotNull; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; - -import org.jclouds.cloudstack.CloudStackApi; -import org.jclouds.cloudstack.domain.Network; -import org.jclouds.cloudstack.domain.PublicIPAddress; -import org.jclouds.cloudstack.domain.VirtualMachine; -import org.jclouds.compute.reference.ComputeServiceConstants; -import org.jclouds.logging.Logger; - -import com.google.common.base.Function; -import com.google.inject.assistedinject.Assisted; - -@Singleton -public class StaticNATVirtualMachineInNetwork implements Function<VirtualMachine, PublicIPAddress> { - public interface Factory { - StaticNATVirtualMachineInNetwork create(Network in); - } - - @Resource - @Named(ComputeServiceConstants.COMPUTE_LOGGER) - protected Logger logger = Logger.NULL; - - private final CloudStackApi client; - private final ReuseOrAssociateNewPublicIPAddress reuseOrAssociate; - private final Network network; - - @Inject - public StaticNATVirtualMachineInNetwork(CloudStackApi client, - ReuseOrAssociateNewPublicIPAddress reuseOrAssociate, @Assisted Network network) { - this.client = checkNotNull(client, "client"); - this.reuseOrAssociate = checkNotNull(reuseOrAssociate, "reuseOrAssociate"); - this.network = checkNotNull(network, "network"); - } - - public PublicIPAddress apply(VirtualMachine vm) { - PublicIPAddress ip; - for (ip = reuseOrAssociate.apply(network); !ip.isStaticNAT() || ip.getVirtualMachineId() != vm.getId(); ip = reuseOrAssociate - .apply(network)) { - // check to see if someone already grabbed this ip - if (ip.getVirtualMachineId() != null && ip.getVirtualMachineId() != vm.getId()) - continue; - try { - logger.debug(">> static NATing IPAddress(%s) to virtualMachine(%s)", ip.getId(), vm.getId()); - client.getNATApi().enableStaticNATForVirtualMachine(vm.getId(), ip.getId()); - ip = client.getAddressApi().getPublicIPAddress(ip.getId()); - if (ip.isStaticNAT() && ip.getVirtualMachineId().equals(vm.getId())) - break; - } catch (IllegalStateException e) { - // very likely an ip conflict, so retry; - } - return ip; - } - return ip; - } -}
