2 * Copyright (C) 2014 Red Hat, Inc.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.neutron.transcriber;
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
16 import java.util.concurrent.ConcurrentHashMap;
17 import java.util.concurrent.ConcurrentMap;
19 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
20 import org.opendaylight.neutron.spi.INeutronLoadBalancerHealthMonitorCRUD;
21 import org.opendaylight.neutron.spi.NeutronLoadBalancerHealthMonitor;
22 import org.opendaylight.neutron.spi.Neutron_ID;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.HealthmonitorAttrs.Type;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.osgi.framework.BundleContext;
31 import org.osgi.framework.ServiceRegistration;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
35 public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
36 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
37 private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
40 NeutronLoadBalancerHealthMonitorInterface(ProviderContext providerContext) {
41 super(providerContext);
45 public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
46 return loadBalancerHealthMonitorDB.containsKey(uuid);
50 public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
51 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
52 LOGGER.debug("No LoadBalancerHealthMonitor has Been Defined");
55 return loadBalancerHealthMonitorDB.get(uuid);
59 public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
60 Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
61 for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
62 NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
63 allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
65 LOGGER.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
66 List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
67 ans.addAll(allLoadBalancerHealthMonitors);
72 public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
73 if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
76 loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
77 //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
82 public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
83 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
86 loadBalancerHealthMonitorDB.remove(uuid);
87 //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
92 public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
93 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
96 NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
97 return overwrite(target, delta);
101 public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
102 return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
106 protected Healthmonitors toMd(String uuid) {
107 HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
108 healthmonitorsBuilder.setUuid(toUuid(uuid));
109 return healthmonitorsBuilder.build();
113 protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
114 Healthmonitors healthMonitors) {
115 return InstanceIdentifier.create(Neutron.class)
116 .child(Healthmonitor.class )
117 .child(Healthmonitors.class, healthMonitors.getKey());
121 protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
122 HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
123 healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
124 if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
125 healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
127 if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
128 healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
130 if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
131 healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
133 if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
134 healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
136 if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
137 List<Uuid> listUuid = new ArrayList<Uuid>();
138 for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
139 listUuid.add(toUuid(neutron_id.getID()));
141 healthmonitorsBuilder.setPools(listUuid);
143 if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
144 healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
146 if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
147 healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
149 if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
150 healthmonitorsBuilder.setType(Type.valueOf(healthMonitor.getLoadBalancerHealthMonitorType()));
152 if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
153 healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
155 if (healthMonitor.getLoadBalancerHealthMonitorID() != null) {
156 healthmonitorsBuilder.setUuid(toUuid(healthMonitor.getLoadBalancerHealthMonitorID()));
158 LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
160 return healthmonitorsBuilder.build();
163 public static void registerNewInterface(BundleContext context,
164 ProviderContext providerContext,
165 List<ServiceRegistration<?>> registrations) throws Exception {
166 NeutronLoadBalancerHealthMonitorInterface neutronLoadBalancerHealthMonitorInterface = new NeutronLoadBalancerHealthMonitorInterface(providerContext);
167 ServiceRegistration<INeutronLoadBalancerHealthMonitorCRUD> neutronLoadBalancerHealthMonitorInterfaceRegistration = context.registerService(INeutronLoadBalancerHealthMonitorCRUD.class, neutronLoadBalancerHealthMonitorInterface, null);
168 if(neutronLoadBalancerHealthMonitorInterfaceRegistration != null) {
169 registrations.add(neutronLoadBalancerHealthMonitorInterfaceRegistration);