blob: d7ba4a99b847acc677ed7699e302904b9941b2dc [file] [log] [blame]
musonous95c3ee52016-02-23 10:54:34 +09001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
musonous95c3ee52016-02-23 10:54:34 +09003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.openstacknetworking.web;
18
Hyunsun Moon44aac662017-02-18 02:07:01 +090019import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
musonous95c3ee52016-02-23 10:54:34 +090020import org.onosproject.rest.AbstractWebResource;
Hyunsun Moon44aac662017-02-18 02:07:01 +090021import org.openstack4j.openstack.networking.domain.NeutronFloatingIP;
musonous95c3ee52016-02-23 10:54:34 +090022import org.slf4j.Logger;
23import org.slf4j.LoggerFactory;
24
25import javax.ws.rs.Consumes;
26import javax.ws.rs.DELETE;
27import javax.ws.rs.POST;
28import javax.ws.rs.PUT;
29import javax.ws.rs.Path;
30import javax.ws.rs.PathParam;
31import javax.ws.rs.Produces;
Hyunsun Moon44aac662017-02-18 02:07:01 +090032import javax.ws.rs.core.Context;
musonous95c3ee52016-02-23 10:54:34 +090033import javax.ws.rs.core.MediaType;
34import javax.ws.rs.core.Response;
Hyunsun Moon44aac662017-02-18 02:07:01 +090035import javax.ws.rs.core.UriBuilder;
36import javax.ws.rs.core.UriInfo;
musonous95c3ee52016-02-23 10:54:34 +090037import java.io.InputStream;
38
Hyunsun Moon44aac662017-02-18 02:07:01 +090039import static javax.ws.rs.core.Response.created;
40import static javax.ws.rs.core.Response.noContent;
41import static javax.ws.rs.core.Response.status;
Jian Li091d8d22018-02-20 10:42:06 +090042import static org.onosproject.openstacknetworking.util.OpenstackUtil.jsonToModelEntity;
musonous95c3ee52016-02-23 10:54:34 +090043
44/**
45 * Handles REST API call of Neutron L3 plugin.
46 */
47@Path("floatingips")
48public class OpenstackFloatingIpWebResource extends AbstractWebResource {
49 private final Logger log = LoggerFactory.getLogger(getClass());
50
Hyunsun Moon44aac662017-02-18 02:07:01 +090051 private static final String MESSAGE = "Received floating IP %s request";
52 private static final String FLOATING_IPS = "floatingips";
53
54 private final OpenstackRouterAdminService adminService =
Jian Li5c51d90a2018-02-20 14:10:25 +090055 get(OpenstackRouterAdminService.class);
Hyunsun Moon44aac662017-02-18 02:07:01 +090056
57 @Context
58 private UriInfo uriInfo;
musonous95c3ee52016-02-23 10:54:34 +090059
60 /**
Hyunsun Moon44aac662017-02-18 02:07:01 +090061 * Creates a floating IP from the JSON input stream.
musonous95c3ee52016-02-23 10:54:34 +090062 *
Hyunsun Moon44aac662017-02-18 02:07:01 +090063 * @param input floating ip JSON input stream
64 * @return 201 CREATED if the JSON is correct, 400 BAD_REQUEST if the JSON
65 * is invalid or duplicated floating ip already exists
Jian Li2077f662018-02-12 14:01:35 +090066 * @onos.rsModel NeutronFloatingIp
musonous95c3ee52016-02-23 10:54:34 +090067 */
68 @POST
69 @Consumes(MediaType.APPLICATION_JSON)
70 @Produces(MediaType.APPLICATION_JSON)
71 public Response createFloatingIp(InputStream input) {
Hyunsun Moon44aac662017-02-18 02:07:01 +090072 log.trace(String.format(MESSAGE, "CREATE"));
musonous95c3ee52016-02-23 10:54:34 +090073
Jian Li091d8d22018-02-20 10:42:06 +090074 final NeutronFloatingIP floatingIp = (NeutronFloatingIP)
75 jsonToModelEntity(input, NeutronFloatingIP.class);
76
Hyunsun Moon44aac662017-02-18 02:07:01 +090077 adminService.createFloatingIp(floatingIp);
musonous95c3ee52016-02-23 10:54:34 +090078
Hyunsun Moon44aac662017-02-18 02:07:01 +090079 UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
80 .path(FLOATING_IPS)
81 .path(floatingIp.getId());
musonous95c3ee52016-02-23 10:54:34 +090082
Hyunsun Moon44aac662017-02-18 02:07:01 +090083 return created(locationBuilder.build()).build();
musonous95c3ee52016-02-23 10:54:34 +090084 }
85
86 /**
Hyunsun Moon44aac662017-02-18 02:07:01 +090087 * Updates the floating IP with the specified identifier.
musonous95c3ee52016-02-23 10:54:34 +090088 *
Hyunsun Moon44aac662017-02-18 02:07:01 +090089 * @param id floating ip identifier
90 * @param input floating ip JSON input stream
91 * @return 200 OK with the updated floating ip, 400 BAD_REQUEST if the requested
92 * floating ip does not exist
Jian Li2077f662018-02-12 14:01:35 +090093 * @onos.rsModel NeutronFloatingIp
musonous95c3ee52016-02-23 10:54:34 +090094 */
95 @PUT
96 @Path("{id}")
97 @Consumes(MediaType.APPLICATION_JSON)
98 @Produces(MediaType.APPLICATION_JSON)
99 public Response updateFloatingIp(@PathParam("id") String id, InputStream input) {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900100 log.trace(String.format(MESSAGE, "UPDATE " + id));
musonous95c3ee52016-02-23 10:54:34 +0900101
Jian Li091d8d22018-02-20 10:42:06 +0900102 final NeutronFloatingIP floatingIp = (NeutronFloatingIP)
103 jsonToModelEntity(input, NeutronFloatingIP.class);
104
Hyunsun Moon44aac662017-02-18 02:07:01 +0900105 adminService.updateFloatingIp(floatingIp);
musonous95c3ee52016-02-23 10:54:34 +0900106
Hyunsun Moon44aac662017-02-18 02:07:01 +0900107 return status(Response.Status.OK).build();
musonous95c3ee52016-02-23 10:54:34 +0900108 }
109
110 /**
Hyunsun Moon44aac662017-02-18 02:07:01 +0900111 * Removes the floating IP.
musonous95c3ee52016-02-23 10:54:34 +0900112 *
Hyunsun Moon44aac662017-02-18 02:07:01 +0900113 * @param id floating ip identifier
114 * @return 204 NO_CONTENT, 400 BAD_REQUEST if the floating ip does not exist
musonous95c3ee52016-02-23 10:54:34 +0900115 */
116 @DELETE
117 @Path("{id}")
jskim7d881742016-09-13 09:39:02 +0900118 @Consumes(MediaType.APPLICATION_JSON)
musonous95c3ee52016-02-23 10:54:34 +0900119 public Response deleteFloatingIp(@PathParam("id") String id) {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900120 log.trace(String.format(MESSAGE, "DELETE " + id));
musonous95c3ee52016-02-23 10:54:34 +0900121
Hyunsun Moon44aac662017-02-18 02:07:01 +0900122 adminService.removeFloatingIp(id);
123 return noContent().build();
musonous95c3ee52016-02-23 10:54:34 +0900124 }
musonous95c3ee52016-02-23 10:54:34 +0900125}