http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java new file mode 100644 index 0000000..dcb1942 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java @@ -0,0 +1,255 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.Disk; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.ParseDisks; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; +import org.jclouds.rest.binders.BindToJsonPayload; + +/** + * Provides access to Disks via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/disks"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface DiskApi { + + /** + * Returns the specified persistent disk resource. + * + * @param zone Name of the zone the disk is in. + * @param diskName name of the persistent disk resource to return. + * @return a Disk resource. + */ + @Named("Disks:get") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks/{disk}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Disk getInZone(@PathParam("zone") String zone, @PathParam("disk") String diskName); + + /** + * Creates a persistent disk resource in the specified project specifying the size of the disk. + * + * @param diskName the name of disk. + * @param sizeGb the size of the disk + * @param zone the name of the zone where the disk is to be created. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Disks:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(BindToJsonPayload.class) + Operation createInZone(@PayloadParam("name") String diskName, + @PayloadParam("sizeGb") int sizeGb, + @PathParam("zone") String zone); + + /** + * Creates a persistent disk resource from the specified image, in the specified project, + * specifying the size of the disk. + * + * @param sourceImage fully qualified URL for the image to be copied. + * @param diskName the name of disk. + * @param sizeGb the size of the disk + * @param zone the name of the zone where the disk is to be created. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Disks:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(BindToJsonPayload.class) + Operation createFromImageWithSizeInZone(@QueryParam("sourceImage") String sourceImage, + @PayloadParam("name") String diskName, + @PayloadParam("sizeGb") int sizeGb, + @PathParam("zone") String zone); + + /** + * Creates a persistent disk resource from the specified image, in the specified project, + * with the default disk size. + * + * @param sourceImage fully qualified URL for the image to be copied. + * @param diskName the name of disk. + * @param zone the name of the zone where the disk is to be created. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Disks:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(BindToJsonPayload.class) + Operation createFromImageInZone(@QueryParam("sourceImage") String sourceImage, + @PayloadParam("name") String diskName, + @PathParam("zone") String zone); + + /** + * Deletes the specified persistent disk resource. + * + * @param zone the zone the disk is in. + * @param diskName name of the persistent disk resource to delete. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Disks:delete") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks/{disk}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Operation deleteInZone(@PathParam("zone") String zone, @PathParam("disk") String diskName); + + /** + * @see DiskApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Disks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseDisks.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Disk> listFirstPageInZone(@PathParam("zone") String zone); + + /** + * @see DiskApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Disks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseDisks.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Disk> listAtMarkerInZone(@PathParam("zone") String zone, @QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the listPage of persistent disk resources contained within the specified project and zone. + * By default the listPage as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has + * not been set. + * + * @param zone the zone to search in + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the listPage + * @see ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("Disks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseDisks.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Disk> listAtMarkerInZone(@PathParam("zone") String zone, @QueryParam("pageToken") @Nullable String marker, ListOptions listOptions); + + /** + * A paged version of DiskApi#listPageInZone(String) + * + * @param zone the zone to list in + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see DiskApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Disks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseDisks.class) + @Transform(ParseDisks.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Disk> listInZone(@PathParam("zone") String zone); + + @Named("Disks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseDisks.class) + @Transform(ParseDisks.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Disk> listInZone(@PathParam("zone") String zone, ListOptions options); + + /** + * Create a snapshot of a given disk in a zone. + * + * @param zone the zone the disk is in. + * @param diskName the name of the disk. + * @param snapshotName the name for the snapshot to be craeted. + * + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Disks:createSnapshot") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/disks/{disk}/createSnapshot") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @MapBinder(BindToJsonPayload.class) + @Nullable + Operation createSnapshotInZone(@PathParam("zone") String zone, + @PathParam("disk") String diskName, + @PayloadParam("name") String snapshotName); + +}
http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java new file mode 100644 index 0000000..79b2ec0 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/FirewallApi.java @@ -0,0 +1,227 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import java.net.URI; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.Firewall; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.PATCH; +import org.jclouds.googlecomputeengine.functions.internal.ParseFirewalls; +import org.jclouds.googlecomputeengine.handlers.FirewallBinder; +import org.jclouds.googlecomputeengine.options.FirewallOptions; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; +import org.jclouds.rest.binders.BindToJsonPayload; + +/** + * Provides access to Firewalls via their REST API. + * <p/> + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/firewalls"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface FirewallApi { + /** + * Returns the specified image resource. + * + * @param firewallName name of the firewall resource to return. + * @return an Firewall resource + */ + @Named("Firewalls:get") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls/{firewall}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Firewall get(@PathParam("firewall") String firewallName); + + /** + * Creates a firewall resource in the specified project using the data included in the request. + * + * @param name the name of the firewall to be inserted. + * @param network the network to which to add the firewall + * @param firewallOptions the options of the firewall to add + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Firewalls:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/global/firewalls") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(FirewallBinder.class) + Operation createInNetwork(@PayloadParam("name") String name, + @PayloadParam("network") URI network, + @PayloadParam("options") FirewallOptions firewallOptions); + + /** + * Updates the specified firewall resource with the data included in the request. + * + * @param firewallName the name firewall to be updated. + * @param firewallOptions the new firewall. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Firewalls:update") + @PUT + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/global/firewalls/{firewall}") + @OAuthScopes({COMPUTE_SCOPE}) + Operation update(@PathParam("firewall") String firewallName, + @BinderParam(BindToJsonPayload.class) FirewallOptions firewallOptions); + + /** + * Updates the specified firewall resource, with patch semantics, with the data included in the request. + * + * @param firewallName the name firewall to be updated. + * @param firewallOptions the new firewall. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Firewalls:patch") + @PATCH + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/global/firewalls/{firewall}") + @OAuthScopes({COMPUTE_SCOPE}) + Operation patch(@PathParam("firewall") String firewallName, + @BinderParam(BindToJsonPayload.class) FirewallOptions firewallOptions); + + /** + * Deletes the specified image resource. + * + * @param firewallName name of the firewall resource to delete. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. If the image did not exist the result is null. + */ + @Named("Firewalls:delete") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls/{firewall}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + Operation delete(@PathParam("firewall") String firewallName); + + /** + * @see FirewallApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Firewalls:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseFirewalls.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Firewall> listFirstPage(); + + /** + * @see FirewallApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Firewalls:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseFirewalls.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Firewall> listAtMarker(@QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the list of firewall resources available to the specified project. + * By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not + * been set. + * + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list + * @see ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("Firewalls:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseFirewalls.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Firewall> listAtMarker(@QueryParam("pageToken") @Nullable String marker, ListOptions options); + + /** + * @see FirewallApi#list(org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Firewalls:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseFirewalls.class) + @Transform(ParseFirewalls.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Firewall> list(); + + /** + * A paged version of FirewallApi#list() + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see FirewallApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Firewalls:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/firewalls") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseFirewalls.class) + @Transform(ParseFirewalls.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Firewall> list(ListOptions options); +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java new file mode 100644 index 0000000..818ae86 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/GlobalOperationApi.java @@ -0,0 +1,158 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.ParseGlobalOperations; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; + +/** + * Provides access to Global Operations via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/globalOperations"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface GlobalOperationApi { + + /** + * Retrieves the specified operation resource. + * + * @param operationName name of the operation resource to return. + * @return If successful, this method returns an Operation resource + */ + @Named("GlobalOperations:get") + @GET + @Path("/global/operations/{operation}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @Fallback(NullOnNotFoundOr404.class) + Operation get(@PathParam("operation") String operationName); + + /** + * Deletes the specified operation resource. + * + * @param operationName name of the operation resource to delete. + */ + @Named("GlobalOperations:delete") + @DELETE + @Path("/global/operations/{operation}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + void delete(@PathParam("operation") String operationName); + + /** + * @see org.jclouds.googlecomputeengine.features.GlobalOperationApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("GlobalOperations:list") + @GET + @Path("/global/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseGlobalOperations.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Operation> listFirstPage(); + + /** + * @see org.jclouds.googlecomputeengine.features.GlobalOperationApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("GlobalOperations:list") + @GET + @Path("/global/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseGlobalOperations.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Operation> listAtMarker(@QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the listFirstPage of operation resources contained within the specified project. + * By default the listFirstPage as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() + * has not been set. + * + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list, starting at marker + * @see org.jclouds.googlecomputeengine.options.ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("GlobalOperations:list") + @GET + @Path("/global/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseGlobalOperations.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Operation> listAtMarker(@QueryParam("pageToken") @Nullable String marker, + ListOptions listOptions); + + /** + * @see org.jclouds.googlecomputeengine.features.GlobalOperationApi#list(org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("GlobalOperations:list") + @GET + @Path("/global/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseGlobalOperations.class) + @Transform(ParseGlobalOperations.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Operation> list(); + + /** + * A paged version of GlobalOperationApi#listFirstPage() + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see org.jclouds.collect.PagedIterable + * @see org.jclouds.googlecomputeengine.features.GlobalOperationApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("GlobalOperations:list") + @GET + @Path("/global/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseGlobalOperations.class) + @Transform(ParseGlobalOperations.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Operation> list(ListOptions listOptions); + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java new file mode 100644 index 0000000..d5755f2 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java @@ -0,0 +1,167 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.Image; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.ParseImages; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; + +/** + * Provides access to Images via their REST API. + * <p/> + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/images"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface ImageApi { + /** + * Returns the specified image resource. + * + * @param imageName name of the image resource to return. + * @return an Image resource + */ + @Named("Images:get") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images/{image}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Image get(@PathParam("image") String imageName); + + /** + * Deletes the specified image resource. + * + * @param imageName name of the image resource to delete. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. If the image did not exist the result is null. + */ + @Named("Images:delete") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images/{image}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Operation delete(@PathParam("image") String imageName); + + /** + * @see ImageApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Images:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseImages.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Image> listFirstPage(); + + /** + * @see ImageApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Images:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseImages.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Image> listAtMarker(@QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the list of image resources available to the specified project. + * By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not + * been set. + * + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list + * @see ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("Images:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseImages.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Image> listAtMarker(@QueryParam("pageToken") @Nullable String marker, ListOptions listOptions); + + /** + * A paged version of ImageApi#list() + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see ImageApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Images:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseImages.class) + @Transform(ParseImages.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Image> list(); + + /** + * A paged version of ImageApi#list() + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see ImageApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Images:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/images") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseImages.class) + @Transform(ParseImages.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Image> list(ListOptions options); + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java new file mode 100644 index 0000000..2a88a79 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/InstanceApi.java @@ -0,0 +1,381 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import java.util.Map; +import java.util.Set; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.Instance; +import org.jclouds.googlecomputeengine.domain.InstanceTemplate; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.ParseInstances; +import org.jclouds.googlecomputeengine.handlers.InstanceBinder; +import org.jclouds.googlecomputeengine.handlers.MetadataBinder; +import org.jclouds.googlecomputeengine.options.AttachDiskOptions; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.BinderParam; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; +import org.jclouds.rest.binders.BindToJsonPayload; + +/** + * Provides access to Instances via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/instances"/> + * @see InstanceApi + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface InstanceApi { + + /** + * Returns the specified instance resource. + * + * @param zone zone the instance is in. + * @param instanceName name of the instance resource to return. + * @return an Instance resource + */ + @Named("Instances:get") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Instance getInZone(@PathParam("zone") String zone, @PathParam("instance") String instanceName); + + /** + * Creates a instance resource in the specified project using the data included in the request. + * + * + * @param instanceName this name of the instance to be created + * @param zone the name of the zone where the instance will be created + * @param template the instance template + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Instances:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(InstanceBinder.class) + Operation createInZone(@PayloadParam("name") String instanceName, @PathParam("zone") String zone, + @PayloadParam("template") InstanceTemplate template); + + + /** + * Deletes the specified instance resource. + * + * @param zone the instance is in. + * @param instanceName name of the instance resource to delete. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. If the instance did not exist the result is null. + */ + @Named("Instances:delete") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Operation deleteInZone(@PathParam("zone") String zone, @PathParam("instance") String instanceName); + + /** + * A paged version of InstanceApi#listInZone() + * + * @param zone zone instances are in + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see InstanceApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Instances:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseInstances.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Instance> listFirstPageInZone(@PathParam("zone") String zone); + + /** + * Retrieves the list of instance resources available to the specified project. + * By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not + * been set. + * + * @param zone zone instances are in + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list + * @see ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("Instances:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseInstances.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Instance> listAtMarkerInZone(@PathParam("zone") String zone, @Nullable String marker, + ListOptions listOptions); + + /** + * @see InstanceApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Instances:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseInstances.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Instance> listAtMarkerInZone(@PathParam("zone") String zone, + @Nullable String marker); + + /** + * @see InstanceApi#listInZone(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Instances:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseInstances.class) + @Transform(ParseInstances.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Instance> listInZone(@PathParam("zone") String zone); + + /** + * @see InstanceApi#listInZone(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Instances:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseInstances.class) + @Transform(ParseInstances.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Instance> listInZone(@PathParam("zone") String zone, ListOptions options); + + /** + * Adds an access config to an instance's network interface. + * + * @param zone zone instance is in + * @param instanceName the instance name. + * @param accessConfig the AccessConfig to add. + * @param networkInterfaceName network interface name. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Instances:addAccessConfig") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}/addAccessConfig") + @OAuthScopes({COMPUTE_SCOPE}) + Operation addAccessConfigToNicInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName, + @BinderParam(BindToJsonPayload.class) + Instance.NetworkInterface.AccessConfig accessConfig, + @QueryParam("network_interface") String networkInterfaceName); + + /** + * Deletes an access config from an instance's network interface. + * + * @param zone zone instance is in + * @param instanceName the instance name. + * @param accessConfigName the name of the access config to delete + * @param networkInterfaceName network interface name. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Instances:deleteAccessConfig") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}/deleteAccessConfig") + @OAuthScopes(COMPUTE_SCOPE) + Operation deleteAccessConfigFromNicInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName, + @QueryParam("access_config") String accessConfigName, + @QueryParam("network_interface") String networkInterfaceName); + + /** + * Returns the specified instance's serial port output. + * + * @param zone zone instance is in + * @param instanceName the instance name. + * @return if successful, this method returns a SerialPortOutput containing the instance's serial output. + */ + @Named("Instances:serialPort") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}/serialPort") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + Instance.SerialPortOutput getSerialPortOutputInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName); + + /** + * Hard-resets the instance. + * + * @param zone the zone the instance is in + * @param instanceName the instance name + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. If the instance did not exist the result is null. + */ + @Named("Instances:reset") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}/reset") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Operation resetInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName); + + /** + * Attaches a disk to an instance + * + * @param zone The zone the instance is in. + * @param instanceName The instance name to attach to + * @param attachDiskOptions The options for attaching the disk. + * + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Instances:attachDisk") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}/attachDisk") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Operation attachDiskInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName, + @BinderParam(BindToJsonPayload.class) AttachDiskOptions attachDiskOptions); + + /** + * Detaches an attached disk from an instance + * + * @param zone The zone the instance is in. + * @param instanceName The instance name to attach to + * @param deviceName The device name of the disk to detach. + * + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Instances:detachDisk") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/zones/{zone}/instances/{instance}/detachDisk") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + @Nullable + Operation detachDiskInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName, + @QueryParam("deviceName") String deviceName); + + /** + * Sets metadata for an instance using the data included in the request. + * <p/> + * NOTE: This *sets* metadata items on the project (vs *adding* items to metadata), + * if there are pre-existing metadata items that must be kept these must be fetched first and then re-set on the + * new Metadata, e.g. + * <pre><tt> + * Metadata.Builder current = instanceApi.getInZone("us-central1-a", "myInstance").getMetadata().toBuilder(); + * current.addItem("newItem","newItemValue"); + * instanceApi.setMetadataInZone("us-central1-a", "myInstance", current.build()); + * </tt></pre> + * + * @param zone The zone the instance is in + * @param instanceName The name of the instance + * @param metadata the metadata to set + * @param fingerprint The current fingerprint for the items + * + * @return an Operations resource. To check on the status of an operation, poll the Operations resource returned + * to you, and look for the status field. + */ + @Named("Instances:setMetadata") + @POST + @Path("/zones/{zone}/instances/{instance}/setMetadata") + @OAuthScopes(COMPUTE_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Fallback(NullOnNotFoundOr404.class) + @MapBinder(MetadataBinder.class) + @Nullable + Operation setMetadataInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName, + @PayloadParam("items") Map<String, String> metadata, + @PayloadParam("fingerprint") String fingerprint); + + /** + * Sets items for an instance + * + * @param zone The zone the instance is in + * @param instanceName the name of the instance + * @param items A set of items + * @param fingerprint The current fingerprint for the items + * @return an Operations resource. To check on the status of an operation, poll the Operations resource returned + * to you, and look for the status field. + */ + @Named("Instances:setTags") + @POST + @Path("/zones/{zone}/instances/{instance}/setTags") + @OAuthScopes(COMPUTE_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Fallback(NullOnNotFoundOr404.class) + @MapBinder(BindToJsonPayload.class) + @Nullable + Operation setTagsInZone(@PathParam("zone") String zone, + @PathParam("instance") String instanceName, + @PayloadParam("items") Set<String> items, + @PayloadParam("fingerprint") String fingerprint); + +} + http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/MachineTypeApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/MachineTypeApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/MachineTypeApi.java new file mode 100644 index 0000000..9c0e411 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/MachineTypeApi.java @@ -0,0 +1,143 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.MachineType; +import org.jclouds.googlecomputeengine.functions.internal.ParseMachineTypes; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; + +/** + * Provides access to MachineTypes via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/machineTypes"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +@Consumes(MediaType.APPLICATION_JSON) +public interface MachineTypeApi { + + /** + * Returns the specified machine type resource + * + * @param zone the name of the zone the machine type is in + * @param machineTypeName name of the machine type resource to return. + * @return If successful, this method returns a MachineType resource + */ + @Named("MachineTypes:get") + @GET + @Path("/zones/{zone}/machineTypes/{machineType}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + MachineType getInZone(@PathParam("zone") String zone, @PathParam("machineType") String machineTypeName); + + /** + * @see MachineTypeApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("MachineTypes:list") + @GET + @Path("/zones/{zone}/machineTypes") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseMachineTypes.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<MachineType> listFirstPageInZone(@PathParam("zone") String zone); + + /** + * @see MachineTypeApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("MachineTypes:list") + @GET + @Path("/zones/{zone}/machineTypes") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseMachineTypes.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<MachineType> listAtMarkerInZone(@PathParam("zone") String zone, @QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the list of machine type resources available to the specified project. + * By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not + * been set. + * + * @param zone The name of the zone to list in. + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list + * @see ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("MachineTypes:list") + @GET + @Path("/zones/{zone}/machineTypes") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseMachineTypes.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<MachineType> listAtMarkerInZone(@PathParam("zone") String zone, + @QueryParam("pageToken") @Nullable String marker, + ListOptions listOptions); + + /** + * @see MachineTypeApi#listInZone(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("MachineTypes:list") + @GET + @Path("/zones/{zone}/machineTypes") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseMachineTypes.class) + @Transform(ParseMachineTypes.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<MachineType> listInZone(@PathParam("zone") String zone); + + /** + * A paged version of MachineTypeApi#listInZone(String) + * + * @param zone the zone to list in + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see MachineTypeApi#listAtMarkerInZone(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("MachineTypes:list") + @GET + @Path("/zones/{zone}/machineTypes") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseMachineTypes.class) + @Transform(ParseMachineTypes.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<MachineType> listInZone(@PathParam("zone") String zone, ListOptions listOptions); + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/NetworkApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/NetworkApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/NetworkApi.java new file mode 100644 index 0000000..8f21287 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/NetworkApi.java @@ -0,0 +1,204 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Network; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.ParseNetworks; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; +import org.jclouds.rest.binders.BindToJsonPayload; + +/** + * Provides access to Networks via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/networks"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface NetworkApi { + + /** + * Returns the specified persistent network resource. + * + * @param networkName name of the persistent network resource to return. + * @return a Network resource. + */ + @Named("Networks:get") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks/{network}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + Network get(@PathParam("network") String networkName); + + /** + * Creates a persistent network resource in the specified project with the specified range. + * + * @param networkName the network name + * @param IPv4Range the range of the network to be inserted. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Networks:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(BindToJsonPayload.class) + Operation createInIPv4Range(@PayloadParam("name") String networkName, + @PayloadParam("IPv4Range") String IPv4Range); + + /** + * Creates a persistent network resource in the specified project with the specified range and specified gateway. + * + * @param networkName the network name + * @param IPv4Range the range of the network to be inserted. + * @param gatewayIPv4 the range of the network to be inserted. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Networks:insert") + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes({COMPUTE_SCOPE}) + @MapBinder(BindToJsonPayload.class) + Operation createInIPv4RangeWithGateway(@PayloadParam("name") String networkName, + @PayloadParam("IPv4Range") String IPv4Range, + @PayloadParam("gatewayIPv4") String gatewayIPv4); + + /** + * Deletes the specified persistent network resource. + * + * @param networkName name of the persistent network resource to delete. + * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to + * you, and look for the status field. + */ + @Named("Networks:delete") + @DELETE + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks/{network}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + Operation delete(@PathParam("network") String networkName); + + /** + * @see NetworkApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Networks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseNetworks.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Network> listFirstPage(); + + /** + * @see NetworkApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Networks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseNetworks.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Network> listAtMarker(@QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the list of persistent network resources contained within the specified project. + * By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not + * been set. + * + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list + * @see ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("Networks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseNetworks.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Network> listAtMarker(@QueryParam("pageToken") @Nullable String marker, + ListOptions options); + + /** + * @see NetworkApi#list(org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Networks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseNetworks.class) + @Transform(ParseNetworks.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Network> list(); + + /** + * A paged version of NetworkApi#list() + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see PagedIterable + * @see NetworkApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Networks:list") + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Path("/global/networks") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseNetworks.class) + @Transform(ParseNetworks.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Network> list(ListOptions options); +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ProjectApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ProjectApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ProjectApi.java new file mode 100644 index 0000000..8871593 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/ProjectApi.java @@ -0,0 +1,96 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import java.util.Map; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.domain.Project; +import org.jclouds.googlecomputeengine.handlers.MetadataBinder; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.MapBinder; +import org.jclouds.rest.annotations.PayloadParam; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.SkipEncoding; + +/** + * Provides access to Projects via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/projects"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface ProjectApi { + + /** + * Returns the specified project resource. + * + * @param projectName name of the project to return + * @return if successful, this method returns a Project resource + */ + @Named("Projects:get") + @GET + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @Fallback(NullOnNotFoundOr404.class) + @Path("/projects/{project}") + Project get(@PathParam("project") String projectName); + + /** + * Sets metadata common to all instances within the specified project using the data included in the request. + * <p/> + * NOTE: This *sets* metadata items on the project (vs *adding* items to metadata), + * if there are pre-existing metadata items that must be kept these must be fetched first and then re-set on the + * new Metadata, e.g. + * <pre><tt> + * Metadata.Builder current = projectApi.get("myProject").getCommonInstanceMetadata().toBuilder(); + * current.addItem("newItem","newItemValue"); + * projectApi.setCommonInstanceMetadata(current.build()); + * </tt></pre> + * + * @param projectName name of the project to return + * @param metadata the metadata to set + * @param fingerprint The current fingerprint for the metadata + * @return an Operations resource. To check on the status of an operation, poll the Operations resource returned + * to you, and look for the status field. + */ + @Named("Projects:setCommonInstanceMetadata") + @POST + @Path("/projects/{project}/setCommonInstanceMetadata") + @OAuthScopes(COMPUTE_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @MapBinder(MetadataBinder.class) + Operation setCommonInstanceMetadata(@PathParam("project") String projectName, + @PayloadParam("items") Map<String, String> metadata, + @PayloadParam("fingerprint") String fingerprint); +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionApi.java new file mode 100644 index 0000000..608a614 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionApi.java @@ -0,0 +1,135 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Region; +import org.jclouds.googlecomputeengine.functions.internal.ParseRegions; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; + +/** + * Provides access to Regions via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/regions"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +@Consumes(MediaType.APPLICATION_JSON) +public interface RegionApi { + + /** + * Returns the specified region resource + * + * @param regionName name of the region resource to return. + * @return If successful, this method returns a Region resource + */ + @Named("Regions:get") + @GET + @Path("/regions/{region}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + Region get(@PathParam("region") String regionName); + + /** + * @see org.jclouds.googlecomputeengine.features.RegionApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Regions:list") + @GET + @Path("/regions") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseRegions.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Region> listFirstPage(); + + /** + * @see org.jclouds.googlecomputeengine.features.RegionApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Regions:list") + @GET + @Path("/regions") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseRegions.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Region> listAtMarker(String marker); + + /** + * Retrieves the listFirstPage of region resources available to the specified project. + * By default the listFirstPage as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() + * has not been set. + * + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the listFirstPage + * @see org.jclouds.googlecomputeengine.options.ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("Regions:list") + @GET + @Path("/regions") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseRegions.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Region> listAtMarker(String marker, ListOptions listOptions); + + /** + * @see org.jclouds.googlecomputeengine.features.RegionApi#list(org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("Regions:list") + @GET + @Path("/regions") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseRegions.class) + @Transform(ParseRegions.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Region> list(); + + /** + * A paged version of RegionApi#listFirstPage() + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see org.jclouds.googlecomputeengine.features.RegionApi#listAtMarker(String, org.jclouds.googlecomputeengine.options.ListOptions) + * @see org.jclouds.collect.PagedIterable + */ + @Named("Regions:list") + @GET + @Path("/regions") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @ResponseParser(ParseRegions.class) + @Transform(ParseRegions.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Region> list(ListOptions listOptions); +} http://git-wip-us.apache.org/repos/asf/stratos/blob/b45ae00e/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionOperationApi.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionOperationApi.java b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionOperationApi.java new file mode 100644 index 0000000..4afab63 --- /dev/null +++ b/dependencies/jclouds/apis/gce/1.8.1-stratos/src/main/java/org/jclouds/googlecomputeengine/features/RegionOperationApi.java @@ -0,0 +1,163 @@ +/* + * 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.googlecomputeengine.features; + +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_READONLY_SCOPE; +import static org.jclouds.googlecomputeengine.GoogleComputeEngineConstants.COMPUTE_SCOPE; + +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.EmptyIterableWithMarkerOnNotFoundOr404; +import org.jclouds.Fallbacks.EmptyPagedIterableOnNotFoundOr404; +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.collect.PagedIterable; +import org.jclouds.googlecomputeengine.domain.ListPage; +import org.jclouds.googlecomputeengine.domain.Operation; +import org.jclouds.googlecomputeengine.functions.internal.ParseRegionOperations; +import org.jclouds.googlecomputeengine.options.ListOptions; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.oauth.v2.config.OAuthScopes; +import org.jclouds.oauth.v2.filters.OAuthAuthenticationFilter; +import org.jclouds.rest.annotations.Fallback; +import org.jclouds.rest.annotations.RequestFilters; +import org.jclouds.rest.annotations.ResponseParser; +import org.jclouds.rest.annotations.SkipEncoding; +import org.jclouds.rest.annotations.Transform; + +/** + * Provides access to Operations via their REST API. + * + * @see <a href="https://developers.google.com/compute/docs/reference/v1/operations"/> + */ +@SkipEncoding({'/', '='}) +@RequestFilters(OAuthAuthenticationFilter.class) +public interface RegionOperationApi { + + /** + * Retrieves the specified operation resource. + * + * @param region the region the operation is in + * @param operationName name of the operation resource to return. + * @return If successful, this method returns an Operation resource + */ + @Named("RegionOperations:get") + @GET + @Path("/regions/{region}/operations/{operation}") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @Fallback(NullOnNotFoundOr404.class) + Operation getInRegion(@PathParam("region") String region, @PathParam("operation") String operationName); + + /** + * Deletes the specified operation resource. + * + * @param region the region the operation is in + * @param operationName name of the operation resource to delete. + */ + @Named("RegionOperations:delete") + @DELETE + @Path("/regions/{region}/operations/{operation}") + @OAuthScopes(COMPUTE_SCOPE) + @Fallback(NullOnNotFoundOr404.class) + void deleteInRegion(@PathParam("region") String region, @PathParam("operation") String operationName); + + /** + * @see org.jclouds.googlecomputeengine.features.RegionOperationApi#listAtMarkerInRegion(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("RegionOperations:list") + @GET + @Path("/regions/{region}/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseRegionOperations.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Operation> listFirstPageInRegion(@PathParam("region") String region); + + /** + * @see org.jclouds.googlecomputeengine.features.RegionOperationApi#listAtMarkerInRegion(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("RegionOperations:list") + @GET + @Path("/regions/{region}/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseRegionOperations.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Operation> listAtMarkerInRegion(@PathParam("region") String region, + @QueryParam("pageToken") @Nullable String marker); + + /** + * Retrieves the listFirstPage of operation resources contained within the specified project. + * By default the listFirstPage as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() + * has not been set. + * + * @param region the region to list in + * @param marker marks the beginning of the next list page + * @param listOptions listing options + * @return a page of the list, starting at marker + * @see org.jclouds.googlecomputeengine.options.ListOptions + * @see org.jclouds.googlecomputeengine.domain.ListPage + */ + @Named("RegionOperations:list") + @GET + @Path("/regions/{region}/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseRegionOperations.class) + @Fallback(EmptyIterableWithMarkerOnNotFoundOr404.class) + ListPage<Operation> listAtMarkerInRegion(@PathParam("region") String region, + @QueryParam("pageToken") @Nullable String marker, + ListOptions listOptions); + + /** + * @see org.jclouds.googlecomputeengine.features.RegionOperationApi#listInRegion(String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("RegionOperations:list") + @GET + @Path("/regions/{region}/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseRegionOperations.class) + @Transform(ParseRegionOperations.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Operation> listInRegion(@PathParam("region") String region); + + /** + * A paged version of RegionOperationApi#listFirstPageInRegion(String) + * + * @return a Paged, Fluent Iterable that is able to fetch additional pages when required + * @see org.jclouds.collect.PagedIterable + * @see org.jclouds.googlecomputeengine.features.RegionOperationApi#listAtMarkerInRegion(String, String, org.jclouds.googlecomputeengine.options.ListOptions) + */ + @Named("RegionOperations:list") + @GET + @Path("/regions/{region}/operations") + @OAuthScopes(COMPUTE_READONLY_SCOPE) + @Consumes(MediaType.APPLICATION_JSON) + @ResponseParser(ParseRegionOperations.class) + @Transform(ParseRegionOperations.ToPagedIterable.class) + @Fallback(EmptyPagedIterableOnNotFoundOr404.class) + PagedIterable<Operation> listInRegion(@PathParam("region") String region, ListOptions listOptions); + +}
