module ForemanMaintain::Concerns::SystemHelpers

Public Class Methods

included(klass) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 13
def self.included(klass)
  klass.extend(self)
end

Public Instance Methods

check_max_version(name, maximal_version) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 42
def check_max_version(name, maximal_version)
  check_version(name) do |current_version|
    version(maximal_version) >= current_version
  end
end
check_min_version(name, minimal_version) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 36
def check_min_version(name, minimal_version)
  check_version(name) do |current_version|
    current_version >= version(minimal_version)
  end
end
command_present?(command_name) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 53
def command_present?(command_name)
  execute?("command -v #{command_name}")
end
directory_empty?(dir) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 166
def directory_empty?(dir)
  Dir.entries(dir).size <= 2
end
execute(command, options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 73
def execute(command, options = {})
  execute_runner(command, options).output
end
execute!(command, options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 64
def execute!(command, options = {})
  command_runner = execute_runner(command, options)
  if command_runner.success?
    command_runner.output
  else
    raise command_runner.execution_error
  end
end
execute?(command, options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 48
def execute?(command, options = {})
  execute(command, options)
  $CHILD_STATUS.success?
end
execute_runner(command, options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 57
def execute_runner(command, options = {})
  command_runner = Utils::CommandRunner.new(logger, command, options)
  execution.puts '' if command_runner.interactive? && respond_to?(:execution)
  command_runner.run
  command_runner
end
execute_with_status(command, options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 77
def execute_with_status(command, options = {})
  command_runner = execute_runner(command, options)
  [command_runner.exit_status, command_runner.output]
end
file_exists?(filename) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 82
def file_exists?(filename)
  File.exist?(filename)
end
file_nonzero?(filename) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 86
def file_nonzero?(filename)
  File.exist?(filename) && !File.zero?(filename)
end
find_dir_containing_file(directory, target) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 170
def find_dir_containing_file(directory, target)
  result = nil
  Find.find(directory) do |path|
    result = File.dirname(path) if File.basename(path) == target
  end
  result
end
find_package(name) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 90
def find_package(name)
  package_manager.find_installed_package(name)
end
foreman_plugin_name(plugin) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 194
def foreman_plugin_name(plugin)
  plugin = plugin.tr('_', '-') if debian_or_ubuntu?
  ruby_prefix + plugin
end
format_shell_args(options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 156
def format_shell_args(options = {})
  options.map { |shell_optn, val| " #{shell_optn} #{shellescape(val)}" }.join
end
hammer_package() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 214
def hammer_package
  hammer_prefix = if debian_or_ubuntu?
                    'hammer-cli'
                  else
                    'hammer_cli'
                  end
  ruby_prefix + hammer_prefix
end
hammer_plugin_name(plugin) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 209
def hammer_plugin_name(plugin)
  plugin = plugin.tr('_', '-') if debian_or_ubuntu?
  [hammer_package, plugin].join(debian_or_ubuntu? ? '-' : '_')
end
hostname() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 94
def hostname
  execute('hostname -f')
end
package_manager() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 178
def package_manager
  ForemanMaintain.package_manager
end
package_version(name) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 121
def package_version(name)
  ver = if el?
          '%{VERSION}'
        elsif debian_or_ubuntu?
          '${VERSION}'
        end
  pkg = package_manager.find_installed_package(name, ver)
  version(pkg) unless pkg.nil?
end
packages_action(action, packages, options = {}) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 102
def packages_action(action, packages, options = {})
  options.validate_options!(:assumeyes, :options, :download_only, :enabled_repos)
  case action
  when :install
    package_manager.install(packages, :assumeyes => options[:assumeyes])
  when :update
    package_manager.update(
      packages,
      :assumeyes => options[:assumeyes],
      :download_only => options[:download_only],
      :enabled_repos => options[:enabled_repos]
    )
  when :remove
    package_manager.remove(packages, :assumeyes => options[:assumeyes])
  else
    raise ArgumentError, "Unexpected action #{action} expected #{expected_actions.inspect}"
  end
end
parse_csv(data) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 131
def parse_csv(data)
  parsed_data = CSV.parse(data)
  header = parsed_data.first
  parsed_data[1..].map do |row|
    Hash[*header.zip(row).flatten(1)]
  end
end
parse_json(json_string) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 139
def parse_json(json_string)
  JSON.parse(json_string)
rescue StandardError
  nil
end
proxy_plugin_name(plugin) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 199
def proxy_plugin_name(plugin)
  if debian_or_ubuntu?
    plugin = plugin.tr('_', '-')
    proxy_plugin_prefix = 'smart-proxy-'
  else
    proxy_plugin_prefix = 'smart_proxy_'
  end
  ruby_prefix + proxy_plugin_prefix + plugin
end
repository_manager() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 182
def repository_manager
  ForemanMaintain.repository_manager
end
ruby_prefix() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 186
def ruby_prefix
  if debian_or_ubuntu?
    'ruby-'
  else
    'rubygem-'
  end
end
server?() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 98
def server?
  find_package('foreman')
end
shellescape(string) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 145
def shellescape(string)
  Shellwords.escape(string)
end
systemd_installed?() click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 32
def systemd_installed?
  File.exist?('/run/systemd/system/')
end
version(value) click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 149
def version(value)
  # packages versions, especially on Debian, sometimes include a + or a ~,
  # but Gem::Version can't handle that.
  value.gsub!(/[+~]/, '-')
  Version.new(value)
end

Private Instance Methods

check_version(name) { |current_version| ... } click to toggle source
# File lib/foreman_maintain/concerns/system_helpers.rb, line 225
def check_version(name)
  current_version = package_version(name)
  if current_version
    yield current_version
  end
end