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



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.



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.



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.



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.



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



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.



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.



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