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
|