* mysql_user: fix MySQL/MariaDB version check
To handle properly user management, version check needed refacto, as well as the query used to get existing password hash
* mysql_user: break long query in multiple lines
* mysql_user: fix query fetch existing password hash
* mysql_user: MariaDB version check 100.2 != 10.2
* mysql_user: fix existing password fetch
In some cases, both columns (Password and authentication_string) may exist and be populated.
In other cases one exist, but not the second.
This fix should handle properly all situations
* mysql_user: break long queries
* mysql_user: refactor duplicated code
* mysql_user: handle updates from root with empty passwd to new passwd
* mysql_user: GC debug statement and readd trailing new line
* mysql_user: fix pep8 under indentation
* mysql_user: fix privileges management
https://github.com/ansible/ansible/pull/45355#issuecomment-428200244
* mysql_user: raise exception if exception caught doesn't match the one that is managed
* mysql_user: improve plugins output (add msg field with explicit informations)
* mysql_user: fix old / new password hash comparison
* mysql_user: fix reference to old MySQLdb lib
* mysql_user: fix cursor when root password is left empty (mysql DB invisible)
* mysql_user: add changelog
* ALL privileges comparison
* fixed blank line
* added mysql 8 fixes
* fixed version compatibility
* mysql_user: fix MySQL/MariaDB version check
To handle properly user management, version check needed refacto, as well as the query used to get existing password hash
* mysql_user: break long query in multiple lines
* mysql_user: fix query fetch existing password hash
* mysql_user: MariaDB version check 100.2 != 10.2
* mysql_user: fix existing password fetch
In some cases, both columns (Password and authentication_string) may exist and be populated.
In other cases one exist, but not the second.
This fix should handle properly all situations
* mysql_user: break long queries
* mysql_user: refactor duplicated code
* mysql_user: handle updates from root with empty passwd to new passwd
* mysql_user: GC debug statement and readd trailing new line
* mysql_user: fix pep8 under indentation
* mysql_user: fix privileges management
https://github.com/ansible/ansible/pull/45355#issuecomment-428200244
* mysql_user: raise exception if exception caught doesn't match the one that is managed
* mysql_user: improve plugins output (add msg field with explicit informations)
* mysql_user: fix old / new password hash comparison
* mysql_user: fix reference to old MySQLdb lib
* mysql_user: fix cursor when root password is left empty (mysql DB invisible)
* mysql_user: add contrib
* Rename changelogs/fragments/45355-mysql_user-fix-versions-compatibilities to add YML extension
Bug fix: Permissions were not parsed correctly if the database name contains a colon (:) character. For example, a privilege string of "*.*:USAGE/`lnx-www-prod:wordpress`.*:ALL" would fail with "invalid privileges string: Invalid privileges specified: frozenset(['WORDPRESS`.*'])". This 1-line fix works around the problem.
Changes to the metadata format were approved here:
https://github.com/ansible/proposals/issues/54
* Update documentation to the new metadata format
* Changes to metadata-tool to account for new metadata
* Add GPL license header
* Add upgrade subcommand to upgrade metadata version
* Change default metadata to the new format
* Fix exclusion of non-modules from the metadata report
* Fix ansible-doc for new module metadata
* Exclude metadata version from ansible-doc output
* Fix website docs generation for the new metadata
* Update metadata schema in valiate-modules test
* Update the metadata in all modules to the new version
MySQL returns privileges on columns as "PRIVILEGES (column)".
For permissions to be correctly matched, it must be specified exactly the
same in the module argument. A resulting string is like
"dbname.dbtable:PRIVILEGES (column)". Thus, the space before the opening
parenthesis must also be removed when creating the set of privileges for
validation.
In Ansible 2.x this module gives `changed = True` for all privileges
that are specified including a table with
priv: "database.table:GRANT"
Mysql returns escaped names in the format
`database`.`tables`:GRANT
However in PR #1358, which was intended to support dotted database names
(a crazy idea to begin with), the quotes for the table name were left
out, leading to `curr_priv != new_priv`.
This means that the idempotency comparison between new_priv and
curr_priv is always 'changed'.
This PR re-introduces quoting to the table part of the priv.
dict no longer have a iteritems method, it was replaced
by items. So we need to use six.
Traceback (most recent call last):
File \"/tmp/ansible_hjd7d65c/ansible_module_mysql_user.py\", line 587, in <module>
main()
File \"/tmp/ansible_hjd7d65c/ansible_module_mysql_user.py\", line 571, in main
changed = user_add(cursor, user, host, host_all, password, encrypted, priv, module.check_mode)
File \"/tmp/ansible_hjd7d65c/ansible_module_mysql_user.py\", line 239, in user_add
for db_table, priv in new_priv.iteritems():
AttributeError: 'dict' object has no attribute 'iteritems'
Fixes require ssl in combination with grant option
Refactoring: code cleanup to make it easier to understand
Code rewritten inspired by @willthames
Added WITH GRANT OPTION as exception; when only REQUIRESSL and/or GRANT are specified we have to add USAGE