Remove OvsdbConfigurationService
[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.Dictionary;
14 import java.util.Hashtable;
15
16 import org.apache.felix.dm.DependencyActivatorBase;
17 import org.apache.felix.dm.DependencyManager;
18 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
19 import org.opendaylight.neutron.spi.INeutronFirewallAware;
20 import org.opendaylight.neutron.spi.INeutronFirewallPolicyAware;
21 import org.opendaylight.neutron.spi.INeutronFirewallRuleAware;
22 import org.opendaylight.neutron.spi.INeutronFloatingIPAware;
23 import org.opendaylight.neutron.spi.INeutronLoadBalancerAware;
24 import org.opendaylight.neutron.spi.INeutronLoadBalancerCRUD;
25 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolAware;
26 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolCRUD;
27 import org.opendaylight.neutron.spi.INeutronLoadBalancerPoolMemberAware;
28 import org.opendaylight.neutron.spi.INeutronNetworkAware;
29 import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
30 import org.opendaylight.neutron.spi.INeutronPortAware;
31 import org.opendaylight.neutron.spi.INeutronPortCRUD;
32 import org.opendaylight.neutron.spi.INeutronRouterAware;
33 import org.opendaylight.neutron.spi.INeutronSecurityGroupAware;
34 import org.opendaylight.neutron.spi.INeutronSecurityRuleAware;
35 import org.opendaylight.neutron.spi.INeutronSubnetAware;
36 import org.opendaylight.neutron.spi.INeutronSubnetCRUD;
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.NodeCacheListener;
49 import org.opendaylight.ovsdb.openstack.netvirt.api.NodeCacheManager;
50 import org.opendaylight.ovsdb.openstack.netvirt.api.OutboundNatProvider;
51 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbConnectionService;
52 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryListener;
53 import org.opendaylight.ovsdb.openstack.netvirt.api.OvsdbInventoryService;
54 import org.opendaylight.ovsdb.openstack.netvirt.api.RoutingProvider;
55 import org.opendaylight.ovsdb.openstack.netvirt.api.SecurityServicesManager;
56 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
57 import org.opendaylight.ovsdb.openstack.netvirt.api.VlanConfigurationCache;
58 import org.opendaylight.ovsdb.openstack.netvirt.impl.BridgeConfigurationManagerImpl;
59 import org.opendaylight.ovsdb.openstack.netvirt.impl.ConfigurationServiceImpl;
60 import org.opendaylight.ovsdb.openstack.netvirt.impl.EventDispatcherImpl;
61 import org.opendaylight.ovsdb.openstack.netvirt.impl.OvsdbInventoryServiceImpl;
62 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
63 import org.opendaylight.ovsdb.openstack.netvirt.impl.NodeCacheManagerImpl;
64 import org.opendaylight.ovsdb.openstack.netvirt.impl.OpenstackRouter;
65 import org.opendaylight.ovsdb.openstack.netvirt.impl.ProviderNetworkManagerImpl;
66 import org.opendaylight.ovsdb.openstack.netvirt.impl.SecurityServicesImpl;
67 import org.opendaylight.ovsdb.openstack.netvirt.impl.TenantNetworkManagerImpl;
68 import org.opendaylight.ovsdb.openstack.netvirt.impl.VlanConfigurationCacheImpl;
69
70 import org.osgi.framework.BundleContext;
71
72 /**
73  * OSGi bundle activator for the OVSDB Neutron Interface.
74  */
75 public class Activator extends DependencyActivatorBase {
76
77     @Override
78     public void init(BundleContext context, DependencyManager manager) throws Exception {
79
80         manager.add(createComponent()
81                 .setInterface(ConfigurationService.class.getName(), null)
82                 .setImplementation(ConfigurationServiceImpl.class));
83
84         manager.add(createComponent()
85                 .setInterface(BridgeConfigurationManager.class.getName(), null)
86                 .setImplementation(BridgeConfigurationManagerImpl.class)
87                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
88                 .add(createServiceDependency().setService(NetworkingProviderManager.class)));
89
90         manager.add(createComponent()
91                 .setInterface(TenantNetworkManager.class.getName(), null)
92                 .setImplementation(TenantNetworkManagerImpl.class)
93                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
94                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
95                 .add(createServiceDependency().setService(VlanConfigurationCache.class)));
96
97         manager.add(createComponent()
98                 .setInterface(VlanConfigurationCache.class.getName(), null)
99                 .setImplementation(VlanConfigurationCacheImpl.class)
100                 .add(createServiceDependency().setService(TenantNetworkManager.class)));
101
102         Dictionary<String, Object> floatingIPHandlerPorperties = new Hashtable<>();
103         floatingIPHandlerPorperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
104                 AbstractEvent.HandlerType.NEUTRON_FLOATING_IP);
105
106         manager.add(createComponent()
107                 .setInterface(new String[]{INeutronFloatingIPAware.class.getName(), AbstractHandler.class.getName()},
108                         floatingIPHandlerPorperties)
109                 .setImplementation(FloatingIPHandler.class)
110                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
111                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
112
113         Dictionary<String, Object> networkHandlerProperties = new Hashtable<>();
114         networkHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_NETWORK);
115
116         manager.add(createComponent()
117                 .setInterface(new String[]{INeutronNetworkAware.class.getName(), AbstractHandler.class.getName()},
118                         networkHandlerProperties)
119                 .setImplementation(NetworkHandler.class)
120                 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
121                 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
122                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
123                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
124                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
125                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
126
127         Dictionary<String, Object> subnetHandlerProperties = new Hashtable<>();
128         subnetHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_SUBNET);
129
130         manager.add(createComponent()
131                 .setInterface(new String[]{INeutronSubnetAware.class.getName(), AbstractHandler.class.getName()},
132                         subnetHandlerProperties)
133                 .setImplementation(SubnetHandler.class)
134                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
135                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
136
137         Dictionary<String, Object> portHandlerProperties = new Hashtable<>();
138         portHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_PORT);
139
140         manager.add(createComponent()
141                 .setInterface(new String[]{INeutronPortAware.class.getName(), AbstractHandler.class.getName()},
142                         portHandlerProperties)
143                 .setImplementation(PortHandler.class)
144                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
145                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
146                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
147
148         Dictionary<String, Object> routerHandlerProperties = new Hashtable<>();
149         routerHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_ROUTER);
150
151         manager.add(createComponent()
152                 .setInterface(new String[]{INeutronRouterAware.class.getName(), AbstractHandler.class.getName()},
153                         routerHandlerProperties)
154                 .setImplementation(RouterHandler.class)
155                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
156                 .add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true)));
157
158         Dictionary<String, Object> southboundHandlerProperties = new Hashtable<>();
159         southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
160
161         manager.add(createComponent()
162                 .setInterface(new String[]{OvsdbInventoryListener.class.getName(),
163                                 NodeCacheListener.class.getName(),
164                                 AbstractHandler.class.getName()},
165                         southboundHandlerProperties)
166                 .setImplementation(SouthboundHandler.class)
167                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
168                 .add(createServiceDependency().setService(BridgeConfigurationManager.class).setRequired(true))
169                 //.add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
170                 .add(createServiceDependency().setService(NetworkingProviderManager.class).setRequired(true))
171                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
172                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
173                 //.add(createServiceDependency().setService(NeutronL3Adapter.class).setRequired(true))
174                 .add(createServiceDependency().setService(OvsdbInventoryService.class).setRequired(true))
175                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
176
177         Dictionary<String, Object> lbaasHandlerProperties = new Hashtable<>();
178         lbaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
179                 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER);
180
181         manager.add(createComponent()
182                 .setInterface(new String[]{INeutronLoadBalancerAware.class.getName(),
183                                 NodeCacheListener.class.getName(), AbstractHandler.class.getName()},
184                         lbaasHandlerProperties)
185                 .setImplementation(LBaaSHandler.class)
186                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
187                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
188                 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
189                 .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
190                 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
191                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
192                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
193                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
194
195         Dictionary<String, Object> lbaasPoolHandlerProperties = new Hashtable<>();
196         lbaasPoolHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
197                 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL);
198
199         manager.add(createComponent()
200                 .setInterface(new String[]{INeutronLoadBalancerPoolAware.class.getName(),
201                         AbstractHandler.class.getName()}, lbaasPoolHandlerProperties)
202                 .setImplementation(LBaaSPoolHandler.class)
203                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
204                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
205                 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
206                 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
207                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
208                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
209                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
210
211         Dictionary<String, Object> lbaasPoolMemberHandlerProperties = new Hashtable<>();
212         lbaasPoolMemberHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
213                 AbstractEvent.HandlerType.NEUTRON_LOAD_BALANCER_POOL_MEMBER);
214
215         manager.add(createComponent()
216                 .setInterface(new String[]{INeutronLoadBalancerPoolMemberAware.class.getName(),
217                         AbstractHandler.class.getName()}, lbaasPoolMemberHandlerProperties)
218                 .setImplementation(LBaaSPoolMemberHandler.class)
219                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
220                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
221                 .add(createServiceDependency().setService(INeutronLoadBalancerCRUD.class).setRequired(true))
222                 .add(createServiceDependency().setService(INeutronLoadBalancerPoolCRUD.class).setRequired(true))
223                 .add(createServiceDependency().setService(LoadBalancerProvider.class).setRequired(true))
224                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
225                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
226                 .add(createServiceDependency().setService(NodeCacheManager.class).setRequired(true)));
227
228         Dictionary<String, Object> portSecurityHandlerProperties = new Hashtable<>();
229         portSecurityHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY,
230                 AbstractEvent.HandlerType.NEUTRON_PORT_SECURITY);
231
232         manager.add(createComponent()
233                 .setInterface(new String[]{INeutronSecurityRuleAware.class.getName(),
234                                 INeutronSecurityGroupAware.class.getName(), AbstractHandler.class.getName()},
235                         portSecurityHandlerProperties)
236                 .setImplementation(PortSecurityHandler.class)
237                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
238
239         manager.add(createComponent()
240                 .setInterface(new String[]{SecurityServicesManager.class.getName()}, null)
241                 .setImplementation(SecurityServicesImpl.class)
242                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true)));
243
244         Dictionary<String, Object> fWaasHandlerProperties = new Hashtable<>();
245         fWaasHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NEUTRON_FWAAS);
246
247         manager.add(createComponent()
248                 .setInterface(new String[]{INeutronFirewallAware.class.getName(),
249                         INeutronFirewallRuleAware.class.getName(), INeutronFirewallPolicyAware.class.getName(),
250                         AbstractHandler.class.getName()}, fWaasHandlerProperties)
251                 .setImplementation(FWaasHandler.class)
252                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true)));
253
254         manager.add(createComponent()
255                 .setInterface(NetworkingProviderManager.class.getName(), null)
256                 .setImplementation(ProviderNetworkManagerImpl.class)
257                 .add(createServiceDependency().setService(NetworkingProvider.class)
258                         .setCallbacks("providerAdded", "providerRemoved")));
259
260         manager.add(createComponent()
261                 .setInterface(EventDispatcher.class.getName(), null)
262                 .setImplementation(EventDispatcherImpl.class)
263                 .add(createServiceDependency()
264                         .setService(AbstractHandler.class)
265                         .setCallbacks("eventHandlerAdded", "eventHandlerRemoved")));
266
267         manager.add(createComponent()
268                 .setInterface(NeutronL3Adapter.class.getName(), null)
269                 .setImplementation(NeutronL3Adapter.class)
270                 .add(createServiceDependency().setService(ConfigurationService.class).setRequired(true))
271                 .add(createServiceDependency().setService(TenantNetworkManager.class).setRequired(true))
272                 .add(createServiceDependency().setService(OvsdbConnectionService.class).setRequired(true))
273                 .add(createServiceDependency().setService(INeutronNetworkCRUD.class).setRequired(true))
274                 .add(createServiceDependency().setService(INeutronSubnetCRUD.class).setRequired(true))
275                 .add(createServiceDependency().setService(INeutronPortCRUD.class).setRequired(true))
276                 .add(createServiceDependency().setService(ArpProvider.class).setRequired(false))
277                 .add(createServiceDependency().setService(InboundNatProvider.class).setRequired(false))
278                 .add(createServiceDependency().setService(OutboundNatProvider.class).setRequired(false))
279                 .add(createServiceDependency().setService(RoutingProvider.class).setRequired(false))
280                 .add(createServiceDependency().setService(L3ForwardingProvider.class).setRequired(false)));
281
282         manager.add(createComponent()
283                 .setInterface(MultiTenantAwareRouter.class.getName(), null)
284                 .setImplementation(OpenstackRouter.class));
285
286         Dictionary<String, Object> nodeCacheManagerProperties = new Hashtable<>();
287         nodeCacheManagerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.NODE);
288         manager.add(createComponent()
289                 .setInterface(new String[]{NodeCacheManager.class.getName(), AbstractHandler.class.getName()},
290                         nodeCacheManagerProperties)
291                 .setImplementation(NodeCacheManagerImpl.class)
292                 .add(createServiceDependency().setService(EventDispatcher.class).setRequired(true))
293                 .add(createServiceDependency().setService(NodeCacheListener.class)
294                         .setCallbacks("cacheListenerAdded", "cacheListenerRemoved")));
295
296         manager.add(createComponent()
297                 .setInterface(new String[] {OvsdbConnectionService.class.getName(),
298                         OvsdbInventoryService.class.getName()}, null)
299                 .setImplementation(OvsdbInventoryServiceImpl.class)
300                 .add(createServiceDependency().setService(OvsdbInventoryListener.class)
301                         .setCallbacks("listenerAdded", "listenerRemoved"))
302                 .add(createServiceDependency().setService(BindingAwareBroker.class).setRequired(true)));
303     }
304
305     @Override
306     public void destroy(BundleContext context, DependencyManager manager) throws Exception {
307     }
308 }