]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/rabbitmq/lib/puppet/type/rabbitmq_policy.rb
move to puppetlabs rabbitmq module
[dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / type / rabbitmq_policy.rb
1 Puppet::Type.newtype(:rabbitmq_policy) do
2   desc 'Type for managing rabbitmq policies'
3
4   ensurable do
5     defaultto(:present)
6     newvalue(:present) do
7       provider.create
8     end
9     newvalue(:absent) do
10       provider.destroy
11     end
12   end
13
14   autorequire(:service) { 'rabbitmq-server' }
15
16   validate do
17     fail('pattern parameter is required.') if self[:ensure] == :present and self[:pattern].nil?
18     fail('definition parameter is required.') if self[:ensure] == :present and self[:definition].nil?
19   end
20
21   newparam(:name, :namevar => true) do
22     desc 'combination of policy@vhost to create policy for'
23     newvalues(/^\S+@\S+$/)
24   end
25
26   newproperty(:pattern) do
27     desc 'policy pattern'
28     validate do |value|
29       resource.validate_pattern(value)
30     end
31   end
32
33   newproperty(:applyto) do
34     desc 'policy apply to'
35     newvalue(:all)
36     newvalue(:exchanges)
37     newvalue(:queues)
38     defaultto :all
39   end
40
41   newproperty(:definition) do
42     desc 'policy definition'
43     validate do |value|
44       resource.validate_definition(value)
45     end
46     munge do |value|
47       resource.munge_definition(value)
48     end
49   end
50
51   newproperty(:priority) do
52     desc 'policy priority'
53     newvalues(/^\d+$/)
54     defaultto 0
55   end
56
57   autorequire(:rabbitmq_vhost) do
58     [self[:name].split('@')[1]]
59   end
60
61   def validate_pattern(value)
62     begin
63       Regexp.new(value)
64     rescue RegexpError
65       raise ArgumentError, "Invalid regexp #{value}"
66     end
67   end
68
69   def validate_definition(definition)
70     unless [Hash].include?(definition.class)
71       raise ArgumentError, "Invalid definition"
72     end
73     definition.each do |k,v|
74       unless [String].include?(v.class)
75         raise ArgumentError, "Invalid definition"
76       end
77     end
78     if definition['ha-mode'] == 'exactly'
79       ha_params = definition['ha-params']
80       unless ha_params.to_i.to_s == ha_params
81         raise ArgumentError, "Invalid ha-params '#{ha_params}' for ha-mode 'exactly'"
82       end
83     end
84     if definition.key? 'expires'
85       expires_val = definition['expires']
86       unless expires_val.to_i.to_s == expires_val
87         raise ArgumentError, "Invalid expires value '#{expires_val}'"
88       end
89     end
90   end
91
92   def munge_definition(definition)
93     if definition['ha-mode'] == 'exactly'
94       definition['ha-params'] = definition['ha-params'].to_i
95     end
96     if definition.key? 'expires'
97       definition['expires'] = definition['expires'].to_i
98     end
99     definition
100   end
101 end