module Chef::Mixin::HomebrewUser

Public Instance Methods

find_homebrew_uid(provided_user = nil) click to toggle source

This tries to find the user to execute brew as. If a user is provided, that overrides the brew executable user. It is an error condition if the brew executable owner is root or we cannot find the brew executable. @param [String, Integer] provided_user @return [Integer] UID of the user

# File lib/chef/mixin/homebrew_user.rb, line 39
def find_homebrew_uid(provided_user = nil)
  # They could provide us a user name or a UID
  if provided_user
    return provided_user if provided_user.is_a? Integer
    return Etc.getpwnam(provided_user).uid
  end

  @homebrew_owner_uid ||= calculate_owner
  @homebrew_owner_uid
end
find_homebrew_username(provided_user = nil) click to toggle source

Use find_homebrew_uid to return the UID and then lookup the name from that UID because sometimes you want the name not the UID @param [String, Integer] provided_user @return [String] username

# File lib/chef/mixin/homebrew_user.rb, line 54
def find_homebrew_username(provided_user = nil)
  @homebrew_owner_username ||= Etc.getpwuid(find_homebrew_uid(provided_user)).name
  @homebrew_owner_username
end

Private Instance Methods

calculate_owner() click to toggle source
# File lib/chef/mixin/homebrew_user.rb, line 61
def calculate_owner
  default_brew_path = "/usr/local/bin/brew"
  if ::File.exist?(default_brew_path)
    # By default, this follows symlinks which is what we want
    owner = ::File.stat(default_brew_path).uid
  elsif (brew_path = shell_out("which brew").stdout.strip) && !brew_path.empty?
    owner = ::File.stat(brew_path).uid
  else
    raise Chef::Exceptions::CannotDetermineHomebrewOwner,
          'Could not find the "brew" executable in /usr/local/bin or anywhere on the path.'
  end

  Chef::Log.debug "Found Homebrew owner #{Etc.getpwuid(owner).name}; executing `brew` commands as them"
  owner
end