1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
require 'json'
require 'puppet/util/package'
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'rabbitmq_cli'))
Puppet::Type.type(:rabbitmq_parameter).provide(:rabbitmqctl, parent: Puppet::Provider::RabbitmqCli) 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', '-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
|