Skip to content

Commit 6ae9bc6

Browse files
committed
Merge pull request #376 from w32-blaster/master
Type mysql_grant fixed, spec test created
2 parents ae097c8 + aee0e01 commit 6ae9bc6

File tree

6 files changed

+67
-56
lines changed

6 files changed

+67
-56
lines changed

lib/puppet/provider/database/mysql.rb

+2-13
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1-
Puppet::Type.type(:database).provide(:mysql) do
1+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mysql'))
2+
Puppet::Type.type(:database).provide(:mysql, :parent => Puppet::Provider::Mysql) do
23
desc 'Manages MySQL database.'
34

45
defaultfor :kernel => 'Linux'
56

67
optional_commands :mysql => 'mysql'
78
optional_commands :mysqladmin => 'mysqladmin'
89

9-
def self.defaults_file
10-
if File.file?("#{Facter.value(:root_home)}/.my.cnf")
11-
"--defaults-extra-file=#{Facter.value(:root_home)}/.my.cnf"
12-
else
13-
nil
14-
end
15-
end
16-
17-
def defaults_file
18-
self.class.defaults_file
19-
end
20-
2110
def self.instances
2211
mysql([defaults_file, '-NBe', 'show databases'].compact).split("\n").collect do |name|
2312
new(:name => name)

lib/puppet/provider/database_grant/mysql.rb

+2-13
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
# user@host => global
44
# user@host/db => per-db
55

6-
Puppet::Type.type(:database_grant).provide(:mysql) do
6+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mysql'))
7+
Puppet::Type.type(:database_grant).provide(:mysql, :parent => Puppet::Provider::Mysql) do
78

89
desc 'Uses mysql as database.'
910

@@ -195,16 +196,4 @@ def validate_privs(set_privs, all_privs)
195196
end
196197
end
197198

198-
# Optional defaults file
199-
def self.defaults_file
200-
if File.file?("#{Facter.value(:root_home)}/.my.cnf")
201-
"--defaults-extra-file=#{Facter.value(:root_home)}/.my.cnf"
202-
else
203-
nil
204-
end
205-
end
206-
def defaults_file
207-
self.class.defaults_file
208-
end
209-
210199
end
+8-19
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
Puppet::Type.type(:database_user).provide(:mysql) do
1+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'mysql'))
2+
Puppet::Type.type(:database_user).provide(:mysql, :parent => Puppet::Provider::Mysql) do
23

34
desc 'manage users for a mysql database.'
45

@@ -15,19 +16,19 @@ def self.instances
1516
end
1617

1718
def create
18-
merged_name = @resource[:name].sub('@', "'@'")
19+
merged_name = self.class.cmd_user(@resource[:name])
1920
password_hash = @resource.value(:password_hash)
2021
max_user_connections = @resource.value(:max_user_connections) || 0
2122

