Class: Chef::Provider::Service::Redhat
- Inherits:
-
Init
- Object
- Chef::Provider
- Chef::Provider::Service
- Simple
- Init
- Chef::Provider::Service::Redhat
- Defined in:
- lib/chef/provider/service/redhat.rb
Constant Summary collapse
- CHKCONFIG_ON =
/\d:on/.freeze
- CHKCONFIG_MISSING =
/No such/.freeze
Instance Attribute Summary collapse
- #current_run_levels ⇒ Object private
- #service_missing ⇒ Object private
Attributes inherited from Init
Attributes inherited from Simple
Attributes inherited from Chef::Provider
#action, #after_resource, #current_resource, #logger, #new_resource, #run_context
Class Method Summary collapse
Instance Method Summary collapse
- #define_resource_requirements ⇒ Object
- #disable_service ⇒ Object
- #enable_service ⇒ Object
-
#initialize(new_resource, run_context) ⇒ Redhat
constructor
A new instance of Redhat.
- #levels ⇒ Object private
- #load_current_resource ⇒ Object
- #run_levels ⇒ Object private
Methods inherited from Init
#reload_service, #restart_service, #start_service, #stop_service
Methods inherited from Simple
#reload_service, #restart_service, #shared_resource_requirements, #start_service, #stop_service
Methods inherited from Chef::Provider::Service
#enableable?, #load_new_resource_state, #mask_service, #reload_service, #restart_service, #shared_resource_requirements, #start_service, #stop_service, #supports, #unmask_service, #user_services_requirements
Methods included from Chef::Platform::ServiceHelpers
#config_for_service, #service_resource_providers
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, #description, #events, include_resource_dsl?, include_resource_dsl_module, #introduced, #load_after_resource, #node, #process_resource_requirements, provides, provides?, #recipe_name, #requirements, #resource_collection, #resource_updated?, #run_action, #set_updated_status, 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
Constructor Details
#initialize(new_resource, run_context) ⇒ Redhat
Returns a new instance of Redhat.
42 43 44 45 46 47 |
# File 'lib/chef/provider/service/redhat.rb', line 42 def initialize(new_resource, run_context) super @init_command = "/sbin/service #{new_resource.service_name}" @service_missing = false @current_run_levels = [] end |
Instance Attribute Details
#current_run_levels ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
29 30 31 |
# File 'lib/chef/provider/service/redhat.rb', line 29 def current_run_levels @current_run_levels end |
#service_missing ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
27 28 29 |
# File 'lib/chef/provider/service/redhat.rb', line 27 def service_missing @service_missing end |
Class Method Details
.supports?(resource, action) ⇒ Boolean
38 39 40 |
# File 'lib/chef/provider/service/redhat.rb', line 38 def self.supports?(resource, action) service_script_exist?(:initd, resource.service_name) end |
Instance Method Details
#define_resource_requirements ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/chef/provider/service/redhat.rb', line 54 def define_resource_requirements shared_resource_requirements requirements.assert(:all_actions) do |a| chkconfig_file = "/sbin/chkconfig" a.assertion { ::File.exist? chkconfig_file } a. Chef::Exceptions::Service, "#{chkconfig_file} does not exist!" end requirements.assert(:enable) do |a| a.assertion { !@service_missing } a. Chef::Exceptions::Service, "#{new_resource}: Service is not known to chkconfig." a.whyrun "Assuming service would be enabled. The init script is not presently installed." end requirements.assert(:start, :reload, :restart) do |a| a.assertion do new_resource.init_command || custom_command_for_action?(action) || !@service_missing end a. Chef::Exceptions::Service, "#{new_resource}: No custom command for #{action} specified and unable to locate the init.d script!" a.whyrun "Assuming service would be enabled. The init script is not presently installed." end end |
#disable_service ⇒ Object
120 121 122 |
# File 'lib/chef/provider/service/redhat.rb', line 120 def disable_service shell_out! "/sbin/chkconfig #{levels}#{new_resource.service_name} off" end |
#enable_service ⇒ Object
112 113 114 115 116 117 118 |
# File 'lib/chef/provider/service/redhat.rb', line 112 def enable_service unless run_levels.nil? || run_levels.empty? disable_levels = current_run_levels - run_levels shell_out! "/sbin/chkconfig --level #{disable_levels.join("")} #{new_resource.service_name} off" unless disable_levels.empty? end shell_out! "/sbin/chkconfig #{levels}#{new_resource.service_name} on" end |
#levels ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
108 109 110 |
# File 'lib/chef/provider/service/redhat.rb', line 108 def levels (run_levels.nil? || run_levels.empty?) ? "" : "--level #{run_levels.join("")} " end |
#load_current_resource ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/chef/provider/service/redhat.rb', line 78 def load_current_resource supports[:status] = true if supports[:status].nil? super if ::File.exist?("/sbin/chkconfig") chkconfig = shell_out!("/sbin/chkconfig --list #{current_resource.service_name}", returns: [0, 1]) unless run_levels.nil? || run_levels.empty? all_levels_match = true chkconfig.stdout.split(/\s+/)[1..].each do |level| index = level.split(":").first status = level.split(":").last if CHKCONFIG_ON.match?(level) @current_run_levels << index.to_i all_levels_match = false unless run_levels.include?(index.to_i) else all_levels_match = false if run_levels.include?(index.to_i) end end current_resource.enabled(all_levels_match) else current_resource.enabled(!!(chkconfig.stdout =~ CHKCONFIG_ON)) end @service_missing = !!(chkconfig.stderr =~ CHKCONFIG_MISSING) end current_resource end |
#run_levels ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
50 51 52 |
# File 'lib/chef/provider/service/redhat.rb', line 50 def run_levels new_resource.run_levels end |