blob: 0bec17a378ff6e97fb26627b539c56623fe1b091 [file] [log] [blame]
Daniel Park3a06c522016-01-28 20:51:12 +09001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Daniel Park3a06c522016-01-28 20:51:12 +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 */
sangho0c2a3da2016-02-16 13:39:07 +090016package org.onosproject.openstacknetworking.web;
Daniel Park3a06c522016-01-28 20:51:12 +090017
Hyunsun Moon44aac662017-02-18 02:07:01 +090018import org.onosproject.openstacknetworking.api.OpenstackRouterAdminService;
Daniel Park3a06c522016-01-28 20:51:12 +090019import org.onosproject.rest.AbstractWebResource;
Hyunsun Moon44aac662017-02-18 02:07:01 +090020import org.openstack4j.openstack.networking.domain.NeutronRouter;
21import org.openstack4j.openstack.networking.domain.NeutronRouterInterface;
Daniel Park3a06c522016-01-28 20:51:12 +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;
Daniel Park3a06c522016-01-28 20:51:12 +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;
Daniel Park3a06c522016-01-28 20:51:12 +090037import java.io.InputStream;
Hyunsun Moon44aac662017-02-18 02:07:01 +090038
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 Lidea0fdb2018-04-02 19:02:48 +090042import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.jsonToModelEntity;
Daniel Park3a06c522016-01-28 20:51:12 +090043
44/**
45 * Handles REST API call of Neturon L3 plugin.
46 */
47
48@Path("routers")
daniel park9fc3d0e2017-09-04 15:15:17 +090049public class OpenstackRouterWebResource extends AbstractWebResource {
sangho0c2a3da2016-02-16 13:39:07 +090050 private final Logger log = LoggerFactory.getLogger(getClass());
Daniel Park3a06c522016-01-28 20:51:12 +090051
Hyunsun Moon44aac662017-02-18 02:07:01 +090052 private static final String MESSAGE_ROUTER = "Received router %s request";
53 private static final String MESSAGE_ROUTER_IFACE = "Received router interface %s request";
54 private static final String ROUTERS = "routers";
Daniel Park3a06c522016-01-28 20:51:12 +090055
Hyunsun Moon44aac662017-02-18 02:07:01 +090056 private final OpenstackRouterAdminService adminService =
Jian Li96abb152018-02-21 17:06:58 +090057 get(OpenstackRouterAdminService.class);
Hyunsun Moon44aac662017-02-18 02:07:01 +090058
59 @Context
60 private UriInfo uriInfo;
61
62 /**
63 * Creates a router from the JSON input stream.
64 *
65 * @param input router JSON input stream
66 * @return 201 CREATED if the JSON is correct, 400 BAD_REQUEST if the JSON
67 * is invalid or duplicated router already exists
Jian Lid3472bf2018-02-12 15:22:04 +090068 * @onos.rsModel NeutronRouter
Hyunsun Moon44aac662017-02-18 02:07:01 +090069 */
Daniel Park3a06c522016-01-28 20:51:12 +090070 @POST
71 @Consumes(MediaType.APPLICATION_JSON)
72 @Produces(MediaType.APPLICATION_JSON)
73 public Response createRouter(InputStream input) {
Hyunsun Moon44aac662017-02-18 02:07:01 +090074 log.trace(String.format(MESSAGE_ROUTER, "CREATE"));
Daniel Park3a06c522016-01-28 20:51:12 +090075
Jian Li091d8d22018-02-20 10:42:06 +090076 final NeutronRouter osRouter = (NeutronRouter)
77 jsonToModelEntity(input, NeutronRouter.class);
78
Hyunsun Moon44aac662017-02-18 02:07:01 +090079 adminService.createRouter(osRouter);
Daniel Park3a06c522016-01-28 20:51:12 +090080
Hyunsun Moon44aac662017-02-18 02:07:01 +090081 UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
82 .path(ROUTERS)
83 .path(osRouter.getId());
Daniel Park3a06c522016-01-28 20:51:12 +090084
Hyunsun Moon44aac662017-02-18 02:07:01 +090085 return created(locationBuilder.build()).build();
Daniel Park3a06c522016-01-28 20:51:12 +090086 }
87
Hyunsun Moon44aac662017-02-18 02:07:01 +090088 /**
89 * Updates the router with the specified identifier.
90 *
91 * @param id router identifier
92 * @param input router JSON input stream
93 * @return 200 OK with the updated router, 400 BAD_REQUEST if the requested
94 * router does not exist
Jian Lid3472bf2018-02-12 15:22:04 +090095 * @onos.rsModel NeutronRouter
Hyunsun Moon44aac662017-02-18 02:07:01 +090096 */
Daniel Park3a06c522016-01-28 20:51:12 +090097 @PUT
98 @Path("{id}")
99 @Consumes(MediaType.APPLICATION_JSON)
100 @Produces(MediaType.APPLICATION_JSON)
sanghoefbc0382016-04-06 13:35:38 +0900101 public Response updateRouter(@PathParam("id") String id, InputStream input) {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900102 log.trace(String.format(MESSAGE_ROUTER, "UPDATE " + id));
Daniel Park3a06c522016-01-28 20:51:12 +0900103
Jian Li091d8d22018-02-20 10:42:06 +0900104 final NeutronRouter osRouter = (NeutronRouter)
105 jsonToModelEntity(input, NeutronRouter.class);
106
Hyunsun Moon44aac662017-02-18 02:07:01 +0900107 osRouter.setId(id);
108 adminService.updateRouter(osRouter);
sanghoefbc0382016-04-06 13:35:38 +0900109
Hyunsun Moon44aac662017-02-18 02:07:01 +0900110 return status(Response.Status.OK).build();
Daniel Park3a06c522016-01-28 20:51:12 +0900111 }
112
Hyunsun Moon44aac662017-02-18 02:07:01 +0900113 /**
114 * Updates the router with the specified router interface.
115 *
116 * @param id router identifier
117 * @param input router interface JSON input stream
118 * @return 200 OK with the updated router interface, 400 BAD_REQUEST if the
119 * requested router does not exist
Jian Lid3472bf2018-02-12 15:22:04 +0900120 * @onos.rsModel NeutronRouterInterface
Hyunsun Moon44aac662017-02-18 02:07:01 +0900121 */
Daniel Park3a06c522016-01-28 20:51:12 +0900122 @PUT
123 @Path("{id}/add_router_interface")
124 @Consumes(MediaType.APPLICATION_JSON)
125 @Produces(MediaType.APPLICATION_JSON)
sanghoefbc0382016-04-06 13:35:38 +0900126 public Response addRouterInterface(@PathParam("id") String id, InputStream input) {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900127 log.trace(String.format(MESSAGE_ROUTER_IFACE, "UPDATE " + id));
Daniel Park3a06c522016-01-28 20:51:12 +0900128
Jian Li091d8d22018-02-20 10:42:06 +0900129 final NeutronRouterInterface osRouterIface = (NeutronRouterInterface)
130 jsonToModelEntity(input, NeutronRouterInterface.class);
131
Hyunsun Moon44aac662017-02-18 02:07:01 +0900132 adminService.addRouterInterface(osRouterIface);
Daniel Park3a06c522016-01-28 20:51:12 +0900133
Hyunsun Moon44aac662017-02-18 02:07:01 +0900134 return status(Response.Status.OK).build();
Daniel Park3a06c522016-01-28 20:51:12 +0900135 }
136
Hyunsun Moon44aac662017-02-18 02:07:01 +0900137 /**
138 * Updates the router with the specified router interface.
139 *
140 * @param id router identifier
141 * @param input router interface JSON input stream
142 * @return 200 OK with the updated router interface, 400 BAD_REQUEST if the
143 * requested router does not exist
Jian Lid3472bf2018-02-12 15:22:04 +0900144 * @onos.rsModel NeutronRouterInterface
Hyunsun Moon44aac662017-02-18 02:07:01 +0900145 */
Daniel Park3a06c522016-01-28 20:51:12 +0900146 @PUT
147 @Path("{id}/remove_router_interface")
148 @Consumes(MediaType.APPLICATION_JSON)
149 @Produces(MediaType.APPLICATION_JSON)
Jian Li96abb152018-02-21 17:06:58 +0900150 public Response deleteRouterInterface(@PathParam("id") String id, InputStream input) {
Hyunsun Moon44aac662017-02-18 02:07:01 +0900151 log.trace(String.format(MESSAGE_ROUTER_IFACE, "DELETE " + id));
152
Jian Li091d8d22018-02-20 10:42:06 +0900153 final NeutronRouterInterface osRouterIface = (NeutronRouterInterface)
154 jsonToModelEntity(input, NeutronRouterInterface.class);
155
Hyunsun Moon44aac662017-02-18 02:07:01 +0900156 adminService.removeRouterInterface(osRouterIface.getPortId());
157
158 return status(Response.Status.OK).build();
159 }
160
161 /**
162 * Removes the router.
163 *
164 * @param id router identifier
165 * @return 204 NO_CONTENT, 400 BAD_REQUEST if the router does not exist
166 */
167 @DELETE
168 @Path("{id}")
169 @Consumes(MediaType.APPLICATION_JSON)
170 public Response deleteRouter(@PathParam("id") String id) {
171 log.trace(String.format(MESSAGE_ROUTER, "DELETE " + id));
172
173 adminService.removeRouter(id);
174 return noContent().build();
175 }
Daniel Park3a06c522016-01-28 20:51:12 +0900176}