+++ /dev/null
-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