Class: Mixlib::Install::Util

Inherits:
Object
  • Object
show all
Defined in:
lib/mixlib/install/util.rb

Class Method Summary collapse

Class Method Details

.map_windows_version(version) ⇒ Object



136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# 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) ⇒ Object

Normalizes architecture information

Parameters:

  • architecture (String)


161
162
163
164
165
166
167
168
169
170
171
172
173
174
# 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) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a pretty/helpful representation of a Chef Omnibus package version.

Returns:

  • (String)

    a pretty/helpful representation of a Chef Omnibus package version



26
27
28
29
30
31
32
# 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 = {}) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • vars (String)

    shell variables, as a String

  • file (String)

    file basename (without extension) containing shell code

  • powershell (Boolean)

    for powershell

Returns:

  • (String)

    command



43
44
45
46
47
48
# 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) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • name (String)

    variable name

  • value (String)

    variable value

Returns:

  • (String)

    shell variable assignment



86
87
88
89
90
91
92
# 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) ⇒ String

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

Parameters:

  • name (String)

    variable name

  • value (String)

    variable value

  • powershell (Boolean) (defaults to: false)

    for powershell

Returns:

  • (String)

    shell variable assignment



100
101
102
103
104
105
106
# 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) ⇒ String

Build the user-agent string

Parameters:

  • name (Array)

    headers

Returns:

  • (String)

    generated user-agent string



128
129
130
131
132
133
134
# 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) ⇒ String

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.

Parameters:

  • the (String)

    command

Returns:

  • (String)

    a wrapped command string



116
117
118
119
120
121
122
# 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 = {}) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

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

Parameters:

  • code (String)

    the shell code to be wrapped

  • opts (Hash) (defaults to: {})

    options

  • opts (:http_proxy) (defaults to: {})
    String

    http proxy url

  • opts (:https_proxy) (defaults to: {})
    String

    https proxy url

Returns:

  • (String)

    wrapped shell code



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 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