Skip to content

Commit b3658f8

Browse files
S11 Adminhunner
S11 Admin
authored andcommitted
(MODULES-3623) Centralise MySQL calls...
...so they can all be modified from one place. The current codebase handles each mysql call via calls to the command-line mysql client. There are basically only two sets of options passed, but the options are repeated separately in various places throughout the code. The new self.mysql function now issues the call to the mysql client with one of the two sets of options (selected via an optional function parameter). Now the options to all mysql calls can be modified from one place. This will be useful when we are converting the module to allow for databases on multiple remote servers, since we will be able to add the -h switch to all calls at once.
1 parent 79682e7 commit b3658f8

File tree

9 files changed

+98
-79
lines changed

9 files changed

+98
-79
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -1324,3 +1324,4 @@ This module is based on work by David Schmitt. The following contributors have c
13241324
* Chris Weyl
13251325
* Daniël van Eeden
13261326
* Jan-Otto Kröpke
1327+
* Timothy Sven Nelson

lib/puppet/provider/mysql.rb

+19-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class Puppet::Provider::Mysql < Puppet::Provider
77
ENV['PATH'] = ENV['PATH'] + ':/usr/libexec:/usr/local/libexec:/usr/local/bin'
88

99
# rubocop:disable Style/HashSyntax
10-
commands :mysql => 'mysql'
10+
commands :mysql_raw => 'mysql'
1111
commands :mysqld => 'mysqld'
1212
commands :mysqladmin => 'mysqladmin'
1313
# rubocop:enable Style/HashSyntax
@@ -54,8 +54,25 @@ def defaults_file
5454
self.class.defaults_file
5555
end
5656

