2 require 'puppet/util/package'
4 require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmqctl'))
5 Puppet::Type.type(:rabbitmq_parameter).provide(:rabbitmqctl, parent: Puppet::Provider::Rabbitmqctl) do
6 confine feature: :posix
9 def self.parameters(name, vhost)
10 @parameters = {} unless @parameters
11 unless @parameters[vhost]
12 @parameters[vhost] = {}
13 parameter_list = run_with_retries do
14 rabbitmqctl('list_parameters', '-q', '-p', vhost)
16 parameter_list.split(%r{\n}).each do |line|
17 raise Puppet::Error, "cannot parse line from list_parameter:#{line}" unless line =~ %r{^(\S+)\s+(\S+)\s+(\S+)$}
18 @parameters[vhost][Regexp.last_match(2)] = {
19 component_name: Regexp.last_match(1),
20 value: JSON.parse(Regexp.last_match(3))
24 @parameters[vhost][name]
27 def parameters(name, vhost)
28 self.class.parameters(vhost, name)
32 @should_parameter ||= resource[:name].rpartition('@').first
36 @should_vhost ||= resource[:name].rpartition('@').last
44 rabbitmqctl('clear_parameter', '-p', should_vhost, 'shovel', should_parameter)
48 parameters(should_vhost, should_parameter)
52 parameters(should_vhost, should_parameter)[:component_name]
55 def component_name=(_component_name)
60 parameters(should_vhost, should_parameter)[:value]
68 return if @set_parameter
71 resource[:value] ||= value
72 resource[:component_name] ||= component_name
76 resource[:component_name],
78 resource[:value].to_json