Update rabbitmq module
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / type / rabbitmq_policy.rb
index 259a1d6..65275a7 100644 (file)
@@ -1,5 +1,18 @@
 Puppet::Type.newtype(:rabbitmq_policy) do
-  desc 'Type for managing rabbitmq policies'
+  desc <<-DESC
+Type for managing rabbitmq policies
+
+@example Create a rabbitmq_policy
+ rabbitmq_policy { 'ha-all@myvhost':
+   pattern    => '.*',
+   priority   => 0,
+   applyto    => 'all',
+   definition => {
+     'ha-mode'      => 'all',
+     'ha-sync-mode' => 'automatic',
+   },
+ }
+DESC
 
   ensurable do
     defaultto(:present)
@@ -14,13 +27,13 @@ Puppet::Type.newtype(:rabbitmq_policy) do
   autorequire(:service) { 'rabbitmq-server' }
 
   validate do
-    fail('pattern parameter is required.') if self[:ensure] == :present and self[:pattern].nil?
-    fail('definition parameter is required.') if self[:ensure] == :present and self[:definition].nil?
+    raise('pattern parameter is required.') if self[:ensure] == :present && self[:pattern].nil?
+    raise('definition parameter is required.') if self[:ensure] == :present && self[:definition].nil?
   end
 
-  newparam(:name, :namevar => true) do
+  newparam(:name, namevar: true) do
     desc 'combination of policy@vhost to create policy for'
-    newvalues(/^\S+@\S+$/)
+    newvalues(%r{^\S+@\S+$})
   end
 
   newproperty(:pattern) do
@@ -50,7 +63,7 @@ Puppet::Type.newtype(:rabbitmq_policy) do
 
   newproperty(:priority) do
     desc 'policy priority'
-    newvalues(/^\d+$/)
+    newvalues(%r{^\d+$})
     defaultto 0
   end
 
@@ -59,20 +72,24 @@ Puppet::Type.newtype(:rabbitmq_policy) do
   end
 
   def validate_pattern(value)
-    begin
-      Regexp.new(value)
-    rescue RegexpError
-      raise ArgumentError, "Invalid regexp #{value}"
-    end
+    Regexp.new(value)
+  rescue RegexpError
+    raise ArgumentError, "Invalid regexp #{value}"
   end
 
   def validate_definition(definition)
     unless [Hash].include?(definition.class)
-      raise ArgumentError, "Invalid definition"
+      raise ArgumentError, 'Invalid definition'
     end
-    definition.each do |k,v|
-      unless [String].include?(v.class)
-        raise ArgumentError, "Invalid definition"
+    definition.each do |k, v|
+      if k == 'ha-params' && definition['ha-mode'] == 'nodes'
+        unless [Array].include?(v.class)
+          raise ArgumentError, "Invalid definition, value #{v} for key #{k} is not an array"
+        end
+      else
+        unless [String].include?(v.class)
+          raise ArgumentError, "Invalid definition, value #{v} is not a string"
+        end
       end
     end
     if definition['ha-mode'] == 'exactly'
@@ -87,6 +104,36 @@ Puppet::Type.newtype(:rabbitmq_policy) do
         raise ArgumentError, "Invalid expires value '#{expires_val}'"
       end
     end
+    if definition.key? 'message-ttl'
+      message_ttl_val = definition['message-ttl']
+      unless message_ttl_val.to_i.to_s == message_ttl_val
+        raise ArgumentError, "Invalid message-ttl value '#{message_ttl_val}'"
+      end
+    end
+    if definition.key? 'max-length'
+      max_length_val = definition['max-length']
+      unless max_length_val.to_i.to_s == max_length_val
+        raise ArgumentError, "Invalid max-length value '#{max_length_val}'"
+      end
+    end
+    if definition.key? 'max-length-bytes'
+      max_length_bytes_val = definition['max-length-bytes']
+      unless max_length_bytes_val.to_i.to_s == max_length_bytes_val
+        raise ArgumentError, "Invalid max-length-bytes value '#{max_length_bytes_val}'"
+      end
+    end
+    if definition.key? 'shards-per-node'
+      shards_per_node_val = definition['shards-per-node']
+      unless shards_per_node_val.to_i.to_s == shards_per_node_val
+        raise ArgumentError, "Invalid shards-per-node value '#{shards_per_node_val}'"
+      end
+    end
+    if definition.key? 'ha-sync-batch-size' # rubocop:disable Style/GuardClause
+      ha_sync_batch_size_val = definition['ha-sync-batch-size']
+      unless ha_sync_batch_size_val.to_i.to_s == ha_sync_batch_size_val
+        raise ArgumentError, "Invalid ha-sync-batch-size value '#{ha_sync_batch_size_val}'"
+      end
+    end
   end
 
   def munge_definition(definition)
@@ -96,6 +143,21 @@ Puppet::Type.newtype(:rabbitmq_policy) do
     if definition.key? 'expires'
       definition['expires'] = definition['expires'].to_i
     end
+    if definition.key? 'message-ttl'
+      definition['message-ttl'] = definition['message-ttl'].to_i
+    end
+    if definition.key? 'max-length'
+      definition['max-length'] = definition['max-length'].to_i
+    end
+    if definition.key? 'max-length-bytes'
+      definition['max-length-bytes'] = definition['max-length-bytes'].to_i
+    end
+    if definition.key? 'shards-per-node'
+      definition['shards-per-node'] = definition['shards-per-node'].to_i
+    end
+    if definition.key? 'ha-sync-batch-size'
+      definition['ha-sync-batch-size'] = definition['ha-sync-batch-size'].to_i
+    end
     definition
   end
 end