22-
mysql([defaults_file, 'mysql', '-e', "grant usage on *.* to '#{merged_name}' identified by PASSWORD
23+
mysql([defaults_file, 'mysql', '-e', "grant usage on *.* to #{merged_name} identified by PASSWORD
2324
'#{password_hash}' with max_user_connections #{max_user_connections}"].compact)
2425

2526
exists? ? (return true) : (return false)
2627
end
2728

2829
def destroy
29-
merged_name = @resource[:name].sub('@', "'@'")
30-
mysql([defaults_file, 'mysql', '-e', "drop user '#{merged_name}'"].compact)
30+
merged_name = self.class.cmd_user(@resource[:name])
31+
mysql([defaults_file, 'mysql', '-e', "drop user #{merged_name}"].compact)
3132

3233
exists? ? (return false) : (return true)
3334
end
@@ -37,7 +38,7 @@ def password_hash
3738
end
3839

3940
def password_hash=(string)
40-
mysql([defaults_file, 'mysql', '-e', "SET PASSWORD FOR '%s' = '%s'" % [ @resource[:name].sub('@', "'@'"), string ] ].compact)
41+
mysql([defaults_file, 'mysql', '-e', "SET PASSWORD FOR #{self.class.cmd_user(@resource[:name])} = '#{string}'"].compact)
4142

4243
password_hash == string ? (return true) : (return false)
4344
end
@@ -47,7 +48,7 @@ def max_user_connections
4748
end
4849

4950
def max_user_connections=(int)
50-
mysql([defaults_file, "mysql", "-e", "grant usage on *.* to '%s' with max_user_connections #{int}" % [ @resource[:name].sub("@", "'@'")] ].compact).chomp
51+
mysql([defaults_file, "mysql", "-e", "grant usage on *.* to %s with max_user_connections #{int}" % [ self.class.cmd_user(@resource[:name])] ].compact).chomp
5152

5253
max_user_connections == int ? (return true) : (return false)
5354
end
@@ -61,16 +62,4 @@ def flush
6162
mysqladmin([defaults_file, 'flush-privileges'].compact)
6263
end
6364

64-
# Optional defaults file
65-
def self.defaults_file
66-
if File.file?("#{Facter.value(:root_home)}/.my.cnf")
67-
"--defaults-extra-file=#{Facter.value(:root_home)}/.my.cnf"
68-
else
69-
nil
70-
end
71-
end
72-
def defaults_file
73-
self.class.defaults_file
74-
end
75-
7665
end

lib/puppet/provider/mysql_user/mysql.rb

+10-10
Original file line numberDiff line numberDiff line change
@@ -78,36 +78,36 @@ def exists?
7878
mk_resource_methods
7979

8080
def password_hash=(string)
81-
merged_name = @resource[:name].sub('@', "'@'")
82-
mysql([defaults_file, '-e', "SET PASSWORD FOR '#{merged_name}' = '#{string}'"].compact)
81+
merged_name = self.class.cmd_user(@resource[:name])
82+
mysql([defaults_file, '-e', "SET PASSWORD FOR #{merged_name} = '#{string}'"].compact)
8383

8484
password_hash == string ? (return true) : (return false)
8585
end
8686

8787
def max_user_connections=(int)
88-
merged_name = @resource[:name].sub('@', "'@'")
89-
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO '#{merged_name}' WITH MAX_USER_CONNECTIONS #{int}"].compact).chomp
88+
merged_name = self.class.cmd_user(@resource[:name])
89+
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_USER_CONNECTIONS #{int}"].compact).chomp
9090

9191
max_user_connections == int ? (return true) : (return false)
9292
end
9393

9494
def max_connections_per_hour=(int)
95-
merged_name = @resource[:name].sub('@', "'@'")
96-
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO '#{merged_name}' WITH MAX_CONNECTIONS_PER_HOUR #{int}"].compact).chomp
95+
merged_name = self.class.cmd_user(@resource[:name])
96+
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_CONNECTIONS_PER_HOUR #{int}"].compact).chomp
9797

9898
max_connections_per_hour == int ? (return true) : (return false)
9999
end
100100

101101
def max_queries_per_hour=(int)
102-
merged_name = @resource[:name].sub('@', "'@'")
103-
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO '#{merged_name}' WITH MAX_QUERIES_PER_HOUR #{int}"].compact).chomp
102+
merged_name = self.class.cmd_user(@resource[:name])
103+
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_QUERIES_PER_HOUR #{int}"].compact).chomp
104104

105105
max_queries_per_hour == int ? (return true) : (return false)
106106
end
107107

108108
def max_updates_per_hour=(int)
109-
merged_name = @resource[:name].sub('@', "'@'")
110-
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO '#{merged_name}' WITH MAX_UPDATES_PER_HOUR #{int}"].compact).chomp
109+
merged_name = self.class.cmd_user(@resource[:name])
110+
mysql([defaults_file, '-e', "GRANT USAGE ON *.* TO #{merged_name} WITH MAX_UPDATES_PER_HOUR #{int}"].compact).chomp
111111

112112
max_updates_per_hour == int ? (return true) : (return false)
113113
end

lib/puppet/type/mysql_grant.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ def initialize(*args)
4949
value.delete("`")
5050
end
5151

52-
newvalues(/.*\..*/)
52+
newvalues(/.*\..*/,/@/)
5353
end
5454

5555
newproperty(:user) do
+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
require 'puppet'
2+
require 'puppet/type/mysql_grant'
3+
describe Puppet::Type.type(:mysql_grant) do
4+
5+
before :each do
6+
@user = Puppet::Type.type(:mysql_grant).new(:name => 'foo@localhost/*.*', :privileges => ['ALL', 'PROXY'], :table => ['*.*','@'], :user => 'foo@localhost')
7+
end
8+
9+
it 'should accept a grant name' do
10+
@user[:name].should == 'foo@localhost/*.*'
11+
end
12+
13+
it 'should accept ALL privileges' do
14+
@user[:privileges] = 'ALL'
15+
@user[:privileges].should == ['ALL']
16+
end
17+
18+
it 'should accept PROXY privilege' do
19+
@user[:privileges] = 'PROXY'
20+
@user[:privileges].should == ['PROXY']
21+
end
22+
23+
it 'should accept a table' do
24+
@user[:table] = '*.*'
25+
@user[:table].should == '*.*'
26+
end
27+
28+
it 'should accept @ for table' do
29+
@user[:table] = '@'
30+
@user[:table].should == '@'
31+
end
32+
33+
it 'should accept a user' do
34+
@user[:user] = 'foo@localhost'
35+
@user[:user].should == 'foo@localhost'
36+
end
37+
38+
it 'should require a name' do
39+
expect {
40+
Puppet::Type.type(:mysql_grant).new({})
41+
}.to raise_error(Puppet::Error, 'Title or name must be provided')
42+
end
43+
44+
end

0 commit comments

Comments
 (0)