9fda2c29d3a229dacdf95c7ef78b7354b744e321
[mirror/dsa-puppet.git] / 3rdparty / modules / rabbitmq / lib / puppet / type / rabbitmq_user.rb
1 Puppet::Type.newtype(:rabbitmq_user) do
2   desc <<-DESC
3 Native type for managing rabbitmq users
4
5 @example query all current users
6  $ puppet resource rabbitmq_user
7
8 @example Configure a user, dan
9  rabbitmq_user { 'dan':
10    admin    => true,
11    password => 'bar',
12  }
13
14 @example Optional parameter tags will set further rabbitmq tags like monitoring, policymaker, etc.
15  To set the administrator tag use admin-flag.
16  rabbitmq_user { 'dan':
17    admin    => true,
18    password => 'bar',
19    tags     => ['monitoring', 'tag1'],
20  }
21 DESC
22
23   ensurable do
24     defaultto(:present)
25     newvalue(:present) do
26       provider.create
27     end
28     newvalue(:absent) do
29       provider.destroy
30     end
31   end
32
33   autorequire(:service) { 'rabbitmq-server' }
34
35   newparam(:name, namevar: true) do
36     desc 'Name of user'
37     newvalues(%r{^\S+$})
38   end
39
40   newproperty(:password) do
41     desc 'User password to be set *on creation* and validated each run'
42     def insync?(_is)
43       provider.check_password(should)
44     end
45
46     def change_to_s(_current, _desired)
47       'password has been changed'
48     end
49   end
50
51   newproperty(:admin) do
52     desc 'whether or not user should be an admin'
53     newvalues(%r{true|false})
54     munge do |value|
55       # converting to_s in case its a boolean
56       value.to_s.to_sym
57     end
58     defaultto :false
59   end
60
61   newproperty(:tags, array_matching: :all) do
62     desc 'additional tags for the user'
63     validate do |value|
64       unless value =~ %r{^\S+$}
65         raise ArgumentError, "Invalid tag: #{value.inspect}"
66       end
67
68       if value == 'administrator'
69         raise ArgumentError, 'must use admin property instead of administrator tag'
70       end
71     end
72     defaultto []
73
74     def insync?(is)
75       is.sort == should.sort
76     end
77
78     def should_to_s(value)
79       Array(value)
80     end
81   end
82 end