class Mixlib::Install::Util

Public Class Methods

map_windows_version(version) click to toggle source
# File lib/mixlib/install/util.rb, line 136
def map_windows_version(version)
  # This logic does not try to compare and determine proper versions based on conditions or ranges.
  # These are here to improve UX for desktop versions.
  case version
  when /^10/
    "2016"
  when /^6.3/, /^8.1/, /2016nano/
    "2012r2"
  when /^6.2/, /^8/
    "2012"
  when /^6.1/, /^7/
    "2008r2"
  when /^6/
    "2008"
  else
    version
  end
end
normalize_architecture(architecture) click to toggle source

Normalizes architecture information

@param [String] architecture

@return String [architecture]

# File lib/mixlib/install/util.rb, line 161
def normalize_architecture(architecture)
  case architecture
  when "amd64"
    "x86_64"
  when "arm64"
    "aarch64"
  when "i86pc", "i686"
    "i386"
  when "sun4u", "sun4v"
    "sparc"
  else
    architecture
  end
end
pretty_version(version) click to toggle source

@return [String] a pretty/helpful representation of a Chef Omnibus

package version

@api private

# File lib/mixlib/install/util.rb, line 26
def pretty_version(version)
  case version
  when "true" then "install only if missing"
  when "latest" then "always install latest version"
  else version
  end
end
shell_code_from_file(vars, file, powershell, opts = {}) click to toggle source

Builds a complete command given a variables String preamble and a file containing shell code.

@param vars [String] shell variables, as a String @param file [String] file basename (without extension) containing

shell code

@param powershell [Boolean] for powershell @return [String] command @api private

# File lib/mixlib/install/util.rb, line 43
def shell_code_from_file(vars, file, powershell, opts = {})
  src_file = file + (powershell ? ".ps1" : ".sh")

  Util.wrap_shell([vars, "", IO.read(src_file)].join("\n"),
                  powershell, opts)
end
shell_env_var(name, value, powershell = false) click to toggle source

Builds a shell environment variable assignment string for the required shell type.

@param name [String] variable name @param value [String] variable value @return [String] shell variable assignment @api private

# File lib/mixlib/install/util.rb, line 86
def shell_env_var(name, value, powershell = false)
  if powershell
    shell_var("env:#{name}", value, true)
  else
    "#{shell_var(name, value)}; export #{name}"
  end
end
shell_var(name, value, powershell = false) click to toggle source

Builds a shell variable assignment string for the required shell type.

@param name [String] variable name @param value [String] variable value @param powershell [Boolean] for powershell @return [String] shell variable assignment

# File lib/mixlib/install/util.rb, line 100
def shell_var(name, value, powershell = false)
  if powershell
    %{$#{name} = "#{value}"}
  else
    %{#{name}="#{value}"}
  end
end
user_agent_string(headers) click to toggle source

Build the user-agent string

@param name [Array] headers @return [String] generated user-agent string

# File lib/mixlib/install/util.rb, line 128
def user_agent_string(headers)
  require_relative "version"
  user_agents = %W{mixlib-install/#{Mixlib::Install::VERSION}}
  user_agents << headers
  # Ensure that if the default user agent is already set it doesn't get duplicated
  user_agents.flatten.compact.uniq.join(" ")
end
wrap_command(cmd) click to toggle source

Generates a command (or series of commands) wrapped so that it can be invoked on a remote instance or locally.

This method uses the Bourne shell (/bin/sh) to maximize the chance of cross platform portability on Unix-like systems.

@param [String] the command @return [String] a wrapped command string

# File lib/mixlib/install/util.rb, line 116
def wrap_command(cmd)
  cmd = "false" if cmd.nil?
  cmd = "true" if cmd.to_s.empty?
  cmd = cmd.sub(/\n\Z/, "") if cmd =~ /\n\Z/

  "sh -c '\n#{cmd}\n'"
end
wrap_shell(code, powershell = false, opts = {}) click to toggle source

Wraps a body of shell code with common context appropriate for the type of shell.

@param code [String] the shell code to be wrapped @param opts [Hash] options @param opts [String] http proxy url @param opts [String] https proxy url @return [String] wrapped shell code @api private

# File lib/mixlib/install/util.rb, line 59
def wrap_shell(code, powershell = false, opts = {})
  env = []
  if opts[:http_proxy]
    env << Util.shell_env_var("http_proxy", opts[:http_proxy], powershell)
    env << Util.shell_env_var("HTTP_PROXY", opts[:http_proxy], powershell)
  end
  if opts[:https_proxy]
    env << Util.shell_env_var("https_proxy", opts[:https_proxy], powershell)
    env << Util.shell_env_var("HTTPS_PROXY", opts[:https_proxy], powershell)
  end
  unless env.empty?
    code = env.join("\n").concat("\n").concat(code)
  end
  if powershell
    "\n" + code
  else
    Util.wrap_command(code)
  end
end