1 package org.opendaylight.plugin2oc.neutron;
3 import java.io.IOException;
4 import java.net.HttpURLConnection;
7 import net.juniper.contrail.api.ApiConnector;
8 import net.juniper.contrail.api.types.LoadbalancerHealthmonitor;
9 import net.juniper.contrail.api.types.LoadbalancerHealthmonitorType;
10 import net.juniper.contrail.api.types.Project;
12 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerHealthMonitorAware;
13 import org.opendaylight.controller.networkconfig.neutron.NeutronLoadBalancerHealthMonitor;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
18 * Handle requests for Neutron LoadBalancerHealthMonitor.
20 public class LoadBalancerHealthMonitorHandler implements INeutronLoadBalancerHealthMonitorAware {
25 static final Logger LOGGER = LoggerFactory.getLogger(LoadBalancerHealthMonitorHandler.class);
26 static ApiConnector apiConnector;
29 * Invoked when a health monitor creation is requested to check if the specified
30 * health monitor can be created and then creates the health monitor
32 * @param loadBalancerHealthMonitor
33 * An instance of proposed new NeutronLoadBalancerHealthMonitor object.
35 * @return A HTTP status code to the creation request.
38 public int canCreateNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
39 if (loadBalancerHealthMonitor == null) {
40 LOGGER.error("LoadBalancerHealthMonitor object can't be null..");
41 return HttpURLConnection.HTTP_BAD_REQUEST;
43 apiConnector = Activator.apiConnector;
44 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID() == null) {
45 LOGGER.error("LoadBalancerHealthMonitor tenant Id can not be null");
46 return HttpURLConnection.HTTP_BAD_REQUEST;
49 String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
50 String projectUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID();
52 if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
53 loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
55 if (!(projectUUID.contains("-"))) {
56 projectUUID = Utils.uuidFormater(projectUUID);
58 boolean isValidLoadBalancerHealthMonitorUUID = Utils.isValidHexNumber(loadBalancerHealthMonitorUUID);
59 boolean isValidprojectUUID = Utils.isValidHexNumber(projectUUID);
60 if (!isValidLoadBalancerHealthMonitorUUID || !isValidprojectUUID) {
61 LOGGER.info("Badly formed Hexadecimal UUID...");
62 return HttpURLConnection.HTTP_BAD_REQUEST;
64 projectUUID = UUID.fromString(projectUUID).toString();
65 loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
66 } catch (Exception ex) {
67 LOGGER.error("UUID input incorrect", ex);
68 return HttpURLConnection.HTTP_BAD_REQUEST;
70 Project project = (Project) apiConnector.findById(Project.class, projectUUID);
71 if (project == null) {
73 Thread.currentThread();
75 } catch (InterruptedException e) {
76 LOGGER.error("InterruptedException : ", e);
77 return HttpURLConnection.HTTP_BAD_REQUEST;
79 project = (Project) apiConnector.findById(Project.class, projectUUID);
80 if (project == null) {
81 LOGGER.error("Could not find projectUUID...");
82 return HttpURLConnection.HTTP_NOT_FOUND;
85 LoadbalancerHealthmonitor virtualHealthMonitorByID = (LoadbalancerHealthmonitor) apiConnector.findById(
86 LoadbalancerHealthmonitor.class, loadBalancerHealthMonitorUUID);
87 if (virtualHealthMonitorByID != null) {
88 LOGGER.warn("LoadBalancerHealthMonitor already exists with UUID" + virtualHealthMonitorByID);
89 return HttpURLConnection.HTTP_FORBIDDEN;
91 return HttpURLConnection.HTTP_OK;
92 } catch (IOException ie) {
93 LOGGER.error("IOException : " + ie);
94 return HttpURLConnection.HTTP_INTERNAL_ERROR;
95 } catch (Exception e) {
96 LOGGER.error("Exception : " + e);
97 return HttpURLConnection.HTTP_INTERNAL_ERROR;
102 * Invoked to take action after a health monitor has been created.
104 * @param loadBalancerHealthMonitor
105 * An instance of new NeutronLoadBalancerHealthMonitor object.
108 public void neutronLoadBalancerHealthMonitorCreated(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
110 createHealthMonitor(loadBalancerHealthMonitor);
111 } catch (IOException ex) {
112 LOGGER.warn("Exception : " + ex);
114 LoadbalancerHealthmonitor virtuaLoadbalancerHealthMonitor = null;
116 String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
117 if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
118 loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
120 loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
121 virtuaLoadbalancerHealthMonitor = (LoadbalancerHealthmonitor) apiConnector.findById(
122 LoadbalancerHealthmonitor.class, loadBalancerHealthMonitorUUID);
123 if (virtuaLoadbalancerHealthMonitor != null) {
124 LOGGER.info("LoadBalancerHealthMonitor creation verified....");
126 LOGGER.info("LoadBalancerHealthMonitor creation failed...");
128 } catch (Exception e) {
129 LOGGER.error("Exception : " + e);
134 * Invoked to create the specified NeutronLoadBalancerHealthMonitor.
136 * @param loadBalancerHealthMonitor
137 * An instance of new NeutronLoadBalancerHealthMonitor object.
139 private void createHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) throws IOException {
140 LoadbalancerHealthmonitor virtualLoadBalancerHealthMonitor = new LoadbalancerHealthmonitor();
141 virtualLoadBalancerHealthMonitor = mapLoadBalancerHealthMonitorProperties(loadBalancerHealthMonitor,
142 virtualLoadBalancerHealthMonitor);
143 boolean loadBalancerHealthMonitorCreated;
145 loadBalancerHealthMonitorCreated = apiConnector.create(virtualLoadBalancerHealthMonitor);
146 LOGGER.debug("loadBalancerHealthMonitor: " + loadBalancerHealthMonitorCreated);
147 if (!loadBalancerHealthMonitorCreated) {
148 LOGGER.info("loadBalancerHealthMonitor creation failed..");
150 } catch (Exception Ex) {
151 LOGGER.error("Exception : " + Ex);
153 LOGGER.info("loadBalancerHealthMonitor:" + loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID()
154 + "succesfully created.");
158 public int canUpdateNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor delta,
159 NeutronLoadBalancerHealthMonitor original) {
160 // TODO Auto-generated method stub
165 public void neutronLoadBalancerHealthMonitorUpdated(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
166 // TODO Auto-generated method stub
171 public int canDeleteNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
172 // TODO Auto-generated method stub
177 public void neutronLoadBalancerHealthMonitorDeleted(NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor) {
178 // TODO Auto-generated method stub
183 * Invoked to map the NeutronLoadBalancerHealthMonitor object properties to the LoadbalancerHealthmonitor
186 * @param loadBalancerHealthMonitor
187 * An instance of new NeutronLoadBalancerHealthMonitor object.
188 * @param virtualLoadBalancerHealthMonitor
189 * An instance of new LoadbalancerHealthmonitor object.
190 * @return {@link LoadbalancerHealthmonitor}
192 private LoadbalancerHealthmonitor mapLoadBalancerHealthMonitorProperties(
193 NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor,
194 LoadbalancerHealthmonitor virtualLoadBalancerHealthMonitor) {
195 String loadBalancerHealthMonitorUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorID();
196 String projectUUID = loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTenantID();
198 if (!(loadBalancerHealthMonitorUUID.contains("-"))) {
199 loadBalancerHealthMonitorUUID = Utils.uuidFormater(loadBalancerHealthMonitorUUID);
201 if (!(projectUUID.contains("-"))) {
202 projectUUID = Utils.uuidFormater(projectUUID);
204 projectUUID = UUID.fromString(projectUUID).toString();
205 loadBalancerHealthMonitorUUID = UUID.fromString(loadBalancerHealthMonitorUUID).toString();
206 Project project = (Project) apiConnector.findById(Project.class, projectUUID);
207 virtualLoadBalancerHealthMonitor.setParent(project);
208 } catch (Exception ex) {
209 LOGGER.error("UUID input incorrect", ex);
211 virtualLoadBalancerHealthMonitor.setDisplayName(loadBalancerHealthMonitorUUID);
212 virtualLoadBalancerHealthMonitor.setName(loadBalancerHealthMonitorUUID);
213 virtualLoadBalancerHealthMonitor.setUuid(loadBalancerHealthMonitorUUID);
214 LoadbalancerHealthmonitorType loadbalancer_healthmonitor_properties = new LoadbalancerHealthmonitorType();
215 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp() != null) {
216 loadbalancer_healthmonitor_properties.setAdminState(loadBalancerHealthMonitor
217 .getLoadBalancerHealthMonitorAdminStateIsUp());
219 loadbalancer_healthmonitor_properties.setAdminState(true);
221 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
222 loadbalancer_healthmonitor_properties.setDelay(loadBalancerHealthMonitor
223 .getLoadBalancerHealthMonitorDelay());
225 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
226 loadbalancer_healthmonitor_properties.setExpectedCodes(loadBalancerHealthMonitor
227 .getLoadBalancerHealthMonitorExpectedCodes());
229 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
230 loadbalancer_healthmonitor_properties.setHttpMethod(loadBalancerHealthMonitor
231 .getLoadBalancerHealthMonitorHttpMethod());
233 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
234 loadbalancer_healthmonitor_properties.setMaxRetries(loadBalancerHealthMonitor
235 .getLoadBalancerHealthMonitorMaxRetries());
237 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
238 loadbalancer_healthmonitor_properties.setTimeout(loadBalancerHealthMonitor
239 .getLoadBalancerHealthMonitorTimeout());
241 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorType() != null) {
242 loadbalancer_healthmonitor_properties.setType(loadBalancerHealthMonitor.getLoadBalancerHealthMonitorType());
244 if (loadBalancerHealthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
245 loadbalancer_healthmonitor_properties.setUrlPath(loadBalancerHealthMonitor
246 .getLoadBalancerHealthMonitorUrlPath());
248 virtualLoadBalancerHealthMonitor.setProperties(loadbalancer_healthmonitor_properties);
249 return virtualLoadBalancerHealthMonitor;