Knife-Zero doesn't include Berkshelf support, so vendoring everything in the repo is convenient again
		
			
				
	
	
		
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# MariaDB is a module containing mariadb cookbook helper
 | 
						|
module MariaDB
 | 
						|
  # Helper module for mariadb cookbook
 | 
						|
  module Helper
 | 
						|
    require 'socket'
 | 
						|
    require 'timeout'
 | 
						|
 | 
						|
    def do_port_connect(ip, port)
 | 
						|
      s = TCPSocket.new(ip, port)
 | 
						|
      s.close
 | 
						|
      true
 | 
						|
    rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
 | 
						|
      false
 | 
						|
    end
 | 
						|
 | 
						|
    def port_open?(ip, port)
 | 
						|
      begin
 | 
						|
        Timeout.timeout(5) do
 | 
						|
          return do_port_connect(ip, port)
 | 
						|
        end
 | 
						|
      rescue Timeout::Error
 | 
						|
        false
 | 
						|
      end
 | 
						|
      false
 | 
						|
    end
 | 
						|
 | 
						|
    # Trying to determine if we need to restart the mysql service
 | 
						|
    def mariadb_service_restart_required?(ip, port, _socket)
 | 
						|
      restart = false
 | 
						|
      restart = true unless port_open?(ip, port)
 | 
						|
      restart
 | 
						|
    end
 | 
						|
 | 
						|
    # Helper to determine if running operating system shipped a package for
 | 
						|
    # mariadb server & client. No galera shipped in any os yet.
 | 
						|
    # @param [String] os_platform Indicate operating system type, e.g. centos
 | 
						|
    # @param [String] os_version Indicate operating system version, e.g. 7.0
 | 
						|
    def os_package_provided?(os_platform, os_version)
 | 
						|
      package_provided = false
 | 
						|
      case os_platform
 | 
						|
      when 'centos', 'redhat'
 | 
						|
        package_provided = true if os_version.to_i == 7
 | 
						|
      when 'fedora'
 | 
						|
        package_provided = true if os_version.to_i >= 19
 | 
						|
      end
 | 
						|
      package_provided
 | 
						|
    end
 | 
						|
 | 
						|
    # Helper to determine mariadb server service name shipped by native package
 | 
						|
    # If no native package available on this platform, return nil
 | 
						|
    # @param [String] os_platform Indicate operating system type, e.g. centos
 | 
						|
    # @param [String] os_version Indicate operating system version, e.g. 7.0
 | 
						|
    def os_service_name(os_platform, os_version)
 | 
						|
      return nil unless os_package_provided?(os_platform, os_version)
 | 
						|
      service_name = 'mariadb'
 | 
						|
      if os_platform == 'fedora' && os_version.to_i >= 19
 | 
						|
        service_name = 'mysqld'
 | 
						|
      end
 | 
						|
      service_name
 | 
						|
    end
 | 
						|
 | 
						|
    # Helper to determine whether to use os native package
 | 
						|
    # @param [Boolean] prefer_os Indicate whether to prefer os native package
 | 
						|
    # @param [String] os_platform Indicate operating system type, e.g. centos
 | 
						|
    # @param [String] os_version Indicate operating system version, e.g. 7.0
 | 
						|
    def use_os_native_package?(prefer_os, os_platform, os_version)
 | 
						|
      return false unless prefer_os
 | 
						|
      if os_package_provided?(os_platform, os_version)
 | 
						|
        true
 | 
						|
      else
 | 
						|
        Chef::Log.warn 'prefer_os_package detected, but no native mariadb'\
 | 
						|
          " package available on #{os_platform}-#{os_version}."\
 | 
						|
          ' Fall back to use community package.'
 | 
						|
        false
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |