X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_user_permissions%2Frabbitmqctl.rb;fp=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_user_permissions%2Frabbitmqctl.rb;h=a0b8b5a1ae7f4de91d66978fccb16076f98a3ff4;hb=24caa46729f80fbba4be8b9b26ebcb3acc4cb0fb;hp=d44d4586d0b48e04eaeca708a5832db72a22a446;hpb=c7e7bcc28cc5dc48a7e284a3c82f33df27d1f57d;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_user_permissions/rabbitmqctl.rb b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_user_permissions/rabbitmqctl.rb index d44d4586d..a0b8b5a1a 100644 --- a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_user_permissions/rabbitmqctl.rb +++ b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_user_permissions/rabbitmqctl.rb @@ -1,28 +1,31 @@ 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] @@ -69,7 +72,7 @@ Puppet::Type.type(:rabbitmq_user_permissions).provide(:rabbitmqctl, parent: Pupp users(should_user, should_vhost)[:configure] end - def configure_permission=(_perm) + def configure_permission=(perm) set_permissions end @@ -77,7 +80,7 @@ Puppet::Type.type(:rabbitmq_user_permissions).provide(:rabbitmqctl, parent: Pupp users(should_user, should_vhost)[:read] end - def read_permission=(_perm) + def read_permission=(perm) set_permissions end @@ -85,30 +88,27 @@ Puppet::Type.type(:rabbitmq_user_permissions).provide(:rabbitmqctl, parent: Pupp 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