2 * Copyright (c) 2014, 2015 Red Hat, Inc. and others. All rights reserved.
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.netvirt.openstack.netvirt.translator.crud.impl;
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.netvirt.openstack.netvirt.translator.NeutronLoadBalancer;
21 import org.opendaylight.netvirt.openstack.netvirt.translator.crud.INeutronLoadBalancerCRUD;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.Loadbalancers;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.loadbalancers.Loadbalancer;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev150712.lbaas.attributes.loadbalancers.LoadbalancerBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150712.Neutron;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.osgi.framework.BundleContext;
29 import org.osgi.framework.ServiceRegistration;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
34 * TODO: Migrate this to consume the MD-SAL data store, so that it can read all the data from data store.
35 * No need to worry about the write/update related methods here. OVSDB net-virt will use these CRUD Interface
36 * only for reading. We will cleanup these interface/methods later.
38 public class NeutronLoadBalancerInterface extends AbstractNeutronInterface<Loadbalancer, NeutronLoadBalancer> implements INeutronLoadBalancerCRUD {
39 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerInterface.class);
40 private ConcurrentMap<String, NeutronLoadBalancer> loadBalancerDB = new ConcurrentHashMap<>();
43 NeutronLoadBalancerInterface(ProviderContext providerContext) {
44 super(providerContext);
48 public boolean neutronLoadBalancerExists(String uuid) {
49 return loadBalancerDB.containsKey(uuid);
53 public NeutronLoadBalancer getNeutronLoadBalancer(String uuid) {
54 if (!neutronLoadBalancerExists(uuid)) {
55 LOGGER.debug("No LoadBalancer Have Been Defined");
58 return loadBalancerDB.get(uuid);
62 public List<NeutronLoadBalancer> getAllNeutronLoadBalancers() {
63 Set<NeutronLoadBalancer> allLoadBalancers = new HashSet<>();
64 for (Entry<String, NeutronLoadBalancer> entry : loadBalancerDB.entrySet()) {
65 NeutronLoadBalancer loadBalancer = entry.getValue();
66 allLoadBalancers.add(loadBalancer);
68 LOGGER.debug("Exiting getLoadBalancers, Found {} OpenStackLoadBalancer", allLoadBalancers.size());
69 List<NeutronLoadBalancer> ans = new ArrayList<>();
70 ans.addAll(allLoadBalancers);
75 public boolean addNeutronLoadBalancer(NeutronLoadBalancer input) {
76 if (neutronLoadBalancerExists(input.getID())) {
79 loadBalancerDB.putIfAbsent(input.getID(), input);
80 //TODO: add code to find INeutronLoadBalancerAware services and call newtorkCreated on them
85 public boolean removeNeutronLoadBalancer(String uuid) {
86 if (!neutronLoadBalancerExists(uuid)) {
89 loadBalancerDB.remove(uuid);
90 //TODO: add code to find INeutronLoadBalancerAware services and call newtorkDeleted on them
95 public boolean updateNeutronLoadBalancer(String uuid, NeutronLoadBalancer delta) {
96 if (!neutronLoadBalancerExists(uuid)) {
99 NeutronLoadBalancer target = loadBalancerDB.get(uuid);
100 return overwrite(target, delta);
104 public boolean neutronLoadBalancerInUse(String loadBalancerUUID) {
105 return !neutronLoadBalancerExists(loadBalancerUUID);
109 protected Loadbalancer toMd(String uuid) {
110 LoadbalancerBuilder loadBalancersBuilder = new LoadbalancerBuilder();
111 loadBalancersBuilder.setUuid(toUuid(uuid));
112 return loadBalancersBuilder.build();
116 protected InstanceIdentifier<Loadbalancer> createInstanceIdentifier(
117 Loadbalancer loadBalancer) {
118 return InstanceIdentifier.create(Neutron.class)
119 .child(Loadbalancers.class)
120 .child(Loadbalancer.class, loadBalancer.getKey());
124 protected Loadbalancer toMd(NeutronLoadBalancer loadBalancer) {
125 LoadbalancerBuilder loadBalancersBuilder = new LoadbalancerBuilder();
126 loadBalancersBuilder.setAdminStateUp(loadBalancer.getLoadBalancerAdminStateUp());
127 if (loadBalancer.getLoadBalancerName() != null) {
128 loadBalancersBuilder.setName(loadBalancer.getLoadBalancerName());
130 if (loadBalancer.getLoadBalancerStatus() != null) {
131 loadBalancersBuilder.setStatus(loadBalancer.getLoadBalancerStatus());
133 if (loadBalancer.getLoadBalancerTenantID() != null) {
134 loadBalancersBuilder.setTenantId(toUuid(loadBalancer.getLoadBalancerTenantID()));
136 if (loadBalancer.getLoadBalancerVipAddress() != null) {
137 loadBalancersBuilder.setVipAddress(new IpAddress(loadBalancer.getLoadBalancerVipAddress().toCharArray()));
139 if (loadBalancer.getLoadBalancerVipSubnetID() != null) {
140 loadBalancersBuilder.setVipSubnetId(toUuid(loadBalancer.getLoadBalancerVipSubnetID()));
142 if (loadBalancer.getID() != null) {
143 loadBalancersBuilder.setUuid(toUuid(loadBalancer.getID()));
145 LOGGER.warn("Attempting to write neutron load balancer without UUID");
147 return loadBalancersBuilder.build();
150 public static void registerNewInterface(BundleContext context,
151 ProviderContext providerContext,
152 List<ServiceRegistration<?>> registrations) {
153 NeutronLoadBalancerInterface neutronLoadBalancerInterface = new NeutronLoadBalancerInterface(providerContext);
154 ServiceRegistration<INeutronLoadBalancerCRUD> neutronLoadBalancerInterfaceRegistration = context.registerService(INeutronLoadBalancerCRUD.class, neutronLoadBalancerInterface, null);
155 if(neutronLoadBalancerInterfaceRegistration != null) {
156 registrations.add(neutronLoadBalancerInterfaceRegistration);