8a062c0b5962a0704e1c2d7f62df92e509264651
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / type / rabbitmq_parameter.rb
1 Puppet::Type.newtype(:rabbitmq_parameter) do
2   desc <<-DESC
3 Type for managing rabbitmq parameters
4
5 @example Create some rabbitmq_parameter resources
6    rabbitmq_parameter { 'documentumShovel@/':
7      component_name => '',
8      value          => {
9          'src-uri'    => 'amqp://',
10          'src-queue'  => 'my-queue',
11          'dest-uri'   => 'amqp://remote-server',
12          'dest-queue' => 'another-queue',
13      },
14    }
15    rabbitmq_parameter { 'documentumFed@/':
16      component_name => 'federation-upstream',
17      value          => {
18          'uri'     => 'amqp://myserver',
19          'expires' => '360000',
20      },
21    }
22 DESC
23
24   ensurable do
25     defaultto(:present)
26     newvalue(:present) do
27       provider.create
28     end
29     newvalue(:absent) do
30       provider.destroy
31     end
32   end
33
34   autorequire(:service) { 'rabbitmq-server' }
35
36   validate do
37     raise('component_name parameter is required.') if self[:ensure] == :present && self[:component_name].nil?
38     raise('value parameter is required.') if self[:ensure] == :present && self[:value].nil?
39   end
40
41   newparam(:name, namevar: true) do
42     desc 'combination of name@vhost to set parameter for'
43     newvalues(%r{^\S+@\S+$})
44   end
45
46   newproperty(:component_name) do
47     desc 'The component_name to use when setting parameter, eg: shovel or federation'
48     validate do |value|
49       resource.validate_component_name(value)
50     end
51   end
52
53   newproperty(:value) do
54     desc 'A hash of values to use with the component name you are setting'
55     validate do |value|
56       resource.validate_value(value)
57     end
58     munge do |value|
59       resource.munge_value(value)
60     end
61   end
62
63   autorequire(:rabbitmq_vhost) do
64     [self[:name].split('@')[1]]
65   end
66
67   def validate_component_name(value)
68     raise ArgumentError, 'component_name must be defined' if value.empty?
69   end
70
71   def validate_value(value)
72     raise ArgumentError, 'Invalid value' unless [Hash].include?(value.class)
73     value.each do |_k, v|
74       unless [String, TrueClass, FalseClass].include?(v.class)
75         raise ArgumentError, 'Invalid value'
76       end
77     end
78   end
79
80   def munge_value(value)
81     value.each do |k, v|
82       value[k] = v.to_i if v =~ %r{\A[-+]?[0-9]+\z}
83     end
84     value
85   end
86 end