Module: Mac::User
Instance Attribute Summary
Attributes included from Beaker::CommandFactory
Instance Method Summary collapse
-
#gid_next ⇒ Fixnum
Gives the next gid not used on the system.
-
#uid_next ⇒ Fixnum
Gives the next uid not used on the system.
-
#user_absent(name, &block) ⇒ Object
Makes sure the user is absent, deleting them if necessary.
-
#user_get(name, &block) {|String| ... } ⇒ String
Gets the user information in /etc/passwd format.
-
#user_list(&block) ⇒ Array<String>
Gets a list of user names on the system.
-
#user_present(name, &block) ⇒ Object
Makes sure the user is present, creating them if necessary.
Methods included from Beaker::CommandFactory
Instance Method Details
#gid_next ⇒ Fixnum
Gives the next gid not used on the system
89 90 91 92 |
# File 'lib/beaker/host/mac/user.rb', line 89 def gid_next gid_last = execute("dscl . -list /Users PrimaryGroupID | sort -k 2 -g | tail -1 | awk '{print $2}'") gid_last.to_i + 1 end |
#uid_next ⇒ Fixnum
Gives the next uid not used on the system
81 82 83 84 |
# File 'lib/beaker/host/mac/user.rb', line 81 def uid_next uid_last = execute("dscl . -list /Users UniqueID | sort -k 2 -g | tail -1 | awk '{print $2}'") uid_last.to_i + 1 end |
#user_absent(name, &block) ⇒ Object
Makes sure the user is absent, deleting them if necessary
74 75 76 |
# File 'lib/beaker/host/mac/user.rb', line 74 def user_absent(name, &block) execute("if dscl . -list /Users/#{name}; then dscl . -delete /Users/#{name}; fi", {}, &block) end |
#user_get(name, &block) {|String| ... } ⇒ String
Gets the user information in /etc/passwd format
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/beaker/host/mac/user.rb', line 31 def user_get(name, &block) answer = "" execute("dscacheutil -q user -a name #{name}") do |result| fail_test "failed to get user #{name}" unless result.stdout =~ /^name: #{name}/ ui = Hash.new # user info result.stdout.each_line { |line| pieces = line.split(': ') ui[pieces[0].to_sym] = pieces[1].strip if pieces[1] != nil } answer = "#{ui[:name]}:#{ui[:password]}:#{ui[:uid]}:#{ui[:gid]}:" answer << "#{ui[:name]}:#{ui[:dir]}:#{ui[:shell]}" yield result if block_given? end answer end |
#user_list(&block) ⇒ Array<String>
Gets a list of user names on the system
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/beaker/host/mac/user.rb', line 9 def user_list(&block) execute('dscacheutil -q user') do |result| users = [] result.stdout.each_line do |line| users << line.split(': ')[1].strip if line =~ /^name:/ end yield result if block_given? users end end |
#user_present(name, &block) ⇒ Object
Makes sure the user is present, creating them if necessary
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/beaker/host/mac/user.rb', line 52 def user_present(name, &block) user_exists = false execute("dscacheutil -q user -a name #{name}") do |result| user_exists = result.stdout =~ /^name: #{name}/ end return if user_exists uid = uid_next gid = gid_next create_cmd = "dscl . create /Users/#{name}" create_cmd << " && dscl . create /Users/#{name} NFSHomeDirectory /Users/#{name}" create_cmd << " && dscl . create /Users/#{name} UserShell /bin/bash" create_cmd << " && dscl . create /Users/#{name} UniqueID #{uid}" create_cmd << " && dscl . create /Users/#{name} PrimaryGroupID #{gid}" execute(create_cmd) end |