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.constants.rev160807.ProbeBase;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeHttp;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeHttps;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeIcmp;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.constants.rev160807.ProbeTcp;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Healthmonitor;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.Healthmonitors;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.healthmonitor.HealthmonitorsBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
33 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
34 import org.osgi.framework.BundleContext;
35 import org.osgi.framework.ServiceRegistration;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 import com.google.common.collect.ImmutableBiMap;
41 public class NeutronLoadBalancerHealthMonitorInterface extends AbstractNeutronInterface<Healthmonitors, NeutronLoadBalancerHealthMonitor> implements INeutronLoadBalancerHealthMonitorCRUD {
42 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerHealthMonitorInterface.class);
43 private ConcurrentMap<String, NeutronLoadBalancerHealthMonitor> loadBalancerHealthMonitorDB = new ConcurrentHashMap<String, NeutronLoadBalancerHealthMonitor>();
45 private static final ImmutableBiMap<Class<? extends ProbeBase>,String> PROBE_MAP
46 = new ImmutableBiMap.Builder<Class<? extends ProbeBase>,String>()
47 .put(ProbeHttp.class,"HTTP")
48 .put(ProbeHttps.class,"HTTPS")
49 .put(ProbeIcmp.class,"ICMP")
50 .put(ProbeTcp.class,"TCP")
54 NeutronLoadBalancerHealthMonitorInterface(ProviderContext providerContext) {
55 super(providerContext);
59 public boolean neutronLoadBalancerHealthMonitorExists(String uuid) {
60 return loadBalancerHealthMonitorDB.containsKey(uuid);
64 public NeutronLoadBalancerHealthMonitor getNeutronLoadBalancerHealthMonitor(String uuid) {
65 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
66 LOGGER.debug("No LoadBalancerHealthMonitor has Been Defined");
69 return loadBalancerHealthMonitorDB.get(uuid);
73 public List<NeutronLoadBalancerHealthMonitor> getAllNeutronLoadBalancerHealthMonitors() {
74 Set<NeutronLoadBalancerHealthMonitor> allLoadBalancerHealthMonitors = new HashSet<NeutronLoadBalancerHealthMonitor>();
75 for (Entry<String, NeutronLoadBalancerHealthMonitor> entry : loadBalancerHealthMonitorDB.entrySet()) {
76 NeutronLoadBalancerHealthMonitor loadBalancerHealthMonitor = entry.getValue();
77 allLoadBalancerHealthMonitors.add(loadBalancerHealthMonitor);
79 LOGGER.debug("Exiting getLoadBalancerHealthMonitors, Found {} OpenStackLoadBalancerHealthMonitor", allLoadBalancerHealthMonitors.size());
80 List<NeutronLoadBalancerHealthMonitor> ans = new ArrayList<NeutronLoadBalancerHealthMonitor>();
81 ans.addAll(allLoadBalancerHealthMonitors);
86 public boolean addNeutronLoadBalancerHealthMonitor(NeutronLoadBalancerHealthMonitor input) {
87 if (neutronLoadBalancerHealthMonitorExists(input.getLoadBalancerHealthMonitorID())) {
90 loadBalancerHealthMonitorDB.putIfAbsent(input.getLoadBalancerHealthMonitorID(), input);
91 //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkCreated on them
96 public boolean removeNeutronLoadBalancerHealthMonitor(String uuid) {
97 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
100 loadBalancerHealthMonitorDB.remove(uuid);
101 //TODO: add code to find INeutronLoadBalancerHealthMonitorAware services and call newtorkDeleted on them
106 public boolean updateNeutronLoadBalancerHealthMonitor(String uuid, NeutronLoadBalancerHealthMonitor delta) {
107 if (!neutronLoadBalancerHealthMonitorExists(uuid)) {
110 NeutronLoadBalancerHealthMonitor target = loadBalancerHealthMonitorDB.get(uuid);
111 return overwrite(target, delta);
115 public boolean neutronLoadBalancerHealthMonitorInUse(String loadBalancerHealthMonitorUUID) {
116 return !neutronLoadBalancerHealthMonitorExists(loadBalancerHealthMonitorUUID);
120 protected Healthmonitors toMd(String uuid) {
121 HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
122 healthmonitorsBuilder.setUuid(toUuid(uuid));
123 return healthmonitorsBuilder.build();
127 protected InstanceIdentifier<Healthmonitors> createInstanceIdentifier(
128 Healthmonitors healthMonitors) {
129 return InstanceIdentifier.create(Neutron.class)
130 .child(Healthmonitor.class )
131 .child(Healthmonitors.class, healthMonitors.getKey());
135 protected Healthmonitors toMd(NeutronLoadBalancerHealthMonitor healthMonitor) {
136 HealthmonitorsBuilder healthmonitorsBuilder = new HealthmonitorsBuilder();
137 healthmonitorsBuilder.setAdminStateUp(healthMonitor.getLoadBalancerHealthMonitorAdminStateIsUp());
138 if (healthMonitor.getLoadBalancerHealthMonitorDelay() != null) {
139 healthmonitorsBuilder.setDelay(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorDelay()));
141 if (healthMonitor.getLoadBalancerHealthMonitorExpectedCodes() != null) {
142 healthmonitorsBuilder.setExpectedCodes(healthMonitor.getLoadBalancerHealthMonitorExpectedCodes());
144 if (healthMonitor.getLoadBalancerHealthMonitorHttpMethod() != null) {
145 healthmonitorsBuilder.setHttpMethod(healthMonitor.getLoadBalancerHealthMonitorHttpMethod());
147 if (healthMonitor.getLoadBalancerHealthMonitorMaxRetries() != null) {
148 healthmonitorsBuilder.setMaxRetries(Integer.valueOf(healthMonitor.getLoadBalancerHealthMonitorMaxRetries()));
150 if (healthMonitor.getLoadBalancerHealthMonitorPools() != null) {
151 List<Uuid> listUuid = new ArrayList<Uuid>();
152 for (Neutron_ID neutron_id : healthMonitor.getLoadBalancerHealthMonitorPools()) {
153 listUuid.add(toUuid(neutron_id.getID()));
155 healthmonitorsBuilder.setPools(listUuid);
157 if (healthMonitor.getLoadBalancerHealthMonitorTenantID() != null) {
158 healthmonitorsBuilder.setTenantId(toUuid(healthMonitor.getLoadBalancerHealthMonitorTenantID()));
160 if (healthMonitor.getLoadBalancerHealthMonitorTimeout() != null) {
161 healthmonitorsBuilder.setTimeout(Long.valueOf(healthMonitor.getLoadBalancerHealthMonitorTimeout()));
163 if (healthMonitor.getLoadBalancerHealthMonitorType() != null) {
164 ImmutableBiMap<String, Class<? extends ProbeBase>> mapper =
166 healthmonitorsBuilder.setType((Class<? extends ProbeBase>) mapper.get(healthMonitor.getLoadBalancerHealthMonitorType()));
168 if (healthMonitor.getLoadBalancerHealthMonitorUrlPath() != null) {
169 healthmonitorsBuilder.setUrlPath(healthMonitor.getLoadBalancerHealthMonitorUrlPath());
171 if (healthMonitor.getLoadBalancerHealthMonitorID() != null) {
172 healthmonitorsBuilder.setUuid(toUuid(healthMonitor.getLoadBalancerHealthMonitorID()));
174 LOGGER.warn("Attempting to write neutron laod balancer health monitor without UUID");
176 return healthmonitorsBuilder.build();
179 public static void registerNewInterface(BundleContext context,
180 ProviderContext providerContext,
181 List<ServiceRegistration<?>> registrations) {
182 NeutronLoadBalancerHealthMonitorInterface neutronLoadBalancerHealthMonitorInterface = new NeutronLoadBalancerHealthMonitorInterface(providerContext);
183 ServiceRegistration<INeutronLoadBalancerHealthMonitorCRUD> neutronLoadBalancerHealthMonitorInterfaceRegistration = context.registerService(INeutronLoadBalancerHealthMonitorCRUD.class, neutronLoadBalancerHealthMonitorInterface, null);
184 if(neutronLoadBalancerHealthMonitorInterfaceRegistration != null) {
185 registrations.add(neutronLoadBalancerHealthMonitorInterfaceRegistration);