blob: c39afd6b5bc2395748d616f8d1ec0dd9562e682a [file] [log] [blame]
Daniel Park3a06c522016-01-28 20:51:12 +09001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
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
18import com.fasterxml.jackson.databind.ObjectMapper;
19import com.fasterxml.jackson.databind.node.ObjectNode;
sangho93447f12016-02-24 00:33:22 +090020import org.onosproject.openstackinterface.OpenstackRouter;
21import org.onosproject.openstackinterface.OpenstackRouterInterface;
22import org.onosproject.openstackinterface.web.OpenstackRouterCodec;
23import org.onosproject.openstackinterface.web.OpenstackRouterInterfaceCodec;
Hyunsun Moon05400872017-02-07 17:11:25 +090024import org.onosproject.openstacknetworking.api.OpenstackRoutingService;
Daniel Park3a06c522016-01-28 20:51:12 +090025import org.onosproject.rest.AbstractWebResource;
26import org.slf4j.Logger;
27import org.slf4j.LoggerFactory;
28
29import javax.ws.rs.Consumes;
30import javax.ws.rs.DELETE;
31import javax.ws.rs.POST;
32import javax.ws.rs.PUT;
33import javax.ws.rs.Path;
34import javax.ws.rs.PathParam;
35import javax.ws.rs.Produces;
36import javax.ws.rs.core.MediaType;
37import javax.ws.rs.core.Response;
38import java.io.InputStream;
39import static com.google.common.base.Preconditions.checkNotNull;
40
41/**
42 * Handles REST API call of Neturon L3 plugin.
43 */
44
45@Path("routers")
46public class OpensatckRouterWebResource extends AbstractWebResource {
sangho0c2a3da2016-02-16 13:39:07 +090047 private final Logger log = LoggerFactory.getLogger(getClass());
Daniel Park3a06c522016-01-28 20:51:12 +090048
49 private static final OpenstackRouterInterfaceCodec ROUTER_INTERFACE_CODEC
50 = new OpenstackRouterInterfaceCodec();
51 private static final OpenstackRouterCodec ROUTER_CODEC
52 = new OpenstackRouterCodec();
53
54 @POST
55 @Consumes(MediaType.APPLICATION_JSON)
56 @Produces(MediaType.APPLICATION_JSON)
57 public Response createRouter(InputStream input) {
58 checkNotNull(input);
59 try {
60 ObjectMapper mapper = new ObjectMapper();
61 ObjectNode routerNode = (ObjectNode) mapper.readTree(input);
62
63 OpenstackRouter openstackRouter
64 = ROUTER_CODEC.decode(routerNode, this);
65
sangho0c2a3da2016-02-16 13:39:07 +090066 OpenstackRoutingService routingService
67 = getService(OpenstackRoutingService.class);
68 routingService.createRouter(openstackRouter);
Daniel Park3a06c522016-01-28 20:51:12 +090069
70 log.debug("REST API CREATE router is called {}", input.toString());
71 return Response.status(Response.Status.OK).build();
72 } catch (Exception e) {
73 log.error("Create Router failed because of exception {}",
74 e.toString());
75 return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.toString())
76 .build();
77 }
78 }
79
80 @PUT
81 @Path("{id}")
82 @Consumes(MediaType.APPLICATION_JSON)
83 @Produces(MediaType.APPLICATION_JSON)
sanghoefbc0382016-04-06 13:35:38 +090084 public Response updateRouter(@PathParam("id") String id, InputStream input) {
sangho0c2a3da2016-02-16 13:39:07 +090085 checkNotNull(input);
Daniel Park3a06c522016-01-28 20:51:12 +090086 try {
sangho0c2a3da2016-02-16 13:39:07 +090087 ObjectMapper mapper = new ObjectMapper();
88 ObjectNode routerNode = (ObjectNode) mapper.readTree(input);
Daniel Park3a06c522016-01-28 20:51:12 +090089
sanghoefbc0382016-04-06 13:35:38 +090090 OpenstackRouter or = ROUTER_CODEC.decode(routerNode, this);
91
92 OpenstackRouter.Builder osBuilder = new OpenstackRouter.Builder()
93 .tenantId(or.tenantId())
94 .id(id)
95 .name(or.name())
96 .status(OpenstackRouter.RouterStatus.ACTIVE)
97 .adminStateUp(Boolean.valueOf(or.adminStateUp()))
98 .gatewayExternalInfo(or.gatewayExternalInfo());
sangho0c2a3da2016-02-16 13:39:07 +090099
100 OpenstackRoutingService routingService
101 = getService(OpenstackRoutingService.class);
sanghoefbc0382016-04-06 13:35:38 +0900102 routingService.updateRouter(osBuilder.build());
sangho0c2a3da2016-02-16 13:39:07 +0900103
104 log.debug("REST API UPDATE router is called from router {}", input.toString());
Daniel Park3a06c522016-01-28 20:51:12 +0900105 return Response.status(Response.Status.OK).build();
106 } catch (Exception e) {
107 log.error("Updates Router failed because of exception {}",
108 e.toString());
109 return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.toString())
110 .build();
111 }
112 }
113
114 @PUT
115 @Path("{id}/add_router_interface")
116 @Consumes(MediaType.APPLICATION_JSON)
117 @Produces(MediaType.APPLICATION_JSON)
sanghoefbc0382016-04-06 13:35:38 +0900118 public Response addRouterInterface(@PathParam("id") String id, InputStream input) {
Daniel Park3a06c522016-01-28 20:51:12 +0900119 checkNotNull(input);
120 try {
121 ObjectMapper mapper = new ObjectMapper();
122 ObjectNode routerIfNode = (ObjectNode) mapper.readTree(input);
123
124 OpenstackRouterInterface openstackRouterInterface
125 = ROUTER_INTERFACE_CODEC.decode(routerIfNode, this);
126
sangho0c2a3da2016-02-16 13:39:07 +0900127 OpenstackRoutingService routingService
128 = getService(OpenstackRoutingService.class);
Hyunsun Moonb3eb84d2016-07-27 19:10:52 -0700129 routingService.addRouterInterface(openstackRouterInterface);
Daniel Park3a06c522016-01-28 20:51:12 +0900130
131 log.debug("REST API AddRouterInterface is called from router {} portId: {}, subnetId: {}, tenantId: {}",
132 openstackRouterInterface.id(), openstackRouterInterface.portId(),
133 openstackRouterInterface.subnetId(), openstackRouterInterface.tenantId());
134
135 return Response.status(Response.Status.OK).build();
136 } catch (Exception e) {
137 log.error("AddRouterInterface failed because of exception {}",
138 e.toString());
139 return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.toString())
140 .build();
141 }
142 }
143
144 @DELETE
145 @Path("{id}")
jskim7d881742016-09-13 09:39:02 +0900146 @Consumes(MediaType.APPLICATION_JSON)
Daniel Park3a06c522016-01-28 20:51:12 +0900147 public Response deleteRouter(@PathParam("id") String id) {
148 checkNotNull(id);
sangho0c2a3da2016-02-16 13:39:07 +0900149 OpenstackRoutingService routingService
150 = getService(OpenstackRoutingService.class);
Hyunsun Moonb3eb84d2016-07-27 19:10:52 -0700151 routingService.removeRouter(id);
Daniel Park3a06c522016-01-28 20:51:12 +0900152
153 log.debug("REST API DELETE routers is called {}", id);
Jian Lic2a542b2016-05-10 11:48:19 -0700154 return Response.noContent().build();
Daniel Park3a06c522016-01-28 20:51:12 +0900155 }
156
157 @PUT
158 @Path("{id}/remove_router_interface")
159 @Consumes(MediaType.APPLICATION_JSON)
160 @Produces(MediaType.APPLICATION_JSON)
161 public Response removeRouterInterface(@PathParam("id") String id, InputStream input) {
162 checkNotNull(id);
163 checkNotNull(input);
164 try {
165 ObjectMapper mapper = new ObjectMapper();
166 ObjectNode routerIfNode = (ObjectNode) mapper.readTree(input);
167
168 OpenstackRouterInterface openstackRouterInterface
169 = ROUTER_INTERFACE_CODEC.decode(routerIfNode, this);
170
sangho0c2a3da2016-02-16 13:39:07 +0900171 OpenstackRoutingService routingService
172 = getService(OpenstackRoutingService.class);
173 routingService.removeRouterInterface(openstackRouterInterface);
Daniel Park3a06c522016-01-28 20:51:12 +0900174
175 log.debug("REST API RemoveRouterInterface is called from router {} portId: {}, subnetId: {}," +
176 "tenantId: {}", openstackRouterInterface.id(), openstackRouterInterface.portId(),
177 openstackRouterInterface.subnetId(), openstackRouterInterface.tenantId());
178
179 return Response.status(Response.Status.OK).build();
180 } catch (Exception e) {
181 log.error("RemoveRouterInterface failed because of exception {}",
182 e.toString());
183 return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.toString())
184 .build();
185 }
186 }
187}