X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;ds=sidebyside;f=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_parameter%2Frabbitmqctl.rb;fp=3rdparty%2Fmodules%2Frabbitmq%2Flib%2Fpuppet%2Fprovider%2Frabbitmq_parameter%2Frabbitmqctl.rb;h=5c910d7314950f31b84111d82eda363a28e6ab1a;hb=921e69100a563cf143f56a3905d8362336d939ff;hp=0000000000000000000000000000000000000000;hpb=b54f52d2899c5785923c804fdfbba0782c147da4;p=mirror%2Fdsa-puppet.git diff --git a/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_parameter/rabbitmqctl.rb b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_parameter/rabbitmqctl.rb new file mode 100644 index 000000000..5c910d731 --- /dev/null +++ b/3rdparty/modules/rabbitmq/lib/puppet/provider/rabbitmq_parameter/rabbitmqctl.rb @@ -0,0 +1,81 @@ +require 'json' +require 'puppet/util/package' + +require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmqctl')) +Puppet::Type.type(:rabbitmq_parameter).provide(:rabbitmqctl, parent: Puppet::Provider::Rabbitmqctl) do + confine feature: :posix + + # cache parameters + def self.parameters(name, vhost) + @parameters = {} unless @parameters + unless @parameters[vhost] + @parameters[vhost] = {} + parameter_list = run_with_retries do + rabbitmqctl('list_parameters', '-q', '-p', vhost) + end + parameter_list.split(%r{\n}).each do |line| + raise Puppet::Error, "cannot parse line from list_parameter:#{line}" unless line =~ %r{^(\S+)\s+(\S+)\s+(\S+)$} + @parameters[vhost][Regexp.last_match(2)] = { + component_name: Regexp.last_match(1), + value: JSON.parse(Regexp.last_match(3)) + } + end + end + @parameters[vhost][name] + end + + def parameters(name, vhost) + self.class.parameters(vhost, name) + end + + def should_parameter + @should_parameter ||= resource[:name].rpartition('@').first + end + + def should_vhost + @should_vhost ||= resource[:name].rpartition('@').last + end + + def create + set_parameter + end + + def destroy + rabbitmqctl('clear_parameter', '-p', should_vhost, 'shovel', should_parameter) + end + + def exists? + parameters(should_vhost, should_parameter) + end + + def component_name + parameters(should_vhost, should_parameter)[:component_name] + end + + def component_name=(_component_name) + set_parameter + end + + def value + parameters(should_vhost, should_parameter)[:value] + end + + def value=(_value) + set_parameter + end + + def set_parameter + return if @set_parameter + + @set_parameter = true + resource[:value] ||= value + resource[:component_name] ||= component_name + rabbitmqctl( + 'set_parameter', + '-p', should_vhost, + resource[:component_name], + should_parameter, + resource[:value].to_json + ) + end +end