require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmqctl'))
-Puppet::Type.type(:rabbitmq_user_permissions).provide(:rabbitmqctl, parent: Puppet::Provider::Rabbitmqctl) do
+Puppet::Type.type(:rabbitmq_user_permissions).provide(:rabbitmqctl, :parent => Puppet::Provider::Rabbitmqctl) do
+
if Puppet::PUPPETVERSION.to_f < 3
- commands rabbitmqctl: 'rabbitmqctl'
+ commands :rabbitmqctl => 'rabbitmqctl'
else
- has_command(:rabbitmqctl, 'rabbitmqctl') do
- environment HOME: '/tmp'
- end
+ has_command(:rabbitmqctl, 'rabbitmqctl') do
+ environment :HOME => "/tmp"
+ end
end
- confine feature: :posix
+ defaultfor :feature=> :posix
# cache users permissions
def self.users(name, vhost)
@users = {} unless @users
unless @users[name]
@users[name] = {}
- user_permission_list = run_with_retries do
+ self.run_with_retries {
rabbitmqctl('-q', 'list_user_permissions', name)
- end
- user_permission_list.split(%r{\n}).each do |line|
- line = strip_backslashes(line)
- raise Puppet::Error, "cannot parse line from list_user_permissions:#{line}" unless line =~ %r{^(\S+)\s+(\S*)\s+(\S*)\s+(\S*)$}
- @users[name][Regexp.last_match(1)] =
- { configure: Regexp.last_match(2), read: Regexp.last_match(4), write: Regexp.last_match(3) }
+ }.split(/\n/).each do |line|
+ line = self::strip_backslashes(line)
+ if line =~ /^(\S+)\s+(\S*)\s+(\S*)\s+(\S*)$/
+ @users[name][$1] =
+ {:configure => $2, :read => $4, :write => $3}
+ else
+ raise Puppet::Error, "cannot parse line from list_user_permissions:#{line}"
+ end
end
end
@users[name][vhost]
users(should_user, should_vhost)[:configure]
end
- def configure_permission=(_perm)
+ def configure_permission=(perm)
set_permissions
end
users(should_user, should_vhost)[:read]
end
- def read_permission=(_perm)
+ def read_permission=(perm)
set_permissions
end
users(should_user, should_vhost)[:write]
end
- def write_permission=(_perm)
+ def write_permission=(perm)
set_permissions
end
# implement memoization so that we only call set_permissions once
def set_permissions
- return if @permissions_set
-
- @permissions_set = true
- resource[:configure_permission] ||= configure_permission
- resource[:read_permission] ||= read_permission
- resource[:write_permission] ||= write_permission
- rabbitmqctl(
- 'set_permissions',
- '-p', should_vhost,
- should_user,
- resource[:configure_permission],
- resource[:write_permission],
- resource[:read_permission]
- )
+ unless @permissions_set
+ @permissions_set = true
+ resource[:configure_permission] ||= configure_permission
+ resource[:read_permission] ||= read_permission
+ resource[:write_permission] ||= write_permission
+ rabbitmqctl('set_permissions', '-p', should_vhost, should_user,
+ resource[:configure_permission], resource[:write_permission],
+ resource[:read_permission]
+ )
+ end
end
def self.strip_backslashes(string)
# See: https://github.com/rabbitmq/rabbitmq-server/blob/v1_7/docs/rabbitmqctl.1.pod#output-escaping
- string.gsub(%r{\\\\}, '\\')
+ string.gsub(/\\\\/, '\\')
end
+
end