Update 3rdparty rabbitmq module
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / type / rabbitmq_exchange.rb
1 Puppet::Type.newtype(:rabbitmq_exchange) do
2   desc <<-DESC
3 Native type for managing rabbitmq exchanges
4
5 @example Create a rabbitmq_exchange
6  rabbitmq_exchange { 'myexchange@myvhost':
7    user        => 'dan',
8    password    => 'bar',
9    type        => 'topic',
10    ensure      => present,
11    internal    => false,
12    auto_delete => false,
13    durable     => true,
14    arguments   => {
15      hash-header => 'message-distribution-hash'
16    }
17  }
18 DESC
19
20   ensurable do
21     defaultto(:present)
22     newvalue(:present) do
23       provider.create
24     end
25     newvalue(:absent) do
26       provider.destroy
27     end
28   end
29
30   newparam(:name, namevar: true) do
31     desc 'Name of exchange'
32     newvalues(%r{^\S*@\S+$})
33   end
34
35   newparam(:type) do
36     desc 'Exchange type to be set *on creation*'
37     newvalues(%r{^\S+$})
38   end
39
40   newparam(:durable) do
41     desc 'Exchange durability to be set *on creation*'
42     newvalues(%r{^\S+$})
43     defaultto 'false'
44   end
45
46   newparam(:auto_delete) do
47     desc 'Exchange auto delete option to be set *on creation*'
48     newvalues(%r{^\S+$})
49     defaultto 'false'
50   end
51
52   newparam(:internal) do
53     desc 'Exchange internal option to be set *on creation*'
54     newvalues(%r{^\S+$})
55     defaultto 'false'
56   end
57
58   newparam(:arguments) do
59     desc 'Exchange arguments example: {"hash-header": "message-distribution-hash"}'
60     defaultto {}
61   end
62
63   newparam(:user) do
64     desc 'The user to use to connect to rabbitmq'
65     defaultto('guest')
66     newvalues(%r{^\S+$})
67   end
68
69   newparam(:password) do
70     desc 'The password to use to connect to rabbitmq'
71     defaultto('guest')
72     newvalues(%r{\S+})
73   end
74
75   validate do
76     if self[:ensure] == :present && self[:type].nil?
77       raise ArgumentError, "must set type when creating exchange for #{self[:name]} whose type is #{self[:type]}"
78     end
79   end
80
81   autorequire(:rabbitmq_vhost) do
82     [self[:name].split('@')[1]]
83   end
84
85   autorequire(:rabbitmq_user) do
86     [self[:user]]
87   end
88
89   autorequire(:rabbitmq_user_permissions) do
90     ["#{self[:user]}@#{self[:name].split('@')[1]}"]
91   end
92 end