Merge "Integrate md-sal port model and add more port E2E tests"
[neutron.git] / transcriber / src / main / java / org / opendaylight / neutron / transcriber / NeutronLoadBalancerPoolInterface.java
1 /*
2  * Copyright (C) 2014 Red Hat, Inc.
3  *
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
7  */
8
9 package org.opendaylight.neutron.transcriber;
10
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Map.Entry;
15 import java.util.Set;
16 import java.util.concurrent.ConcurrentHashMap;
17 import java.util.concurrent.ConcurrentMap;
18
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;
37
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>();
41
42
43     NeutronLoadBalancerPoolInterface(ProviderContext providerContext) {
44         super(providerContext);
45     }
46
47     @Override
48     public boolean neutronLoadBalancerPoolExists(String uuid) {
49         return loadBalancerPoolDB.containsKey(uuid);
50     }
51
52     @Override
53     public NeutronLoadBalancerPool getNeutronLoadBalancerPool(String uuid) {
54         if (!neutronLoadBalancerPoolExists(uuid)) {
55             LOGGER.debug("No LoadBalancerPool has Been Defined");
56             return null;
57         }
58         return loadBalancerPoolDB.get(uuid);
59     }
60
61     @Override
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);
67         }
68         LOGGER.debug("Exiting getLoadBalancerPools, Found {} OpenStackLoadBalancerPool", allLoadBalancerPools.size());
69         List<NeutronLoadBalancerPool> ans = new ArrayList<NeutronLoadBalancerPool>();
70         ans.addAll(allLoadBalancerPools);
71         return ans;
72     }
73
74     @Override
75     public boolean addNeutronLoadBalancerPool(NeutronLoadBalancerPool input) {
76         if (neutronLoadBalancerPoolExists(input.getLoadBalancerPoolID())) {
77             return false;
78         }
79         loadBalancerPoolDB.putIfAbsent(input.getLoadBalancerPoolID(), input);
80         //TODO: add code to find INeutronLoadBalancerPoolAware services and call newtorkCreated on them
81         return true;
82     }
83
84     @Override
85     public boolean removeNeutronLoadBalancerPool(String uuid) {
86         if (!neutronLoadBalancerPoolExists(uuid)) {
87             return false;
88         }
89         loadBalancerPoolDB.remove(uuid);
90         //TODO: add code to find INeutronLoadBalancerPoolAware services and call newtorkDeleted on them
91         return true;
92     }
93
94     @Override
95     public boolean updateNeutronLoadBalancerPool(String uuid, NeutronLoadBalancerPool delta) {
96         if (!neutronLoadBalancerPoolExists(uuid)) {
97             return false;
98         }
99         NeutronLoadBalancerPool target = loadBalancerPoolDB.get(uuid);
100         return overwrite(target, delta);
101     }
102
103     @Override
104     public boolean neutronLoadBalancerPoolInUse(String loadBalancerPoolUUID) {
105         return !neutronLoadBalancerPoolExists(loadBalancerPoolUUID);
106     }
107
108     @Override
109     protected Pools toMd(String uuid) {
110         PoolsBuilder poolsBuilder = new PoolsBuilder();
111         poolsBuilder.setUuid(toUuid(uuid));
112         return poolsBuilder.build();
113     }
114
115     @Override
116     protected InstanceIdentifier<Pools> createInstanceIdentifier(Pools pools) {
117         return InstanceIdentifier.create(Neutron.class)
118                 .child(Pool.class)
119                 .child(Pools.class, pools.getKey());
120     }
121
122     @Override
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());
128         }
129         if (pools.getNeutronLoadBalancerPoolHealthMonitorID() != null) {
130             List<Uuid> listHealthMonitor = new ArrayList<Uuid>();
131             listHealthMonitor.add(toUuid(pools.getNeutronLoadBalancerPoolHealthMonitorID()));
132             poolsBuilder.setHealthmonitorIds(listHealthMonitor);
133         }
134         if (pools.getLoadBalancerPoolLbAlgorithm() != null) {
135             poolsBuilder.setLbAlgorithm(pools.getLoadBalancerPoolLbAlgorithm());
136         }
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()));
141             }
142             poolsBuilder.setListeners(listListener);
143         }
144         if (pools.getLoadBalancerPoolMembers() != null) {
145             List<Uuid> listMember = new ArrayList<Uuid>();
146             for (NeutronLoadBalancerPoolMember laodBalancerPoolMember : pools.getLoadBalancerPoolMembers()) {
147                 listMember.add(toUuid(laodBalancerPoolMember.getPoolMemberID()));
148
149             }
150             poolsBuilder.setMembers(listMember);
151         }
152         if (pools.getLoadBalancerPoolName() != null) {
153             poolsBuilder.setName(pools.getLoadBalancerPoolName());
154         }
155         if (pools.getLoadBalancerPoolProtocol() != null) {
156             poolsBuilder.setProtocol(Protocol.valueOf(pools.getLoadBalancerPoolProtocol()));
157         }
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());
164         }
165         if (pools.getLoadBalancerPoolTenantID() != null) {
166             poolsBuilder.setTenantId(toUuid(pools.getLoadBalancerPoolTenantID()));
167         }
168         if (pools.getLoadBalancerPoolID() != null) {
169             poolsBuilder.setUuid(toUuid(pools.getLoadBalancerPoolID()));
170         } else {
171             LOGGER.warn("Attempting to write neutron load balancer pool without UUID");
172         }
173         return poolsBuilder.build();
174     }
175
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);
183         }
184     }
185 }