X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_exchange%2Frabbitmqadmin.rb;fp=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_exchange%2Frabbitmqadmin.rb;h=c1cff095767dcf8c83cf4eb63c5cce95421b8b69;hb=24caa46729f80fbba4be8b9b26ebcb3acc4cb0fb;hp=aea069886522eb2ee13691b9f0d1ddbb16a1158d;hpb=c7e7bcc28cc5dc48a7e284a3c82f33df27d1f57d;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_exchange/rabbitmqadmin.rb b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_exchange/rabbitmqadmin.rb index aea069886..c1cff0957 100644 --- a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_exchange/rabbitmqadmin.rb +++ b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_exchange/rabbitmqadmin.rb @@ -1,18 +1,19 @@ require 'puppet' require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmqctl')) -Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, parent: Puppet::Provider::Rabbitmqctl) do +Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, :parent => Puppet::Provider::Rabbitmqctl) do + if Puppet::PUPPETVERSION.to_f < 3 - commands rabbitmqctl: 'rabbitmqctl' - commands rabbitmqadmin: '/usr/local/bin/rabbitmqadmin' + commands :rabbitmqctl => 'rabbitmqctl' + commands :rabbitmqadmin => '/usr/local/bin/rabbitmqadmin' else has_command(:rabbitmqctl, 'rabbitmqctl') do - environment HOME: '/tmp' + environment :HOME => "/tmp" end has_command(:rabbitmqadmin, '/usr/local/bin/rabbitmqadmin') do - environment HOME: '/tmp' + environment :HOME => "/tmp" end end - confine feature: :posix + defaultfor :feature => :posix def should_vhost if @should_vhost @@ -23,45 +24,56 @@ Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, parent: Puppet::Pr end def self.all_vhosts - run_with_retries { rabbitmqctl('-q', 'list_vhosts') }.split(%r{\n}) + vhosts = [] + self.run_with_retries { + rabbitmqctl('-q', 'list_vhosts') + }.split(/\n/).each do |vhost| + vhosts.push(vhost) + end + vhosts end def self.all_exchanges(vhost) - exchange_list = run_with_retries do + exchanges = [] + self.run_with_retries { rabbitmqctl('-q', 'list_exchanges', '-p', vhost, 'name', 'type', 'internal', 'durable', 'auto_delete', 'arguments') + }.split(/\n/).each do |exchange| + exchanges.push(exchange) end - exchange_list.split(%r{\n}).reject { |exchange| exchange =~ %r{^federation:} } + exchanges end def self.instances resources = [] all_vhosts.each do |vhost| - all_exchanges(vhost).each do |line| - name, type, internal, durable, auto_delete, arguments = line.split - if type.nil? - # if name is empty, it will wrongly get the type's value. - # This way type will get the correct value - type = name - name = '' - end - # Convert output of arguments from the rabbitmqctl command to a json string. - if !arguments.nil? - arguments = arguments.gsub(%r{^\[(.*)\]$}, '').gsub(%r{\{("(?:.|\\")*?"),}, '{\1:').gsub(%r{\},\{}, ',') - arguments = '{}' if arguments == '' - else - arguments = '{}' + all_exchanges(vhost).each do |line| + name, type, internal, durable, auto_delete, arguments = line.split() + if type.nil? + # if name is empty, it will wrongly get the type's value. + # This way type will get the correct value + type = name + name = '' + end + # Convert output of arguments from the rabbitmqctl command to a json string. + if !arguments.nil? + arguments = arguments.gsub(/^\[(.*)\]$/, "").gsub(/\{("(?:.|\\")*?"),/, '{\1:').gsub(/\},\{/, ",") + if arguments == "" + arguments = '{}' + end + else + arguments = '{}' + end + exchange = { + :type => type, + :ensure => :present, + :internal => internal, + :durable => durable, + :auto_delete => auto_delete, + :name => "%s@%s" % [name, vhost], + :arguments => JSON.parse(arguments), + } + resources << new(exchange) if exchange[:type] end - exchange = { - type: type, - ensure: :present, - internal: internal, - durable: durable, - auto_delete: auto_delete, - name: format('%s@%s', name, vhost), - arguments: JSON.parse(arguments) - } - resources << new(exchange) if exchange[:type] - end end resources end @@ -69,7 +81,7 @@ Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, parent: Puppet::Pr def self.prefetch(resources) packages = instances resources.keys.each do |name| - if (provider = packages.find { |pkg| pkg.name == name }) + if provider = packages.find{ |pkg| pkg.name == name } resources[name].provider = provider end end @@ -83,13 +95,10 @@ Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, parent: Puppet::Pr vhost_opt = should_vhost ? "--vhost=#{should_vhost}" : '' name = resource[:name].split('@')[0] arguments = resource[:arguments] - arguments = {} if arguments.nil? - cmd = ['declare', 'exchange', vhost_opt, "--user=#{resource[:user]}", "--password=#{resource[:password]}", "name=#{name}", "type=#{resource[:type]}"] - cmd << "internal=#{resource[:internal]}" - cmd << "durable=#{resource[:durable]}" - cmd << "auto_delete=#{resource[:auto_delete]}" - cmd += ["arguments=#{arguments.to_json}", '-c', '/etc/rabbitmq/rabbitmqadmin.conf'] - rabbitmqadmin(*cmd) + if arguments.nil? + arguments = {} + end + 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') @property_hash[:ensure] = :present end @@ -99,4 +108,5 @@ Puppet::Type.type(:rabbitmq_exchange).provide(:rabbitmqadmin, parent: Puppet::Pr rabbitmqadmin('delete', 'exchange', vhost_opt, "--user=#{resource[:user]}", "--password=#{resource[:password]}", "name=#{name}", '-c', '/etc/rabbitmq/rabbitmqadmin.conf') @property_hash[:ensure] = :absent end + end