X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=modules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_user%2Frabbitmqctl.rb;fp=modules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_user%2Frabbitmqctl.rb;h=fde194cc992ee727e58e4450ea426765e61dd95a;hb=0daa0d704c7bc516b1e9a481109e881005144aee;hp=0000000000000000000000000000000000000000;hpb=18c87466f6eaaffc14973a6623b4247c58b22e16;p=dsa-puppet.git diff --git a/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb b/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb new file mode 100644 index 00000000..fde194cc --- /dev/null +++ b/modules/rabbitmq/lib/puppet/provider/rabbitmq_user/rabbitmqctl.rb @@ -0,0 +1,59 @@ +require 'puppet' +Puppet::Type.type(:rabbitmq_user).provide(:rabbitmqctl) do + + commands :rabbitmqctl => 'rabbitmqctl' + defaultfor :feature => :posix + + def self.instances + rabbitmqctl('list_users').split(/\n/)[1..-2].collect do |line| + if line =~ /^(\S+)(\s+\S+|)$/ + new(:name => $1) + else + raise Puppet::Error, "Cannot parse invalid user line: #{line}" + end + end + end + + def create + rabbitmqctl('add_user', resource[:name], resource[:password]) + if resource[:admin] == :true + make_user_admin() + end + end + + def destroy + rabbitmqctl('delete_user', resource[:name]) + end + + def exists? + out = rabbitmqctl('list_users').split(/\n/)[1..-2].detect do |line| + line.match(/^#{resource[:name]}(\s+\S+|)$/) + end + end + + # def password + # def password=() + def admin + match = rabbitmqctl('list_users').split(/\n/)[1..-2].collect do |line| + line.match(/^#{resource[:name]}\s+\[(administrator)?\]/) + end.compact.first + if match + (:true if match[1].to_s == 'administrator') || :false + else + raise Puppet::Error, "Could not match line '#{resource[:name]} (true|false)' from list_users (perhaps you are running on an older version of rabbitmq that does not support admin users?)" + end + end + + def admin=(state) + if state == :true + make_user_admin() + else + rabbitmqctl('set_user_tags', resource[:name]) + end + end + + def make_user_admin + rabbitmqctl('set_user_tags', resource[:name], 'administrator') + end + +end