2013-11-16 19:09:09 +01:00
require File . expand_path ( File . join ( File . dirname ( __FILE__ ) , '..' , 'mysql' ) )
Puppet :: Type . type ( :database_user ) . provide ( :mysql , :parent = > Puppet :: Provider :: Mysql ) do
2011-05-25 08:22:43 +02:00
2013-07-10 05:11:41 +02:00
desc 'manage users for a mysql database.'
2011-05-25 08:22:43 +02:00
defaultfor :kernel = > 'Linux'
2013-07-03 21:59:17 +02:00
commands :mysql = > 'mysql'
commands :mysqladmin = > 'mysqladmin'
2011-05-25 08:22:43 +02:00
2012-02-09 20:26:00 +01:00
def self . instances
2013-07-10 05:11:41 +02:00
users = mysql ( [ defaults_file , 'mysql' , '-BNe' " select concat(User, '@',Host) as User from mysql.user " ] . compact ) . split ( " \n " )
2012-03-15 07:05:20 +01:00
users . select { | user | user =~ / .+@ / } . collect do | name |
2012-02-09 20:26:00 +01:00
new ( :name = > name )
end
end
2011-05-25 08:22:43 +02:00
def create
2013-11-16 19:09:09 +01:00
merged_name = self . class . cmd_user ( @resource [ :name ] )
2013-07-10 10:07:56 +02:00
password_hash = @resource . value ( :password_hash )
max_user_connections = @resource . value ( :max_user_connections ) || 0
2013-11-16 19:09:09 +01:00
mysql ( [ defaults_file , 'mysql' , '-e' , " grant usage on *.* to #{ merged_name } identified by PASSWORD
2013-07-10 10:07:56 +02:00
'#{password_hash}' with max_user_connections #{max_user_connections}"].compact)
2013-07-03 21:59:17 +02:00
exists? ? ( return true ) : ( return false )
2011-05-25 08:22:43 +02:00
end
2012-02-09 20:26:00 +01:00
2011-05-25 08:22:43 +02:00
def destroy
2013-11-16 19:09:09 +01:00
merged_name = self . class . cmd_user ( @resource [ :name ] )
mysql ( [ defaults_file , 'mysql' , '-e' , " drop user #{ merged_name } " ] . compact )
2013-07-03 21:59:17 +02:00
exists? ? ( return false ) : ( return true )
2011-05-25 08:22:43 +02:00
end
2012-02-09 20:26:00 +01:00
2011-05-25 08:22:43 +02:00
def password_hash
2013-07-10 05:11:41 +02:00
mysql ( [ defaults_file , 'mysql' , '-NBe' , " select password from mysql.user where CONCAT(user, '@', host) = ' #{ @resource [ :name ] } ' " ] . compact ) . chomp
2011-05-25 08:22:43 +02:00
end
2012-02-09 20:26:00 +01:00
2011-05-25 08:22:43 +02:00
def password_hash = ( string )
2013-11-16 19:09:09 +01:00
mysql ( [ defaults_file , 'mysql' , '-e' , " SET PASSWORD FOR #{ self . class . cmd_user ( @resource [ :name ] ) } = ' #{ string } ' " ] . compact )
2013-07-03 21:59:17 +02:00
password_hash == string ? ( return true ) : ( return false )
2011-05-25 08:22:43 +02:00
end
2013-07-08 16:15:21 +02:00
def max_user_connections
mysql ( [ defaults_file , " mysql " , " -NBe " , " select max_user_connections from mysql.user where CONCAT(user, '@', host) = ' #{ @resource [ :name ] } ' " ] . compact ) . chomp
end
def max_user_connections = ( int )
2013-11-16 19:09:09 +01:00
mysql ( [ defaults_file , " mysql " , " -e " , " grant usage on *.* to %s with max_user_connections #{ int } " % [ self . class . cmd_user ( @resource [ :name ] ) ] ] . compact ) . chomp
2013-07-08 16:15:21 +02:00
max_user_connections == int ? ( return true ) : ( return false )
end
2012-02-09 20:26:00 +01:00
def exists?
2013-07-10 05:11:41 +02:00
not mysql ( [ defaults_file , 'mysql' , '-NBe' , " select '1' from mysql.user where CONCAT(user, '@', host) = '%s' " % @resource . value ( :name ) ] . compact ) . empty?
2012-02-09 20:26:00 +01:00
end
2011-05-25 08:22:43 +02:00
2012-02-09 20:26:00 +01:00
def flush
@property_hash . clear
2013-07-10 05:11:41 +02:00
mysqladmin ( [ defaults_file , 'flush-privileges' ] . compact )
2013-01-10 20:51:59 +01:00
end
2011-05-25 08:22:43 +02:00
end