Class: Chef::Provider::Package::YumTM
- Inherits:
-
Yum
- Object
- Chef::Provider
- Chef::Provider::Package
- Yum
- Chef::Provider::Package::YumTM
- Defined in:
- lib/chef/provider/package/yum_tm.rb
Instance Attribute Summary
Attributes inherited from Chef::Provider
#action, #after_resource, #current_resource, #logger, #new_resource, #run_context
Instance Method Summary collapse
- #candidate_version ⇒ Object
- #flushcache ⇒ Object
- #get_candidate_versions ⇒ Object
- #get_current_versions ⇒ Object
- #install_package(names, versions) ⇒ Object
- #load_current_resource ⇒ Object
-
#package_query(action, provides, arch: nil, version: nil, options: {}) ⇒ Object
Perform package query via shell commands only.
- #package_query_raw(provides, arch: nil, version: nil, options: {}) ⇒ Object
-
#python_helper ⇒ Object
Redirect any agent mode yum implementation calls to python helper to this class.
-
#remove_package(names, versions) ⇒ Object
remove_package just uses yum commands and is Target Mode compatible.
-
#version_equals?(v1, v2) ⇒ Boolean
Reuse base implementation, not the one from agent-mode yum_package.
- #yum_binary ⇒ Object
Methods inherited from Yum
#define_resource_requirements, #load_after_resource, #lock_package, #magic_version_array, #unlock_package
Methods included from Mixin::GetSourceFromPackage
Methods inherited from Chef::Provider::Package
#as_array, #check_resource_semantics!, #define_resource_requirements, #expand_options, #have_any_matching_version?, #initialize, #lock_package, #multipackage_api_adapter, #options, #package_locked, #prepare_for_installation, #preseed_package, #purge_package, #reconfig_package, #removing_package?, #target_version_already_installed?, #unlock_package, #upgrade_package, #version_compare, #version_requirement_satisfied?
Methods included from Mixin::SubclassDirective
Methods inherited from Chef::Provider
action, action_description, action_descriptions, #action_nothing, #check_resource_semantics!, #cleanup_after_converge, #compile_and_converge_action, #converge_by, #converge_if_changed, #cookbook_name, #define_resource_requirements, #description, #events, include_resource_dsl?, include_resource_dsl_module, #initialize, #introduced, #load_after_resource, #node, #process_resource_requirements, provides, provides?, #recipe_name, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, supports?, use, use_inline_resources, #validate_required_properties!, #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 DSL::Secret
#default_secret_config, #default_secret_service, #secret, #with_secret_config, #with_secret_service
Methods included from DSL::RenderHelpers
#render_json, #render_toml, #render_yaml
Methods included from DSL::ReaderHelpers
#parse_file, #parse_json, #parse_toml, #parse_yaml
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::ChefVault
#chef_vault, #chef_vault_item, #chef_vault_item_for_environment
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 DSL::Recipe
#exec, #have_resource_class_for?, #resource_class_for
Methods included from DSL::Definitions
add_definition, #evaluate_resource_definition, #has_resource_definition?
Methods included from DSL::Resources
add_resource_dsl, remove_resource_dsl
Methods included from DSL::Cheffish
Methods included from DSL::RebootPending
Methods included from DSL::IncludeRecipe
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
Methods included from DSL::Compliance
#include_input, #include_profile, #include_waiver
Instance Method Details
#candidate_version ⇒ Object
56 57 58 |
# File 'lib/chef/provider/package/yum_tm.rb', line 56 def candidate_version @candidate_version ||= get_candidate_versions end |
#flushcache ⇒ Object
72 73 74 |
# File 'lib/chef/provider/package/yum_tm.rb', line 72 def flushcache yum("clean", "all") end |
#get_candidate_versions ⇒ Object
60 61 62 63 64 65 |
# File 'lib/chef/provider/package/yum_tm.rb', line 60 def get_candidate_versions package_name_array.map do |package_name| stdout = package_query_raw(package_name) stdout.match(/^Version +: (.+)$/)[1] end end |
#get_current_versions ⇒ Object
49 50 51 52 53 54 |
# File 'lib/chef/provider/package/yum_tm.rb', line 49 def get_current_versions package_name_array.each.map do |pkg, i| cmd = shell_out("rpm -q --queryformat='%{VERSION}' #{pkg}") cmd.exitstatus == 1 ? nil : cmd.stdout end end |
#install_package(names, versions) ⇒ Object
35 36 37 38 39 40 41 42 |
# File 'lib/chef/provider/package/yum_tm.rb', line 35 def install_package(names, versions) if new_resource.source yum(, "-y", "install", new_resource.source) else yum(, "-y", "install", names) end flushcache end |
#load_current_resource ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/chef/provider/package/yum_tm.rb', line 27 def load_current_resource @current_resource = Chef::Resource::YumPackage.new(new_resource.name) current_resource.package_name(new_resource.package_name) current_resource.version(get_current_versions) current_resource end |
#package_query(action, provides, arch: nil, version: nil, options: {}) ⇒ Object
Perform package query via shell commands only
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/chef/provider/package/yum_tm.rb', line 84 def package_query(action, provides, arch: nil, version: nil, options: {}) if action == :whatinstalled cmdline = "rpm -q --queryformat='%{VERSION} %{ARCH}' #{provides}" cmd = shell_out(cmdline) return nil if cmd.exitstatus != 0 Chef::Provider::Package::Yum::Version.new( provides, cmd.stdout.split[0], cmd.stdout.split[1] ) else logger.info("Retrieving package information from repository server (please wait)...") stdout = package_query_raw(provides, arch, version, ) Chef::Provider::Package::Yum::Version.new( provides, stdout.match(/^Version +: (.+)$/)[1], stdout.match(/^Architecture +: (.+)$/)[1] ) end end |
#package_query_raw(provides, arch: nil, version: nil, options: {}) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/chef/provider/package/yum_tm.rb', line 109 def package_query_raw(provides, arch: nil, version: nil, options: {}) cmdline = "yum info #{provides}" cmdline += "-#{version} " unless version.nil? cmdline += " --forcearch=#{arch} " unless arch.nil? cmd = shell_out(cmdline) if cmd.exitstatus != 0 raise Chef::Exceptions::Package, "#{new_resource.package_name} caused a repository error: #{cmd.stderr}" end cmd.stdout end |
#python_helper ⇒ Object
Redirect any agent mode yum implementation calls to python helper to this class
68 69 70 |
# File 'lib/chef/provider/package/yum_tm.rb', line 68 def python_helper self end |
#remove_package(names, versions) ⇒ Object
remove_package just uses yum commands and is Target Mode compatible
45 46 47 |
# File 'lib/chef/provider/package/yum_tm.rb', line 45 def remove_package(names, versions) yum(, "-y", "remove", names) end |
#version_equals?(v1, v2) ⇒ Boolean
Reuse base implementation, not the one from agent-mode yum_package
77 78 79 80 81 |
# File 'lib/chef/provider/package/yum_tm.rb', line 77 def version_equals?(v1, v2) return false unless v1 && v2 v1 == v2 end |
#yum_binary ⇒ Object
122 123 124 125 126 127 128 |
# File 'lib/chef/provider/package/yum_tm.rb', line 122 def yum_binary @yum_binary ||= begin yum_binary = new_resource.yum_binary if new_resource.is_a?(Chef::Resource::YumPackage) yum_binary ||= ::TargetIO::File.exist?("/usr/bin/yum-deprecated") ? "yum-deprecated" : "yum" end end |