]> git.donarmstrong.com Git - dsa-puppet.git/blob - modules/rabbitmq/lib/puppet/provider/rabbitmq_user_permissions/rabbitmqctl.rb
try if downgrading to 1.2.2 solves my problem
[dsa-puppet.git] / modules / rabbitmq / lib / puppet / provider / rabbitmq_user_permissions / rabbitmqctl.rb
1 Puppet::Type.type(:rabbitmq_user_permissions).provide(:rabbitmqctl) do
2
3   commands :rabbitmqctl => 'rabbitmqctl'
4   defaultfor :feature=> :posix
5
6   #def self.instances
7   #
8   #end
9
10   # cache users permissions
11   def self.users(name, vhost)
12     @users = {} unless @users
13     unless @users[name]
14       @users[name] = {}
15       out = rabbitmqctl('list_user_permissions', name).split(/\n/)[1..-2].each do |line|
16         if line =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/
17           @users[name][$1] =
18             {:configure => $2, :read => $3, :write => $4}
19         else
20           raise Puppet::Error, "cannot parse line from list_user_permissions:#{line}"
21         end
22       end
23     end
24     @users[name][vhost]
25   end
26
27   def users(name, vhost)
28     self.class.users(name, vhost)
29   end
30
31   def should_user
32     if @should_user
33       @should_user
34     else
35       @should_user = resource[:name].split('@')[0]
36     end
37   end
38
39   def should_vhost
40     if @should_vhost
41       @should_vhost
42     else
43       @should_vhost = resource[:name].split('@')[1]
44     end
45   end
46
47   def create
48     resource[:configure_permission] ||= "'^$'"
49     resource[:read_permission]      ||= "'^$'"
50     resource[:write_permission]     ||= "'^$'"
51     rabbitmqctl('set_permissions', '-p', should_vhost, should_user, resource[:configure_permission], resource[:read_permission], resource[:write_permission]) 
52   end
53
54   def destroy
55     rabbitmqctl('clear_permissions', '-p', should_vhost, should_user)
56   end
57
58   # I am implementing prefetching in exists b/c I need to be sure
59   # that the rabbitmq package is installed before I make this call.
60   def exists?
61     users(should_user, should_vhost)
62   end
63
64   def configure_permission
65     users(should_user, should_vhost)[:configure]
66   end
67
68   def configure_permission=(perm)
69     set_permissions
70   end
71
72   def read_permission
73     users(should_user, should_vhost)[:read]
74   end
75
76   def read_permission=(perm)
77     set_permissions
78   end
79
80   def write_permission
81     users(should_user, should_vhost)[:write]
82   end
83
84   def write_permission=(perm)
85     set_permissions
86   end
87
88   # implement memoization so that we only call set_permissions once
89   def set_permissions
90     unless @permissions_set
91       @permissions_set = true
92       resource[:configure_permission] ||= configure_permission
93       resource[:read_permission]      ||= read_permission
94       resource[:write_permission]     ||= write_permission
95       rabbitmqctl('set_permissions', '-p', should_vhost, should_user,
96         resource[:configure_permission], resource[:read_permission],
97         resource[:write_permission]
98       )
99     end
100   end
101
102 end