@@ -8,36 +8,16 @@ def self.instances
88 require 'json'
99
1010 if db_ismaster
11- if mongo_24?
12- dbs = JSON . parse mongo_eval ( 'printjson(db.getMongo().getDBs()["databases"].map(function(db){return db["name"]}))' ) || 'admin'
13-
14- allusers = [ ]
15-
16- dbs . each do |db |
17- users = JSON . parse mongo_eval ( 'printjson(db.system.users.find().toArray())' , db )
18-
19- allusers += users . map do |user |
20- new ( name : user [ '_id' ] ,
21- ensure : :present ,
22- username : user [ 'user' ] ,
23- database : db ,
24- roles : user [ 'roles' ] . sort ,
25- password_hash : user [ 'pwd' ] )
26- end
27- end
28- return allusers
29- else
30- users = JSON . parse mongo_eval ( 'printjson(db.system.users.find().toArray())' )
31-
32- users . map do |user |
33- new ( name : user [ '_id' ] ,
34- ensure : :present ,
35- username : user [ 'user' ] ,
36- database : user [ 'db' ] ,
37- roles : from_roles ( user [ 'roles' ] , user [ 'db' ] ) ,
38- password_hash : user [ 'credentials' ] [ 'MONGODB-CR' ] ,
39- scram_credentials : user [ 'credentials' ] [ 'SCRAM-SHA-1' ] )
40- end
11+ users = JSON . parse mongo_eval ( 'printjson(db.system.users.find().toArray())' )
12+
13+ users . map do |user |
14+ new ( name : user [ '_id' ] ,
15+ ensure : :present ,
16+ username : user [ 'user' ] ,
17+ database : user [ 'db' ] ,
18+ roles : from_roles ( user [ 'roles' ] , user [ 'db' ] ) ,
19+ password_hash : user [ 'credentials' ] [ 'MONGODB-CR' ] ,
20+ scram_credentials : user [ 'credentials' ] [ 'SCRAM-SHA-1' ] )
4121 end
4222 else
4323 Puppet . warning 'User info is available only from master host'
@@ -58,36 +38,23 @@ def self.prefetch(resources)
5838
5939 def create
6040 if db_ismaster
61- if mongo_24?
62- if @resource [ :password_hash ]
63- raise Puppet ::Error , "password_hash can't be set on MongoDB older than 3.0; use password instead"
64- end
65- user = {
66- user : @resource [ :username ] ,
67- pwd : @resource [ :password ] ,
68- roles : @resource [ :roles ]
69- }
70-
71- mongo_eval ( "db.addUser(#{ user . to_json } )" , @resource [ :database ] )
72- else
73- password_hash = @resource [ :password_hash ]
74-
75- if password_hash
76- elsif @resource [ :password ]
77- password_hash = Puppet ::Util ::MongodbMd5er . md5 ( @resource [ :username ] , @resource [ :password ] )
78- end
79- cmd_json = <<-EOS . gsub ( %r{^\s *} , '' ) . gsub ( %r{$\n } , '' )
80- {
81- "createUser": "#{ @resource [ :username ] } ",
82- "pwd": "#{ password_hash } ",
83- "customData": {"createdBy": "Puppet Mongodb_user['#{ @resource [ :name ] } ']"},
84- "roles": #{ @resource [ :roles ] . to_json } ,
85- "digestPassword": false
86- }
87- EOS
88-
89- mongo_eval ( "db.runCommand(#{ cmd_json } )" , @resource [ :database ] )
41+ password_hash = @resource [ :password_hash ]
42+
43+ if password_hash
44+ elsif @resource [ :password ]
45+ password_hash = Puppet ::Util ::MongodbMd5er . md5 ( @resource [ :username ] , @resource [ :password ] )
9046 end
47+ cmd_json = <<-EOS . gsub ( %r{^\s *} , '' ) . gsub ( %r{$\n } , '' )
48+ {
49+ "createUser": "#{ @resource [ :username ] } ",
50+ "pwd": "#{ password_hash } ",
51+ "customData": {"createdBy": "Puppet Mongodb_user['#{ @resource [ :name ] } ']"},
52+ "roles": #{ @resource [ :roles ] . to_json } ,
53+ "digestPassword": false
54+ }
55+ EOS
56+
57+ mongo_eval ( "db.runCommand(#{ cmd_json } )" , @resource [ :database ] )
9158 else
9259 Puppet . warning 'User creation is available only from master host'
9360
@@ -102,15 +69,7 @@ def create
10269 end
10370
10471 def destroy
105- if db_ismaster
106- if mongo_24?
107- mongo_eval ( "db.removeUser('#{ @resource [ :username ] } ')" )
108- else
109- mongo_eval ( "db.dropUser('#{ @resource [ :username ] } ')" )
110- end
111- else
112- mongo_eval ( "db.dropUser('#{ @resource [ :username ] } ')" )
113- end
72+ mongo_eval ( "db.dropUser('#{ @resource [ :username ] } ')" )
11473 end
11574
11675 def exists?
@@ -133,7 +92,7 @@ def password_hash=(_value)
13392 end
13493
13594 def password = ( value )
136- if mongo_24? || mongo_26?
95+ if mongo_26?
13796 mongo_eval ( "db.changeUserPassword('#{ @resource [ :username ] } ','#{ value } ')" , @resource [ :database ] )
13897 else
13998 cmd_json = <<-EOS . gsub ( %r{^\s *} , '' ) . gsub ( %r{$\n } , '' )
@@ -150,18 +109,14 @@ def password=(value)
150109
151110 def roles = ( roles )
152111 if db_ismaster
153- if mongo_24?
154- mongo_eval ( "db.system.users.update({user:'#{ @resource [ :username ] } '}, { $set: {roles: #{ @resource [ :roles ] . to_json } }})" )
155- else
156- grant = roles - @property_hash [ :roles ]
157- unless grant . empty?
158- mongo_eval ( "db.getSiblingDB('#{ @resource [ :database ] } ').grantRolesToUser('#{ @resource [ :username ] } ', #{ grant . to_json } )" )
159- end
160-
161- revoke = @property_hash [ :roles ] - roles
162- unless revoke . empty?
163- mongo_eval ( "db.getSiblingDB('#{ @resource [ :database ] } ').revokeRolesFromUser('#{ @resource [ :username ] } ', #{ revoke . to_json } )" )
164- end
112+ grant = roles - @property_hash [ :roles ]
113+ unless grant . empty?
114+ mongo_eval ( "db.getSiblingDB('#{ @resource [ :database ] } ').grantRolesToUser('#{ @resource [ :username ] } ', #{ grant . to_json } )" )
115+ end
116+
117+ revoke = @property_hash [ :roles ] - roles
118+ unless revoke . empty?
119+ mongo_eval ( "db.getSiblingDB('#{ @resource [ :database ] } ').revokeRolesFromUser('#{ @resource [ :username ] } ', #{ revoke . to_json } )" )
165120 end
166121 else
167122 Puppet . warning 'User roles operations are available only from master host'
0 commit comments