class ForemanMaintain::PackageManager::Dnf
Constants
- PROTECTOR_CONFIG_FILE
- PROTECTOR_WHITELIST_FILE
Public Class Methods
parse_envra(envra)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 6 def self.parse_envra(envra) # envra format: 0:foreman-1.20.1.10-1.el7sat.noarch parsed = envra.match(/\d*:?(?<name>.*)-[^-]+-[^-]+\.[^.]+/) parsed ? Hash[parsed.names.map(&:to_sym).zip(parsed.captures)].merge(:envra => envra) : nil end
Public Instance Methods
check_update(packages: nil, with_status: false)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 72 def check_update(packages: nil, with_status: false) dnf_action( 'check-update', packages, assumeyes: true, valid_exit_statuses: [0, 100], with_status: with_status ) end
clean_cache(assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 100 def clean_cache(assumeyes: false) dnf_action('clean', 'metadata', :assumeyes => assumeyes) end
enable_module(name)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 113 def enable_module(name) dnf_action('module enable', name, assumeyes: true) end
files_not_owned_by_package(directory)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 87 def files_not_owned_by_package(directory) find_cmd = "find #{directory} -exec /bin/sh -c 'rpm -qf {} &> /dev/null || echo {}' \\;" sys.execute(find_cmd).split("\n") end
find_installed_package(name, queryformat = '')
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 39 def find_installed_package(name, queryformat = '') rpm_cmd = "rpm -q '#{name}'" unless queryformat.empty? rpm_cmd += " --qf '#{queryformat}'" end status, result = sys.execute_with_status(rpm_cmd, interactive: false) if status == 0 result end end
info(name)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 126 def info(name) dnf_action('module info', name, with_status: true, assumeyes: true) end
install(packages, assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 50 def install(packages, assumeyes: false) dnf_action('install', packages, assumeyes: assumeyes) end
installed?(packages)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 34 def installed?(packages) packages_list = [packages].flatten(1).map { |pkg| "'#{pkg}'" }.join(' ') sys.execute?(%(rpm -q #{packages_list})) end
list_installed_packages(queryformat = '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n')
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 92 def list_installed_packages(queryformat = '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n') # The queryformat should only include valid tag(s) as per `rpm --querytags` list. # If any special formatting is required with querytag then it should be provided with tag i.e, # "--%{VENDOR}" # The queryformat string must end with '\n' sys.execute!("rpm -qa --qf '#{queryformat}'").split("\n") end
lock_versions()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 12 def lock_versions enable_protector end
module_enabled?(name)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 108 def module_enabled?(name) _status, result = info(name) result.match?(/Stream.+\[e\].+/) end
module_exists?(name)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 121 def module_exists?(name) status, _result = info(name) status == 0 end
modules_supported?()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 104 def modules_supported? true end
protector_whitelist_file_nonzero?()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 25 def protector_whitelist_file_nonzero? File.exist?(PROTECTOR_WHITELIST_FILE) && !File.zero?(PROTECTOR_WHITELIST_FILE) end
reboot_required?()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 130 def reboot_required? sys.execute_with_status('dnf needs-restarting --reboothint', :interactive => false) end
reinstall(packages, assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 54 def reinstall(packages, assumeyes: false) dnf_action('reinstall', packages, assumeyes: assumeyes) end
remove(packages, assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 58 def remove(packages, assumeyes: false) dnf_action('remove', packages, assumeyes: assumeyes) end
switch_module(name)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 117 def switch_module(name) dnf_action('module switch-to', name, assumeyes: true) end
unlock_versions()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 16 def unlock_versions disable_protector end
update(packages = [], assumeyes: false, download_only: false, enabled_repos: [])
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 62 def update(packages = [], assumeyes: false, download_only: false, enabled_repos: []) dnf_action( 'update', packages, assumeyes: assumeyes, download_only: download_only, enabled_repos: enabled_repos ) end
update_available?(package)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 82 def update_available?(package) cmd_output = dnf_action('check-update -q', package, with_status: true, assumeyes: false) cmd_output[0] == 100 end
version_locking_supported?()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 30 def version_locking_supported? true end
versions_locked?()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 20 def versions_locked? !!(protector_config =~ /^\s*enabled\s*=\s*1/) && protector_whitelist_file_nonzero? end
Private Instance Methods
disable_protector()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 180 def disable_protector setup_protector(false) end
dnf_action(action, packages, with_status: false, assumeyes: false, dnf_options: [], valid_exit_statuses: [0], download_only: false, enabled_repos: [])
click to toggle source
rubocop:disable Layout/LineLength, Metrics/ParameterLists, Metrics/MethodLength
# File lib/foreman_maintain/package_manager/dnf.rb, line 137 def dnf_action(action, packages, with_status: false, assumeyes: false, dnf_options: [], valid_exit_statuses: [0], download_only: false, enabled_repos: []) packages = [packages].flatten(1) dnf_options << '-y' if assumeyes dnf_options << '--downloadonly' if download_only dnf_options << '--disableplugin=foreman-protector' enabled_repos.map do |id| dnf_options << "--enablerepo=#{id}" end command = ['dnf', dnf_options.join(' '), action] command.push(packages.join(' ')) unless packages.empty? command = command.join(' ') if with_status sys.execute_with_status( command, :interactive => !assumeyes ) else sys.execute!( command, :interactive => !assumeyes, :valid_exit_statuses => valid_exit_statuses ) end end
enable_protector()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 176 def enable_protector setup_protector(true) end
protector_config()
click to toggle source
rubocop:enable Layout/LineLength, Metrics/ParameterLists, Metrics/MethodLength
# File lib/foreman_maintain/package_manager/dnf.rb, line 168 def protector_config File.exist?(protector_config_file) ? File.read(protector_config_file) : '' end
protector_config_file()
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 172 def protector_config_file PROTECTOR_CONFIG_FILE end
setup_protector(enabled)
click to toggle source
# File lib/foreman_maintain/package_manager/dnf.rb, line 184 def setup_protector(enabled) config = protector_config config += "\n" unless config[-1] == "\n" enabled_re = /^\s*enabled\s*=.*$/ if enabled_re.match(config) config = config.gsub(enabled_re, "enabled = #{enabled ? '1' : '0'}") else config += "enabled = #{enabled ? '1' : '0'}\n" end File.open(protector_config_file, 'w') { |file| file.puts config } end