a10networks / a10-neutron-lbaas Goto Github PK
View Code? Open in Web Editor NEWA10 Networks, Openstack Neutron LBaaS Driver
License: Apache License 2.0
A10 Networks, Openstack Neutron LBaaS Driver
License: Apache License 2.0
From: Darío Ezequiel Nievas
Date: Monday, September 21, 2015 at 4:17 PM
To: Douglas Wiegley
Subject: Heat + A10 LBaaS v1 driver - Error 33619969
Hi Doug,
hope you are dowing
We are using the A10 lbaas V1 driver with heat to provide autoscaling services.
Each time we try to delete a stack, we are getting te following Exception
2015-09-21 17:49:10.204 2429 ERROR neutron.api.v2.resource [req-7b5d1bb4-47c3-49e4-a210-36e3e38671bc ] delete failed
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource Traceback (most recent call last):
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/api/v2/resource.py", line 83, in resource
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource result = method(request=request, **args)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/api/v2/base.py", line 490, in delete
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource obj_deleter(request.context, id, **kwargs)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron_lbaas/services/loadbalancer/plugin.py", line 242, in delete_pool
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource driver.delete_pool(context, p)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron_lbaas/services/loadbalancer/drivers/a10networks/driver_v1.py", line 155, in delete_pool
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource self.a10.pool.delete(context, pool)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10_neutron_lbaas/v1/handler_pool.py", line 57, in delete
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource self.a10_driver.hm._delete(c, context, z)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10_neutron_lbaas/v1/handler_hm.py", line 72, in _delete
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource c.client.slb.hm.delete(self._meta_name(hm))
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/slb/hm.py", line 112, in delete
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource self._delete(self.url_prefix + name)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/base.py", line 41, in _delete
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource return self._request('DELETE', action, params, **kwargs)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/base.py", line 32, in _request
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource self.auth_header, **kwargs)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/axapi_http.py", line 123, in request
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource acos_responses.raise_axapi_ex(r, method, api_url)
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/responses.py", line 147, in raise_axapi_ex
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource raise ex(code, response['response']['err']['msg'])
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource InUse: 33619969 The health monitor cannot be deleted because it is still in use.
2015-09-21 17:49:10.204 2429 TRACE neutron.api.v2.resource
These are the heat resources involved (showing just the relevant ones)
pool:
type: OS::Neutron::Pool
properties:
protocol: HTTP
monitors: [{get_resource: monitor}]
subnet: a10-subnet2
lb_method: ROUND_ROBIN
vip:
protocol_port: 8080
lb:
type: OS::Neutron::LoadBalancer
properties:
protocol_port: 8080
pool_id: {get_resource: pool}
monitor:
type: OS::Neutron::HealthMonitor
properties:
type: HTTP
delay: 12
max_retries: 5
timeout: 10
http_method: "GET"
max_retries: 2
timeout: 5
url_path: "/"
expected_codes: "200"
I'm also attaching the neutron-server log extract, for further details
Have you seen this problem before? I'm guessing that this is related with the way that heat handles dependencies when a stack delete is requested.
Thanks in advance!
probably optionally via a config toggle
If /etc/a10/config.py or other config paths don't exist (we should store these in a constant...) don't exist, the driver bombs and doesn't give enough info about said non-existence.
REPRODUCTION: Use v1 of the driver without creating a configuration. Observe neato traceback.
Replaces neutronops class - gets necessary data from contrail
Write health monitor handler
In 2.1 of acos client, the vport JSON structure is not correctly created with "auto_source_nat" specified when autosnat is specified in the device configuration.
For now, global boolean. If true, then in handle_listener,
add: 'ip_in_ip': True
to the axapi_args vport dict.
And that axapi_args vport dict has a bug; it's currently 'port', which will never merge into the right dictionary in acos-client.
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource Traceback (most recent call last):
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/api/v2/resource.py", line 87, in resource
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource result = method(request=request, **args)
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/api/v2/base.py", line 448, in create
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource obj = obj_creator(request.context, **kwargs)
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/services/loadbalancer/plugin.py", line 107, in create_vip
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource driver.create_vip(context, v)
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource File "/opt/stack/neutron/neutron/services/loadbalancer/drivers/a10networks/driver_v1.py", line 140, in create_vip
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource self.a10.vip.create(context, vip)
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource File "/usr/local/src/a10-neutron-lbaas/a10_neutron_lbaas/v1/handler_vip.py", line 83, in create
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource a10_common._set_auto_parameter(vport_meta, self.a10_driver.device_info)
2015-09-23 04:33:14.790 TRACE neutron.api.v2.resource AttributeError: 'A10OpenstackLBV1' object has no attribute 'device_info'
neutron lbaas-loadbalancer-create --name kristest lbaas-10-224-84-0-24
neutron lbaas-listener-create --loadbalancer kristest --protocol TCP --protocol-port 80 --name Web-80
neutron lbaas-pool-create --lb-algorithm ROUND_ROBIN --listener Web-80 --protocol TCP --name Web-Pool1
After that pool create, in PoolHandler, it should be updating the vport with the service group of the passed in listener.
Attempting to create a pool with driver_v1 produces the following stack trace:
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource Traceback (most recent call last):
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/api/v2/resource.py", line 87, in resource
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource result = method(request=request, **args)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/api/v2/base.py", line 448, in create
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource obj = obj_creator(request.context, **kwargs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/services/loadbalancer/plugin.py", line 159, in create_pool
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource driver.create_pool(context, p)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/home/ubuntu/a10-openstack-lbaas/a10_openstack_lbaas/driver_v1.py", line 149, in create_pool
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource self.a10.pool.create(context, pool)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/home/ubuntu/a10-neutron-lbaas/a10_neutron_lbaas/v1/handler_pool.py", line 37, in create
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource with a10.A10WriteStatusContext(self, context, pool) as c:
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/home/ubuntu/a10-neutron-lbaas/a10_neutron_lbaas/a10_context.py", line 43, in __enter__
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource self.select_appliance_partition()
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/home/ubuntu/a10-neutron-lbaas/a10_neutron_lbaas/a10_context.py", line 72, in select_appliance_partition
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource self.client.system.partition.active(name)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/partition.py", line 54, in active
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource self._post("/active-partition/" + name)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/base.py", line 38, in _post
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource return self._request('POST', action, params, **kwargs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/base.py", line 31, in _request
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource return self.client.http.request(method, self.url(action), params,
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/base.py", line 27, in url
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource self.auth_header['Authorization'] = "A10 %s" % self.client.session.id
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/session.py", line 28, in id
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource self.authenticate(self.username, self.password)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/session.py", line 43, in authenticate
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource r = self.http.post(url, payload)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/axapi_http.py", line 135, in post
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource return self.request("POST", api_url, params, headers, **kwargs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/acos_client/v30/axapi_http.py", line 105, in request
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource data=payload, headers=hdrs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 50, in request
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource response = session.request(method=method, url=url, **kwargs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 465, in request
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource resp = self.send(prep, **send_kwargs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 573, in send
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource r = adapter.send(request, **kwargs)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 431, in send
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource raise SSLError(e, request=request)
2015-05-13 17:12:21.405 4024 TRACE neutron.api.v2.resource SSLError: [Errno 1] _ssl.c:510: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version```
"I needed to add # coding: utf-8 to the top of the config file otherwise neutron blows up with an encoding error - using the sample config from the readme"
2015-09-03 10:39:40.564 6939 TRACE neutron File "/usr/lib/python2.7/site-packages/a10_neutron_lbaas/a10_config.py", line 45, in init
2015-09-03 10:39:40.564 6939 TRACE neutron import config
2015-09-03 10:39:40.564 6939 TRACE neutron File "/etc/neutron/services/loadbalancer/a10networks/config.py", line 2
2015-09-03 10:39:40.564 6939 TRACE neutron SyntaxError: Non-ASCII character '\xe2' in file /etc/neutron/services/loadbalancer/a10networks/config.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
Do
This was an issue that came up before VXLAN stabilization. If the device has more than one partition, acos_client returns an error when we wire in the certificate hooks.
SUPER LOW PRIORITY No one uses the certificate hooks with the community driver yet. If they never will, feel free to close this.
Broken in axapi 2.1, but we need it for 4.0+
Write Openstack context-free A10Context implementation.
Timeout cannot be greater than Delay for health monitors. Delay is the wait time between health monitor checks and Timeout is the amount of time we wait until we've decided something is "unhealthy". If timeout is larger than delay, a second health check will be sent before the first health check has a chance to timeout.
Write handler for VIPs
Our networking team always configures a vrid per virtual server. I believe this is used to allow both a10's in a cluster to be active at the same time for differing virtual servers?
Write handler for pool CRUD
I need to find out how this stuff works via the API so I can make the necessary SDK modifications to be able to access this functionality in Openstack.
See http://github.com/a10networks/a10-openstack as example.
Test the cross-product of the following:
Intermediate / No Intermediate
Passphrase / No Passphrase
Session Persistence options
Expected behaviors:
Intermediate certs are uploaded when specified
Passphrase is set when specified
Ability to create all combinations of session persistence
Or move it under the module dir. This also applies to acos-client.
If neutron_lbaas isn't installed, the imports in a10_openstack_lb.py raise an ImportError exception and causes the driver not to load.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.