Add import statements for o.o.o.o.n.a.ConfigurationService
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / Activator.java
1 /*
2  * Copyright (C) 2013 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  * Authors : Madhu Venugopal, Brent Salisbury, Dave Tucker
9  */
10
11 package org.opendaylight.ovsdb.openstack.netvirt;
12
13 import java.util.Properties;
14
15 import org.apache.felix.dm.Component;
16 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallAware;
17 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallPolicyAware;
18 import org.opendaylight.controller.networkconfig.neutron.INeutronFirewallRuleAware;
19 import org.opendaylight.controller.networkconfig.neutron.INeutronFloatingIPAware;
20 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerAware;
21 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerCRUD;
22 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolAware;
23 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolCRUD;
24 import org.opendaylight.controller.networkconfig.neutron.INeutronLoadBalancerPoolMemberAware;
25 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
26 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
27 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
28 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
29 import org.opendaylight.controller.networkconfig.neutron.INeutronRouterAware;
30 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityGroupAware;
31 import org.opendaylight.controller.networkconfig.neutron.INeutronSecurityRuleAware;
32 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetAware;
33 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
34 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
35 import org.opendaylight.controller.switchmanager.IInventoryListener;
36 import org.opendaylight.controller.switchmanager.ISwitchManager;
37 import org.opendaylight.ovsdb.openstack.netvirt.api.ArpProvider;
38 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
39 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
40 import org.opendaylight.ovsdb.openstack.netvirt.api.Constants;
41 import org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher;
42 import org.opendaylight.ovsdb.openstack.netvirt.api.InboundNatProvider;
43 import org.opendaylight.ovsdb.openstack.netvirt.api.L3ForwardingProvider;
44 import org.opendaylight.ovsdb.openstack.netvirt.api.LoadBalancerProvider;
45 import org.opendaylight.ovsdb.openstack.netvirt.api.MultiTenantAwareRouter;
46 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProvider;
47 import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
48 import org.opendaylight.ovsdb.openstack.netvirt.api.OutboundNatProvider;
49 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
50 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
51 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
52 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
53 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
54 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
55 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
56 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
57 import org.opendaylight.ovsdb.openstack.netvirt.impl.OpenstackRouter;
58 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
59 import org.opendaylight.ovsdb.openstack.netvirt.impl.SecurityServicesImpl;
60 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
61 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
62 import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
63 import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
64 import org.opendaylight.ovsdb.plugin.api.OvsdbInventoryListener;
65
66 /**
67  * OSGi bundle activator for the OVSDB Neutron Interface.
68  */
69 public class Activator extends ComponentActivatorAbstractBase {
70     /**
71      * Function called when the activator starts just after some
72      * initializations are done by the
73      * ComponentActivatorAbstractBase.
74      */
75     @Override
76     public void init() {
77     }
78
79     /**
80      * Function called when the activator stops just before the
81      * cleanup done by ComponentActivatorAbstractBase.
82      *
83      */
84     @Override
85     public void destroy() {
86     }
87
88     /**
89      * Function that is used to communicate to dependency manager the
90      * list of known implementations for services inside a container.
91      *
92      * @return An array containing all the CLASS objects that will be
93      * instantiated in order to get an fully working implementation
94      * Object
95      */
96     @Override
97     public Object[] getImplementations() {
98         Object[] res = {ConfigurationServiceImpl.class,
99                         BridgeConfigurationManagerImpl.class,
100                         TenantNetworkManagerImpl.class,
101                         VlanConfigurationCacheImpl.class,
102                         FloatingIPHandler.class,
103                         NetworkHandler.class,
104                         SubnetHandler.class,
105                         PortHandler.class,
106                         RouterHandler.class,
107                         SouthboundHandler.class,
108                         PortSecurityHandler.class,
109                         ProviderNetworkManagerImpl.class,
110                         EventDispatcherImpl.class,
111                         FWaasHandler.class,
112                         LBaaSHandler.class,
113                         LBaaSPoolHandler.class,
114                         LBaaSPoolMemberHandler.class,
115                         NeutronL3Adapter.class,
116                         OpenstackRouter.class,
117                         SecurityServicesImpl.class};
118         return res;
119     }
120
121     /**
122      * Function that is called when configuration of the dependencies
123      * is required.
124      *
125      * @param c dependency manager Component object, used for
126      * configuring the dependencies exported and imported
127      * @param imp Implementation class that is being configured,
128      * needed as long as the same routine can configure multiple
129      * implementations
130      * @param containerName The containerName being configured, this allow
131      * also optional per-container different behavior if needed, usually
132      * should not be the case though.
133      */
134     @Override
135     public void configureInstance(Component c, Object imp,
136                                   String containerName) {
137         if (imp.equals(ConfigurationServiceImpl.class)) {
138             c.setInterface(ConfigurationService.class.getName(), null);
139             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
140         }
141
142         if (imp.equals(BridgeConfigurationManagerImpl.class)) {
143             c.setInterface(BridgeConfigurationManager.class.getName(), null);
144             c.add(createServiceDependency().setService(
145                     ConfigurationService.class).setRequired(true));
146             c.add(createServiceDependency().setService(NetworkingProviderManager.class));
147             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
148         }
149
150         if (imp.equals(TenantNetworkManagerImpl.class)) {
151             c.setInterface(TenantNetworkManager.class.getName(), null);
152             c.add(createServiceDependency().setService(NetworkingProviderManager.class));
153             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
154             c.add(createServiceDependency().setService(OvsdbConnectionService.class));
155             c.add(createServiceDependency().
156                     setService(INeutronNetworkCRUD.class).
157                     setRequired(true));
158             c.add(createServiceDependency().
159                     setService(INeutronPortCRUD.class).
160                     setRequired(true));
161             c.add(createServiceDependency().setService(VlanConfigurationCache.class));
162         }
163
164         if (imp.equals(VlanConfigurationCacheImpl.class)) {
165             c.setInterface(VlanConfigurationCache.class.getName(), null);
166             c.add(createServiceDependency().setService(OvsdbConfigurationService.class));
167             c.add(createServiceDependency().setService(TenantNetworkManager.class));
168         }
169
170         if (imp.equals(FloatingIPHandler.class)) {
171             Properties floatingIPHandlerPorperties = new Properties();
172             floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
173                                             AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
174             c.setInterface(new String[]{INeutronFloatingIPAware.class.getName(),
175                                         AbstractHandler.class.getName()},
176                            floatingIPHandlerPorperties);
177             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
178             c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
179         }
180
181         if (imp.equals(NetworkHandler.class)) {
182             Properties networkHandlerProperties = new Properties();
183             networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
184                                          AbstractEvent.HandlerType.NEUTRON_NETWORK);
185             c.setInterface(new String[]{INeutronNetworkAware.class.getName(),
186                                         AbstractHandler.class.getName()},
187                            networkHandlerProperties);
188             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
189             c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
190             c.add(createServiceDependency().setService(ConfigurationService.class).setRequired(true));
191             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
192             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
193             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
194             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
195             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
196             c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
197         }
198
199         if (imp.equals(SubnetHandler.class)) {
200             Properties subnetHandlerProperties = new Properties();
201             subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
202             c.setInterface(new String[]{INeutronSubnetAware.class.getName(),
203                                         AbstractHandler.class.getName()},
204                            subnetHandlerProperties);
205             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
206             c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
207         }
208
209         if (imp.equals(PortHandler.class)) {
210             Properties portHandlerProperties = new Properties();
211             portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
212             c.setInterface(new String[]{INeutronPortAware.class.getName(),
213                                         AbstractHandler.class.getName()},
214                            portHandlerProperties);
215             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
216             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
217             c.add(createServiceDependency().setService(OvsdbInventoryListener.class).setRequired(true));
218             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
219             c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
220         }
221
222         if (imp.equals(RouterHandler.class)) {
223             Properties routerHandlerProperties = new Properties();
224             routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
225             c.setInterface(new String[]{INeutronRouterAware.class.getName(),
226                                         AbstractHandler.class.getName()},
227                            routerHandlerProperties);
228             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
229             c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
230         }
231
232         if (imp.equals(SouthboundHandler.class)) {
233             Properties southboundHandlerProperties = new Properties();
234             southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
235             c.setInterface(new String[]{OvsdbInventoryListener.class.getName(),
236                                         IInventoryListener.class.getName(),
237                                         AbstractHandler.class.getName()},
238                            southboundHandlerProperties);
239             c.add(createServiceDependency().setService(ConfigurationService.class).setRequired(true));
240             c.add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true));
241             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
242             c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
243             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
244             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
245             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
246             c.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true));
247         }
248
249         if (imp.equals(LBaaSHandler.class)) {
250             Properties lbaasHandlerProperties = new Properties();
251             lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
252                     AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER);
253             c.setInterface(new String[] {INeutronLoadBalancerAware.class.getName(),
254                     IInventoryListener.class.getName(),
255                     AbstractHandler.class.getName()},
256                     lbaasHandlerProperties);
257             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
258             c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
259             c.add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true));
260             c.add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true));
261             c.add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true));
262             c.add(createServiceDependency().setService(ISwitchManager.class).setRequired(true));
263             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
264             c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
265         }
266
267         if (imp.equals(LBaaSPoolHandler.class)) {
268             Properties lbaasPoolHandlerProperties = new Properties();
269             lbaasPoolHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
270                     AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL);
271             c.setInterface(new String[] {INeutronLoadBalancerPoolAware.class.getName(),
272                     AbstractHandler.class.getName()},
273                     lbaasPoolHandlerProperties);
274             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
275             c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
276             c.add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true));
277             c.add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true));
278             c.add(createServiceDependency().setService(ISwitchManager.class).setRequired(true));
279             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
280             c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
281         }
282
283         if (imp.equals(LBaaSPoolMemberHandler.class)) {
284             Properties lbaasPoolMemberHandlerProperties = new Properties();
285             lbaasPoolMemberHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
286                     AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL_MEMBER);
287             c.setInterface(new String[] {INeutronLoadBalancerPoolMemberAware.class.getName(),
288                     AbstractHandler.class.getName()},
289                     lbaasPoolMemberHandlerProperties);
290             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
291             c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
292             c.add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true));
293             c.add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true));
294             c.add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true));
295             c.add(createServiceDependency().setService(ISwitchManager.class).setRequired(true));
296             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
297             c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
298         }
299
300         if (imp.equals(PortSecurityHandler.class)) {
301             Properties portSecurityHandlerProperties = new Properties();
302             portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
303                                               AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
304             c.setInterface(new String[]{INeutronSecurityRuleAware.class.getName(),
305                                         INeutronSecurityGroupAware.class.getName(),
306                             AbstractHandler.class.getName()},
307                            portSecurityHandlerProperties);
308             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
309             c.add(createServiceDependency().setService(SecurityServicesManager.class).setRequired(true));
310         }
311
312         if (imp.equals(SecurityServicesImpl.class)) {
313             c.setInterface(new String[] {SecurityServicesManager.class.getName()}, null);
314         }
315
316         if (imp.equals(FWaasHandler.class)) {
317             Properties fWaasHandlerProperties = new Properties();
318             fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
319             c.setInterface(new String[] {INeutronFirewallAware.class.getName(),
320                             INeutronFirewallRuleAware.class.getName(),
321                             INeutronFirewallPolicyAware.class.getName(),
322                             AbstractHandler.class.getName()},
323                     fWaasHandlerProperties);
324             c.add(createServiceDependency().setService(EventDispatcher.class).setRequired(true));
325         }
326
327         if (imp.equals(ProviderNetworkManagerImpl.class)) {
328             c.setInterface(NetworkingProviderManager.class.getName(), null);
329             c.add(createServiceDependency()
330                     .setService(ConfigurationService.class)
331                     .setRequired(true));
332             c.add(createServiceDependency()
333                     .setService(NetworkingProvider.class)
334                     .setCallbacks("providerAdded", "providerRemoved"));
335         }
336
337         if (imp.equals(EventDispatcherImpl.class)) {
338             c.setInterface(EventDispatcher.class.getName(), null);
339             c.add(createServiceDependency()
340                           .setService(AbstractHandler.class)
341                           .setCallbacks("eventHandlerAdded", "eventHandlerRemoved"));
342         }
343
344         if (imp.equals(NeutronL3Adapter.class)) {
345             c.setInterface(NeutronL3Adapter.class.getName(), null);
346             c.add(createServiceDependency()
347                           .setService(ConfigurationService.class)
348                           .setRequired(true));
349             c.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true));
350             c.add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true));
351             c.add(createServiceDependency().setService(OvsdbConfigurationService.class).setRequired(true));
352             c.add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true));
353             c.add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true));
354             c.add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true));
355             c.add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true));
356             c.add(createServiceDependency().setService(MultiTenantAwareRouter.class).setRequired(true));
357             /* ToDo, we should probably just use the NetworkingProvider interface
358              * This should provide a way of getting service implementations
359              * Either that, or we should do service lookup at runtime based on getProvider().getName()
360              * This is a shortcut as for now there will only be one implementation of these classes.
361              */
362             c.add(createServiceDependency().setService(ArpProvider.class).setRequired(false));
363             c.add(createServiceDependency().setService(InboundNatProvider.class).setRequired(false));
364             c.add(createServiceDependency().setService(OutboundNatProvider.class).setRequired(false));
365             c.add(createServiceDependency().setService(RoutingProvider.class).setRequired(false));
366             c.add(createServiceDependency().setService(L3ForwardingProvider.class).setRequired(false));
367         }
368
369         if (imp.equals(OpenstackRouter.class)) {
370             c.setInterface(MultiTenantAwareRouter.class.getName(), null);
371         }
372     }
373 }