]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_exchange/rabbitmqadmin.rb
move to puppetlabs rabbitmq module
[dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / provider / rabbitmq_exchange / rabbitmqadmin.rb
1 require 'puppet'
2 require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmqctl'))
3 Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, :parent => Puppet::Provider::Rabbitmqctl) 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].split('@')[1]
23     end
24   end
25
26   def self.all_vhosts
27     vhosts = []
28     self.run_with_retries {
29       rabbitmqctl('-q', 'list_vhosts')
30     }.split(/\n/).each do |vhost|
31       vhosts.push(vhost)
32     end
33     vhosts
34   end
35
36   def self.all_exchanges(vhost)
37     exchanges = []
38     self.run_with_retries {
39       rabbitmqctl('-q', 'list_exchanges', '-p', vhost, 'name', 'type', 'internal', 'durable', 'auto_delete', 'arguments')
40     }.split(/\n/).each do |exchange|
41       exchanges.push(exchange)
42     end
43     exchanges
44   end
45
46   def self.instances
47     resources = []
48     all_vhosts.each do |vhost|
49         all_exchanges(vhost).each do |line|
50             name, type, internal, durable, auto_delete, arguments = line.split()
51             if type.nil?
52                 # if name is empty, it will wrongly get the type's value.
53                 # This way type will get the correct value
54                 type = name
55                 name = ''
56             end
57             # Convert output of arguments from the rabbitmqctl command to a json string.
58             if !arguments.nil?
59               arguments = arguments.gsub(/^\[(.*)\]$/, "").gsub(/\{("(?:.|\\")*?"),/, '{\1:').gsub(/\},\{/, ",")
60               if arguments == ""
61                 arguments = '{}'
62               end
63             else
64               arguments = '{}'
65             end
66             exchange = {
67               :type   => type,
68               :ensure => :present,
69               :internal => internal,
70               :durable => durable,
71               :auto_delete => auto_delete,
72               :name   => "%s@%s" % [name, vhost],
73               :arguments => JSON.parse(arguments),
74             }
75             resources << new(exchange) if exchange[:type]
76         end
77     end
78     resources
79   end
80
81   def self.prefetch(resources)
82     packages = instances
83     resources.keys.each do |name|
84       if provider = packages.find{ |pkg| pkg.name == name }
85         resources[name].provider = provider
86       end
87     end
88   end
89
90   def exists?
91     @property_hash[:ensure] == :present
92   end
93
94   def create
95     vhost_opt = should_vhost ? "--vhost=#{should_vhost}" : ''
96     name = resource[:name].split('@')[0]
97     arguments = resource[:arguments]
98     if arguments.nil?
99       arguments = {}
100     end
101     rabbitmqadmin('declare', 'exchange', vhost_opt, "--user=#{resource[:user]}", "--password=#{resource[:password]}", "name=#{name}", "type=#{resource[:type]}", "internal=#{resource[:internal]}", "durable=#{resource[:durable]}", "auto_delete=#{resource[:auto_delete]}", "arguments=#{arguments.to_json}", '-c', '/etc/rabbitmq/rabbitmqadmin.conf')
102     @property_hash[:ensure] = :present
103   end
104
105   def destroy
106     vhost_opt = should_vhost ? "--vhost=#{should_vhost}" : ''
107     name = resource[:name].split('@')[0]
108     rabbitmqadmin('delete', 'exchange', vhost_opt, "--user=#{resource[:user]}", "--password=#{resource[:password]}", "name=#{name}", '-c', '/etc/rabbitmq/rabbitmqadmin.conf')
109     @property_hash[:ensure] = :absent
110   end
111
112 end