Skip to content

Commit 837e839

Browse files
committed
Merge pull request #123 from hunner/root_credentials
Root credentials
2 parents c84ffde + 64d3889 commit 837e839

File tree

4 files changed

+42
-37
lines changed

4 files changed

+42
-37
lines changed

lib/puppet/provider/database/mysql.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,30 @@
88
optional_commands :mysqladmin => 'mysqladmin'
99

1010
def self.instances
11-
mysql('-NBe', "show databases").split("\n").collect do |name|
11+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", '-NBe', "show databases").split("\n").collect do |name|
1212
new(:name => name)
1313
end
1414
end
1515

1616
def create
17-
mysql('-NBe', "create database `#{@resource[:name]}` character set #{resource[:charset]}")
17+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", '-NBe', "create database `#{@resource[:name]}` character set #{resource[:charset]}")
1818
end
1919

2020
def destroy
21-
mysqladmin('-f', 'drop', @resource[:name])
21+
mysqladmin("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", '-f', 'drop', @resource[:name])
2222
end
2323

2424
def charset
25-
mysql('-NBe', "show create database `#{resource[:name]}`").match(/.*?(\S+)\s\*\//)[1]
25+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", '-NBe', "show create database `#{resource[:name]}`").match(/.*?(\S+)\s\*\//)[1]
2626
end
2727

2828
def charset=(value)
29-
mysql('-NBe', "alter database `#{resource[:name]}` CHARACTER SET #{value}")
29+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", '-NBe', "alter database `#{resource[:name]}` CHARACTER SET #{value}")
3030
end
3131

3232
def exists?
3333
begin
34-
mysql('-NBe', "show databases").match(/^#{@resource[:name]}$/)
34+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", '-NBe', "show databases").match(/^#{@resource[:name]}$/)
3535
rescue => e
3636
debug(e.message)
3737
return nil

lib/puppet/provider/database_grant/mysql.rb

+10-10
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,19 @@ def db_privs
3434
end
3535

3636
def self.query_user_privs
37-
results = mysql("mysql", "-Be", "describe user")
37+
results = mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-Be", "describe user")
3838
column_names = results.split(/\n/).map { |l| l.chomp.split(/\t/)[0] }
3939
@user_privs = column_names.delete_if { |e| !( e =~/_priv$/) }
4040
end
4141

4242
def self.query_db_privs
43-
results = mysql("mysql", "-Be", "describe db")
43+
results = mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-Be", "describe db")
4444
column_names = results.split(/\n/).map { |l| l.chomp.split(/\t/)[0] }
4545
@db_privs = column_names.delete_if { |e| !(e =~/_priv$/) }
4646
end
4747

4848
def mysql_flush
49-
mysqladmin "flush-privileges"
49+
mysqladmin "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "flush-privileges"
5050
end
5151

5252
# this parses the
@@ -74,11 +74,11 @@ def create_row
7474
name = split_name(@resource[:name])
7575
case name[:type]
7676
when :user
77-
mysql "mysql", "-e", "INSERT INTO user (host, user) VALUES ('%s', '%s')" % [
77+
mysql "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-e", "INSERT INTO user (host, user) VALUES ('%s', '%s')" % [
7878
name[:host], name[:user],
7979
]
8080
when :db
81-
mysql "mysql", "-e", "INSERT INTO db (host, user, db) VALUES ('%s', '%s', '%s')" % [
81+
mysql "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-e", "INSERT INTO db (host, user, db) VALUES ('%s', '%s', '%s')" % [
8282
name[:host], name[:user], name[:db],
8383
]
8484
end
@@ -87,7 +87,7 @@ def create_row
8787
end
8888

8989
def destroy
90-
mysql "mysql", "-e", "REVOKE ALL ON '%s'.* FROM '%s@%s'" % [ @resource[:privileges], @resource[:database], @resource[:name], @resource[:host] ]
90+
mysql "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-e", "REVOKE ALL ON '%s'.* FROM '%s@%s'" % [ @resource[:privileges], @resource[:database], @resource[:name], @resource[:host] ]
9191
end
9292

9393
def row_exists?
@@ -96,7 +96,7 @@ def row_exists?
9696
if name[:type] == :db
9797
fields << :db
9898
end
99-
not mysql( "mysql", "-NBe", 'SELECT "1" FROM %s WHERE %s' % [ name[:type], fields.map do |f| "%s = '%s'" % [f, name[f]] end.join(' AND ')]).empty?
99+
not mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", '-NBe', 'SELECT "1" FROM %s WHERE %s' % [ name[:type], fields.map do |f| "%s=\"%s\"" % [f, name[f]] end.join(' AND ')]).empty?
100100
end
101101

102102
def all_privs_set?
@@ -118,9 +118,9 @@ def privileges
118118

119119
case name[:type]
120120
when :user
121-
privs = mysql "mysql", "-Be", 'select * from user where user="%s" and host="%s"' % [ name[:user], name[:host] ]
121+
privs = mysql "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-Be", 'select * from mysql.user where user="%s" and host="%s"' % [ name[:user], name[:host] ]
122122
when :db
123-
privs = mysql "mysql", "-Be", 'select * from db where user="%s" and host="%s" and db="%s"' % [ name[:user], name[:host], name[:db] ]
123+
privs = mysql "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-Be", 'select * from mysql.db where user="%s" and host="%s" and db="%s"' % [ name[:user], name[:host], name[:db] ]
124124
end
125125

126126
if privs.match(/^$/)
@@ -172,7 +172,7 @@ def privileges=(privs)
172172
stmt = stmt << set << where
173173

174174
validate_privs privs, all_privs
175-
mysql "mysql", "-Be", stmt
175+
mysql "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-Be", stmt
176176
mysql_flush
177177
end
178178

lib/puppet/provider/database_user/mysql.rb

+7-7
Original file line numberDiff line numberDiff line change
@@ -8,35 +8,35 @@
88
optional_commands :mysqladmin => 'mysqladmin'
99

1010
def self.instances
11-
users = mysql("mysql", '-BNe' "select concat(User, '@',Host) as User from mysql.user").split("\n")
11+
users = mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", '-BNe' "select concat(User, '@',Host) as User from mysql.user").split("\n")
1212
users.select{ |user| user =~ /.+@/ }.collect do |name|
1313
new(:name => name)
1414
end
1515
end
1616

1717
def create
18-
mysql("mysql", "-e", "create user '%s' identified by PASSWORD '%s'" % [ @resource[:name].sub("@", "'@'"), @resource.value(:password_hash) ])
18+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-e", "create user '%s' identified by PASSWORD '%s'" % [ @resource[:name].sub("@", "'@'"), @resource.value(:password_hash) ])
1919
end
2020

2121
def destroy
22-
mysql("mysql", "-e", "drop user '%s'" % @resource.value(:name).sub("@", "'@'") )
22+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-e", "drop user '%s'" % @resource.value(:name).sub("@", "'@'") )
2323
end
2424

2525
def password_hash
26-
mysql("mysql", "-NBe", "select password from user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).chomp
26+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-NBe", "select password from mysql.user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).chomp
2727
end
2828

2929
def password_hash=(string)
30-
mysql("mysql", "-e", "SET PASSWORD FOR '%s' = '%s'" % [ @resource[:name].sub("@", "'@'"), string ] )
30+
mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-e", "SET PASSWORD FOR '%s' = '%s'" % [ @resource[:name].sub("@", "'@'"), string ] )
3131
end
3232

3333
def exists?
34-
not mysql("mysql", "-NBe", "select '1' from user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).empty?
34+
not mysql("--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "mysql", "-NBe", "select '1' from mysql.user where CONCAT(user, '@', host) = '%s'" % @resource.value(:name)).empty?
3535
end
3636

3737
def flush
3838
@property_hash.clear
39-
mysqladmin "flush-privileges"
39+
mysqladmin "--defaults-file=#{Facter.value(:root_home)}/.my.cnf", "flush-privileges"
4040
end
4141

4242
end
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,23 @@
11
require 'puppet'
22
require 'mocha'
3+
require 'spec_helper'
34
RSpec.configure do |config|
45
config.mock_with :mocha
56
end
67
provider_class = Puppet::Type.type(:database_grant).provider(:mysql)
78
describe provider_class do
9+
let(:root_home) { '/some/root/home' }
10+
811
before :each do
912
@resource = Puppet::Type::Database_grant.new(
1013
{ :privileges => 'all', :provider => 'mysql', :name => 'user@host'}
1114
)
1215
@provider = provider_class.new(@resource)
16+
Facter.stubs(:value).with(:root_home).returns(root_home)
1317
end
18+
1419
it 'should query privilegess from the database' do
15-
provider_class.expects(:mysql) .with('mysql', '-Be', 'describe user').returns <<-EOT
20+
provider_class.expects(:mysql) .with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'describe user').returns <<-EOT
1621
Field Type Null Key Default Extra
1722
Host char(60) NO PRI
1823
User char(16) NO PRI
@@ -21,7 +26,7 @@
2126
Insert_priv enum('N','Y') NO N
2227
Update_priv enum('N','Y') NO N
2328
EOT
24-
provider_class.expects(:mysql).with('mysql', '-Be', 'describe db').returns <<-EOT
29+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'describe db').returns <<-EOT
2530
Field Type Null Key Default Extra
2631
Host char(60) NO PRI
2732
Db char(64) NO PRI
@@ -35,47 +40,47 @@
3540
end
3641

3742
it 'should query set priviliges' do
38-
provider_class.expects(:mysql).with('mysql', '-Be', 'select * from user where user="user" and host="host"').returns <<-EOT
43+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'select * from mysql.user where user="user" and host="host"').returns <<-EOT
3944
Host User Password Select_priv Insert_priv Update_priv
4045
host user Y N Y
4146
EOT
4247
@provider.privileges.should == [ 'Select_priv', 'Update_priv' ]
4348
end
4449

4550
it 'should recognize when all priviliges are set' do
46-
provider_class.expects(:mysql).with('mysql', '-Be', 'select * from user where user="user" and host="host"').returns <<-EOT
51+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'select * from mysql.user where user="user" and host="host"').returns <<-EOT
4752
Host User Password Select_priv Insert_priv Update_priv
4853
host user Y Y Y
4954
EOT
5055
@provider.all_privs_set?.should == true
5156
end
5257