57+
def self.mysql_caller(textOfSQL, type = 'undefined')
58+
if type.eql? 'system'
59+
mysql_raw([defaults_file, '--host=', system_database, '-e', textOfSQL].flatten.compact)
60+
elsif type.eql? 'regular'
61+
mysql_raw([defaults_file, '-NBe', textOfSQL].flatten.compact)
62+
elsif type.eql? 'undefined'
63+
begin
64+
raise Puppet::Error, "#mysql had an error -> did not pass in type parameter"
65+
rescue => e
66+
puts "Error during processing: #{$!}"
67+
puts "Backtrace:\n\t#{e.backtrace.join("\n\t")}"
68+
end
69+
else
70+
raise Puppet::Error, "#mysql had an error -> Unrecognised type '#type'"
71+
end
72+
end
73+
5774
def self.users
58-
mysql([defaults_file, '-NBe', "SELECT CONCAT(User, '@',Host) AS User FROM mysql.user"].compact).split("\n")
75+
self.mysql_caller("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').split("\n")
5976
end
6077

6178
# Optional parameter to run a statement on the MySQL system database.

lib/puppet/provider/mysql_database/mysql.rb

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22
Puppet::Type.type(:mysql_database).provide(:mysql, parent: Puppet::Provider::Mysql) do
33
desc 'Manages MySQL databases.'
44

5-
commands mysql: 'mysql'
5+
commands mysql_raw: 'mysql'
66

77
def self.instances
8-
mysql([defaults_file, '-NBe', 'show databases'].compact).split("\n").map do |name|
8+
self.mysql_caller('show databases', 'regular').split("\n").map do |name|
99
attributes = {}
10-
mysql([defaults_file, '-NBe', "show variables like '%_database'", name].compact).split("\n").each do |line|
10+
self.mysql_caller(["show variables like '%_database'", name], 'regular').split("\n").each do |line|
1111
k, v = line.split(%r{\s})
1212
attributes[k] = v
1313
end
@@ -29,7 +29,7 @@ def self.prefetch(resources)
2929
end
3030

3131
def create
32-
mysql([defaults_file, '-NBe', "create database if not exists `#{@resource[:name]}` character set `#{@resource[:charset]}` collate `#{@resource[:collate]}`"].compact)
32+
self.class.mysql_caller("create database if not exists `#{@resource[:name]}` character set `#{@resource[:charset]}` collate `#{@resource[:collate]}`", 'regular')
3333

3434
@property_hash[:ensure] = :present
3535
@property_hash[:charset] = @resource[:charset]
@@ -39,7 +39,7 @@ def create
3939
end
4040

4141
def destroy
42-
mysql([defaults_file, '-NBe', "drop database if exists `#{@resource[:name]}`"].compact)
42+
self.class.mysql_caller("drop database if exists `#{@resource[:name]}`", 'regular')
4343

4444
@property_hash.clear
4545
exists? ? (return false) : (return true)
@@ -52,13 +52,13 @@ def exists?
5252
mk_resource_methods
5353

5454
def charset=(value)
55-
mysql([defaults_file, '-NBe', "alter database `#{resource[:name]}` CHARACTER SET #{value}"].compact)
55+
self.class.mysql_caller("alter database `#{resource[:name]}` CHARACTER SET #{value}", 'regular')
5656
@property_hash[:charset] = value
5757
(charset == value) ? (return true) : (return false)
5858
end
5959

6060
def collate=(value)
61-
mysql([defaults_file, '-NBe', "alter database `#{resource[:name]}` COLLATE #{value}"].compact)
61+
self.class.mysql_caller("alter database `#{resource[:name]}` COLLATE #{value}", 'regular')
6262
@property_hash[:collate] = value
6363
(collate == value) ? (return true) : (return false)
6464
end

lib/puppet/provider/mysql_grant/mysql.rb

+7-5
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
Puppet::Type.type(:mysql_grant).provide(:mysql, parent: Puppet::Provider::Mysql) do
33
desc 'Set grants for users in MySQL.'
44

5+
commands mysql_raw: 'mysql'
6+
57
def self.instances
68
instances = []
79
users.map do |user|
810
user_string = cmd_user(user)
911
query = "SHOW GRANTS FOR #{user_string};"
1012
begin
11-
grants = mysql([defaults_file, '-NBe', query].compact)
13+
grants = self.mysql_caller(query, 'regular')
1214
rescue Puppet::ExecutionFailure => e
1315
# Silently ignore users with no grants. Can happen e.g. if user is
1416
# defined with fqdn and server is run with skip-name-resolve. Example:
@@ -80,7 +82,7 @@ def grant(user, table, privileges, options)
8082
query << " ON #{table_string}"
8183
query << " TO #{user_string}"
8284
query << self.class.cmd_options(options) unless options.nil?
83-
mysql([defaults_file, system_database, '-e', query].compact)
85+
self.class.mysql_caller(query, 'system')
8486
end
8587

8688
def create
@@ -106,10 +108,10 @@ def revoke(user, table, revoke_privileges = ['ALL'])
106108
# exist to be executed successfully
107109
if revoke_privileges.include?('ALL') && !revoke_privileges.include?('PROXY')
108110
query = "REVOKE GRANT OPTION ON #{table_string} FROM #{user_string}"
109-
mysql([defaults_file, system_database, '-e', query].compact)
111+
self.class.mysql_caller(query, 'system')
110112
end
111113
query = "REVOKE #{priv_string} ON #{table_string} FROM #{user_string}"
112-
mysql([defaults_file, system_database, '-e', query].compact)
114+
self.class.mysql_caller(query, 'system')
113115
end
114116

115117
def destroy
@@ -133,7 +135,7 @@ def exists?
133135

134136
def flush
135137
@property_hash.clear
136-
mysql([defaults_file, '-NBe', 'FLUSH PRIVILEGES'].compact)
138+
self.class.mysql_caller('FLUSH PRIVILEGES', 'regular')
137139
end
138140

139141
mk_resource_methods

lib/puppet/provider/mysql_plugin/mysql.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
Puppet::Type.type(:mysql_plugin).provide(:mysql, parent: Puppet::Provider::Mysql) do
33
desc 'Manages MySQL plugins.'
44

5-
commands mysql: 'mysql'
5+
commands mysql_raw: 'mysql'
66

77
def self.instances
8-
mysql([defaults_file, '-NBe', 'show plugins'].compact).split("\n").map do |line|
8+
self.mysql_caller('show plugins', 'regular').split("\n").map do |line|
99
name, _status, _type, library, _license = line.split(%r{\t})
1010
new(name: name,
1111
ensure: :present,
@@ -28,7 +28,7 @@ def create
2828
# Use plugin_name.so as soname if it's not specified. This won't work on windows as
2929
# there it should be plugin_name.dll
3030
@resource[:soname].nil? ? (soname = @resource[:name] + '.so') : (soname = @resource[:soname])
31-
mysql([defaults_file, '-NBe', "install plugin #{@resource[:name]} soname '#{soname}'"].compact)
31+
self.class.mysql_caller("install plugin #{@resource[:name]} soname '#{soname}'", 'regular')
3232

3333
@property_hash[:ensure] = :present
3434
@property_hash[:soname] = @resource[:soname]
@@ -37,7 +37,7 @@ def create
3737
end
3838

3939
def destroy
40-
mysql([defaults_file, '-NBe', "uninstall plugin #{@resource[:name]}"].compact)
40+
self.class.mysql_caller("uninstall plugin #{@resource[:name]}", 'regular')
4141

4242
@property_hash.clear
4343
exists? ? (return false) : (return true)

lib/puppet/provider/mysql_user/mysql.rb

+19-20
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mysql'))
22
Puppet::Type.type(:mysql_user).provide(:mysql, parent: Puppet::Provider::Mysql) do
33
desc 'manage users for a mysql database.'
4-
commands mysql: 'mysql'
4+
commands mysql_raw: 'mysql'
55

66
# Build a property_hash containing all the discovered information about MySQL
77
# users.
88
def self.instances
9-
users = mysql([defaults_file, '-NBe',
10-
"SELECT CONCAT(User, '@',Host) AS User FROM mysql.user"].compact).split("\n")
9+
users = self.mysql_caller("SELECT CONCAT(User, '@',Host) AS User FROM mysql.user", 'regular').split("\n")
1110
# To reduce the number of calls to MySQL we collect all the properties in
1211
# one big swoop.
1312
users.map do |name|
@@ -22,7 +21,7 @@ def self.instances
2221
end
2322
@max_user_connections, @max_connections_per_hour, @max_queries_per_hour,
2423
@max_updates_per_hour, ssl_type, ssl_cipher, x509_issuer, x509_subject,
25-
@password, @plugin = mysql([defaults_file, '-NBe', query].compact).split(%r{\s})
24+
@password, @plugin = self.mysql_caller(query, 'regular').split(%r{\s})
2625
@tls_options = parse_tls_options(ssl_type, ssl_cipher, x509_issuer, x509_subject)
2726
# rubocop:enable Metrics/LineLength
2827
new(name: name,
@@ -64,19 +63,19 @@ def create
6463
# This is also required if you want to specify a authentication plugin
6564
if !plugin.nil?
6665
if plugin == 'sha256_password' && !password_hash.nil?
67-
mysql([defaults_file, system_database, '-e', "CREATE USER '#{merged_name}' IDENTIFIED WITH '#{plugin}' AS '#{password_hash}'"].compact)
66+
self.class.mysql_caller("CREATE USER '#{merged_name}' IDENTIFIED WITH '#{plugin}' AS '#{password_hash}'", 'system')
6867
else
69-
mysql([defaults_file, system_database, '-e', "CREATE USER '#{merged_name}' IDENTIFIED WITH '#{plugin}'"].compact)
68+
self.class.mysql_caller("CREATE USER '#{merged_name}' IDENTIFIED WITH '#{plugin}'", 'system')
7069
end
7170
@property_hash[:ensure] = :present
7271
@property_hash[:plugin] = plugin
7372
else
74-
mysql([defaults_file, system_database, '-e', "CREATE USER '#{merged_name}' IDENTIFIED BY PASSWORD '#{password_hash}'"].compact)
73+
self.class.mysql_caller("CREATE USER '#{merged_name}' IDENTIFIED BY PASSWORD '#{password_hash}'", 'system')
7574
@property_hash[:ensure] = :present
7675
@property_hash[:password_hash] = password_hash
7776
end
7877
# rubocop:disable Metrics/LineLength
79-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO '#{merged_name}' WITH MAX_USER_CONNECTIONS #{max_user_connections} MAX_CONNECTIONS_PER_HOUR #{max_connections_per_hour} MAX_QUERIES_PER_HOUR #{max_queries_per_hour} MAX_UPDATES_PER_HOUR #{max_updates_per_hour}"].compact)
78+
self.class.mysql_caller("GRANT USAGE ON *.* TO '#{merged_name}' WITH MAX_USER_CONNECTIONS #{max_user_connections} MAX_CONNECTIONS_PER_HOUR #{max_connections_per_hour} MAX_QUERIES_PER_HOUR #{max_queries_per_hour} MAX_UPDATES_PER_HOUR #{max_updates_per_hour}", 'system')
8079
# rubocop:enable Metrics/LineLength
8180
@property_hash[:max_user_connections] = max_user_connections
8281
@property_hash[:max_connections_per_hour] = max_connections_per_hour
@@ -86,9 +85,9 @@ def create
8685
merged_tls_options = tls_options.join(' AND ')
8786
if ((mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0) ||
8887
(mysqld_type == 'mariadb' && Puppet::Util::Package.versioncmp(mysqld_version, '10.2.0') >= 0)
89-
mysql([defaults_file, system_database, '-e', "ALTER USER '#{merged_name}' REQUIRE #{merged_tls_options}"].compact)
88+
self.class.mysql_caller("ALTER USER '#{merged_name}' REQUIRE #{merged_tls_options}", 'system')
9089
else
91-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO '#{merged_name}' REQUIRE #{merged_tls_options}"].compact)
90+
self.class.mysql_caller("GRANT USAGE ON *.* TO '#{merged_name}' REQUIRE #{merged_tls_options}", 'system')
9291
end
9392
@property_hash[:tls_options] = tls_options
9493

@@ -97,7 +96,7 @@ def create
9796

9897
def destroy
9998
merged_name = @resource[:name].sub('@', "'@'")
100-
mysql([defaults_file, system_database, '-e', "DROP USER '#{merged_name}'"].compact)
99+
self.class.mysql_caller("DROP USER '#{merged_name}'", 'system')
101100

102101
@property_hash.clear
103102
exists? ? (return false) : (return true)
@@ -120,41 +119,41 @@ def password_hash=(string)
120119
# We have a fact for the mysql version ...
121120
if mysqld_version.nil?
122121
# default ... if mysqld_version does not work
123-
mysql([defaults_file, system_database, '-e', "SET PASSWORD FOR #{merged_name} = '#{string}'"].compact)
122+
self.class.mysql_caller("SET PASSWORD FOR #{merged_name} = '#{string}'", 'system')
124123
elsif (mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0
125124
raise ArgumentError, _('Only mysql_native_password (*ABCD...XXX) hashes are supported.') unless string =~ %r{^\*}
126-
mysql([defaults_file, system_database, '-e', "ALTER USER #{merged_name} IDENTIFIED WITH mysql_native_password AS '#{string}'"].compact)
125+
self.class.mysql_caller("ALTER USER #{merged_name} IDENTIFIED WITH mysql_native_password AS '#{string}'", 'system')
127126
else
128-
mysql([defaults_file, system_database, '-e', "SET PASSWORD FOR #{merged_name} = '#{string}'"].compact)
127+
self.class.mysql_caller("SET PASSWORD FOR #{merged_name} = '#{string}'", 'system')
129128
end
130129

131130
(password_hash == string) ? (return true) : (return false)
132131
end
133132

134133
def max_user_connections=(int)
135134
merged_name = self.class.cmd_user(@resource[:name])
136-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_USER_CONNECTIONS #{int}"].compact).chomp
135+
self.class.mysql_caller("GRANT USAGE ON *.* TO #{merged_name} WITH MAX_USER_CONNECTIONS #{int}", 'system').chomp
137136

138137
(max_user_connections == int) ? (return true) : (return false)
139138
end
140139

141140
def max_connections_per_hour=(int)
142141
merged_name = self.class.cmd_user(@resource[:name])
143-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_CONNECTIONS_PER_HOUR #{int}"].compact).chomp
142+
self.class.mysql_caller("GRANT USAGE ON *.* TO #{merged_name} WITH MAX_CONNECTIONS_PER_HOUR #{int}", 'system').chomp
144143

145144
(max_connections_per_hour == int) ? (return true) : (return false)
146145
end
147146

148147
def max_queries_per_hour=(int)
149148
merged_name = self.class.cmd_user(@resource[:name])
150-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_QUERIES_PER_HOUR #{int}"].compact).chomp
149+
self.class.mysql_caller("GRANT USAGE ON *.* TO #{merged_name} WITH MAX_QUERIES_PER_HOUR #{int}", 'system').chomp
151150

152151
(max_queries_per_hour == int) ? (return true) : (return false)
153152
end
154153

155154
def max_updates_per_hour=(int)
156155
merged_name = self.class.cmd_user(@resource[:name])
157-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_UPDATES_PER_HOUR #{int}"].compact).chomp
156+
self.class.mysql_caller("GRANT USAGE ON *.* TO #{merged_name} WITH MAX_UPDATES_PER_HOUR #{int}", 'system').chomp
158157

159158
(max_updates_per_hour == int) ? (return true) : (return false)
160159
end
@@ -164,9 +163,9 @@ def tls_options=(array)
164163
merged_tls_options = array.join(' AND ')
165164
if ((mysqld_type == 'mysql' || mysqld_type == 'percona') && Puppet::Util::Package.versioncmp(mysqld_version, '5.7.6') >= 0) ||
166165
(mysqld_type == 'mariadb' && Puppet::Util::Package.versioncmp(mysqld_version, '10.2.0') >= 0)
167-
mysql([defaults_file, system_database, '-e', "ALTER USER #{merged_name} REQUIRE #{merged_tls_options}"].compact)
166+
self.class.mysql_caller("ALTER USER #{merged_name} REQUIRE #{merged_tls_options}", 'system')
168167
else
169-
mysql([defaults_file, system_database, '-e', "GRANT USAGE ON *.* TO #{merged_name} REQUIRE #{merged_tls_options}"].compact)
168+
self.class.mysql_caller("GRANT USAGE ON *.* TO #{merged_name} REQUIRE #{merged_tls_options}", 'system')
170169
end
171170

172171
(tls_options == array) ? (return true) : (return false)

spec/unit/puppet/provider/mysql_database/mysql_spec.rb

+8-8
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@
3030
Facter.stubs(:value).with(:root_home).returns('/root')
3131
Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql')
3232
File.stubs(:file?).with('/root/.my.cnf').returns(true)
33-
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show databases']).returns('new_database')
34-
provider.class.stubs(:mysql).with([defaults_file, '-NBe', "show variables like '%_database'", 'new_database']).returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Metrics/LineLength
33+
provider.class.stubs(:mysql).with('show databases', 'regular').returns('new_database')
34+
provider.class.stubs(:mysql).with(["show variables like '%_database'", 'new_database'], 'regular').returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Metrics/LineLength
3535
end
3636

3737
let(:instance) { provider.class.instances.first }
3838

3939
describe 'self.instances' do
4040
it 'returns an array of databases' do
41-
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show databases']).returns(raw_databases)
41+
provider.class.stubs(:mysql).with('show databases', 'regular').returns(raw_databases)
4242
raw_databases.each_line do |db|
43-
provider.class.stubs(:mysql).with([defaults_file, '-NBe', "show variables like '%_database'", db.chomp]).returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Metrics/LineLength
43+
provider.class.stubs(:mysql).with(["show variables like '%_database'", db.chomp], 'regular').returns("character_set_database latin1\ncollation_database latin1_swedish_ci\nskip_show_database OFF") # rubocop:disable Metrics/LineLength
4444
end
4545
databases = provider.class.instances.map { |x| x.name }
4646
expect(parsed_databases).to match_array(databases)
@@ -56,15 +56,15 @@
5656

5757
describe 'create' do
5858
it 'makes a database' do
59-
provider.expects(:mysql).with([defaults_file, '-NBe', "create database if not exists `#{resource[:name]}` character set `#{resource[:charset]}` collate `#{resource[:collate]}`"])
59+
provider.expects(:mysql).with("create database if not exists `#{resource[:name]}` character set `#{resource[:charset]}` collate `#{resource[:collate]}`", 'regular')
6060
provider.expects(:exists?).returns(true)
6161
expect(provider.create).to be_truthy
6262
end
6363
end
6464

6565
describe 'destroy' do
6666
it 'removes a database if present' do
67-
provider.expects(:mysql).with([defaults_file, '-NBe', "drop database if exists `#{resource[:name]}`"])
67+
provider.expects(:mysql).with("drop database if exists `#{resource[:name]}`", 'regular')
6868
provider.expects(:exists?).returns(false)
6969
expect(provider.destroy).to be_truthy
7070
end
@@ -95,7 +95,7 @@
9595

9696
describe 'charset=' do
9797
it 'changes the charset' do
98-
provider.expects(:mysql).with([defaults_file, '-NBe', "alter database `#{resource[:name]}` CHARACTER SET blah"]).returns('0')
98+
provider.expects(:mysql).with("alter database `#{resource[:name]}` CHARACTER SET blah", 'regular').returns('0')
9999

100100
provider.charset = 'blah'
101101
end
@@ -109,7 +109,7 @@
109109

110110
describe 'collate=' do
111111
it 'changes the collate' do
112-
provider.expects(:mysql).with([defaults_file, '-NBe', "alter database `#{resource[:name]}` COLLATE blah"]).returns('0')
112+
provider.expects(:mysql).with("alter database `#{resource[:name]}` COLLATE blah", 'regular').returns('0')
113113

114114
provider.collate = 'blah'
115115
end

spec/unit/puppet/provider/mysql_plugin/mysql_spec.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
Facter.stubs(:value).with(:root_home).returns('/root')
1818
Puppet::Util.stubs(:which).with('mysql').returns('/usr/bin/mysql')
1919
File.stubs(:file?).with('/root/.my.cnf').returns(true)
20-
provider.class.stubs(:mysql).with([defaults_file, '-NBe', 'show plugins']).returns('auth_socket ACTIVE AUTHENTICATION auth_socket.so GPL')
20+
provider.class.stubs(:mysql).with('show plugins', 'regular').returns('auth_socket ACTIVE AUTHENTICATION auth_socket.so GPL')
2121
end
2222

2323
let(:instance) { provider.class.instances.first }
@@ -31,15 +31,15 @@
3131

3232
describe 'create' do
3333
it 'loads a plugin' do
34-
provider.expects(:mysql).with([defaults_file, '-NBe', "install plugin #{resource[:name]} soname '#{resource[:soname]}'"])
34+
provider.expects(:mysql).with("install plugin #{resource[:name]} soname '#{resource[:soname]}'", 'regular')
3535
provider.expects(:exists?).returns(true)
3636
expect(provider.create).to be_truthy
3737
end
3838
end
3939

4040
describe 'destroy' do
4141
it 'unloads a plugin if present' do
42-
provider.expects(:mysql).with([defaults_file, '-NBe', "uninstall plugin #{resource[:name]}"])
42+
provider.expects(:mysql).with("uninstall plugin #{resource[:name]}", 'regular')
4343
provider.expects(:exists?).returns(false)
4444
expect(provider.destroy).to be_truthy
4545
end

0 commit comments

Comments
 (0)