/* | |
* 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.openstack.trove.v1.features; | |
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.core.MediaType; | |
import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404; | |
import org.jclouds.Fallbacks.FalseOnNotFoundOr404; | |
import org.jclouds.Fallbacks.NullOnNotFoundOr404; | |
import org.jclouds.javax.annotation.Nullable; | |
import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; | |
import org.jclouds.openstack.trove.v1.binders.BindCreateInstanceToJson; | |
import org.jclouds.openstack.trove.v1.domain.Instance; | |
import org.jclouds.openstack.trove.v1.functions.ParsePasswordFromRootedInstance; | |
import org.jclouds.rest.ResourceNotFoundException; | |
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.SelectJson; | |
import org.jclouds.rest.annotations.SkipEncoding; | |
import com.google.common.collect.FluentIterable; | |
/** | |
* This API is for creating, listing, and deleting an Instance, and allows enabling a root user. | |
* @see org.jclouds.openstack.trove.v1.domain.Instance | |
* Instance | |
* | |
* @see <a href="http://sourceforge.net/apps/trac/reddwarf/">api doc</a> | |
* @see <a | |
* href="https://github.com/reddwarf-nextgen/reddwarf">api | |
* src</a> | |
* | |
* @author Zack Shoylev | |
*/ | |
@SkipEncoding({'/', '='}) | |
@RequestFilters(AuthenticateRequest.class) | |
public interface InstanceApi { | |
/** | |
* Same as {@link #create(String, int, String)} but accept an integer Flavor ID. | |
* | |
* @param flavor The flavor ID. | |
* @param volumeSize The size in GB of the instance volume. | |
* @param name The name of the instance. | |
* @return The instance created. | |
* | |
* @see InstanceApi#create(String, int, String) | |
*/ | |
@Named("instance:create") | |
@POST | |
@Path("/instances") | |
@SelectJson("instance") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@MapBinder(BindCreateInstanceToJson.class) | |
Instance create(@PayloadParam("flavorRef") int flavor, @PayloadParam("size") int volumeSize, @PayloadParam("name") String name); | |
/** | |
* Create a database instance by flavor type and volume size. | |
* | |
* @param flavor The flavor URL or flavor id as string. | |
* @param volumeSize The size in GB of the instance volume. | |
* @param name The name of the instance. | |
* @return The instance created. | |
*/ | |
@Named("instance:create") | |
@POST | |
@Path("/instances") | |
@SelectJson("instance") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@MapBinder(BindCreateInstanceToJson.class) | |
Instance create(@PayloadParam("flavorRef") String flavor, @PayloadParam("size") int volumeSize, @PayloadParam("name") String name); | |
/** | |
* Deletes an Instance by id. | |
* | |
* @param instanceId The instance id. | |
* @return true if successful. | |
*/ | |
@Named("instances:delete/{id}") | |
@DELETE | |
@Path("/instances/{id}") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@Fallback(FalseOnNotFoundOr404.class) | |
boolean delete(@PathParam("id") String instanceId); | |
/** | |
* Enables root for an instance. | |
* | |
* @param instanceId The instance id. | |
* @return String The password for the root user. | |
*/ | |
@Named("instances/{id}/root") | |
@POST | |
@Path("/instances/{id}/root") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@ResponseParser(ParsePasswordFromRootedInstance.class) | |
@Fallback(NullOnNotFoundOr404.class) | |
String enableRoot(@PathParam("id") String instanceId); | |
/** | |
* Checks to see if root is enabled for an instance. | |
* | |
* @param instanceId The instance id. | |
* @throws ResourceNotFoundException | |
* @return boolean True if root is enabled. | |
*/ | |
@Named("instances/{id}/root") | |
@GET | |
@Path("/instances/{id}/root") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@SelectJson("rootEnabled") | |
boolean isRooted(@PathParam("id") String instanceId); | |
/** | |
* Returns a summary list of Instances. | |
* | |
* @return The list of Instances. | |
*/ | |
@Named("instance:list") | |
@GET | |
@Path("/instances") | |
@SelectJson("instances") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@Fallback(EmptyFluentIterableOnNotFoundOr404.class) | |
FluentIterable<Instance> list(); | |
/** | |
* Returns an Instance by id. | |
* | |
* @param instanceId The instance id. | |
* @return Instance or Null on not found. | |
*/ | |
@Named("instances:get/{id}") | |
@GET | |
@Path("/instances/{id}") | |
@SelectJson("instance") | |
@Consumes(MediaType.APPLICATION_JSON) | |
@Fallback(NullOnNotFoundOr404.class) | |
@Nullable | |
Instance get(@PathParam("id") String instanceId); | |
} |