Module: Mac::User

Includes:
Beaker::CommandFactory
Included in:
Host
Defined in:
lib/beaker/host/mac/user.rb

Instance Attribute Summary

Attributes included from Beaker::CommandFactory

#assertions

Instance Method Summary collapse

Methods included from Beaker::CommandFactory

#execute, #fail_test

Instance Method Details

#gid_nextFixnum

Gives the next gid not used on the system

Returns:

  • (Fixnum)

    The next gid not used on the system



84
85
86
87
# File 'lib/beaker/host/mac/user.rb', line 84

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_nextFixnum

Gives the next uid not used on the system

Returns:

  • (Fixnum)

    The next uid not used on the system



76
77
78
79
# File 'lib/beaker/host/mac/user.rb', line 76

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

Parameters:

  • name (String)

    Name of the user

  • block (Proc)

    Additional actions or insertions



69
70
71
# File 'lib/beaker/host/mac/user.rb', line 69

def user_absent(name, &block)
  execute("if dscl . -list /Users/#{name}; then dscl . -delete /Users/#{name}; fi", {}, &block)
end

#user_get(name) {|Result| ... } ⇒ Result

Note:

Calls POSIX-compliant ‘$ id -P <user>` to get /etc/passwd-style

Gets the user information in /etc/passwd format

output

Parameters:

  • name (String)

    Name of the user

  • block (Proc)

    Additional actions or insertions

Yields:

  • (Result)

    User information in /etc/passwd format

Returns:

  • (Result)

    User information in /etc/passwd format

Raises:

  • (FailTest)

    Raises an Assertion failure if it can’t find the name queried for in the returned block



34
35
36
37
38
39
40
41
# File 'lib/beaker/host/mac/user.rb', line 34

def user_get(name)
  execute("id -P #{name}") do |result|
    fail_test "failed to get user #{name}" unless /^#{name}:/.match?(result.stdout)

    yield result if block_given?
    result
  end
end

#user_listArray<String>

Gets a list of user names on the system

Parameters:

  • block (Proc)

    Additional actions or insertions

Returns:

  • (Array<String>)

    The 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
  execute('dscacheutil -q user') do |result|
    users = []
    result.stdout.each_line do |line|
      users << line.split(': ')[1].strip if /^name:/.match?(line)
    end

    yield result if block_given?

    users
  end
end

#user_present(name) ⇒ Object

Makes sure the user is present, creating them if necessary

Parameters:

  • name (String)

    Name of the user

  • block (Proc)

    Additional actions or insertions



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/beaker/host/mac/user.rb', line 47

def user_present(name)
  user_exists = false
  execute("dscacheutil -q user -a name #{name}") do |result|
    user_exists = result.stdout.start_with?("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