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.INeutronLoadBalancerPoolCRUD;
21 import org.opendaylight.neutron.spi.NeutronLoadBalancerPool;
22 import org.opendaylight.neutron.spi.NeutronLoadBalancerPoolMember;
23 import org.opendaylight.neutron.spi.NeutronLoadBalancer_SessionPersistence;
24 import org.opendaylight.neutron.spi.Neutron_ID;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.PoolAttrs.Protocol;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.Pool;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.Pools;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.lbaas.attributes.pool.PoolsBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.lbaasv2.rev141002.pool.attrs.SessionPersistenceBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.rev150325.Neutron;
32 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33 import org.osgi.framework.BundleContext;
34 import org.osgi.framework.ServiceRegistration;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
38 public class NeutronLoadBalancerPoolInterface extends AbstractNeutronInterface<Pools, NeutronLoadBalancerPool> implements INeutronLoadBalancerPoolCRUD {
39 private static final Logger LOGGER = LoggerFactory.getLogger(NeutronLoadBalancerPoolInterface.class);
40 private ConcurrentMap<String, NeutronLoadBalancerPool> loadBalancerPoolDB = new ConcurrentHashMap<String, NeutronLoadBalancerPool>();
43 NeutronLoadBalancerPoolInterface(ProviderContext providerContext) {
44 super(providerContext);
48 public boolean neutronLoadBalancerPoolExists(String uuid) {
49 return loadBalancerPoolDB.containsKey(uuid);
53 public NeutronLoadBalancerPool getNeutronLoadBalancerPool(String uuid) {
54 if (!neutronLoadBalancerPoolExists(uuid)) {
55 LOGGER.debug("No LoadBalancerPool has Been Defined");
58 return loadBalancerPoolDB.get(uuid);
62 public List<NeutronLoadBalancerPool> getAllNeutronLoadBalancerPools() {
63 Set<NeutronLoadBalancerPool> allLoadBalancerPools = new HashSet<NeutronLoadBalancerPool>();
64 for (Entry<String, NeutronLoadBalancerPool> entry : loadBalancerPoolDB.entrySet()) {
65 NeutronLoadBalancerPool loadBalancerPool = entry.getValue();
66 allLoadBalancerPools.add(loadBalancerPool);
68 LOGGER.debug("Exiting getLoadBalancerPools, Found {} OpenStackLoadBalancerPool", allLoadBalancerPools.size());
69 List<NeutronLoadBalancerPool> ans = new ArrayList<NeutronLoadBalancerPool>();
70 ans.addAll(allLoadBalancerPools);
75 public boolean addNeutronLoadBalancerPool(NeutronLoadBalancerPool input) {
76 if (neutronLoadBalancerPoolExists(input.getLoadBalancerPoolID())) {
79 loadBalancerPoolDB.putIfAbsent(input.getLoadBalancerPoolID(), input);
80 //TODO: add code to find INeutronLoadBalancerPoolAware services and call newtorkCreated on them
85 public boolean removeNeutronLoadBalancerPool(String uuid) {
86 if (!neutronLoadBalancerPoolExists(uuid)) {
89 loadBalancerPoolDB.remove(uuid);
90 //TODO: add code to find INeutronLoadBalancerPoolAware services and call newtorkDeleted on them
95 public boolean updateNeutronLoadBalancerPool(String uuid, NeutronLoadBalancerPool delta) {
96 if (!neutronLoadBalancerPoolExists(uuid)) {
99 NeutronLoadBalancerPool target = loadBalancerPoolDB.get(uuid);
100 return overwrite(target, delta);
104 public boolean neutronLoadBalancerPoolInUse(String loadBalancerPoolUUID) {
105 return !neutronLoadBalancerPoolExists(loadBalancerPoolUUID);
109 protected Pools toMd(String uuid) {
110 PoolsBuilder poolsBuilder = new PoolsBuilder();
111 poolsBuilder.setUuid(toUuid(uuid));
112 return poolsBuilder.build();
116 protected InstanceIdentifier<Pools> createInstanceIdentifier(Pools pools) {
117 return InstanceIdentifier.create(Neutron.class)
119 .child(Pools.class, pools.getKey());
123 protected Pools toMd(NeutronLoadBalancerPool pools) {
124 PoolsBuilder poolsBuilder = new PoolsBuilder();
125 poolsBuilder.setAdminStateUp(pools.getLoadBalancerPoolAdminIsStateIsUp());
126 if (pools.getLoadBalancerPoolDescription() != null) {
127 poolsBuilder.setDescr(pools.getLoadBalancerPoolDescription());
129 if (pools.getNeutronLoadBalancerPoolHealthMonitorID() != null) {
130 List<Uuid> listHealthMonitor = new ArrayList<Uuid>();
131 listHealthMonitor.add(toUuid(pools.getNeutronLoadBalancerPoolHealthMonitorID()));
132 poolsBuilder.setHealthmonitorIds(listHealthMonitor);
134 if (pools.getLoadBalancerPoolLbAlgorithm() != null) {
135 poolsBuilder.setLbAlgorithm(pools.getLoadBalancerPoolLbAlgorithm());
137 if (pools.getLoadBalancerPoolListeners() != null) {
138 List<Uuid> listListener = new ArrayList<Uuid>();
139 for (Neutron_ID neutron_id : pools.getLoadBalancerPoolListeners()) {
140 listListener.add(toUuid(neutron_id.getID()));
142 poolsBuilder.setListeners(listListener);
144 if (pools.getLoadBalancerPoolMembers() != null) {
145 List<Uuid> listMember = new ArrayList<Uuid>();
146 for (NeutronLoadBalancerPoolMember laodBalancerPoolMember : pools.getLoadBalancerPoolMembers()) {
147 listMember.add(toUuid(laodBalancerPoolMember.getPoolMemberID()));
150 poolsBuilder.setMembers(listMember);
152 if (pools.getLoadBalancerPoolName() != null) {
153 poolsBuilder.setName(pools.getLoadBalancerPoolName());
155 if (pools.getLoadBalancerPoolProtocol() != null) {
156 poolsBuilder.setProtocol(Protocol.valueOf(pools.getLoadBalancerPoolProtocol()));
158 if (pools.getLoadBalancerPoolSessionPersistence() != null) {
159 NeutronLoadBalancer_SessionPersistence sessionPersistence = pools.getLoadBalancerPoolSessionPersistence();
160 SessionPersistenceBuilder sessionPersistenceBuilder = new SessionPersistenceBuilder();
161 sessionPersistenceBuilder.setCookieName(sessionPersistence.getCookieName());
162 sessionPersistenceBuilder.setType(sessionPersistence.getType());
163 poolsBuilder.setSessionPersistence(sessionPersistenceBuilder.build());
165 if (pools.getLoadBalancerPoolTenantID() != null) {
166 poolsBuilder.setTenantId(toUuid(pools.getLoadBalancerPoolTenantID()));
168 if (pools.getLoadBalancerPoolID() != null) {
169 poolsBuilder.setUuid(toUuid(pools.getLoadBalancerPoolID()));
171 LOGGER.warn("Attempting to write neutron load balancer pool without UUID");
173 return poolsBuilder.build();
176 public static void registerNewInterface(BundleContext context,
177 ProviderContext providerContext,
178 List<ServiceRegistration<?>> registrations) {
179 NeutronLoadBalancerPoolInterface neutronLoadBalancerPoolInterface = new NeutronLoadBalancerPoolInterface(providerContext);
180 ServiceRegistration<INeutronLoadBalancerPoolCRUD> neutronLoadBalancerPoolInterfaceRegistration = context.registerService(INeutronLoadBalancerPoolCRUD.class, neutronLoadBalancerPoolInterface, null);
181 if(neutronLoadBalancerPoolInterfaceRegistration != null) {
182 registrations.add(neutronLoadBalancerPoolInterfaceRegistration);