]> git.donarmstrong.com Git - dsa-puppet.git/blob - 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
1 Puppet::Type.newtype(:rabbitmq_binding) do
2   desc 'Native type for managing rabbitmq bindings'
3
4   ensurable do
5     defaultto(:present)
6     newvalue(:present) do
7       provider.create
8     end
9     newvalue(:absent) do
10       provider.destroy
11     end
12   end
13
14   newparam(:name, :namevar => true) do
15     desc 'source and destination of bind'
16     newvalues(/^\S*@\S+@\S+$/)
17   end
18
19   newparam(:destination_type) do
20     desc 'binding destination_type'
21     newvalues(/queue|exchange/)
22     defaultto('queue')
23   end
24   
25   newparam(:routing_key) do
26     desc 'binding routing_key'
27     newvalues(/^\S*$/)
28   end
29
30   newparam(:arguments) do
31     desc 'binding arguments'
32     defaultto {}
33     validate do |value|
34       resource.validate_argument(value)
35     end
36   end
37
38   newparam(:user) do
39     desc 'The user to use to connect to rabbitmq'
40     defaultto('guest')
41     newvalues(/^\S+$/)
42   end
43
44   newparam(:password) do
45     desc 'The password to use to connect to rabbitmq'
46     defaultto('guest')
47     newvalues(/\S+/)
48   end
49
50   autorequire(:rabbitmq_vhost) do
51     [self[:name].split('@')[2]]
52   end
53   
54   autorequire(:rabbitmq_exchange) do
55     setup_autorequire('exchange')
56   end
57
58   autorequire(:rabbitmq_queue) do
59     setup_autorequire('queue')
60   end
61
62   autorequire(:rabbitmq_user) do
63     [self[:user]]
64   end
65
66   autorequire(:rabbitmq_user_permissions) do
67     [
68       "#{self[:user]}@#{self[:name].split('@')[1]}",
69       "#{self[:user]}@#{self[:name].split('@')[0]}"
70     ]
71   end
72
73   def setup_autorequire(type)
74     destination_type = value(:destination_type)
75     if type == 'exchange'
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]}")
79       end
80     else
81       if destination_type == type
82         rval = ["#{self[:name].split('@')[1]}@#{self[:name].split('@')[2]}"]
83       else
84         rval = []
85       end
86     end
87     rval
88   end
89
90   def validate_argument(argument)
91     unless [Hash].include?(argument.class)
92       raise ArgumentError, "Invalid argument"
93     end
94   end
95
96 end