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, expected_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

  • expected_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
92
93
94
95
96
# File 'lib/chef/sugar/shell.rb', line 85

def installed_at_version?(cmd, expected_version, flag = '--version')
  return false if !installed?(cmd)

  version = version_for(cmd, flag)
  return false if version.nil?

  if expected_version.is_a?(Regexp)
    !version.match(expected_version).nil?
  else
    version.include?(expected_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)



118
119
120
121
122
123
# File 'lib/chef/sugar/shell.rb', line 118

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