a10networks / a10sdk-python Goto Github PK
View Code? Open in Web Editor NEWLicense: Apache License 2.0
License: Apache License 2.0
Openstack: Icehouse
ACOS: 2.7.2-P4-SP1
a10sdk: 4.0.0.528
acos_client: 1.2.4
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```
This happens when the device is configured to use "api_version: '3.0'" in `/etc/a10/config.py`
Instead of this "OK something is wrong in SSL land" error, we should catch the exception and tell the user, "Dave, I'm afraid I can't do that".
1080 2015-05-07 14:54:54.506 8414 ERROR neutron.api.v2.resource [-] create failed
1081 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource Traceback (most recent call last):
1082 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/api/v2/resource.py", line 87, in resource
1083 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource result = method(request=request, **args)
1084 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/api/v2/base.py", line 448, in create
1085 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource obj = obj_creator(request.context, **kwargs)
1086 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/neutron/services/loadbalancer/plugin.py", line 210, in create_member
1087 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource driver.create_member(context, m)
1088 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10_openstack_lbaas/driver_v1.py", line 161, in create_member
1089 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.a10.member.create(context, member)
1090 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10_neutron_lbaas/v1/handler_member.py", line 61, in create
1091 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.hooks.after_member_create(c, context, member)
1092 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/home/frank/a10-openstack/a10_openstack/network/network_driver.py", line 94, in after_member_create
1093 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self._create_vxlan(context, self._get_subnet_info(context, member=member), mode="member")
1094 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/home/frank/a10-openstack/a10_openstack/network/network_driver.py", line 159, in _create_vxlan
1095 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource c.workflow(partition_id, self.device_proxy)
1096 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/home/frank/a10-openstack/a10_openstack/network/controller_vxlan.py", line 42, in workflow
1097 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource if self.create_overlay_tunnel():
1098 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/home/frank/a10-openstack/a10_openstack/network/controller_vxlan.py", line 145, in create_overlay_tunnel
1099 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource lif_obj.create()
1100 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10sdk/common/A10BaseClass.py", line 502, in create
1101 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource response = self.response_handler(self.DeviceProxy.POST(self))
1102 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10sdk/common/device_proxy.py", line 125, in POST
1103 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource return self.request_handler("POST", obj, response)
(1649 lines or approximately ~800-some requests later)
2752 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10sdk/common/device_proxy.py", line 71, in request_handler
2753 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource return self.POST(obj)
2754 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10sdk/common/device_proxy.py", line 125, in POST
2755 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource return self.request_handler("POST", obj, response)
2756 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10sdk/common/device_proxy.py", line 61, in request_handler
2757 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.logon()
2758 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/local/lib/python2.7/dist-packages/a10sdk/common/device_proxy.py", line 34, in logon
2759 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource json.dumps({'credentials': {"username": self.username, "password": self.password}}), headers)
2760 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/httplib.py", line 973, in request
2761 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self._send_request(method, url, body, headers)
2762 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/httplib.py", line 1007, in _send_request
2763 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.endheaders(body)
2764 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/httplib.py", line 969, in endheaders
2765 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self._send_output(message_body)
2766 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/httplib.py", line 829, in _send_output
2767 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.send(msg)
2768 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/httplib.py", line 791, in send
2769 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.connect()
2770 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/httplib.py", line 1176, in connect
2771 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)
2772 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/green/ssl.py", line 288, in wrap_socket
2773 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource return GreenSSLSocket(sock, *a, **kw)
2774 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/green/ssl.py", line 46, in __init__
2775 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource super(GreenSSLSocket, self).__init__(sock.fd, *args, **kw)
2776 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/ssl.py", line 243, in __init__
2777 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource self.do_handshake()
2778 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/green/ssl.py", line 196, in do_handshake
2779 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource super(GreenSSLSocket, self).do_handshake)
2780 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/green/ssl.py", line 83, in _call_trampolining
2781 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource timeout_exc=timeout_exc('timed out'))
2782 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/hubs/__init__.py", line 151, in trampoline
2783 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource listener = hub.add(hub.READ, fileno, current.switch)
2784 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/hubs/epolls.py", line 48, in add
2785 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource listener = BaseHub.add(self, evtype, fileno, cb)
2786 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource File "/usr/lib/python2.7/dist-packages/eventlet/hubs/hub.py", line 115, in add
2787 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource listener = self.lclass(evtype, fileno, cb)
2788 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource RuntimeError: maximum recursion depth exceeded
2789 2015-05-07 14:54:54.506 8414 TRACE neutron.api.v2.resource
When we spin up the vxlan device driver, it initiates a connection to the appliance and if, for example, it doesn't get the response it expects, the connection remains open until it is terminated by TCP timeout. Looking at the device_proxy.py code, it would appear we need to ditch httplib (used for lower-level comms) and instead look at using urllib and the connection pooling feature.
This is a major problem for a10-openstack right now as small hiccups connecting to the device cause the driver to keep retrying and exhausting the application's connection pool.
Line 26 of device_proxy.py
needs to be:
return httplib.HTTPSConnection(self.host, port=self.port, context=httplib.ssl._create_unverified_context())
but really there should probably be an option in DeviceProxy
to verify ssl or not.
See https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection
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.