No way to set SSL parameters with pymysql
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
oslo.db |
Invalid
|
Undecided
|
David Ames | ||
python-oslo.db (Ubuntu) |
Invalid
|
High
|
Unassigned |
Bug Description
There is no way to pass SSL parameters from oslo.db through sqlalchemy to pymysql.
pymsyql is expecting a parameter, "ssl" to be a dictionary of the form:
ssl= {
"ca": "/path/to/ca.pem",
"capath": "/path/to/cas/",
"cert": "/path/
"key": "/path/to/key.pem",
"cipher": "tls_1.2",
"check_hostname: False,
}
Steps to reproduce:
Examples use:
python3-keystone 2:17.0.
python3-oslo.db 8.1.0-0ubuntu1
If connection parameters set several of these items, then the following warning occurs and DB access fails.
connection_
(keystone.
If only attempting to turn on ssl, then the following traceback occurs because it is a str not a dict.
connection_
020-06-09 20:35:50.110184 Traceback (most recent call last):
2020-06-09 20:35:50.110644 File "/usr/lib/
2020-06-09 20:35:50.110733 result = f(wrapped_self, user_id, *args, **kwargs)
2020-06-09 20:35:50.110804 File "/usr/lib/
2020-06-09 20:35:50.110862 return f(self, *args, **kwargs)
2020-06-09 20:35:50.110922 File "/usr/lib/
2020-06-09 20:35:50.110988 return f(self, *args, **kwargs)
2020-06-09 20:35:50.111064 File "/usr/lib/
2020-06-09 20:35:50.111130 ref = driver.
2020-06-09 20:35:50.111191 File "/usr/lib/
2020-06-09 20:35:50.117473 with sql.session_
2020-06-09 20:35:50.117713 File "/usr/lib/
2020-06-09 20:35:50.117878 return next(self.gen)
2020-06-09 20:35:50.118071 File "/usr/lib/
2020-06-09 20:35:50.118201 with current.
2020-06-09 20:35:50.118357 File "/usr/lib/
2020-06-09 20:35:50.118572 return next(self.gen)
2020-06-09 20:35:50.118693 File "/usr/lib/
2020-06-09 20:35:50.118771 self.session = self.factory.
2020-06-09 20:35:50.118876 File "/usr/lib/
2020-06-09 20:35:50.118955 self._start()
2020-06-09 20:35:50.119079 File "/usr/lib/
2020-06-09 20:35:50.119157 self._setup_
2020-06-09 20:35:50.119349 File "/usr/lib/
2020-06-09 20:35:50.119542 engine = engines.
2020-06-09 20:35:50.119738 File "/usr/lib/
2020-06-09 20:35:50.119861 return wrapped(*args, **kwargs)
2020-06-09 20:35:50.120012 File "/usr/lib/
2020-06-09 20:35:50.120135 test_conn = _test_connectio
2020-06-09 20:35:50.120267 File "/usr/lib/
2020-06-09 20:35:50.120390 return engine.connect()
2020-06-09 20:35:50.120609 File "/usr/lib/
2020-06-09 20:35:50.120733 return self._connectio
2020-06-09 20:35:50.120882 File "/usr/lib/
2020-06-09 20:35:50.121013 else engine.
2020-06-09 20:35:50.121110 File "/usr/lib/
2020-06-09 20:35:50.121185 return self._wrap_
2020-06-09 20:35:50.121282 File "/usr/lib/
2020-06-09 20:35:50.121358 return fn()
2020-06-09 20:35:50.121607 File "/usr/lib/
2020-06-09 20:35:50.121734 return _ConnectionFair
2020-06-09 20:35:50.121876 File "/usr/lib/
2020-06-09 20:35:50.121955 fairy = _ConnectionReco
2020-06-09 20:35:50.122139 File "/usr/lib/
2020-06-09 20:35:50.122219 rec = pool._do_get()
2020-06-09 20:35:50.122316 File "/usr/lib/
2020-06-09 20:35:50.122438 self._dec_
2020-06-09 20:35:50.122649 File "/usr/lib/
2020-06-09 20:35:50.122755 compat.
2020-06-09 20:35:50.122857 File "/usr/lib/
2020-06-09 20:35:50.122933 raise value
2020-06-09 20:35:50.123030 File "/usr/lib/
2020-06-09 20:35:50.123106 return self._create_
2020-06-09 20:35:50.123232 File "/usr/lib/
2020-06-09 20:35:50.123347 return _ConnectionReco
2020-06-09 20:35:50.123508 File "/usr/lib/
2020-06-09 20:35:50.123693 self.__
2020-06-09 20:35:50.123814 File "/usr/lib/
2020-06-09 20:35:50.123891 connection = pool._invoke_
2020-06-09 20:35:50.123991 File "/usr/lib/
2020-06-09 20:35:50.124067 return dialect.
2020-06-09 20:35:50.124163 File "/usr/lib/
2020-06-09 20:35:50.124240 return self.dbapi.
2020-06-09 20:35:50.124364 File "/usr/lib/
2020-06-09 20:35:50.124458 return Connection(*args, **kwargs)
2020-06-09 20:35:50.124611 File "/usr/lib/
2020-06-09 20:35:50.124694 self.ctx = self._create_
2020-06-09 20:35:50.124792 File "/usr/lib/
2020-06-09 20:35:50.125073 ca = sslp.get('ca')
2020-06-09 20:35:50.125201 AttributeError: 'str' object has no attribute 'get'
2020-06-09 20:35:50.125530
2020-06-09 20:35:50.125681 During handling of the above exception, another exception occurred:
2020-06-09 20:35:50.125787
2020-06-09 20:35:50.125891 Traceback (most recent call last):
2020-06-09 20:35:50.126395 File "/usr/lib/
2020-06-09 20:35:50.126479 return self.wsgi_
2020-06-09 20:35:50.126547 File "/usr/lib/
2020-06-09 20:35:50.126679 return self.app(environ, start_response)
2020-06-09 20:35:50.126748 File "/usr/lib/
2020-06-09 20:35:50.126802 resp = self.call_func(req, *args, **kw)
2020-06-09 20:35:50.126860 File "/usr/lib/
2020-06-09 20:35:50.126912 return self.func(req, *args, **kwargs)
2020-06-09 20:35:50.126969 File "/usr/lib/
2020-06-09 20:35:50.127021 response = req.get_
2020-06-09 20:35:50.127077 File "/usr/lib/
2020-06-09 20:35:50.127129 status, headers, app_iter = self.call_
2020-06-09 20:35:50.127186 File "/usr/lib/
2020-06-09 20:35:50.127338 app_iter = application(
2020-06-09 20:35:50.127423 File "/usr/lib/
2020-06-09 20:35:50.127479 return resp(environ, start_response)
2020-06-09 20:35:50.127536 File "/usr/lib/
2020-06-09 20:35:50.127663 resp = self.call_func(req, *args, **kw)
2020-06-09 20:35:50.127736 File "/usr/lib/
2020-06-09 20:35:50.127791 return self.func(req, *args, **kwargs)
2020-06-09 20:35:50.127848 File "/usr/lib/
2020-06-09 20:35:50.127901 response = req.get_
2020-06-09 20:35:50.127957 File "/usr/lib/
2020-06-09 20:35:50.128008 status, headers, app_iter = self.call_
2020-06-09 20:35:50.128065 File "/usr/lib/
2020-06-09 20:35:50.128182 app_iter = application(
2020-06-09 20:35:50.128278 File "/usr/lib/
2020-06-09 20:35:50.128382 resp = self.call_func(req, *args, **kw)
2020-06-09 20:35:50.128482 File "/usr/lib/
2020-06-09 20:35:50.128567 return self.func(req, *args, **kwargs)
2020-06-09 20:35:50.128730 File "/usr/lib/
2020-06-09 20:35:50.128811 return request.
2020-06-09 20:35:50.128877 File "/usr/lib/
2020-06-09 20:35:50.128944 status, headers, app_iter = self.call_
2020-06-09 20:35:50.129004 File "/usr/lib/
2020-06-09 20:35:50.129056 app_iter = application(
2020-06-09 20:35:50.129113 File "/usr/lib/
2020-06-09 20:35:50.129165 resp = self.call_func(req, *args, **kw)
2020-06-09 20:35:50.129222 File "/usr/lib/
2020-06-09 20:35:50.129273 return self.func(req, *args, **kwargs)
2020-06-09 20:35:50.129330 File "/usr/lib/
2020-06-09 20:35:50.129382 response = req.get_
2020-06-09 20:35:50.129439 File "/usr/lib/
2020-06-09 20:35:50.129499 status, headers, app_iter = self.call_
2020-06-09 20:35:50.129576 File "/usr/lib/
2020-06-09 20:35:50.129688 app_iter = application(
2020-06-09 20:35:50.129763 File "/usr/lib/
2020-06-09 20:35:50.129835 return self.app(environ, start_response)
2020-06-09 20:35:50.129896 File "/usr/lib/
2020-06-09 20:35:50.129948 resp = self.call_func(req, *args, **kw)
2020-06-09 20:35:50.130042 File "/usr/lib/
2020-06-09 20:35:50.130101 return self.func(req, *args, **kwargs)
2020-06-09 20:35:50.130158 File "/usr/lib/
2020-06-09 20:35:50.130210 response = req.get_
2020-06-09 20:35:50.130267 File "/usr/lib/
2020-06-09 20:35:50.130318 status, headers, app_iter = self.call_
2020-06-09 20:35:50.130434 File "/usr/lib/
2020-06-09 20:35:50.130515 app_iter = application(
2020-06-09 20:35:50.130611 File "/usr/lib/
2020-06-09 20:35:50.130800 return app(environ, start_response)
2020-06-09 20:35:50.130890 File "/usr/lib/
2020-06-09 20:35:50.130956 response = self.handle_
2020-06-09 20:35:50.131030 File "/usr/lib/
2020-06-09 20:35:50.131148 return original_handler(e)
2020-06-09 20:35:50.131256 File "/usr/lib/
2020-06-09 20:35:50.131321 return original_handler(e)
2020-06-09 20:35:50.131383 File "/usr/lib/
2020-06-09 20:35:50.131436 return original_handler(e)
2020-06-09 20:35:50.131493 [Previous line repeated 27 more times]
2020-06-09 20:35:50.131554 File "/usr/lib/
2020-06-09 20:35:50.131606 reraise(exc_type, exc_value, tb)
2020-06-09 20:35:50.132051 File "/usr/lib/
2020-06-09 20:35:50.132201 raise value.with_
2020-06-09 20:35:50.132317 File "/usr/lib/
2020-06-09 20:35:50.132402 response = self.full_
2020-06-09 20:35:50.132498 File "/usr/lib/
2020-06-09 20:35:50.132574 rv = self.handle_
2020-06-09 20:35:50.132689 File "/usr/lib/
2020-06-09 20:35:50.132862 return original_handler(e)
2020-06-09 20:35:50.132975 File "/usr/lib/
2020-06-09 20:35:50.133053 return original_handler(e)
2020-06-09 20:35:50.133149 File "/usr/lib/
2020-06-09 20:35:50.133236 return original_handler(e)
2020-06-09 20:35:50.133366 [Previous line repeated 27 more times]
2020-06-09 20:35:50.133464 File "/usr/lib/
2020-06-09 20:35:50.133541 reraise(exc_type, exc_value, tb)
2020-06-09 20:35:50.133640 File "/usr/lib/
2020-06-09 20:35:50.133789 raise value.with_
2020-06-09 20:35:50.133903 File "/usr/lib/
2020-06-09 20:35:50.142432 rv = self.dispatch_
2020-06-09 20:35:50.143007 File "/usr/lib/
2020-06-09 20:35:50.143040 return self.view_
2020-06-09 20:35:50.143066 File "/usr/lib/
2020-06-09 20:35:50.143087 resp = resource(*args, **kwargs)
2020-06-09 20:35:50.143110 File "/usr/lib/
2020-06-09 20:35:50.143140 return self.dispatch_
2020-06-09 20:35:50.143168 File "/usr/lib/
2020-06-09 20:35:50.143189 resp = meth(*args, **kwargs)
2020-06-09 20:35:50.143212 File "/usr/lib/
2020-06-09 20:35:50.143232 return f(*args, **kwargs)
2020-06-09 20:35:50.143254 File "/usr/lib/
2020-06-09 20:35:50.143274 token = authentication.
2020-06-09 20:35:50.143298 File "/usr/lib/
2020-06-09 20:35:50.143319 authenticate(
2020-06-09 20:35:50.143343 File "/usr/lib/
2020-06-09 20:35:50.143363 resp = method.
2020-06-09 20:35:50.143386 File "/usr/lib/
2020-06-09 20:35:50.143407 PROVIDERS.
2020-06-09 20:35:50.143429 File "/usr/lib/
2020-06-09 20:35:50.143449 __ret_val = __f(*args, **kwargs)
2020-06-09 20:35:50.143471 File "/usr/lib/
2020-06-09 20:35:50.143491 _send_audit_
2020-06-09 20:35:50.143514 File "/usr/lib/
2020-06-09 20:35:50.143534 service_list = _CATALOG_
2020-06-09 20:35:50.143636 File "/usr/lib/
2020-06-09 20:35:50.143751 __ret_val = __f(*args, **kwargs)
2020-06-09 20:35:50.143783 File "/usr/lib/
2020-06-09 20:35:50.143804 return f(self, *args, **kwargs)
2020-06-09 20:35:50.143827 File "/usr/lib/
2020-06-09 20:35:50.143848 return self.driver.
2020-06-09 20:35:50.143871 File "/usr/lib/
2020-06-09 20:35:50.143891 return f(self, hints, *args, **kwargs)
2020-06-09 20:35:50.143913 File "/usr/lib/
2020-06-09 20:35:50.143933 with sql.session_
2020-06-09 20:35:50.143957 File "/usr/lib/
2020-06-09 20:35:50.143976 return next(self.gen)
2020-06-09 20:35:50.143998 File "/usr/lib/
2020-06-09 20:35:50.144018 with current.
2020-06-09 20:35:50.144041 File "/usr/lib/
2020-06-09 20:35:50.144060 return next(self.gen)
2020-06-09 20:35:50.144083 File "/usr/lib/
2020-06-09 20:35:50.144102 self.session = self.factory.
2020-06-09 20:35:50.144125 File "/usr/lib/
2020-06-09 20:35:50.144145 self._start()
2020-06-09 20:35:50.144167 File "/usr/lib/
2020-06-09 20:35:50.144187 self._setup_
2020-06-09 20:35:50.144209 File "/usr/lib/
2020-06-09 20:35:50.144228 engine = engines.
2020-06-09 20:35:50.144251 File "/usr/lib/
2020-06-09 20:35:50.144271 return wrapped(*args, **kwargs)
2020-06-09 20:35:50.144293 File "/usr/lib/
2020-06-09 20:35:50.144312 test_conn = _test_connectio
2020-06-09 20:35:50.144334 File "/usr/lib/
2020-06-09 20:35:50.144355 return engine.connect()
2020-06-09 20:35:50.144377 File "/usr/lib/
2020-06-09 20:35:50.144397 return self._connectio
2020-06-09 20:35:50.144419 File "/usr/lib/
2020-06-09 20:35:50.144438 else engine.
2020-06-09 20:35:50.144461 File "/usr/lib/
2020-06-09 20:35:50.144480 return self._wrap_
2020-06-09 20:35:50.144502 File "/usr/lib/
2020-06-09 20:35:50.144521 return fn()
2020-06-09 20:35:50.144543 File "/usr/lib/
2020-06-09 20:35:50.144628 return _ConnectionFair
2020-06-09 20:35:50.144666 File "/usr/lib/
2020-06-09 20:35:50.144687 fairy = _ConnectionReco
2020-06-09 20:35:50.144711 File "/usr/lib/
2020-06-09 20:35:50.144730 rec = pool._do_get()
2020-06-09 20:35:50.144755 File "/usr/lib/
2020-06-09 20:35:50.144815 self._dec_
2020-06-09 20:35:50.144845 File "/usr/lib/
2020-06-09 20:35:50.144866 compat.
2020-06-09 20:35:50.144902 File "/usr/lib/
2020-06-09 20:35:50.144926 raise value
2020-06-09 20:35:50.144949 File "/usr/lib/
2020-06-09 20:35:50.144969 return self._create_
2020-06-09 20:35:50.144992 File "/usr/lib/
2020-06-09 20:35:50.145011 return _ConnectionReco
2020-06-09 20:35:50.145034 File "/usr/lib/
2020-06-09 20:35:50.145054 self.__
2020-06-09 20:35:50.145076 File "/usr/lib/
2020-06-09 20:35:50.145095 connection = pool._invoke_
2020-06-09 20:35:50.145117 File "/usr/lib/
2020-06-09 20:35:50.145137 return dialect.
2020-06-09 20:35:50.145159 File "/usr/lib/
2020-06-09 20:35:50.145178 return self.dbapi.
2020-06-09 20:35:50.145201 File "/usr/lib/
2020-06-09 20:35:50.145220 return Connection(*args, **kwargs)
2020-06-09 20:35:50.145242 File "/usr/lib/
2020-06-09 20:35:50.145262 self.ctx = self._create_
2020-06-09 20:35:50.145284 File "/usr/lib/
2020-06-09 20:35:50.145303 ca = sslp.get('ca')
2020-06-09 20:35:50.145389 AttributeError: 'str' object has no attribute 'get'
Fix proposed to branch: master /review. opendev. org/734713
Review: https:/