diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2010-02-03 14:11:18 -0200 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2010-02-03 14:11:18 -0200 |
commit | adc9c0f1168b780e6c8b78f63caa2fb51cc72399 (patch) | |
tree | 8b431784fd610e203ca3b42f03069f1c617dcddd /lib/puppet/type/mysql_grant.rb | |
parent | b5d91bdba1f0a02614fd6f6e9699c2c97ec8b725 (diff) | |
download | puppet-mysql-adc9c0f1168b780e6c8b78f63caa2fb51cc72399.tar.gz puppet-mysql-adc9c0f1168b780e6c8b78f63caa2fb51cc72399.tar.bz2 |
Adding resource types mysql_{user,database,grant} (2)
Diffstat (limited to 'lib/puppet/type/mysql_grant.rb')
-rw-r--r-- | lib/puppet/type/mysql_grant.rb | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/puppet/type/mysql_grant.rb b/lib/puppet/type/mysql_grant.rb new file mode 100644 index 0000000..415f5aa --- /dev/null +++ b/lib/puppet/type/mysql_grant.rb @@ -0,0 +1,77 @@ +# This has to be a separate type to enable collecting +Puppet::Type.newtype(:mysql_grant) do + @doc = "Manage a database user's rights." + #ensurable + + autorequire :mysql_db do + # puts "Starting db autoreq for %s" % self[:name] + reqs = [] + matches = self[:name].match(/^([^@]+)@([^\/]+)\/(.+)$/) + unless matches.nil? + reqs << matches[3] + end + # puts "Autoreq: '%s'" % reqs.join(" ") + reqs + end + + autorequire :mysql_user do + # puts "Starting user autoreq for %s" % self[:name] + reqs = [] + matches = self[:name].match(/^([^@]+)@([^\/]+).*$/) + unless matches.nil? + reqs << "%s@%s" % [ matches[1], matches[2] ] + end + # puts "Autoreq: '%s'" % reqs.join(" ") + reqs + end + + newparam(:name) do + desc "The primary key: either user@host for global privilges or user@host/database for database specific privileges" + end + newproperty(:privileges, :array_matching => :all) do + desc "The privileges the user should have. The possible values are implementation dependent." + munge do |v| + symbolize(v) + end + + def should_to_s(newvalue = @should) + if newvalue + unless newvalue.is_a?(Array) + newvalue = [ newvalue ] + end + newvalue.collect do |v| v.to_s end.sort.join ", " + else + nil + end + end + + def is_to_s(currentvalue = @is) + if currentvalue + unless currentvalue.is_a?(Array) + currentvalue = [ currentvalue ] + end + currentvalue.collect do |v| v.to_s end.sort.join ", " + else + nil + end + end + + # use the sorted outputs for comparison + def insync?(is) + if defined? @should and @should + case self.should_to_s + when "all" + self.provider.all_privs_set? + when self.is_to_s(is) + true + else + false + end + else + true + end + end + + end +end + |