class ForemanMaintain::PackageManager::Yum
Constants
- PROTECTOR_CONFIG_FILE
- PROTECTOR_PLUGIN_FILE
- PROTECTOR_WHITELIST_FILE
Public Class Methods
parse_envra(envra)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 7 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/yum.rb, line 64 def check_update(packages: nil, with_status: false) yum_action('check-update', packages, :assumeyes => true, :valid_exit_statuses => [100], :with_status => with_status) end
clean_cache(assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 60 def clean_cache(assumeyes: false) yum_action('clean', 'all', :assumeyes => assumeyes) end
files_not_owned_by_package(directory)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 74 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)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 41 def find_installed_package(name) status, result = sys.execute_with_status(%(rpm -q '#{name}')) if status == 0 result end end
install(packages, assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 48 def install(packages, assumeyes: false) yum_action('install', packages, :assumeyes => assumeyes) end
install_version_locking(*)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 30 def install_version_locking(*) install_extras('foreman_protector/foreman-protector.py', PROTECTOR_PLUGIN_FILE) install_extras('foreman_protector/foreman-protector.conf', PROTECTOR_CONFIG_FILE) install_extras('foreman_protector/foreman-protector.whitelist', PROTECTOR_WHITELIST_FILE) end
installed?(packages)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 36 def installed?(packages) packages_list = [packages].flatten(1).map { |pkg| "'#{pkg}'" }.join(' ') sys.execute?(%(rpm -q #{packages_list})) end
list_installed_packages(queryfm = '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n')
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 79 def list_installed_packages(queryfm = '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n') # The queryfm should only include valid tag(s) as per `rpm --querytag` list. # If any special formatting is required with querytag then it should be provided with tag i.e, # querytag = "--%{VENDOR}" # The queryfm string must end with '\n' sys.execute!("rpm -qa --qf '#{queryfm}'").split("\n") end
lock_versions()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 13 def lock_versions enable_protector end
remove(packages, assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 52 def remove(packages, assumeyes: false) yum_action('remove', packages, :assumeyes => assumeyes) end
unlock_versions()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 17 def unlock_versions disable_protector end
update(packages = [], assumeyes: false)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 56 def update(packages = [], assumeyes: false) yum_action('update', packages, :assumeyes => assumeyes) end
update_available?(package)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 69 def update_available?(package) cmd_output = yum_action('check-update -q', package, :with_status => true, :assumeyes => false) cmd_output[0] == 100 end
version_locking_enabled?()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 25 def version_locking_enabled? File.exist?(PROTECTOR_PLUGIN_FILE) && File.exist?(PROTECTOR_CONFIG_FILE) && File.exist?(PROTECTOR_WHITELIST_FILE) end
versions_locked?()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 21 def versions_locked? !!(protector_config =~ /^\s*enabled\s*=\s*1/) end
Private Instance Methods
disable_protector()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 101 def disable_protector setup_protector(false) end
enable_protector()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 97 def enable_protector setup_protector(true) end
install_extras(src, dest, override: false)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 133 def install_extras(src, dest, override: false) extras_src = File.expand_path('../../../../extras', __FILE__) if override || (File.directory?(dest) && !File.exist?(File.join(dest, src))) || !File.exist?(dest) FileUtils.cp(File.join(extras_src, src), dest) end end
protector_config()
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 89 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/yum.rb, line 93 def protector_config_file PROTECTOR_CONFIG_FILE end
setup_protector(enabled)
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 105 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
yum_action(action, packages, with_status: false, assumeyes: false, valid_exit_statuses: [0])
click to toggle source
# File lib/foreman_maintain/package_manager/yum.rb, line 117 def yum_action(action, packages, with_status: false, assumeyes: false, valid_exit_statuses: [0]) yum_options = [] packages = [packages].flatten(1) yum_options << '-y' if assumeyes yum_options << '--disableplugin=foreman-protector' yum_options_s = yum_options.empty? ? '' : ' ' + yum_options.join(' ') packages_s = packages.empty? ? '' : ' ' + packages.join(' ') if with_status sys.execute_with_status("yum#{yum_options_s} #{action}#{packages_s}", :interactive => !assumeyes) else sys.execute!("yum#{yum_options_s} #{action}#{packages_s}", :interactive => !assumeyes, :valid_exit_statuses => valid_exit_statuses) end end