Module: Chef::Sugar::Shell

Extended by:
Shell
Included in:
Shell
Defined in:
lib/chef/sugar/shell.rb

Instance Method Summary collapse

Instance Method Details

#dev_null(node) ⇒ String

The platform-specific output path to /dev/null.

Returns:



53
54
55
# File 'lib/chef/sugar/shell.rb', line 53

def dev_null(node)
  Chef::Sugar::PlatformFamily.windows?(node) ? 'NUL' : '/dev/null'
end

#installed?(cmd) ⇒ Boolean

Boolean method to check if a command line utility is installed.

Parameters:

  • cmd (String)

    the command to find

Returns:

  • (Boolean)

    true if the command is found in the path, false otherwise



66
67
68
# File 'lib/chef/sugar/shell.rb', line 66

def installed?(cmd)
  !which(cmd).nil?
end

#installed_at_version?(cmd, version, flag = '--version') ⇒ Boolean

Checks if the given binary is installed and exists at the given version. Also see #version_for.

Parameters:

  • cmd (String)

    the command to check

  • version (String)

    the version to check

  • flag (String) (defaults to: '--version')

    the flag to use to check the version of the binary

Returns:

  • (Boolean)

    true if the command exists and is at the given version, false otherwise



85
86
87
88
89
90
91
# File 'lib/chef/sugar/shell.rb', line 85

def installed_at_version?(cmd, version, flag = '--version')
  which(cmd) && if version.is_a?(Regexp)
                  version_for(cmd, flag) =~ version
                else
                  version_for(cmd, flag).include?(version)
                end
end

#version_for(cmd, flag = '--version') ⇒ String

The version for a given command. This method does NOT check if the command exists! It is assumed the command existence has been checked with which or similar. To simply check if an installed version is acceptable, please see installed_at_version.

Assumptions:

1. The command exists.
2. The command outputs version information to +$stdout+ or +$stderr+.
   Did you know that java outputs its version to $stderr?

Parameters:

  • cmd (String)

    the command to find the version for

  • flag (String) (defaults to: '--version')

    the flag to use to get the version

Returns:

  • (String)

    the entire output of the version command (stderr and stdout)



113
114
115
116
117
118
# File 'lib/chef/sugar/shell.rb', line 113

def version_for(cmd, flag = '--version')
  cmd = Mixlib::ShellOut.new("#{cmd} #{flag}")
  cmd.run_command
  cmd.error!
  [cmd.stdout.strip, cmd.stderr.strip].join("\n")
end

#which(cmd) ⇒ String?

Finds a command in $PATH

Parameters:

  • cmd (String)

    the command to find

Returns:



33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/chef/sugar/shell.rb', line 33

def which(cmd)
  if Pathname.new(cmd).absolute?
    File.executable?(cmd) ? cmd : nil
  else
    paths = ENV['PATH'].split(::File::PATH_SEPARATOR) + %w(/bin /usr/bin /sbin /usr/sbin)

    paths.each do |path|
      possible = File.join(path, cmd)
      return possible if File.executable?(possible)
    end

    nil
  end
end