Answered Inline!
From: Vijay B [mailto:[email protected]]
Sent: Wednesday, April 2, 2014 7:14 AM
To: OpenStack Development Mailing List (not for usage questions)
Subject: [openstack-dev] [Neutron LBaaS] Need help with LBaaS drivers
Hi,
I'm trying to understand how LBaaS drivers work and so am attempting to write a
dummy driver that does nothing for now, but instead of loading my dummy driver,
neutron always loads the HAProxy namespace driver. These are the steps I
followed:
1) I created a new directory neutron/services/loadbalancer/drivers/dummy/, and
in that directory I put in a new file dummy_driver.py, which basically has a
class class DummyPluginDriver(abstract_driver. ):
and has empty __init__(), create_vip(), delete_vip() etc functions.
>>> Fine
2) I'm testing using a devstack setup, so I also edited the
/etc/neutron/neutron.conf file, commenting out the default loadbalancer driver
entry for HAProxy, and added a line for my dummy driver as follows:
service_provider=LOADBALANCER:Dummy:neutron.services.loadbalancer.drivers.dummy.dummy_driver.DummyPluginDriver:default
>> Fine. You should see you driver getting loaded when the neutron service is
>> started.
3) I created a /etc/neutron/services/loadbalancer/dummy/lbaas_agent.ini
directory/file
I simply copied over the haproxy's lbaas_agent.ini file and changed [haproxy]
to [dummy]
and then I restarted the q-lbaas service using cd /opt/stack/neutron && python
/usr/local/bin/neutron-lbaas-agent --config-file /etc/neutron/neutron.conf
--config-file=/etc/neutron/services/loadbalancer/dummy/lbaas_agent.ini
>> You have to do this only if you are planning on an Agent for your driver.
>> If you plan to run an agent, create a device_driver entry in the .ini file.
>> Like
>> device_driver=neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver
However, I see that the default HAProxyNS driver is still being loaded
When I put a breakpoint in loadbalancer/agent/agent_manager.py:86, I see this
(relevant text marked in red):
2014-03-31 13:47:16.998 DEBUG neutron.common.utils [-] Reloading cached file
/etc/neutron/policy.json from (pid=28405) read_cached_file
/opt/stack/neutron/neutron/common/utils.py:53
2014-03-31 13:47:16.998 DEBUG neutron.policy [-] Loading policies from file:
/etc/neutron/policy.json from (pid=28405) _set_rules
/opt/stack/neutron/neutron/policy.py:89
> /opt/stack/neutron/neutron/services/loadbalancer/agent/agent_manager.py(86)_load_drivers()
-> self.device_drivers = {}
(Pdb) l
81 # pool_id->device_driver_name mapping used to store known
instances
82 self.instance_mapping = {}
83
84 def _load_drivers(self):
85 import pdb; pdb.set_trace()
86 -> self.device_drivers = {}
87 for driver in self.conf.device_driver:
88 try:
89 driver_inst = importutils.import_object(
90 driver,
91 self.conf,
(Pdb) self.conf.device_driver
['neutron.services.loadbalancer.drivers.haproxy.namespace_driver.HaproxyNSDriver']
(Pdb)
>> HaproxyNSDriver is default entry. You could check in
>> "./neutron/neutron/services/loadbalancer/agent/agent_manager.py"
I'm not sure what I'm doing wrong - am I missing something that needs to be
done within the dummy driver itself? (in dummy_driver.py?). Should I register
some opts or similar?
Any help would be much appreciated!
Thanks,
Regards,
Vijay
_______________________________________________
OpenStack-dev mailing list
[email protected]
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev