]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/rabbitmq/lib/puppet/type/rabbitmq_binding.rb
move to puppetlabs rabbitmq module
[dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / type / rabbitmq_binding.rb
diff --git a/3rdparty/modules/rabbitmq/lib/puppet/type/rabbitmq_binding.rb b/3rdparty/modules/rabbitmq/lib/puppet/type/rabbitmq_binding.rb
new file mode 100644 (file)
index 0000000..1309480
--- /dev/null
@@ -0,0 +1,96 @@
+Puppet::Type.newtype(:rabbitmq_binding) do
+  desc 'Native type for managing rabbitmq bindings'
+
+  ensurable do
+    defaultto(:present)
+    newvalue(:present) do
+      provider.create
+    end
+    newvalue(:absent) do
+      provider.destroy
+    end
+  end
+
+  newparam(:name, :namevar => true) do
+    desc 'source and destination of bind'
+    newvalues(/^\S*@\S+@\S+$/)
+  end
+
+  newparam(:destination_type) do
+    desc 'binding destination_type'
+    newvalues(/queue|exchange/)
+    defaultto('queue')
+  end
+  
+  newparam(:routing_key) do
+    desc 'binding routing_key'
+    newvalues(/^\S*$/)
+  end
+
+  newparam(:arguments) do
+    desc 'binding arguments'
+    defaultto {}
+    validate do |value|
+      resource.validate_argument(value)
+    end
+  end
+
+  newparam(:user) do
+    desc 'The user to use to connect to rabbitmq'
+    defaultto('guest')
+    newvalues(/^\S+$/)
+  end
+
+  newparam(:password) do
+    desc 'The password to use to connect to rabbitmq'
+    defaultto('guest')
+    newvalues(/\S+/)
+  end
+
+  autorequire(:rabbitmq_vhost) do
+    [self[:name].split('@')[2]]
+  end
+  
+  autorequire(:rabbitmq_exchange) do
+    setup_autorequire('exchange')
+  end
+
+  autorequire(:rabbitmq_queue) do
+    setup_autorequire('queue')
+  end
+
+  autorequire(:rabbitmq_user) do
+    [self[:user]]
+  end
+
+  autorequire(:rabbitmq_user_permissions) do
+    [
+      "#{self[:user]}@#{self[:name].split('@')[1]}",
+      "#{self[:user]}@#{self[:name].split('@')[0]}"
+    ]
+  end
+
+  def setup_autorequire(type)
+    destination_type = value(:destination_type)
+    if type == 'exchange'
+      rval = ["#{self[:name].split('@')[0]}@#{self[:name].split('@')[2]}"]
+      if destination_type == type
+        rval.push("#{self[:name].split('@')[1]}@#{self[:name].split('@')[2]}")
+      end
+    else
+      if destination_type == type
+        rval = ["#{self[:name].split('@')[1]}@#{self[:name].split('@')[2]}"]
+      else
+        rval = []
+      end
+    end
+    rval
+  end
+
+  def validate_argument(argument)
+    unless [Hash].include?(argument.class)
+      raise ArgumentError, "Invalid argument"
+    end
+  end
+
+end