5358
it 'should recognize when all privileges are not set' do
54-
provider_class.expects(:mysql).with('mysql', '-Be', 'select * from user where user="user" and host="host"').returns <<-EOT
59+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', 'select * from mysql.user where user="user" and host="host"').returns <<-EOT
5560
Host User Password Select_priv Insert_priv Update_priv
5661
host user Y N Y
5762
EOT
5863
@provider.all_privs_set?.should == false
5964
end
6065

6166
it 'should be able to set all privileges' do
62-
provider_class.expects(:mysql).with('mysql', '-NBe', 'SELECT "1" FROM user WHERE user = \'user\' AND host = \'host\'').returns "1\n"
63-
provider_class.expects(:mysql).with('mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'Y', Update_priv = 'Y' where user=\"user\" and host=\"host\"")
64-
provider_class.expects(:mysqladmin).with("flush-privileges")
67+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-NBe', 'SELECT "1" FROM user WHERE user="user" AND host="host"').returns "1\n"
68+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'Y', Update_priv = 'Y' where user=\"user\" and host=\"host\"")
69+
provider_class.expects(:mysqladmin).with("--defaults-file=#{root_home}/.my.cnf", "flush-privileges")
6570
@provider.privileges=(['all'])
6671
end
6772

6873
it 'should be able to set partial privileges' do
69-
provider_class.expects(:mysql).with('mysql', '-NBe', 'SELECT "1" FROM user WHERE user = \'user\' AND host = \'host\'').returns "1\n"
70-
provider_class.expects(:mysql).with('mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'N', Update_priv = 'Y' where user=\"user\" and host=\"host\"")
71-
provider_class.expects(:mysqladmin).with("flush-privileges")
74+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-NBe', 'SELECT "1" FROM user WHERE user="user" AND host="host"').returns "1\n"
75+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'N', Update_priv = 'Y' where user=\"user\" and host=\"host\"")
76+
provider_class.expects(:mysqladmin).with("--defaults-file=#{root_home}/.my.cnf", "flush-privileges")
7277
@provider.privileges=(['Select_priv', 'Update_priv'])
7378
end
7479

7580
it 'should be case insensitive' do
76-
provider_class.expects(:mysql).with('mysql', '-NBe', 'SELECT "1" FROM user WHERE user = \'user\' AND host = \'host\'').returns "1\n"
77-
provider_class.expects(:mysql).with('mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'Y', Update_priv = 'Y' where user=\"user\" and host=\"host\"")
78-
provider_class.expects(:mysqladmin).with('flush-privileges')
81+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-NBe', 'SELECT "1" FROM user WHERE user="user" AND host="host"').returns "1\n"
82+
provider_class.expects(:mysql).with("--defaults-file=#{root_home}/.my.cnf", 'mysql', '-Be', "update user set Select_priv = 'Y', Insert_priv = 'Y', Update_priv = 'Y' where user=\"user\" and host=\"host\"")
83+
provider_class.expects(:mysqladmin).with("--defaults-file=#{root_home}/.my.cnf", 'flush-privileges')
7984
@provider.privileges=(['SELECT_PRIV', 'insert_priv', 'UpDaTe_pRiV'])
8085
end
8186
end

0 commit comments

Comments
 (0)