Class: Chef::Provider::Package::Dnf
- Inherits:
-
Chef::Provider::Package
- Object
- Chef::Provider
- Chef::Provider::Package
- Chef::Provider::Package::Dnf
- Extended by:
- Mixin::ShellOut, Mixin::Which
- Includes:
- Mixin::GetSourceFromPackage
- Defined in:
- lib/chef/provider/package/dnf.rb,
lib/chef/provider/package/dnf/version.rb,
lib/chef/provider/package/dnf/python_helper.rb
Defined Under Namespace
Classes: PythonHelper, Version
Instance Attribute Summary
Attributes inherited from Chef::Provider
#action, #current_resource, #logger, #new_resource, #recipe_name, #run_context
Instance Method Summary collapse
- #candidate_version ⇒ Object
- #define_resource_requirements ⇒ Object
- #get_current_versions ⇒ Object
- #install_package(names, versions) ⇒ Object (also: #upgrade_package)
- #load_current_resource ⇒ Object
-
#python_helper ⇒ Object
Most of the magic in this class happens in the python helper script.
- #remove_package(names, versions) ⇒ Object (also: #purge_package)
Methods included from Mixin::ShellOut
apply_default_env, maybe_add_timeout, shell_out, shell_out!
Methods included from Mixin::GetSourceFromPackage
Methods inherited from Chef::Provider::Package
#action_lock, #action_unlock, #as_array, #check_resource_semantics!, #expand_options, #have_any_matching_version?, #initialize, #lock_package, #multipackage_api_adapter, #options, #package_locked, #prepare_for_installation, #preseed_package, #reconfig_package, #removing_package?, #target_version_already_installed?, #unlock_package, #version_equals?, #version_requirement_satisfied?
Methods included from Mixin::SubclassDirective
Methods inherited from Chef::Provider
action, #action_nothing, #check_resource_semantics!, #cleanup_after_converge, #compile_and_converge_action, #converge_by, #converge_if_changed, #cookbook_name, #description, #events, include_resource_dsl?, include_resource_dsl_module, #initialize, #introduced, #node, #process_resource_requirements, provides, provides?, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use_inline_resources, #whyrun_mode?, #whyrun_supported?
Methods included from Mixin::Provides
#provided_as, #provides, #provides?
Methods included from Mixin::DescendantsTracker
#descendants, descendants, direct_descendants, #direct_descendants, find_descendants_by_name, #find_descendants_by_name, #inherited, store_inherited
Methods included from Mixin::LazyModuleInclude
#descendants, #include, #included
Methods included from Mixin::PowershellOut
#powershell_out, #powershell_out!
Methods included from Mixin::WindowsArchitectureHelper
#assert_valid_windows_architecture!, #disable_wow64_file_redirection, #forced_32bit_override_required?, #is_i386_process_on_x86_64_windows?, #node_supports_windows_architecture?, #node_windows_architecture, #restore_wow64_file_redirection, #valid_windows_architecture?, #with_os_architecture, #wow64_architecture_override_required?, #wow64_directory
Methods included from Mixin::PowershellExec
Methods included from DSL::Powershell
Methods included from DSL::RegistryHelper
#registry_data_exists?, #registry_get_subkeys, #registry_get_values, #registry_has_subkeys?, #registry_key_exists?, #registry_value_exists?
Methods included from DSL::DataQuery
#data_bag, #data_bag_item, #search, #tagged?
Methods included from EncryptedDataBagItem::CheckEncrypted
Methods included from DSL::PlatformIntrospection
#older_than_win_2012_or_8?, #platform?, #platform_family?, #value_for_platform, #value_for_platform_family
Methods included from Mixin::NotifyingBlock
#notifying_block, #subcontext_block
Methods included from DSL::DeclareResource
#build_resource, #declare_resource, #delete_resource, #delete_resource!, #edit_resource, #edit_resource!, #find_resource, #find_resource!, #resources, #with_run_context
Instance Method Details
#candidate_version ⇒ Object
84 85 86 87 88 |
# File 'lib/chef/provider/package/dnf.rb', line 84 def candidate_version package_name_array.each_with_index.map do |pkg, i| available_version(i).version_with_arch end end |
#define_resource_requirements ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/chef/provider/package/dnf.rb', line 74 def define_resource_requirements requirements.assert(:install, :upgrade, :remove, :purge) do |a| a.assertion { !new_resource.source || ::File.exist?(new_resource.source) } a. Chef::Exceptions::Package, "Package #{new_resource.package_name} not found: #{new_resource.source}" a.whyrun "assuming #{new_resource.source} would have previously been created" end super end |
#get_current_versions ⇒ Object
90 91 92 93 94 |
# File 'lib/chef/provider/package/dnf.rb', line 90 def get_current_versions package_name_array.each_with_index.map do |pkg, i| installed_version(i).version_with_arch end end |
#install_package(names, versions) ⇒ Object Also known as: upgrade_package
96 97 98 99 100 101 102 103 104 |
# File 'lib/chef/provider/package/dnf.rb', line 96 def install_package(names, versions) if new_resource.source dnf(, "-y", "install", new_resource.source) else resolved_names = names.each_with_index.map { |name, i| available_version(i).to_s unless name.nil? } dnf(, "-y", "install", resolved_names) end flushcache end |
#load_current_resource ⇒ Object
64 65 66 67 68 69 70 71 72 |
# File 'lib/chef/provider/package/dnf.rb', line 64 def load_current_resource flushcache if new_resource.flush_cache[:before] @current_resource = Chef::Resource::DnfPackage.new(new_resource.name) current_resource.package_name(new_resource.package_name) current_resource.version(get_current_versions) current_resource end |
#python_helper ⇒ Object
Most of the magic in this class happens in the python helper script. The ruby side of this provider knows only enough to translate Chef-style new_resource name+package+version into a request to the python side. The python side is then responsible for knowing everything about RPMs and what is installed and what is available. The ruby side of this class should remain a lightweight translation layer to translate Chef requests into RPC requests to python. This class knows nothing about how to compare RPM versions, and does not maintain any cached state of installed/available versions and should be kept that way.
60 61 62 |
# File 'lib/chef/provider/package/dnf.rb', line 60 def python_helper @python_helper ||= PythonHelper.instance end |
#remove_package(names, versions) ⇒ Object Also known as: purge_package
109 110 111 112 113 |
# File 'lib/chef/provider/package/dnf.rb', line 109 def remove_package(names, versions) resolved_names = names.each_with_index.map { |name, i| installed_version(i).to_s unless name.nil? } dnf(, "-y", "remove", resolved_names) flushcache end |