module Chef::Sugar::Shell
Public Instance Methods
dev_null(node)
click to toggle source
The platform-specific output path to /dev/null
.
@return [String]
# File lib/chef/sugar/shell.rb, line 53 def dev_null(node) if defined?(ChefUtils) ChefUtils.windows?(node) ? 'NUL' : '/dev/null' else Chef::Sugar::PlatformFamily.windows?(node) ? 'NUL' : '/dev/null' end end
installed?(cmd)
click to toggle source
Boolean method to check if a command line utility is installed.
@param [String] cmd
the command to find
@return [Boolean]
true if the command is found in the path, false otherwise
# File lib/chef/sugar/shell.rb, line 70 def installed?(cmd) !sugar_which(cmd).nil? end
installed_at_version?(cmd, expected_version, flag = '--version')
click to toggle source
Checks if the given binary is installed and exists at the given version. Also see {version_for}.
@param [String] cmd
the command to check
@param [String] expected_version
the version to check
@param [String] flag
the flag to use to check the version of the binary
@return [Boolean]
true if the command exists and is at the given version, false otherwise
# File lib/chef/sugar/shell.rb, line 89 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
sugar_which(cmd)
click to toggle source
Finds a command in $PATH
@param [String] cmd
the command to find
@return [String, nil]
# File lib/chef/sugar/shell.rb, line 33 def sugar_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
version_for(cmd, flag = '--version')
click to toggle source
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 sugar_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?
@param [String] cmd
the command to find the version for
@param [String] flag
the flag to use to get the version
@return [String]
the entire output of the version command (stderr and stdout)
# File lib/chef/sugar/shell.rb, line 122 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