1 Puppet::Type.newtype(:rabbitmq_binding) do
2 desc 'Native type for managing rabbitmq bindings'
14 newparam(:name, :namevar => true) do
15 desc 'source and destination of bind'
16 newvalues(/^\S*@\S+@\S+$/)
19 newparam(:destination_type) do
20 desc 'binding destination_type'
21 newvalues(/queue|exchange/)
25 newparam(:routing_key) do
26 desc 'binding routing_key'
30 newparam(:arguments) do
31 desc 'binding arguments'
34 resource.validate_argument(value)
39 desc 'The user to use to connect to rabbitmq'
44 newparam(:password) do
45 desc 'The password to use to connect to rabbitmq'
50 autorequire(:rabbitmq_vhost) do
51 [self[:name].split('@')[2]]
54 autorequire(:rabbitmq_exchange) do
55 setup_autorequire('exchange')
58 autorequire(:rabbitmq_queue) do
59 setup_autorequire('queue')
62 autorequire(:rabbitmq_user) do
66 autorequire(:rabbitmq_user_permissions) do
68 "#{self[:user]}@#{self[:name].split('@')[1]}",
69 "#{self[:user]}@#{self[:name].split('@')[0]}"
73 def setup_autorequire(type)
74 destination_type = value(:destination_type)
76 rval = ["#{self[:name].split('@')[0]}@#{self[:name].split('@')[2]}"]
77 if destination_type == type
78 rval.push("#{self[:name].split('@')[1]}@#{self[:name].split('@')[2]}")
81 if destination_type == type
82 rval = ["#{self[:name].split('@')[1]}@#{self[:name].split('@')[2]}"]
90 def validate_argument(argument)
91 unless [Hash].include?(argument.class)
92 raise ArgumentError, "Invalid argument"