1 Puppet::Type.newtype(:rabbitmq_policy) do
2 desc 'Type for managing rabbitmq policies'
14 autorequire(:service) { 'rabbitmq-server' }
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?
21 newparam(:name, :namevar => true) do
22 desc 'combination of policy@vhost to create policy for'
23 newvalues(/^\S+@\S+$/)
26 newproperty(:pattern) do
29 resource.validate_pattern(value)
33 newproperty(:applyto) do
34 desc 'policy apply to'
41 newproperty(:definition) do
42 desc 'policy definition'
44 resource.validate_definition(value)
47 resource.munge_definition(value)
51 newproperty(:priority) do
52 desc 'policy priority'
57 autorequire(:rabbitmq_vhost) do
58 [self[:name].split('@')[1]]
61 def validate_pattern(value)
65 raise ArgumentError, "Invalid regexp #{value}"
69 def validate_definition(definition)
70 unless [Hash].include?(definition.class)
71 raise ArgumentError, "Invalid definition"
73 definition.each do |k,v|
74 unless [String].include?(v.class)
75 raise ArgumentError, "Invalid definition"
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'"
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}'"
92 def munge_definition(definition)
93 if definition['ha-mode'] == 'exactly'
94 definition['ha-params'] = definition['ha-params'].to_i
96 if definition.key? 'expires'
97 definition['expires'] = definition['expires'].to_i