This replaces the deprecated redis cookbook. Compiles the latest version of Redis, currently 7.0.11 Refs #488
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
#
 | 
						|
# Cookbook:: selinux
 | 
						|
# Resource:: state
 | 
						|
#
 | 
						|
# Copyright:: 2016-2023, Chef Software, Inc.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
unified_mode true
 | 
						|
 | 
						|
include ::SELinux::Cookbook::StateHelpers
 | 
						|
 | 
						|
default_action :nothing
 | 
						|
 | 
						|
property :config_file, String,
 | 
						|
          default: '/etc/selinux/config'
 | 
						|
 | 
						|
property :persistent, [true, false],
 | 
						|
          default: true,
 | 
						|
          description: 'Persist status update to the selinux configuration file'
 | 
						|
 | 
						|
property :policy, String,
 | 
						|
          default: lazy { default_policy_platform },
 | 
						|
          equal_to: %w(default minimum mls src strict targeted),
 | 
						|
          description: 'SELinux policy type'
 | 
						|
 | 
						|
property :automatic_reboot, [true, false, Symbol],
 | 
						|
          default: false,
 | 
						|
          description: 'Perform an automatic node reboot if required for state change'
 | 
						|
 | 
						|
deprecated_property_alias 'temporary', 'persistent', 'The temporary property was renamed persistent in the 4.0 release of this cookbook. Please update your cookbooks to use the new property name.'
 | 
						|
 | 
						|
action_class do
 | 
						|
  include ::SELinux::Cookbook::StateHelpers
 | 
						|
 | 
						|
  def render_selinux_template(action)
 | 
						|
    Chef::Log.warn(
 | 
						|
      'It is advised to set the configuration first to permissive to relabel the filesystem prior to enforcing.'
 | 
						|
    ) if selinux_disabled? && action == :enforcing
 | 
						|
 | 
						|
    unless new_resource.automatic_reboot
 | 
						|
      Chef::Log.warn('Changes from disabled require a reboot.') if selinux_disabled? && %i(enforcing permissive).include?(action)
 | 
						|
      Chef::Log.warn('Disabling selinux requires a reboot.') if (selinux_enforcing? || selinux_permissive?) && action == :disabled
 | 
						|
    end
 | 
						|
 | 
						|
    template "#{action} selinux config" do
 | 
						|
      path new_resource.config_file
 | 
						|
      source 'selinux.erb'
 | 
						|
      cookbook 'selinux'
 | 
						|
      variables(
 | 
						|
        selinux: action.to_s,
 | 
						|
        selinuxtype: new_resource.policy
 | 
						|
      )
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def node_selinux_restart
 | 
						|
    unless new_resource.automatic_reboot
 | 
						|
      Chef::Log.warn("SELinux state change to #{action} requires a manual reboot as SELinux is currently #{selinux_state} and automatic reboots are disabled.")
 | 
						|
      return
 | 
						|
    end
 | 
						|
 | 
						|
    outer_action = action
 | 
						|
    reboot 'selinux_state_change' do
 | 
						|
      delay_mins 1
 | 
						|
      reason "SELinux state change to #{outer_action} from #{selinux_state}"
 | 
						|
 | 
						|
      action new_resource.automatic_reboot.is_a?(Symbol) ? new_resource.automatic_reboot : :reboot_now
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
action :enforcing do
 | 
						|
  execute 'selinux-setenforce-enforcing' do
 | 
						|
    command '/usr/sbin/setenforce 1'
 | 
						|
  end unless selinux_disabled? || selinux_enforcing?
 | 
						|
 | 
						|
  execute 'debian-selinux-activate' do
 | 
						|
    command selinux_activate_cmd
 | 
						|
  end if selinux_activate_required?
 | 
						|
 | 
						|
  render_selinux_template(action) if new_resource.persistent
 | 
						|
  node_selinux_restart if state_change_reboot_required?
 | 
						|
end
 | 
						|
 | 
						|
action :permissive do
 | 
						|
  execute 'selinux-setenforce-permissive' do
 | 
						|
    command '/usr/sbin/setenforce 0'
 | 
						|
  end unless selinux_disabled? || selinux_permissive?
 | 
						|
 | 
						|
  execute 'debian-selinux-activate' do
 | 
						|
    command selinux_activate_cmd
 | 
						|
  end if selinux_activate_required?
 | 
						|
 | 
						|
  render_selinux_template(action) if new_resource.persistent
 | 
						|
  node_selinux_restart if state_change_reboot_required?
 | 
						|
end
 | 
						|
 | 
						|
action :disabled do
 | 
						|
  raise 'A non-persistent change to the disabled SELinux status is not possible.' unless new_resource.persistent
 | 
						|
 | 
						|
  render_selinux_template(action)
 | 
						|
  node_selinux_restart if state_change_reboot_required?
 | 
						|
end
 |