1a9c656a3a464a3e549ca065ff80883f9cf6ff83
[netvirt.git] / neutron / src / main / java / org / opendaylight / ovsdb / neutron / NetworkHandler.java
1 package org.opendaylight.ovsdb.neutron;
2
3 import java.net.HttpURLConnection;
4 import java.util.List;
5
6 import org.opendaylight.controller.containermanager.ContainerConfig;
7 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
8 import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 /**
13  * Handle requests for Neutron Network.
14  */
15 public class NetworkHandler extends BaseHandler
16                             implements INeutronNetworkAware {
17     /**
18      * Logger instance.
19      */
20     static final Logger logger = LoggerFactory.getLogger(NetworkHandler.class);
21
22     /**
23      * Invoked when a network creation is requested
24      * to indicate if the specified network can be created.
25      *
26      * @param network  An instance of proposed new Neutron Network object.
27      * @return A HTTP status code to the creation request.
28      */
29     @Override
30     public int canCreateNetwork(NeutronNetwork network) {
31         if (network.isShared()) {
32             logger.error(" Network shared attribute not supported ");
33             return HttpURLConnection.HTTP_NOT_ACCEPTABLE;
34         }
35
36         String networkID = convertNeutronIDToKey(network.getID());
37
38         List<String> containers = containerManager.getContainerNames();
39         if (containers.contains(networkID)) {
40             logger.debug("Container with name {} exists", networkID);
41             return HttpURLConnection.HTTP_CONFLICT;
42         }
43
44         return HttpURLConnection.HTTP_CREATED;
45     }
46
47     /**
48      * Invoked to take action after a network has been created.
49      *
50      * @param network  An instance of new Neutron Network object.
51      */
52     @Override
53     public void neutronNetworkCreated(NeutronNetwork network) {
54         int result = HttpURLConnection.HTTP_BAD_REQUEST;
55
56         result = canCreateNetwork(network);
57         if (result != HttpURLConnection.HTTP_CREATED) {
58             logger.debug("Network creation failed {} ", result);
59             return;
60         }
61         String networkId = convertNeutronIDToKey(network.getID());
62         result = TenantNetworkManager.getManager().networkCreated(networkId);
63         logger.debug("Neutron Network {} Created with Internal Vlan : {}", network.toString(), result);
64     }
65
66     /**
67      * Invoked when a network update is requested
68      * to indicate if the specified network can be changed
69      * using the specified delta.
70      *
71      * @param delta     Updates to the network object using patch semantics.
72      * @param original  An instance of the Neutron Network object
73      *                  to be updated.
74      * @return A HTTP status code to the update request.
75      */
76     @Override
77     public int canUpdateNetwork(NeutronNetwork delta,
78                                 NeutronNetwork original) {
79         return HttpURLConnection.HTTP_OK;
80     }
81
82     /**
83      * Invoked to take action after a network has been updated.
84      *
85      * @param network An instance of modified Neutron Network object.
86      */
87     @Override
88     public void neutronNetworkUpdated(NeutronNetwork network) {
89         return;
90     }
91
92     /**
93      * Invoked when a network deletion is requested
94      * to indicate if the specified network can be deleted.
95      *
96      * @param network  An instance of the Neutron Network object to be deleted.
97      * @return A HTTP status code to the deletion request.
98      */
99     @Override
100     public int canDeleteNetwork(NeutronNetwork network) {
101         return HttpURLConnection.HTTP_OK;
102     }
103
104     /**
105      * Invoked to take action after a network has been deleted.
106      *
107      * @param network  An instance of deleted Neutron Network object.
108      */
109     @Override
110     public void neutronNetworkDeleted(NeutronNetwork network) {
111
112         int result = canDeleteNetwork(network);
113         if  (result != HttpURLConnection.HTTP_OK) {
114             logger.error(" deleteNetwork validation failed for result - {} ",
115                     result);
116             return;
117         }
118         String networkID = convertNeutronIDToKey(network.getID());
119
120         ContainerConfig config = new ContainerConfig();
121         config.setContainer(networkID);
122         containerManager.removeContainer(config);
123     }
124 }