Module: VCAP::UserPoolUtil
- Defined in:
- lib/vcap/user_pools/user_pool_util.rb
Class Method Summary collapse
- .group_from_name(name) ⇒ Object
- .init(logger = nil) ⇒ Object
- .install_pool(name, size) ⇒ Object
- .kill_group_procs(group_name) ⇒ Object
- .open_pool(name) ⇒ Object
- .pool_exists?(name) ⇒ Boolean
- .pool_list ⇒ Object
- .remove_pool(name) ⇒ Object
- .user_from_num(name, num) ⇒ Object
Class Method Details
.group_from_name(name) ⇒ Object
18 19 20 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 18 def group_from_name(name) "user-pool-#{name}" end |
.init(logger = nil) ⇒ Object
10 11 12 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 10 def init(logger = nil) @logger = logger || Logger.new(STDOUT) end |
.install_pool(name, size) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 27 def install_pool(name, size) raise ArgumentError("pool name must not contain dashes") if name =~ /-/ group_name = group_from_name(name) @logger.info("Creating user pool #{name} with #{size} users.") if VCAP::UserOps.group_exists?(group_name) raise ArgumentError.new("group #{group_name} already exists") end VCAP::UserOps.install_group(group_name) kill_group_procs(group_name) begin 1.upto(size) do |number| user_name = user_from_num(name, number) if VCAP::UserOps.user_exists?(user_name) VCAP::UserOps.remove_user(user_name) @logger.warn("User reset occured for user #{user_name}!") end @logger.debug("installing user #{user_name}") VCAP::UserOps.install_user(user_name, group_name) end rescue => e @logger.error e.to_s @logger.error("pool creation failed, cleaning up") remove_pool(name) end end |
.kill_group_procs(group_name) ⇒ Object
22 23 24 25 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 22 def kill_group_procs(group_name) @logger.debug("killing all procs in group #{group_name}") #XXX -- fixme VCAP::Subprocess.run("pkill -9 -G #{group_name}" , 0) end |
.open_pool(name) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 80 def open_pool(name) group_name = group_from_name(name) pool_users = Hash.new unless VCAP::UserOps.group_exists?(group_name) raise ArgumentError.new("no group named #{group_name} exists - can't open pool.") end Etc.passwd { |u| if u.name.split('-')[2] == name pool_users[u.name] = {:user_name => u.name, :uid => u.uid, :gid => u.gid} end } pool_users end |
.pool_exists?(name) ⇒ Boolean
75 76 77 78 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 75 def pool_exists?(name) group_name = group_from_name(name) VCAP::UserOps.group_exists?(group_name) end |
.pool_list ⇒ Object
94 95 96 97 98 99 100 101 102 103 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 94 def pool_list list = [] Etc.group { |g| if ['user','pool'] == g.name.split('-')[0..1] list.push(g.name.split('-')[2]) end } Etc.endgrent list.map {|name| "#{name} #{open_pool(name).size}"} end |
.remove_pool(name) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 55 def remove_pool(name) @logger.info("Removing user pool #{name}.") group_name = group_from_name(name) kill_group_procs(group_name) Etc.passwd { |u| if u.name.split('-')[2] == name @logger.debug "removed user #{u.name}" VCAP::UserOps.remove_user(u.name) end } Etc.endpwent if VCAP::UserOps.group_exists?(group_name) VCAP::UserOps.remove_group(group_name) else @logger.warn "Pool group #{group_name} missing!!" end end |
.user_from_num(name, num) ⇒ Object
14 15 16 |
# File 'lib/vcap/user_pools/user_pool_util.rb', line 14 def user_from_num(name, num) "user-pool-#{name}-#{num}" end |