Update 3rdparty rabbitmq module
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / provider / rabbitmq_parameter / rabbitmqctl.rb
1 require 'json'
2 require 'puppet/util/package'
3
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
7
8   # cache parameters
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)
15       end
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))
21         }
22       end
23     end
24     @parameters[vhost][name]
25   end
26
27   def parameters(name, vhost)
28     self.class.parameters(vhost, name)
29   end
30
31   def should_parameter
32     @should_parameter ||= resource[:name].rpartition('@').first
33   end
34
35   def should_vhost
36     @should_vhost ||= resource[:name].rpartition('@').last
37   end
38
39   def create
40     set_parameter
41   end
42
43   def destroy
44     rabbitmqctl('clear_parameter', '-p', should_vhost, 'shovel', should_parameter)
45   end
46
47   def exists?
48     parameters(should_vhost, should_parameter)
49   end
50
51   def component_name
52     parameters(should_vhost, should_parameter)[:component_name]
53   end
54
55   def component_name=(_component_name)
56     set_parameter
57   end
58
59   def value
60     parameters(should_vhost, should_parameter)[:value]
61   end
62
63   def value=(_value)
64     set_parameter
65   end
66
67   def set_parameter
68     return if @set_parameter
69
70     @set_parameter = true
71     resource[:value] ||= value
72     resource[:component_name] ||= component_name
73     rabbitmqctl(
74       'set_parameter',
75       '-p', should_vhost,
76       resource[:component_name],
77       should_parameter,
78       resource[:value].to_json
79     )
80   end
81 end