mirror of
https://github.com/opennetworkinglab/onos.git
synced 2026-05-05 20:26:16 +02:00
Follow up for OpenstackSwitching Refactoring: Updates flow rules for security group updated.
- When security groups are updated, updates the flow rules for the security groups via the SecurityGroupService. Change-Id: I13eacd3a21f804221bdd29105a304a9a1e10f2a8
This commit is contained in:
parent
8d3a9d3a72
commit
c853a72541
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright 2016-present Open Networking Laboratory
|
||||
*
|
||||
* Licensed 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.onosproject.openstacknetworking;
|
||||
|
||||
import org.onosproject.openstackinterface.OpenstackPort;
|
||||
|
||||
/**
|
||||
* Represents OpenstackSecurityGroupService Interface.
|
||||
*/
|
||||
public interface OpenstackSecurityGroupService {
|
||||
|
||||
/**
|
||||
* Updates the flow rules for Security Group for the VM (OpenstackPort).
|
||||
*
|
||||
* @param osPort OpenstackPort information for the VM
|
||||
*/
|
||||
void updateSecurityGroup(OpenstackPort osPort);
|
||||
}
|
||||
@ -23,6 +23,7 @@ import org.apache.felix.scr.annotations.Component;
|
||||
import org.apache.felix.scr.annotations.Deactivate;
|
||||
import org.apache.felix.scr.annotations.Reference;
|
||||
import org.apache.felix.scr.annotations.ReferenceCardinality;
|
||||
import org.apache.felix.scr.annotations.Service;
|
||||
import org.onlab.packet.Ethernet;
|
||||
import org.onlab.packet.IPv4;
|
||||
import org.onlab.packet.Ip4Address;
|
||||
@ -41,6 +42,7 @@ import org.onosproject.openstackinterface.OpenstackInterfaceService;
|
||||
import org.onosproject.openstackinterface.OpenstackPort;
|
||||
import org.onosproject.openstackinterface.OpenstackSecurityGroup;
|
||||
import org.onosproject.openstackinterface.OpenstackSecurityGroupRule;
|
||||
import org.onosproject.openstacknetworking.OpenstackSecurityGroupService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
@ -57,7 +59,9 @@ import static org.onosproject.openstacknetworking.Constants.*;
|
||||
*
|
||||
*/
|
||||
@Component(immediate = true)
|
||||
public class OpenstackSecurityGroupRulePopulator extends AbstractVmHandler {
|
||||
@Service
|
||||
public class OpenstackSecurityGroupRulePopulator extends AbstractVmHandler
|
||||
implements OpenstackSecurityGroupService {
|
||||
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
@ -84,7 +88,7 @@ public class OpenstackSecurityGroupRulePopulator extends AbstractVmHandler {
|
||||
super.deactivate();
|
||||
}
|
||||
|
||||
// TODO call this when port is updated from OpenStack
|
||||
@Override
|
||||
public void updateSecurityGroup(OpenstackPort osPort) {
|
||||
if (!osPort.status().equals(OpenstackPort.PortStatus.ACTIVE)) {
|
||||
return;
|
||||
|
||||
@ -15,7 +15,14 @@
|
||||
*/
|
||||
package org.onosproject.openstacknetworking.web;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import org.onosproject.openstackinterface.OpenstackPort;
|
||||
import org.onosproject.openstackinterface.web.OpenstackPortCodec;
|
||||
import org.onosproject.openstacknetworking.OpenstackSecurityGroupService;
|
||||
import org.onosproject.rest.AbstractWebResource;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
@ -26,13 +33,20 @@ import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
/**
|
||||
* Handles Rest API call from Neutron ML2 plugin.
|
||||
*/
|
||||
@Path("ports")
|
||||
public class OpenstackPortWebResource extends AbstractWebResource {
|
||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||
|
||||
private static final OpenstackPortCodec PORT_CODEC
|
||||
= new OpenstackPortCodec();
|
||||
|
||||
@POST
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@ -51,8 +65,26 @@ public class OpenstackPortWebResource extends AbstractWebResource {
|
||||
@Path("{id}")
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public Response updatePorts(InputStream input) {
|
||||
// TODO call security group update here
|
||||
return Response.status(Response.Status.OK).build();
|
||||
public Response updatePorts(@PathParam("id") String id, InputStream input) {
|
||||
checkNotNull(input);
|
||||
checkNotNull(id);
|
||||
|
||||
try {
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
ObjectNode portNode = (ObjectNode) mapper.readTree(input);
|
||||
OpenstackPort osPort = PORT_CODEC.decode(portNode, this);
|
||||
|
||||
OpenstackSecurityGroupService sgService
|
||||
= getService(OpenstackSecurityGroupService.class);
|
||||
sgService.updateSecurityGroup(osPort);
|
||||
|
||||
return Response.status(Response.Status.OK).build();
|
||||
|
||||
} catch (IOException e) {
|
||||
log.error("UpdatePort post process failed due to {}", e.getMessage());
|
||||
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity(e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user