8000 Unable to use MariaDB SSL cert specified in `site_config.json` with MariaDB. · Issue #19216 · frappe/frappe · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Unable to use MariaDB SSL cert specified in site_config.json with MariaDB. #19216
Closed
@niekvb

Description

@niekvb

Description of the issue

Unable to use MariaDB SSL certificate specified in site_config.json.

Context information

Output of bench version

erpnext 14.10.0
frappe 14.18.1
payments 0.0.1

Steps to reproduce the issue

  1. Install ERPNext on a Kubernetes cluster
  2. Modify site_config.json to specify MySQL certificate using the following keys (as described here):
    • db_ssl_ca
    • db_ssl_cert
    • db_ssl_key
  3. Try to open ERPNext in your browser

Observed result

A page showing Internal Server Error and the following logged by the Gunicorn container:

TypeError: Connection.__init__() got an unexpected keyword argument 'ca'

Expected result

Success

Stacktrace / full error message

Traceback (most recent call last):
  File "/home/frappe/frappe-bench/env/lib/python3.10/site-packages/gunicorn/workers/base_async.py", line 55, in handle
    self.handle_request(listener_name, req, client, addr)
  File "/home/frappe/frappe-bench/env/lib/python3.10/site-packages/gunicorn/workers/ggevent.py", line 127, in handle_request
    super().handle_request(listener_name, req, sock, addr)
  File "/home/frappe/frappe-bench/env/lib/python3.10/site-packages/gunicorn/workers/base_async.py", line 108, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/frappe/frappe-bench/env/lib/python3.10/site-packages/werkzeug/local.py", line 237, in application
    return ClosingIterator(app(environ, start_response), self.cleanup)
  File "/home/frappe/frappe-bench/env/lib/python3.10/site-packages/werkzeug/wrappers/request.py", line 187, in application
    resp = f(*args[:-2] + (request,))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 87, in application
    response = handle_exception(e)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 324, in handle_exception
    response = get_response("message", http_status_code=http_status_code)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/website/serve.py", line 26, in get_response
    frappe.log_error(f"{path} failed")
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 2218, in log_error
    error_log = get_doc(
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1176, in get_doc
    doc = frappe.model.document.get_doc(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/document.py", line 72, in get_doc
    controller = get_controller(doctype)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 81, in get_controller
    site_controllers[doctype] = _get_controller()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/model/base_document.py", line 47, in _get_controller
    module_name, custom = frappe.db.get_value(
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 495, in get_value
    result = self.get_values(
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 592, in get_values
    out = self._get_values_from_table(
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 809, in _get_values_from_table
    query = frappe.qb.engine.get_query(
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/query.py", line 513, in get_query
    criterion = self.build_conditions(table, filters, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/query.py", line 369, in build_conditions
    criterion = self.dict_query(filters=filters, table=table, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/query.py", line 328, in dict_query
    _operator = self.OPERATOR_MAP["="]
  File "/usr/local/lib/python3.10/functools.py", line 981, in __get__
    val = self.func(instance)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/query.py", line 194, in OPERATOR_MAP
    if frappe.get_hooks("filters_config"):
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1478, in get_hooks
    hooks = _dict(cache().get_value("app_hooks", _load_app_hooks))
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/redis_wrapper.py", line 81, in get_value
    val = generator()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/caching.py", line 57, in wrapper
    return_val = func(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1439, in _load_app_hooks
    apps = [app_name] if app_name else get_installed_apps(sort=True)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/caching.py", line 57, in wrapper
    return_val = func(*args, **kwargs)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1404, in get_installed_apps
    installed = json.loads(db.get_global("installed_apps") or "[]")
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 958, in get_global
    return self.get_default(key, user)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 962, in get_default
    d = self.get_defaults(key, parent)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 978, in get_defaults
    defaults = frappe.defaults.get_defaults_for(parent)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/defaults.py", line 218, in get_defaults_for
    frappe.qb.from_(table)
  File "/home/frappe/frappe-bench/apps/frappe/frappe/query_builder/utils.py", line 76, in execute_query
    return frappe.db.sql(query, params, *args, **kwargs)  # nosemgrep
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 199, in sql
    self.connect()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/database.py", line 113, in connect
    self._conn = self.get_connection()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/mariadb/database.py", line 98, in get_connection
    conn = self._get_connection()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/mariadb/database.py", line 104, in _get_connection
    return self.create_connection()
  File "/home/frappe/frappe-bench/apps/frappe/frappe/database/mariadb/database.py", line 107, in create_connection
    return pymysql.connect(**self.get_connection_settings())
TypeError: Connection.__init__() got an unexpected keyword argument 'ca'

Additional information

site_config.json:

{
 "db_host": "mysql",
 "db_name": "erpnext",
 "db_user": "erpnext",
 "db_password": "some_password",
 "db_port": 3306,
 "db_type": "mariadb",
 "db_ssl_ca": "/etc/ssl/mysql/ca.crt",
 "db_ssl_cert": "/etc/ssl/mysql/tls.crt",
 "db_ssl_key": "/etc/ssl/mysql/tls.key"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0