Skip to content

Commit 4ae7439

Browse files
committed
(MODULES-7198) Fix DROP USER IF EXISTS on mariadb
Also centralized the version checking conditional.
1 parent 0ebef55 commit 4ae7439

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

lib/puppet/provider/mysql.rb

+8
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ def mysqld_version
5050
self.class.mysqld_version
5151
end
5252

53+
def self.newer_than(forks_versions)
54+
forks_versions.keys.include?(mysqld_type) && Puppet::Util::Package.versioncmp(mysqld_version, forks_versions[mysqld_type]) >= 0
55+
end
56+
57+
def newer_than(forks_versions)
58+
self.class.newer_than(forks_versions)
59+
end
60+
5361
def defaults_file
5462
self.class.defaults_file
5563
end

lib/puppet/provider/mysql_datadir/mysql.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def create
6060
if mysqld_version.nil?
6161
debug("Installing MySQL data directory with mysql_install_db #{opts.compact.join(' ')}")
6262
mysql_install_db(opts.compact)
63-
elsif (mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0
63+
elsif newer_than('mysql' => '5.7.6', 'percona' => '5.7.6')
6464
opts << "--log-error=#{log_error}"
6565
opts << initialize.to_s
6666
debug("Initializing MySQL data directory >= 5.7.6 with mysqld: #{opts.compact.join(' ')}")

lib/puppet/provider/mysql_user/mysql.rb

+10-8
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def self.instances
1414
## Default ...
1515
# rubocop:disable Metrics/LineLength
1616
query = "SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{name}'"
17-
elsif (mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0
17+
elsif newer_than('mysql' => '5.7.6', 'percona' => '5.7.6')
1818
query = "SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, AUTHENTICATION_STRING, PLUGIN FROM mysql.user WHERE CONCAT(user, '@', host) = '#{name}'"
1919
else
2020
query = "SELECT MAX_USER_CONNECTIONS, MAX_CONNECTIONS, MAX_QUESTIONS, MAX_UPDATES, SSL_TYPE, SSL_CIPHER, X509_ISSUER, X509_SUBJECT, PASSWORD /*!50508 , PLUGIN */ FROM mysql.user WHERE CONCAT(user, '@', host) = '#{name}'"
@@ -83,8 +83,7 @@ def create
8383
@property_hash[:max_updates_per_hour] = max_updates_per_hour
8484

8585
merged_tls_options = tls_options.join(' AND ')
86-
if ((mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0) ||
87-
(mysqld_type == 'mariadb' && Puppet::Util::Package.versioncmp(mysqld_version, '10.2.0') >= 0)
86+
if newer_than('mysql' => '5.7.6', 'percona' => '5.7.6', 'mariadb' => '10.2.0')
8887
self.class.mysql_caller("ALTER USER '#{merged_name}' REQUIRE #{merged_tls_options}", 'system')
8988
else
9089
self.class.mysql_caller("GRANT USAGE ON *.* TO '#{merged_name}' REQUIRE #{merged_tls_options}", 'system')
@@ -96,7 +95,11 @@ def create
9695

9796
def destroy
9897
merged_name = @resource[:name].sub('@', "'@'")
99-
if_exists = (Puppet::Util::Package.versioncmp(mysqld_version, '5.7') >= 0) ? 'IF EXISTS ' : ''
98+
if_exists = if newer_than('mysql' => '5.7', 'percona' => '5.7', 'mariadb' => '10.1.3')
99+
'IF EXISTS '
100+
else
101+
''
102+
end
100103

101104
self.class.mysql_caller("DROP USER #{if_exists}'#{merged_name}'", 'system')
102105

@@ -122,7 +125,7 @@ def password_hash=(string)
122125
if mysqld_version.nil?
123126
# default ... if mysqld_version does not work
124127
self.class.mysql_caller("SET PASSWORD FOR #{merged_name} = '#{string}'", 'system')
125-
elsif (mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0
128+
elsif newer_than('mysql' => '5.7.6', 'percona' => '5.7.6')
126129
raise ArgumentError, _('Only mysql_native_password (*ABCD...XXX) hashes are supported.') unless string =~ %r{^\*}
127130
self.class.mysql_caller("ALTER USER #{merged_name} IDENTIFIED WITH mysql_native_password AS '#{string}'", 'system')
128131
else
@@ -163,7 +166,7 @@ def max_updates_per_hour=(int)
163166
def plugin=(string)
164167
merged_name = self.class.cmd_user(@resource[:name])
165168

166-
if (mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0
169+
if newer_than('mysql' => '5.7.6', 'percona' => '5.7.6')
167170
sql = "ALTER USER #{merged_name} IDENTIFIED WITH '#{string}'"
168171
sql << " AS '#{@resource[:password_hash]}'" if string == 'mysql_native_password'
169172
else
@@ -180,8 +183,7 @@ def plugin=(string)
180183
def tls_options=(array)
181184
merged_name = self.class.cmd_user(@resource[:name])
182185
merged_tls_options = array.join(' AND ')
183-
if ((mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0) ||
184-
(mysqld_type == 'mariadb' && Puppet::Util::Package.versioncmp(mysqld_version, '10.2.0') >= 0)
186+
if newer_than('mysql' => '5.7.6', 'percona' => '5.7.6', 'mariadb' => '10.2.0')
185187
self.class.mysql_caller("ALTER USER #{merged_name} REQUIRE #{merged_tls_options}", 'system')
186188
else
187189
self.class.mysql_caller("GRANT USAGE ON *.* TO #{merged_name} REQUIRE #{merged_tls_options}", 'system')

0 commit comments

Comments
 (0)