]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_queue/rabbitmqadmin.rb
move to puppetlabs rabbitmq module
[dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / provider / rabbitmq_queue / rabbitmqadmin.rb
1 require 'json'
2 require 'puppet'
3 Puppet::Type.type(:rabbitmq_queue).provide(:rabbitmqadmin) do
4
5   if Puppet::PUPPETVERSION.to_f < 3
6     commands :rabbitmqctl   => 'rabbitmqctl'
7     commands :rabbitmqadmin => '/usr/local/bin/rabbitmqadmin'
8   else
9     has_command(:rabbitmqctl, 'rabbitmqctl') do
10       environment :HOME => "/tmp"
11     end
12     has_command(:rabbitmqadmin, '/usr/local/bin/rabbitmqadmin') do
13       environment :HOME => "/tmp"
14     end
15   end
16   defaultfor :feature => :posix
17
18   def should_vhost
19     if @should_vhost
20       @should_vhost
21     else
22       @should_vhost = resource[:name].rpartition('@').last
23     end
24   end
25
26   def self.all_vhosts
27     vhosts = []
28     rabbitmqctl('list_vhosts', '-q').split(/\n/).collect do |vhost|
29         vhosts.push(vhost)
30     end
31     vhosts
32   end
33
34   def self.all_queues(vhost)
35     rabbitmqctl('list_queues', '-q', '-p', vhost, 'name', 'durable', 'auto_delete', 'arguments').split(/\n/)
36   end
37
38   def self.instances
39     resources = []
40     all_vhosts.each do |vhost|
41       all_queues(vhost).collect do |line|
42         name, durable, auto_delete, arguments = line.split()
43         # Convert output of arguments from the rabbitmqctl command to a json string.
44         if !arguments.nil?
45           arguments = arguments.gsub(/^\[(.*)\]$/, "").gsub(/\{("(?:.|\\")*?"),/, '{\1:').gsub(/\},\{/, ",")
46           if arguments == ""
47             arguments = '{}'
48           end
49         else
50           arguments = '{}'
51         end
52         queue = {
53           :durable     => durable,
54           :auto_delete => auto_delete,
55           :arguments   => JSON.parse(arguments),
56           :ensure      => :present,
57           :name        => "%s@%s" % [name, vhost],
58         }
59         resources << new(queue) if queue[:name]
60       end
61     end
62     resources
63   end
64
65   def self.prefetch(resources)
66     packages = instances
67     resources.keys.each do |name|
68       if provider = packages.find{ |pkg| pkg.name == name }
69         resources[name].provider = provider
70       end
71     end
72   end
73
74   def exists?
75     @property_hash[:ensure] == :present
76   end
77
78   def create
79     vhost_opt = should_vhost ? "--vhost=#{should_vhost}" : ''
80     name = resource[:name].rpartition('@').first
81     arguments = resource[:arguments]
82     if arguments.nil?
83       arguments = {}
84     end
85     rabbitmqadmin('declare',
86       'queue',
87       vhost_opt,
88       "--user=#{resource[:user]}",
89       "--password=#{resource[:password]}",
90       '-c',
91       '/etc/rabbitmq/rabbitmqadmin.conf',
92       "name=#{name}",
93       "durable=#{resource[:durable]}",
94       "auto_delete=#{resource[:auto_delete]}",
95       "arguments=#{arguments.to_json}"
96     )
97     @property_hash[:ensure] = :present
98   end
99
100   def destroy
101     vhost_opt = should_vhost ? "--vhost=#{should_vhost}" : ''
102     name = resource[:name].rpartition('@').first
103     rabbitmqadmin('delete', 'queue', vhost_opt, "--user=#{resource[:user]}", "--password=#{resource[:password]}", '-c', '/etc/rabbitmq/rabbitmqadmin.conf', "name=#{name}")
104     @property_hash[:ensure] = :absent
105   end
106
107 end