Display a more informative error when InvalidPrivsError is raised (#465) (#466)

* Display a more informative error when InvalidPrivsError is raised (Issue #465)

Co-authored-by: Laurent Indermühle <laurent.indermuehle@pm.me>
This commit is contained in:
Diego Gullo 2022-12-06 16:12:01 +04:00 committed by GitHub
parent 4dac66382a
commit 6ac89ca1f6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 62 additions and 1 deletions

View file

@ -0,0 +1,5 @@
---
minor_changes:
- mysql_user - display a more informative invalid privilege exception.
Changes the exception handling of the granting permission logic to show the query executed , params
and the exception message granting privileges fails` (https://github.com/ansible-collections/community.mysql/issues/465).

View file

@ -725,7 +725,8 @@ def privileges_grant(cursor, user, host, db_table, priv, tls_requires, maria_rol
try:
cursor.execute(query, params)
except (mysql_driver.ProgrammingError, mysql_driver.OperationalError, mysql_driver.InternalError) as e:
raise InvalidPrivsError("Error granting privileges, invalid priv string: %s" % priv_string)
raise InvalidPrivsError("Error granting privileges, invalid priv string: %s , params: %s, query: %s ,"
" exception: %s." % (priv_string, str(params), query, str(e)))
def convert_priv_dict_to_str(priv):

View file

@ -4,3 +4,5 @@
src: installed_file.j2
dest: "{{ dbdeployer_installed_file }}"
listen: create zookeeper installed file
tags:
- setup_mysql

View file

@ -5,7 +5,17 @@
####################################################################
- import_tasks: setvars.yml
tags:
- setup_mysql
- import_tasks: dir.yml
tags:
- setup_mysql
- import_tasks: install.yml
tags:
- setup_mysql
- import_tasks: config.yml
tags:
- setup_mysql
- import_tasks: verify.yml
tags:
- setup_mysql

View file

@ -1,5 +1,9 @@
- name: delete temporary directory
include_tasks: default-cleanup.yml
tags:
- setup_remote_tmp_dir
- name: delete temporary directory (windows)
include_tasks: windows-cleanup.yml
tags:
- setup_remote_tmp_dir

View file

@ -7,9 +7,13 @@
setup:
gather_subset: distribution
when: ansible_facts == {}
tags:
- setup_remote_tmp_dir
- include_tasks: "{{ lookup('first_found', files)}}"
vars:
files:
- "{{ ansible_os_family | lower }}.yml"
- "default.yml"
tags:
- setup_remote_tmp_dir

View file

@ -281,6 +281,10 @@
- include: test_priv_subtract.yml enable_check_mode=no
- include: test_priv_subtract.yml enable_check_mode=yes
- import_tasks: test_privs_issue_465.yml
tags:
- issue_465
# Tests for the TLS requires dictionary
- include: tls_requirements.yml

View file

@ -0,0 +1,31 @@
---
# test code for privileges for mysql_user module - issue 465
- vars:
mysql_parameters: &mysql_params
login_user: '{{ mysql_user }}'
login_password: '{{ mysql_password }}'
login_host: 127.0.0.1
login_port: '{{ mysql_primary_port }}'
block:
# ============================================================
- name: create a user with parameters that will always cause an exception
mysql_user:
<<: *mysql_params
name: user_issue_465
password: a_test_password_465
priv: '*.{{ db_name }}:SELECT'
state: present
ignore_errors: true
register: result
- name: assert output message for current privileges
assert:
that:
- result is failed
- result.msg is search('invalid priv string')
- result.msg is search('params')
- result.msg is search('query')
- result.msg is search('exception')