X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_policy%2Frabbitmqctl.rb;fp=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_policy%2Frabbitmqctl.rb;h=7e732958005e4be91cbbd6dd642804c03d44955d;hb=24caa46729f80fbba4be8b9b26ebcb3acc4cb0fb;hp=1d112e965ec07f354ba170a3802627897498ec03;hpb=c7e7bcc28cc5dc48a7e284a3c82f33df27d1f57d;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb index 1d112e965..7e7329580 100644 --- a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb +++ b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_policy/rabbitmqctl.rb @@ -2,54 +2,37 @@ require 'json' require 'puppet/util/package' require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmqctl')) -Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl, parent: Puppet::Provider::Rabbitmqctl) do - confine feature: :posix +Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl, :parent => Puppet::Provider::Rabbitmqctl) do + + defaultfor :feature => :posix # cache policies - def self.policies(vhost, name) + def self.policies(name, vhost) @policies = {} unless @policies unless @policies[vhost] @policies[vhost] = {} - policy_list = run_with_retries do + self.run_with_retries { rabbitmqctl('list_policies', '-q', '-p', vhost) - end - - # rabbitmq<3.2 does not support the applyto field - # 1 2 3? 4 5 6 - # / ha-all all .* {"ha-mode":"all","ha-sync-mode":"automatic"} 0 << This is for RabbitMQ v < 3.7.0 - # / ha-all .* all {"ha-mode":"all","ha-sync-mode":"automatic"} 0 << This is for RabbitMQ v >= 3.7.0 - if Puppet::Util::Package.versioncmp(rabbitmq_version, '3.7') >= 0 - regex = %r{^(\S+)\s+(\S+)\s+(\S+)\s+(all|exchanges|queues)?\s+(\S+)\s+(\d+)$} - applyto_index = 4 - pattern_index = 3 - else - regex = %r{^(\S+)\s+(\S+)\s+(all|exchanges|queues)?\s*(\S+)\s+(\S+)\s+(\d+)$} - applyto_index = 3 - pattern_index = 4 - end - - policy_list.split(%r{\n}).each do |line| - raise Puppet::Error, "cannot parse line from list_policies:#{line}" unless line =~ regex - n = Regexp.last_match(2) - applyto = Regexp.last_match(applyto_index) || 'all' - priority = Regexp.last_match(6) - definition = JSON.parse(Regexp.last_match(5)) - # be aware that the gsub will reset the captures - # from the regexp above - pattern = Regexp.last_match(pattern_index).to_s.gsub(%r{\\\\}, '\\') - - @policies[vhost][n] = { - applyto: applyto, - pattern: pattern, - definition: definition, - priority: priority - } + }.split(/\n/).each do |line| + # rabbitmq<3.2 does not support the applyto field + # 1 2 3? 4 5 6 + # / ha-all all .* {"ha-mode":"all","ha-sync-mode":"automatic"} 0 + if line =~ /^(\S+)\s+(\S+)\s+(all|exchanges|queues)?\s*(\S+)\s+(\S+)\s+(\d+)$/ + applyto = $3 || 'all' + @policies[vhost][$2] = { + :applyto => applyto, + :pattern => $4, + :definition => JSON.parse($5), + :priority => $6} + else + raise Puppet::Error, "cannot parse line from list_policies:#{line}" + end end end @policies[vhost][name] end - def policies(vhost, name) + def policies(name, vhost) self.class.policies(vhost, name) end @@ -77,7 +60,7 @@ Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl, parent: Puppet::Provid policies(should_vhost, should_policy)[:pattern] end - def pattern=(_pattern) + def pattern=(pattern) set_policy end @@ -85,7 +68,7 @@ Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl, parent: Puppet::Provid policies(should_vhost, should_policy)[:applyto] end - def applyto=(_applyto) + def applyto=(applyto) set_policy end @@ -93,7 +76,7 @@ Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl, parent: Puppet::Provid policies(should_vhost, should_policy)[:definition] end - def definition=(_definition) + def definition=(definition) set_policy end @@ -101,37 +84,36 @@ Puppet::Type.type(:rabbitmq_policy).provide(:rabbitmqctl, parent: Puppet::Provid policies(should_vhost, should_policy)[:priority] end - def priority=(_priority) + def priority=(priority) set_policy end def set_policy - return if @set_policy - @set_policy = true - resource[:applyto] ||= applyto - resource[:definition] ||= definition - resource[:pattern] ||= pattern - resource[:priority] ||= priority - # rabbitmq>=3.2.0 - if Puppet::Util::Package.versioncmp(self.class.rabbitmq_version, '3.2.0') >= 0 - rabbitmqctl( - 'set_policy', - '-p', should_vhost, - '--priority', resource[:priority], - '--apply-to', resource[:applyto].to_s, - should_policy, - resource[:pattern], - resource[:definition].to_json - ) - else - rabbitmqctl( - 'set_policy', - '-p', should_vhost, - should_policy, - resource[:pattern], - resource[:definition].to_json, - resource[:priority] - ) + unless @set_policy + @set_policy = true + resource[:applyto] ||= applyto + resource[:definition] ||= definition + resource[:pattern] ||= pattern + resource[:priority] ||= priority + # rabbitmq>=3.2.0 + if Puppet::Util::Package.versioncmp(self.class.rabbitmq_version, '3.2.0') >= 0 + rabbitmqctl('set_policy', + '-p', should_vhost, + '--priority', resource[:priority], + '--apply-to', resource[:applyto].to_s, + should_policy, + resource[:pattern], + resource[:definition].to_json + ) + else + rabbitmqctl('set_policy', + '-p', should_vhost, + should_policy, + resource[:pattern], + resource[:definition].to_json, + resource[:priority] + ) + end end end end