1 Puppet::Type.newtype(:rabbitmq_policy) do
3 Type for managing rabbitmq policies
5 @example Create a rabbitmq_policy
6 rabbitmq_policy { 'ha-all@myvhost':
12 'ha-sync-mode' => 'automatic',
27 autorequire(:service) { 'rabbitmq-server' }
30 raise('pattern parameter is required.') if self[:ensure] == :present && self[:pattern].nil?
31 raise('definition parameter is required.') if self[:ensure] == :present && self[:definition].nil?
34 newparam(:name, namevar: true) do
35 desc 'combination of policy@vhost to create policy for'
36 newvalues(%r{^\S+@\S+$})
39 newproperty(:pattern) do
42 resource.validate_pattern(value)
46 newproperty(:applyto) do
47 desc 'policy apply to'
54 newproperty(:definition) do
55 desc 'policy definition'
57 resource.validate_definition(value)
60 resource.munge_definition(value)
64 newproperty(:priority) do
65 desc 'policy priority'
70 autorequire(:rabbitmq_vhost) do
71 [self[:name].split('@')[1]]
74 def validate_pattern(value)
77 raise ArgumentError, "Invalid regexp #{value}"
80 def validate_definition(definition)
81 unless [Hash].include?(definition.class)
82 raise ArgumentError, 'Invalid definition'
84 definition.each do |k, v|
85 if k == 'ha-params' && definition['ha-mode'] == 'nodes'
86 unless [Array].include?(v.class)
87 raise ArgumentError, "Invalid definition, value #{v} for key #{k} is not an array"
90 unless [String].include?(v.class)
91 raise ArgumentError, "Invalid definition, value #{v} is not a string"
95 if definition['ha-mode'] == 'exactly'
96 ha_params = definition['ha-params']
97 unless ha_params.to_i.to_s == ha_params
98 raise ArgumentError, "Invalid ha-params '#{ha_params}' for ha-mode 'exactly'"
101 if definition.key? 'expires'
102 expires_val = definition['expires']
103 unless expires_val.to_i.to_s == expires_val
104 raise ArgumentError, "Invalid expires value '#{expires_val}'"
107 if definition.key? 'message-ttl'
108 message_ttl_val = definition['message-ttl']
109 unless message_ttl_val.to_i.to_s == message_ttl_val
110 raise ArgumentError, "Invalid message-ttl value '#{message_ttl_val}'"
113 if definition.key? 'max-length'
114 max_length_val = definition['max-length']
115 unless max_length_val.to_i.to_s == max_length_val
116 raise ArgumentError, "Invalid max-length value '#{max_length_val}'"
119 if definition.key? 'max-length-bytes'
120 max_length_bytes_val = definition['max-length-bytes']
121 unless max_length_bytes_val.to_i.to_s == max_length_bytes_val
122 raise ArgumentError, "Invalid max-length-bytes value '#{max_length_bytes_val}'"
125 if definition.key? 'shards-per-node'
126 shards_per_node_val = definition['shards-per-node']
127 unless shards_per_node_val.to_i.to_s == shards_per_node_val
128 raise ArgumentError, "Invalid shards-per-node value '#{shards_per_node_val}'"
131 if definition.key? 'ha-sync-batch-size' # rubocop:disable Style/GuardClause
132 ha_sync_batch_size_val = definition['ha-sync-batch-size']
133 unless ha_sync_batch_size_val.to_i.to_s == ha_sync_batch_size_val
134 raise ArgumentError, "Invalid ha-sync-batch-size value '#{ha_sync_batch_size_val}'"
139 def munge_definition(definition)
140 if definition['ha-mode'] == 'exactly'
141 definition['ha-params'] = definition['ha-params'].to_i
143 if definition.key? 'expires'
144 definition['expires'] = definition['expires'].to_i
146 if definition.key? 'message-ttl'
147 definition['message-ttl'] = definition['message-ttl'].to_i
149 if definition.key? 'max-length'
150 definition['max-length'] = definition['max-length'].to_i
152 if definition.key? 'max-length-bytes'
153 definition['max-length-bytes'] = definition['max-length-bytes'].to_i
155 if definition.key? 'shards-per-node'
156 definition['shards-per-node'] = definition['shards-per-node'].to_i
158 if definition.key? 'ha-sync-batch-size'
159 definition['ha-sync-batch-size'] = definition['ha-sync-batch-size'].to_i