Downgrade mysql cookbook for now
It doesn't play well with our current dev server setup
This commit is contained in:
@@ -1,118 +1,67 @@
|
||||
require 'shellwords'
|
||||
|
||||
module MysqlCookbook
|
||||
module HelpersBase
|
||||
require 'shellwords'
|
||||
module Helpers
|
||||
include Chef::DSL::IncludeRecipe
|
||||
|
||||
def el6?
|
||||
return true if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 6
|
||||
false
|
||||
def base_dir
|
||||
prefix_dir || '/usr'
|
||||
end
|
||||
|
||||
def el7?
|
||||
return true if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 7
|
||||
false
|
||||
def configure_package_repositories
|
||||
# we need to enable the yum-mysql-community repository to get packages
|
||||
return unless %w(rhel fedora).include? node['platform_family']
|
||||
case parsed_version
|
||||
when '5.5'
|
||||
# Prefer packages from native repos
|
||||
return if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 5
|
||||
return if node['platform_family'] == 'fedora'
|
||||
include_recipe('yum-mysql-community::mysql55')
|
||||
when '5.6'
|
||||
include_recipe('yum-mysql-community::mysql56')
|
||||
when '5.7'
|
||||
include_recipe('yum-mysql-community::mysql57')
|
||||
end
|
||||
end
|
||||
|
||||
def wheezy?
|
||||
return true if node['platform'] == 'debian' && node['platform_version'].to_i == 7
|
||||
false
|
||||
end
|
||||
|
||||
def jessie?
|
||||
return true if node['platform'] == 'debian' && node['platform_version'].to_i == 8
|
||||
false
|
||||
end
|
||||
|
||||
def trusty?
|
||||
return true if node['platform'] == 'ubuntu' && node['platform_version'] == '14.04'
|
||||
return true if node['platform'] == 'linuxmint' && node['platform_version'] =~ /^17\.[0-9]$/
|
||||
false
|
||||
end
|
||||
|
||||
def xenial?
|
||||
return true if node['platform'] == 'ubuntu' && node['platform_version'] == '16.04'
|
||||
false
|
||||
def client_package_name
|
||||
return new_resource.package_name if new_resource.package_name
|
||||
client_package
|
||||
end
|
||||
|
||||
def defaults_file
|
||||
"#{etc_dir}/my.cnf"
|
||||
end
|
||||
|
||||
def default_data_dir
|
||||
return "/var/lib/#{mysql_name}" if node['os'] == 'linux'
|
||||
return "/opt/local/lib/#{mysql_name}" if node['os'] == 'solaris2'
|
||||
return "/var/db/#{mysql_name}" if node['os'] == 'freebsd'
|
||||
end
|
||||
|
||||
def default_error_log
|
||||
def error_log
|
||||
return new_resource.error_log if new_resource.error_log
|
||||
"#{log_dir}/error.log"
|
||||
end
|
||||
|
||||
def default_pid_file
|
||||
"#{run_dir}/mysqld.pid"
|
||||
def etc_dir
|
||||
return "/opt/mysql#{pkg_ver_string}/etc/#{mysql_name}" if node['platform_family'] == 'omnios'
|
||||
return "#{prefix_dir}/etc/#{mysql_name}" if node['platform_family'] == 'smartos'
|
||||
"#{prefix_dir}/etc/#{mysql_name}"
|
||||
end
|
||||
|
||||
def default_major_version
|
||||
# rhelish
|
||||
return '5.1' if el6?
|
||||
return '5.6' if el7?
|
||||
return '5.6' if node['platform'] == 'amazon'
|
||||
|
||||
# debian
|
||||
return '5.5' if wheezy?
|
||||
return '5.5' if jessie?
|
||||
|
||||
# ubuntu
|
||||
return '5.5' if trusty?
|
||||
return '5.7' if xenial?
|
||||
|
||||
# misc
|
||||
return '5.6' if node['platform'] == 'freebsd'
|
||||
return '5.6' if node['platform'] == 'fedora'
|
||||
return '5.6' if node['platform_family'] == 'suse'
|
||||
def include_dir
|
||||
"#{etc_dir}/conf.d"
|
||||
end
|
||||
|
||||
def major_from_full(v)
|
||||
v.split('.').shift(2).join('.')
|
||||
def lc_messages_dir
|
||||
end
|
||||
|
||||
def log_dir
|
||||
return "/var/adm/log/#{mysql_name}" if node['platform_family'] == 'omnios'
|
||||
"#{prefix_dir}/var/log/#{mysql_name}"
|
||||
end
|
||||
|
||||
def mysql_name
|
||||
"mysql-#{instance}"
|
||||
"mysql-#{new_resource.instance}"
|
||||
end
|
||||
|
||||
def default_socket_file
|
||||
"#{run_dir}/mysqld.sock"
|
||||
end
|
||||
|
||||
def default_client_package_name
|
||||
return ['mysql', 'mysql-devel'] if major_version == '5.1' && el6?
|
||||
return ['mysql55', 'mysql55-devel.x86_64'] if major_version == '5.5' && node['platform'] == 'amazon'
|
||||
return ['mysql56', 'mysql56-devel.x86_64'] if major_version == '5.6' && node['platform'] == 'amazon'
|
||||
return ['mysql-client-5.5', 'libmysqlclient-dev'] if major_version == '5.5' && node['platform_family'] == 'debian'
|
||||
return ['mysql-client-5.6', 'libmysqlclient-dev'] if major_version == '5.6' && node['platform_family'] == 'debian'
|
||||
return ['mysql-client-5.7', 'libmysqlclient-dev'] if major_version == '5.7' && node['platform_family'] == 'debian'
|
||||
return 'mysql-community-server-client' if major_version == '5.6' && node['platform_family'] == 'suse'
|
||||
['mysql-community-client', 'mysql-community-devel']
|
||||
end
|
||||
|
||||
def default_server_package_name
|
||||
return 'mysql-server' if major_version == '5.1' && el6?
|
||||
return 'mysql55-server' if major_version == '5.5' && node['platform'] == 'amazon'
|
||||
return 'mysql56-server' if major_version == '5.6' && node['platform'] == 'amazon'
|
||||
return 'mysql-server-5.5' if major_version == '5.5' && node['platform_family'] == 'debian'
|
||||
return 'mysql-server-5.6' if major_version == '5.6' && node['platform_family'] == 'debian'
|
||||
return 'mysql-server-5.7' if major_version == '5.7' && node['platform_family'] == 'debian'
|
||||
return 'mysql-community-server' if major_version == '5.6' && node['platform_family'] == 'suse'
|
||||
'mysql-community-server'
|
||||
end
|
||||
|
||||
def socket_dir
|
||||
File.dirname(socket)
|
||||
end
|
||||
|
||||
def run_dir
|
||||
return "#{prefix_dir}/var/run/#{mysql_name}" if node['platform_family'] == 'rhel'
|
||||
return "/run/#{mysql_name}" if node['platform_family'] == 'debian'
|
||||
"/var/run/#{mysql_name}"
|
||||
def pkg_ver_string
|
||||
parsed_version.delete('.') if node['platform_family'] == 'omnios'
|
||||
end
|
||||
|
||||
def prefix_dir
|
||||
@@ -123,70 +72,102 @@ module MysqlCookbook
|
||||
|
||||
def scl_name
|
||||
return unless node['platform_family'] == 'rhel'
|
||||
return 'mysql51' if version == '5.1' && node['platform_version'].to_i == 5
|
||||
return 'mysql55' if version == '5.5' && node['platform_version'].to_i == 5
|
||||
return 'mysql51' if parsed_version == '5.1' && node['platform_version'].to_i == 5
|
||||
return 'mysql55' if parsed_version == '5.5' && node['platform_version'].to_i == 5
|
||||
end
|
||||
|
||||
def scl_package?
|
||||
return unless node['platform_family'] == 'rhel'
|
||||
return true if version == '5.1' && node['platform_version'].to_i == 5
|
||||
return true if version == '5.5' && node['platform_version'].to_i == 5
|
||||
return true if parsed_version == '5.1' && node['platform_version'].to_i == 5
|
||||
return true if parsed_version == '5.5' && node['platform_version'].to_i == 5
|
||||
false
|
||||
end
|
||||
|
||||
def etc_dir
|
||||
return "/opt/mysql#{pkg_ver_string}/etc/#{mysql_name}" if node['platform_family'] == 'omnios'
|
||||
return "#{prefix_dir}/etc/#{mysql_name}" if node['platform_family'] == 'smartos'
|
||||
"#{prefix_dir}/etc/#{mysql_name}"
|
||||
end
|
||||
|
||||
def base_dir
|
||||
prefix_dir || '/usr'
|
||||
end
|
||||
|
||||
def system_service_name
|
||||
return 'mysql51-mysqld' if node['platform_family'] == 'rhel' && scl_name == 'mysql51'
|
||||
return 'mysql55-mysqld' if node['platform_family'] == 'rhel' && scl_name == 'mysql55'
|
||||
return 'mysqld' if node['platform_family'] == 'rhel'
|
||||
return 'mysqld' if node['platform_family'] == 'fedora'
|
||||
'mysql' # not one of the above
|
||||
return 'mysql' if node['platform_family'] == 'debian'
|
||||
return 'mysql' if node['platform_family'] == 'suse'
|
||||
return 'mysql' if node['platform_family'] == 'omnios'
|
||||
return 'mysql' if node['platform_family'] == 'smartos'
|
||||
end
|
||||
|
||||
def v56plus
|
||||
return false if version.split('.')[0].to_i < 5
|
||||
return false if version.split('.')[1].to_i < 6
|
||||
return false if parsed_version.split('.')[0].to_i < 5
|
||||
return false if parsed_version.split('.')[1].to_i < 6
|
||||
true
|
||||
end
|
||||
|
||||
def v57plus
|
||||
return false if version.split('.')[0].to_i < 5
|
||||
return false if version.split('.')[1].to_i < 7
|
||||
return false if parsed_version.split('.')[0].to_i < 5
|
||||
return false if parsed_version.split('.')[1].to_i < 7
|
||||
true
|
||||
end
|
||||
|
||||
def default_include_dir
|
||||
"#{etc_dir}/conf.d"
|
||||
def password_column_name
|
||||
return 'authentication_string' if v57plus
|
||||
'password'
|
||||
end
|
||||
|
||||
def log_dir
|
||||
return "/var/adm/log/#{mysql_name}" if node['platform_family'] == 'omnios'
|
||||
"#{prefix_dir}/var/log/#{mysql_name}"
|
||||
def password_expired
|
||||
return ", password_expired='N'" if v57plus
|
||||
''
|
||||
end
|
||||
|
||||
def lc_messages_dir; end
|
||||
def root_password
|
||||
if new_resource.initial_root_password == ''
|
||||
Chef::Log.info('Root password is empty')
|
||||
return ''
|
||||
end
|
||||
Shellwords.escape(new_resource.initial_root_password)
|
||||
end
|
||||
|
||||
# database and initial records
|
||||
# initialization commands
|
||||
|
||||
def mysqld_initialize_cmd
|
||||
cmd = mysqld_bin
|
||||
cmd << " --defaults-file=#{etc_dir}/my.cnf"
|
||||
cmd << ' --initialize'
|
||||
cmd << ' --explicit_defaults_for_timestamp' if v56plus
|
||||
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
|
||||
cmd
|
||||
end
|
||||
|
||||
def mysql_install_db_cmd
|
||||
cmd = mysql_install_db_bin
|
||||
cmd << " --defaults-file=#{etc_dir}/my.cnf"
|
||||
cmd << " --datadir=#{parsed_data_dir}"
|
||||
cmd << ' --explicit_defaults_for_timestamp' if v56plus
|
||||
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
|
||||
cmd
|
||||
end
|
||||
|
||||
def record_init
|
||||
cmd = v56plus ? mysqld_bin : mysqld_safe_bin
|
||||
cmd << " --defaults-file=#{etc_dir}/my.cnf"
|
||||
cmd << " --init-file=/tmp/#{mysql_name}/my.sql"
|
||||
cmd << ' --explicit_defaults_for_timestamp' if v56plus
|
||||
cmd << ' &'
|
||||
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
|
||||
cmd
|
||||
end
|
||||
|
||||
def db_init
|
||||
return mysqld_initialize_cmd if v57plus
|
||||
mysql_install_db_cmd
|
||||
end
|
||||
|
||||
def init_records_script
|
||||
# Note: shell-escaping passwords in a SQL file may cause corruption - eg
|
||||
# mysql will read \& as &, but \% as \%. Just escape bare-minimum \ and '
|
||||
sql_escaped_password = root_password.gsub('\\') { '\\\\' }.gsub("'") { '\\\'' }
|
||||
|
||||
<<-EOS
|
||||
set -e
|
||||
rm -rf /tmp/#{mysql_name}
|
||||
mkdir /tmp/#{mysql_name}
|
||||
|
||||
cat > /tmp/#{mysql_name}/my.sql <<-'EOSQL'
|
||||
UPDATE mysql.user SET #{password_column_name}=PASSWORD('#{sql_escaped_password}')#{password_expired} WHERE user = 'root';
|
||||
cat > /tmp/#{mysql_name}/my.sql <<-EOSQL
|
||||
UPDATE mysql.user SET #{password_column_name}=PASSWORD('#{root_password}')#{password_expired} WHERE user = 'root';
|
||||
DELETE FROM mysql.user WHERE USER LIKE '';
|
||||
DELETE FROM mysql.user WHERE user = 'root' and host NOT IN ('127.0.0.1', 'localhost');
|
||||
FLUSH PRIVILEGES;
|
||||
@@ -204,27 +185,10 @@ EOSQL
|
||||
EOS
|
||||
end
|
||||
|
||||
def password_column_name
|
||||
return 'authentication_string' if v57plus
|
||||
'password'
|
||||
end
|
||||
|
||||
def root_password
|
||||
if initial_root_password == ''
|
||||
Chef::Log.info('Root password is empty')
|
||||
return ''
|
||||
end
|
||||
initial_root_password
|
||||
end
|
||||
|
||||
def password_expired
|
||||
return ", password_expired='N'" if v57plus
|
||||
''
|
||||
end
|
||||
|
||||
def db_init
|
||||
return mysqld_initialize_cmd if v57plus
|
||||
mysql_install_db_cmd
|
||||
def mysql_bin
|
||||
return "#{prefix_dir}/bin/mysql" if node['platform_family'] == 'smartos'
|
||||
return "#{base_dir}/bin/mysql" if node['platform_family'] == 'omnios'
|
||||
"#{prefix_dir}/usr/bin/mysql"
|
||||
end
|
||||
|
||||
def mysql_install_db_bin
|
||||
@@ -233,13 +197,8 @@ EOSQL
|
||||
'mysql_install_db'
|
||||
end
|
||||
|
||||
def mysql_install_db_cmd
|
||||
cmd = mysql_install_db_bin
|
||||
cmd << " --defaults-file=#{etc_dir}/my.cnf"
|
||||
cmd << " --datadir=#{data_dir}"
|
||||
cmd << ' --explicit_defaults_for_timestamp' if v56plus && !v57plus
|
||||
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
|
||||
cmd
|
||||
def mysql_version
|
||||
new_resource.version
|
||||
end
|
||||
|
||||
def mysqladmin_bin
|
||||
@@ -257,15 +216,6 @@ EOSQL
|
||||
"#{prefix_dir}/usr/sbin/mysqld"
|
||||
end
|
||||
|
||||
def mysqld_initialize_cmd
|
||||
cmd = mysqld_bin
|
||||
cmd << " --defaults-file=#{etc_dir}/my.cnf"
|
||||
cmd << ' --initialize'
|
||||
cmd << ' --explicit_defaults_for_timestamp' if v56plus
|
||||
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
|
||||
cmd
|
||||
end
|
||||
|
||||
def mysqld_safe_bin
|
||||
return "#{prefix_dir}/bin/mysqld_safe" if node['platform_family'] == 'smartos'
|
||||
return "#{base_dir}/bin/mysqld_safe" if node['platform_family'] == 'omnios'
|
||||
@@ -273,14 +223,248 @@ EOSQL
|
||||
"#{prefix_dir}/usr/bin/mysqld_safe"
|
||||
end
|
||||
|
||||
def record_init
|
||||
cmd = v56plus ? mysqld_bin : mysqld_safe_bin
|
||||
cmd << " --defaults-file=#{etc_dir}/my.cnf"
|
||||
cmd << " --init-file=/tmp/#{mysql_name}/my.sql"
|
||||
cmd << ' --explicit_defaults_for_timestamp' if v56plus
|
||||
cmd << ' &'
|
||||
return "scl enable #{scl_name} \"#{cmd}\"" if scl_package?
|
||||
cmd
|
||||
def pid_file
|
||||
return new_resource.pid_file if new_resource.pid_file
|
||||
"#{run_dir}/mysqld.pid"
|
||||
end
|
||||
|
||||
def run_dir
|
||||
return "#{prefix_dir}/var/run/#{mysql_name}" if node['platform_family'] == 'rhel'
|
||||
return "/run/#{mysql_name}" if node['platform_family'] == 'debian'
|
||||
"/var/run/#{mysql_name}"
|
||||
end
|
||||
|
||||
def sensitive_supported?
|
||||
Gem::Version.new(Chef::VERSION) >= Gem::Version.new('11.14.0')
|
||||
end
|
||||
|
||||
def socket_file
|
||||
return new_resource.socket if new_resource.socket
|
||||
"#{run_dir}/mysqld.sock"
|
||||
end
|
||||
|
||||
def socket_dir
|
||||
return File.dirname(new_resource.socket) if new_resource.socket
|
||||
run_dir
|
||||
end
|
||||
|
||||
def tmp_dir
|
||||
return new_resource.tmp_dir if new_resource.tmp_dir
|
||||
'/tmp'
|
||||
end
|
||||
|
||||
#######
|
||||
# FIXME: There is a LOT of duplication here..
|
||||
# There has to be a less gnarly way to look up this information. Refactor for great good!
|
||||
#######
|
||||
class Pkginfo
|
||||
def self.pkginfo
|
||||
# Autovivification is Perl.
|
||||
@pkginfo = Chef::Node.new
|
||||
|
||||
@pkginfo.set['debian']['10.04']['5.1']['client_package'] = %w(mysql-client-5.1 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['10.04']['5.1']['server_package'] = 'mysql-server-5.1'
|
||||
@pkginfo.set['debian']['12.04']['5.5']['client_package'] = %w(mysql-client-5.5 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['12.04']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['debian']['13.04']['5.5']['client_package'] = %w(mysql-client-5.5 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['13.04']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['debian']['13.10']['5.5']['client_package'] = %w(mysql-client-5.5 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['13.10']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['debian']['14.04']['5.5']['client_package'] = %w(mysql-client-5.5 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['14.04']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['debian']['14.04']['5.6']['client_package'] = %w(mysql-client-5.6 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['14.04']['5.6']['server_package'] = 'mysql-server-5.6'
|
||||
@pkginfo.set['debian']['14.10']['5.5']['client_package'] = %w(mysql-client-5.5 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['14.10']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['debian']['14.10']['5.6']['client_package'] = %w(mysql-client-5.6 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['14.10']['5.6']['server_package'] = 'mysql-server-5.6'
|
||||
@pkginfo.set['debian']['15.04']['5.6']['client_package'] = %w(mysql-client-5.6 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['15.04']['5.6']['server_package'] = 'mysql-server-5.6'
|
||||
@pkginfo.set['debian']['15.10']['5.6']['client_package'] = %w(mysql-client-5.6 libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['15.10']['5.6']['server_package'] = 'mysql-server-5.6'
|
||||
@pkginfo.set['debian']['6']['5.1']['client_package'] = %w(mysql-client libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['6']['5.1']['server_package'] = 'mysql-server-5.1'
|
||||
@pkginfo.set['debian']['7']['5.5']['client_package'] = %w(mysql-client libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['7']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['debian']['7']['5.6']['client_package'] = %w(mysql-client libmysqlclient-dev) # apt-repo from dotdeb
|
||||
@pkginfo.set['debian']['7']['5.6']['server_package'] = 'mysql-server-5.6'
|
||||
@pkginfo.set['debian']['7']['5.7']['client_package'] = %w(mysql-client libmysqlclient-dev) # apt-repo from dotdeb
|
||||
@pkginfo.set['debian']['7']['5.7']['server_package'] = 'mysql-server-5.7'
|
||||
@pkginfo.set['debian']['8']['5.5']['client_package'] = %w(mysql-client libmysqlclient-dev)
|
||||
@pkginfo.set['debian']['8']['5.5']['server_package'] = 'mysql-server-5.5'
|
||||
@pkginfo.set['fedora']['20']['5.5']['client_package'] = %w(community-mysql community-mysql-devel)
|
||||
@pkginfo.set['fedora']['20']['5.5']['server_package'] = 'community-mysql-server'
|
||||
@pkginfo.set['fedora']['20']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['fedora']['20']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['fedora']['20']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['fedora']['20']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['fedora']['21']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['fedora']['21']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['fedora']['21']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['fedora']['21']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['fedora']['22']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['fedora']['22']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['fedora']['22']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['fedora']['22']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['freebsd']['10']['5.5']['client_package'] = %w(mysql55-client)
|
||||
@pkginfo.set['freebsd']['10']['5.5']['server_package'] = 'mysql55-server'
|
||||
@pkginfo.set['freebsd']['9']['5.5']['client_package'] = %w(mysql55-client)
|
||||
@pkginfo.set['freebsd']['9']['5.5']['server_package'] = 'mysql55-server'
|
||||
@pkginfo.set['omnios']['151006']['5.5']['client_package'] = %w(database/mysql-55/library)
|
||||
@pkginfo.set['omnios']['151006']['5.5']['server_package'] = 'database/mysql-55'
|
||||
@pkginfo.set['omnios']['151006']['5.6']['client_package'] = %w(database/mysql-56)
|
||||
@pkginfo.set['omnios']['151006']['5.6']['server_package'] = 'database/mysql-56'
|
||||
@pkginfo.set['rhel']['2014.09']['5.1']['server_package'] = %w(mysql51 mysql51-devel)
|
||||
@pkginfo.set['rhel']['2014.09']['5.1']['server_package'] = 'mysql51-server'
|
||||
@pkginfo.set['rhel']['2014.09']['5.5']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2014.09']['5.5']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2014.09']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2014.09']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2014.09']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2014.09']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2015.03']['5.1']['server_package'] = %w(mysql51 mysql51-devel)
|
||||
@pkginfo.set['rhel']['2015.03']['5.1']['server_package'] = 'mysql51-server'
|
||||
@pkginfo.set['rhel']['2015.03']['5.5']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2015.03']['5.5']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2015.03']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2015.03']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2015.03']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2015.03']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2015.09']['5.1']['server_package'] = %w(mysql51 mysql51-devel)
|
||||
@pkginfo.set['rhel']['2015.09']['5.1']['server_package'] = 'mysql51-server'
|
||||
@pkginfo.set['rhel']['2015.09']['5.5']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2015.09']['5.5']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2015.09']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2015.09']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2015.09']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2015.09']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2016.03']['5.1']['server_package'] = %w(mysql51 mysql51-devel)
|
||||
@pkginfo.set['rhel']['2016.03']['5.1']['server_package'] = 'mysql51-server'
|
||||
@pkginfo.set['rhel']['2016.03']['5.5']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2016.03']['5.5']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2016.03']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2016.03']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['2016.03']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['2016.03']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['5']['5.0']['client_package'] = %w(mysql mysql-devel)
|
||||
@pkginfo.set['rhel']['5']['5.0']['server_package'] = 'mysql-server'
|
||||
@pkginfo.set['rhel']['5']['5.1']['client_package'] = %w(mysql51-mysql)
|
||||
@pkginfo.set['rhel']['5']['5.1']['server_package'] = 'mysql51-mysql-server'
|
||||
@pkginfo.set['rhel']['5']['5.5']['client_package'] = %w(mysql55-mysql mysql55-mysql-devel)
|
||||
@pkginfo.set['rhel']['5']['5.5']['server_package'] = 'mysql55-mysql-server'
|
||||
@pkginfo.set['rhel']['5']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['5']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['5']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['5']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['6']['5.1']['client_package'] = %w(mysql mysql-devel)
|
||||
@pkginfo.set['rhel']['6']['5.1']['server_package'] = 'mysql-server'
|
||||
@pkginfo.set['rhel']['6']['5.5']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['6']['5.5']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['6']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['6']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['6']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['6']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['7']['5.5']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['7']['5.5']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['7']['5.6']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['7']['5.6']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['rhel']['7']['5.7']['client_package'] = %w(mysql-community-client mysql-community-devel)
|
||||
@pkginfo.set['rhel']['7']['5.7']['server_package'] = 'mysql-community-server'
|
||||
@pkginfo.set['smartos']['5.11']['5.5']['client_package'] = %w(mysql-client)
|
||||
@pkginfo.set['smartos']['5.11']['5.5']['server_package'] = 'mysql-server'
|
||||
@pkginfo.set['smartos']['5.11']['5.6']['client_package'] = %w(mysql-client)
|
||||
@pkginfo.set['smartos']['5.11']['5.6']['server_package'] = 'mysql-server'
|
||||
@pkginfo.set['suse']['11.3']['5.5']['client_package'] = %w(mysql-client)
|
||||
@pkginfo.set['suse']['11.3']['5.5']['server_package'] = 'mysql'
|
||||
@pkginfo.set['suse']['12.0']['5.5']['client_package'] = %w(mysql-client)
|
||||
@pkginfo.set['suse']['12.0']['5.5']['server_package'] = 'mysql'
|
||||
|
||||
@pkginfo
|
||||
end
|
||||
end
|
||||
|
||||
def package_name_for(platform, platform_family, platform_version, version, type)
|
||||
keyname = keyname_for(platform, platform_family, platform_version)
|
||||
info = Pkginfo.pkginfo[platform_family.to_sym][keyname]
|
||||
type_label = type.to_s.gsub('_package', '').capitalize
|
||||
unless info[version]
|
||||
# Show availabe versions if the requested is not available on the current platform
|
||||
Chef::Log.error("Unsupported Version: You requested to install a Mysql #{type_label} version that is not supported by your platform")
|
||||
Chef::Log.error("Platform: #{platform_family} #{platform_version} - Request Mysql #{type_label} version: #{version}")
|
||||
Chef::Log.error("Availabe versions for your platform are: #{info.map { |k, _v| k }.join(' - ')}")
|
||||
raise "Unsupported Mysql #{type_label} Version"
|
||||
end
|
||||
info[version][type]
|
||||
end
|
||||
|
||||
def keyname_for(platform, platform_family, platform_version)
|
||||
return platform_version if platform_family == 'debian' && platform == 'ubuntu'
|
||||
return platform_version if platform_family == 'fedora'
|
||||
return platform_version if platform_family == 'omnios'
|
||||
return platform_version if platform_family == 'rhel' && platform == 'amazon'
|
||||
return platform_version if platform_family == 'smartos'
|
||||
return platform_version if platform_family == 'suse'
|
||||
return platform_version.to_i.to_s if platform_family == 'debian'
|
||||
return platform_version.to_i.to_s if platform_family == 'rhel'
|
||||
return platform_version.to_s if platform_family == 'debian' && platform_version =~ /sid$/
|
||||
return platform_version.to_s if platform_family == 'freebsd'
|
||||
end
|
||||
|
||||
def parsed_data_dir
|
||||
return new_resource.data_dir if new_resource.data_dir
|
||||
return "/opt/local/lib/#{mysql_name}" if node['os'] == 'solaris2'
|
||||
return "/var/lib/#{mysql_name}" if node['os'] == 'linux'
|
||||
return "/var/db/#{mysql_name}" if node['os'] == 'freebsd'
|
||||
end
|
||||
|
||||
def client_package
|
||||
package_name_for(
|
||||
node['platform'],
|
||||
node['platform_family'],
|
||||
node['platform_version'],
|
||||
parsed_version,
|
||||
:client_package
|
||||
)
|
||||
end
|
||||
|
||||
def server_package
|
||||
package_name_for(
|
||||
node['platform'],
|
||||
node['platform_family'],
|
||||
node['platform_version'],
|
||||
parsed_version,
|
||||
:server_package
|
||||
)
|
||||
end
|
||||
|
||||
def server_package_name
|
||||
return new_resource.package_name if new_resource.package_name
|
||||
server_package
|
||||
end
|
||||
|
||||
def parsed_version
|
||||
return new_resource.version if new_resource.version
|
||||
return '5.0' if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 5
|
||||
return '5.1' if node['platform_family'] == 'debian' && node['platform_version'] == '10.04'
|
||||
return '5.1' if node['platform_family'] == 'debian' && node['platform_version'].to_i == 6
|
||||
return '5.1' if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 6
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'] == '12.04'
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'] == '13.04'
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'] == '13.10'
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'] == '14.04'
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'] == '14.10'
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'].to_i == 7
|
||||
return '5.5' if node['platform_family'] == 'debian' && node['platform_version'].to_i == 8
|
||||
return '5.5' if node['platform_family'] == 'freebsd'
|
||||
return '5.5' if node['platform_family'] == 'omnios'
|
||||
return '5.5' if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 2014
|
||||
return '5.5' if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 2015
|
||||
return '5.5' if node['platform_family'] == 'rhel' && node['platform_version'].to_i == 7
|
||||
return '5.5' if node['platform_family'] == 'smartos'
|
||||
return '5.5' if node['platform_family'] == 'suse'
|
||||
return '5.6' if node['platform_family'] == 'fedora'
|
||||
return '5.6' if node['platform_family'] == 'debian' && node['platform_version'] == '15.04'
|
||||
return '5.6' if node['platform_family'] == 'debian' && node['platform_version'] == '15.10'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,40 +1,18 @@
|
||||
if defined?(ChefSpec)
|
||||
ChefSpec.define_matcher :mysql_config
|
||||
ChefSpec.define_matcher :mysql_service
|
||||
ChefSpec.define_matcher :mysql_client
|
||||
|
||||
# mysql_client_client_installation_package
|
||||
def install_mysql_client_installation_package(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client_installation_package, :create, resource_name)
|
||||
if ChefSpec.respond_to?(:define_matcher)
|
||||
# ChefSpec >= 4.1
|
||||
ChefSpec.define_matcher :mysql_config
|
||||
ChefSpec.define_matcher :mysql_service
|
||||
ChefSpec.define_matcher :mysql_client
|
||||
elsif defined?(ChefSpec::Runner) &&
|
||||
ChefSpec::Runner.respond_to?(:define_runner_method)
|
||||
# ChefSpec < 4.1
|
||||
ChefSpec::Runner.define_runner_method :mysql_config
|
||||
ChefSpec::Runner.define_runner_method :mysql_service
|
||||
ChefSpec::Runner.define_runner_method :mysql_client
|
||||
end
|
||||
|
||||
def remove_mysql_client_installation_package(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client_installation_package, :remove, resource_name)
|
||||
end
|
||||
|
||||
# mysql_server_server_installation_package
|
||||
def install_mysql_server_installation_package(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_server_installation_package, :install, resource_name)
|
||||
end
|
||||
|
||||
def remove_mysql_server_installation_package(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_server_installation_package, :remove, resource_name)
|
||||
end
|
||||
|
||||
#####
|
||||
# old
|
||||
#####
|
||||
|
||||
# client
|
||||
def create_mysql_client(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client, :create, resource_name)
|
||||
end
|
||||
|
||||
def delete_mysql_client(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client, :delete, resource_name)
|
||||
end
|
||||
|
||||
# mysql_config
|
||||
# config
|
||||
def create_mysql_config(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_config, :create, resource_name)
|
||||
end
|
||||
@@ -68,4 +46,12 @@ if defined?(ChefSpec)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_service, :reload, resource_name)
|
||||
end
|
||||
|
||||
# client
|
||||
def create_mysql_client(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client, :create, resource_name)
|
||||
end
|
||||
|
||||
def delete_mysql_client(resource_name)
|
||||
ChefSpec::Matchers::ResourceMatcher.new(:mysql_client, :delete, resource_name)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlBase < Chef::Resource
|
||||
require_relative 'helpers'
|
||||
|
||||
# All resources are composites
|
||||
def whyrun_supported?
|
||||
true
|
||||
end
|
||||
|
||||
################
|
||||
# Type Constants
|
||||
################
|
||||
|
||||
Boolean = property_type(
|
||||
is: [true, false],
|
||||
default: false
|
||||
) unless defined?(Boolean)
|
||||
|
||||
###################
|
||||
# Common Properties
|
||||
###################
|
||||
property :run_group, String, default: 'mysql', desired_state: false
|
||||
property :run_user, String, default: 'mysql', desired_state: false
|
||||
property :version, String, default: lazy { default_major_version }, desired_state: false
|
||||
property :include_dir, String, default: lazy { default_include_dir }, desired_state: false
|
||||
property :major_version, String, default: lazy { major_from_full(version) }, desired_state: false
|
||||
|
||||
declare_action_class
|
||||
end
|
||||
end
|
||||
@@ -1,31 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlClientInstallationPackage < MysqlBase
|
||||
# helper methods
|
||||
require_relative 'helpers'
|
||||
include MysqlCookbook::HelpersBase
|
||||
|
||||
# Resource properties
|
||||
resource_name :mysql_client_installation_package
|
||||
provides :mysql_client_installation, os: 'linux'
|
||||
provides :mysql_client, os: 'linux'
|
||||
|
||||
property :package_name, [String, Array], default: lazy { default_client_package_name }, desired_state: false
|
||||
property :package_options, [String, nil], desired_state: false
|
||||
property :package_version, [String, nil], default: nil, desired_state: false
|
||||
|
||||
# Actions
|
||||
action :create do
|
||||
package package_name do
|
||||
version package_version if package_version
|
||||
options package_options if package_options
|
||||
action :install
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
package package_name do
|
||||
action :remove
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,56 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlConfig < MysqlBase
|
||||
resource_name :mysql_config
|
||||
|
||||
property :config_name, String, name_property: true, desired_state: false
|
||||
property :cookbook, String, desired_state: false
|
||||
property :group, String, default: 'mysql', desired_state: false
|
||||
property :instance, String, default: 'default', desired_state: false
|
||||
property :owner, String, default: 'mysql', desired_state: false
|
||||
property :source, String, desired_state: false
|
||||
property :variables, [Hash], desired_state: false
|
||||
property :version, String, default: lazy { default_major_version }, desired_state: false
|
||||
|
||||
require_relative 'helpers'
|
||||
include MysqlCookbook::HelpersBase
|
||||
|
||||
provides :mysql_config
|
||||
|
||||
action :create do
|
||||
# hax because group property
|
||||
g = Chef::Resource::Group.new(new_resource.group, run_context)
|
||||
g.system true if name == 'mysql'
|
||||
resource_collection.insert g
|
||||
|
||||
user owner do
|
||||
gid owner
|
||||
system true if name == 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
directory include_dir do
|
||||
owner new_resource.owner
|
||||
group new_resource.group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
template "#{include_dir}/#{config_name}.cnf" do
|
||||
owner new_resource.owner
|
||||
group new_resource.group
|
||||
mode '0640'
|
||||
variables(new_resource.variables)
|
||||
source new_resource.source
|
||||
cookbook new_resource.cookbook
|
||||
action :create
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
file "#{include_dir}/#{config_name}.cnf" do
|
||||
action :delete
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,42 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlServerInstallationPackage < MysqlBase
|
||||
# Resource properties
|
||||
resource_name :mysql_server_installation_package
|
||||
provides :mysql_server_installation, os: 'linux'
|
||||
|
||||
property :package_name, String, default: lazy { default_server_package_name }, desired_state: false
|
||||
property :package_options, [String, nil], desired_state: false
|
||||
property :package_version, [String, nil], default: nil, desired_state: false
|
||||
|
||||
# helper methods
|
||||
require_relative 'helpers'
|
||||
include MysqlCookbook::HelpersBase
|
||||
|
||||
# Actions
|
||||
action :install do
|
||||
package package_name do
|
||||
version package_version if package_version
|
||||
options package_options if package_options
|
||||
notifies :install, 'package[perl-Sys-Hostname-Long]', :immediately if platform_family?('suse')
|
||||
notifies :run, 'execute[Initial DB setup script]', :immediately if platform_family?('suse')
|
||||
action :install
|
||||
end
|
||||
|
||||
package 'perl-Sys-Hostname-Long' do
|
||||
action :nothing
|
||||
end
|
||||
|
||||
execute 'Initial DB setup script' do
|
||||
environment 'INSTANCE' => new_resource.name
|
||||
command '/usr/lib/mysql/mysql-systemd-helper install'
|
||||
action :nothing
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
package package_name do
|
||||
action :remove
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,105 +0,0 @@
|
||||
module MysqlCookbook
|
||||
require_relative 'mysql_service_base'
|
||||
class MysqlService < MysqlServiceBase
|
||||
resource_name :mysql_service
|
||||
|
||||
# installation type and service_manager
|
||||
property :install_method, %w(package auto), default: 'auto', desired_state: false
|
||||
property :service_manager, %w(sysvinit upstart systemd auto), default: 'auto', desired_state: false
|
||||
|
||||
# mysql_server_installation
|
||||
property :version, String, default: lazy { default_major_version }, desired_state: false
|
||||
property :major_version, String, default: lazy { major_from_full(version) }, desired_state: false
|
||||
property :package_name, String, default: lazy { default_package_name }, desired_state: false
|
||||
property :package_options, [String, nil], desired_state: false
|
||||
property :package_version, [String, nil], default: nil, desired_state: false
|
||||
|
||||
################
|
||||
# Helper Methods
|
||||
################
|
||||
|
||||
def copy_properties_to(to, *properties)
|
||||
properties = self.class.properties.keys if properties.empty?
|
||||
properties.each do |p|
|
||||
# If the property is set on from, and exists on to, set the
|
||||
# property on to
|
||||
if to.class.properties.include?(p) && property_is_set?(p)
|
||||
to.send(p, send(p))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
action_class.class_eval do
|
||||
def installation(&block)
|
||||
case install_method
|
||||
when 'auto'
|
||||
install = mysql_server_installation(name, &block)
|
||||
when 'package'
|
||||
install = mysql_server_installation_package(name, &block)
|
||||
when 'none'
|
||||
Chef::Log.info('Skipping MySQL installation. Assuming it was handled previously.')
|
||||
return
|
||||
end
|
||||
copy_properties_to(install)
|
||||
install
|
||||
end
|
||||
|
||||
def svc_manager(&block)
|
||||
case service_manager
|
||||
when 'auto'
|
||||
svc = mysql_service_manager(name, &block)
|
||||
when 'sysvinit'
|
||||
svc = mysql_service_manager_sysvinit(name, &block)
|
||||
when 'upstart'
|
||||
svc = mysql_service_manager_upstart(name, &block)
|
||||
when 'systemd'
|
||||
svc = mysql_service_manager_systemd(name, &block)
|
||||
end
|
||||
copy_properties_to(svc)
|
||||
svc
|
||||
end
|
||||
end
|
||||
|
||||
#########
|
||||
# Actions
|
||||
#########
|
||||
|
||||
action :create do
|
||||
installation do
|
||||
action :install
|
||||
end
|
||||
|
||||
svc_manager do
|
||||
action :create
|
||||
end
|
||||
end
|
||||
|
||||
action :start do
|
||||
svc_manager do
|
||||
action :start
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
svc_manager do
|
||||
action :delete
|
||||
end
|
||||
|
||||
installation do
|
||||
action :delete
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
svc_manager do
|
||||
action :restart
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
svc_manager do
|
||||
action :stop
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,203 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlServiceBase < MysqlBase
|
||||
property :bind_address, String, desired_state: false
|
||||
property :charset, String, default: 'utf8', desired_state: false
|
||||
property :data_dir, String, default: lazy { default_data_dir }, desired_state: false
|
||||
property :error_log, String, default: lazy { default_error_log }, desired_state: false
|
||||
property :initial_root_password, String, default: 'ilikerandompasswords', desired_state: false
|
||||
property :instance, String, name_property: true, desired_state: false
|
||||
property :mysqld_options, Hash, default: {}, desired_state: false
|
||||
property :pid_file, String, default: lazy { default_pid_file }, desired_state: false
|
||||
property :port, [String, Integer], default: '3306', desired_state: false
|
||||
property :socket, String, default: lazy { default_socket_file }, desired_state: false
|
||||
property :tmp_dir, String, desired_state: false
|
||||
|
||||
alias socket_file socket
|
||||
|
||||
require_relative 'helpers'
|
||||
include MysqlCookbook::HelpersBase
|
||||
|
||||
# action class methods are available within the actions and work as if the coded
|
||||
# was inline the action. No messing with classes or passing in the new_resource
|
||||
declare_action_class.class_eval do
|
||||
def create_system_user
|
||||
group 'mysql' do
|
||||
action :create
|
||||
end
|
||||
|
||||
user 'mysql' do
|
||||
gid 'mysql'
|
||||
action :create
|
||||
end
|
||||
end
|
||||
|
||||
def create_config
|
||||
# require 'pry' ; binding.pry
|
||||
|
||||
# Yak shaving secion. Account for random errata.
|
||||
#
|
||||
# Turns out that mysqld is hard coded to try and read
|
||||
# /etc/mysql/my.cnf, and its presence causes problems when
|
||||
# setting up multiple services.
|
||||
file "#{prefix_dir}/etc/mysql/my.cnf" do
|
||||
action :delete
|
||||
end
|
||||
|
||||
file "#{prefix_dir}/etc/my.cnf" do
|
||||
action :delete
|
||||
end
|
||||
|
||||
# mysql_install_db is broken on 5.6.13
|
||||
link "#{prefix_dir}/usr/share/my-default.cnf" do
|
||||
to "#{etc_dir}/my.cnf"
|
||||
not_if { ::File.exist? "#{prefix_dir}/usr/share/my-default.cnf" } # FIXME: Chef bug?
|
||||
action :create
|
||||
end
|
||||
|
||||
# Support directories
|
||||
directory etc_dir do
|
||||
owner run_user
|
||||
group run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory include_dir do
|
||||
owner run_user
|
||||
group run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory run_dir do
|
||||
owner run_user
|
||||
group run_group
|
||||
mode '0755'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory log_dir do
|
||||
owner run_user
|
||||
group run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory data_dir do
|
||||
owner run_user
|
||||
group run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
# Main configuration file
|
||||
template "#{etc_dir}/my.cnf" do
|
||||
source 'my.cnf.erb'
|
||||
cookbook 'mysql'
|
||||
owner run_user
|
||||
group run_group
|
||||
mode '0600'
|
||||
variables(config: new_resource)
|
||||
action :create
|
||||
end
|
||||
end
|
||||
|
||||
def initialize_database
|
||||
# initialize database and create initial records
|
||||
bash "#{name} initial records" do
|
||||
code init_records_script
|
||||
umask '022'
|
||||
returns [0, 1, 2] # facepalm
|
||||
not_if "/usr/bin/test -f #{data_dir}/mysql/user.frm"
|
||||
action :run
|
||||
end
|
||||
end
|
||||
|
||||
def delete_support_directories
|
||||
# Stop the service before removing support directories
|
||||
delete_stop_service
|
||||
|
||||
directory etc_dir do
|
||||
recursive true
|
||||
action :delete
|
||||
end
|
||||
|
||||
directory run_dir do
|
||||
recursive true
|
||||
action :delete
|
||||
end
|
||||
|
||||
directory log_dir do
|
||||
recursive true
|
||||
action :delete
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Platform specific bits
|
||||
#
|
||||
def configure_apparmor
|
||||
# Do not add these resource if inside a container
|
||||
# Only valid on Ubuntu
|
||||
return if ::File.exist?('/.dockerenv') || ::File.exist?('/.dockerinit') || node['platform'] != 'ubuntu'
|
||||
|
||||
# Apparmor
|
||||
package 'apparmor' do
|
||||
action :install
|
||||
end
|
||||
|
||||
directory '/etc/apparmor.d/local/mysql' do
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
template '/etc/apparmor.d/local/usr.sbin.mysqld' do
|
||||
cookbook 'mysql'
|
||||
source 'apparmor/usr.sbin.mysqld-local.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
action :create
|
||||
notifies :restart, "service[#{instance} apparmor]", :immediately
|
||||
end
|
||||
|
||||
template '/etc/apparmor.d/usr.sbin.mysqld' do
|
||||
cookbook 'mysql'
|
||||
source 'apparmor/usr.sbin.mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
action :create
|
||||
notifies :restart, "service[#{instance} apparmor]", :immediately
|
||||
end
|
||||
|
||||
template "/etc/apparmor.d/local/mysql/#{instance}" do
|
||||
cookbook 'mysql'
|
||||
source 'apparmor/usr.sbin.mysqld-instance.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
config: new_resource,
|
||||
mysql_name: mysql_name
|
||||
)
|
||||
action :create
|
||||
notifies :restart, "service[#{instance} apparmor]", :immediately
|
||||
end
|
||||
|
||||
service "#{instance} apparmor" do
|
||||
service_name 'apparmor'
|
||||
action :nothing
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,142 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlServiceManagerSystemd < MysqlServiceBase
|
||||
resource_name :mysql_service_manager_systemd
|
||||
|
||||
provides :mysql_service_manager, os: 'linux' do |_node|
|
||||
Chef::Platform::ServiceHelpers.service_resource_providers.include?(:systemd)
|
||||
end
|
||||
|
||||
action :create do
|
||||
# from base
|
||||
create_system_user
|
||||
stop_system_service
|
||||
create_config
|
||||
configure_apparmor
|
||||
initialize_database
|
||||
end
|
||||
|
||||
action :start do
|
||||
# Needed for Debian / Ubuntu
|
||||
directory '/usr/libexec' do
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
action :create
|
||||
end
|
||||
|
||||
# this script is called by the main systemd unit file, and
|
||||
# spins around until the service is actually up and running.
|
||||
template "/usr/libexec/#{mysql_name}-wait-ready" do
|
||||
path "/usr/libexec/#{mysql_name}-wait-ready"
|
||||
source 'systemd/mysqld-wait-ready.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
variables(socket_file: socket_file)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
# this is the main systemd unit file
|
||||
template "/etc/systemd/system/#{mysql_name}.service" do
|
||||
path "/etc/systemd/system/#{mysql_name}.service"
|
||||
source 'systemd/mysqld.service.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
config: new_resource,
|
||||
etc_dir: etc_dir,
|
||||
base_dir: base_dir,
|
||||
mysqld_bin: mysqld_bin
|
||||
)
|
||||
cookbook 'mysql'
|
||||
notifies :run, "execute[#{instance} systemctl daemon-reload]", :immediately
|
||||
action :create
|
||||
end
|
||||
|
||||
# avoid 'Unit file changed on disk' warning
|
||||
execute "#{instance} systemctl daemon-reload" do
|
||||
command '/bin/systemctl daemon-reload'
|
||||
action :nothing
|
||||
end
|
||||
|
||||
# tmpfiles.d config so the service survives reboot
|
||||
template "/usr/lib/tmpfiles.d/#{mysql_name}.conf" do
|
||||
path "/usr/lib/tmpfiles.d/#{mysql_name}.conf"
|
||||
source 'tmpfiles.d.conf.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
run_dir: run_dir,
|
||||
run_user: run_user,
|
||||
run_group: run_group
|
||||
)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
# service management resource
|
||||
service mysql_name.to_s do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports restart: true, status: true
|
||||
action [:enable, :start]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
# service management resource
|
||||
service mysql_name.to_s do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports status: true
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("/usr/lib/systemd/system/#{mysql_name}.service") }
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
# service management resource
|
||||
service mysql_name.to_s do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports restart: true
|
||||
action :restart
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
# service management resource
|
||||
service mysql_name.to_s do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
action :reload
|
||||
end
|
||||
end
|
||||
|
||||
declare_action_class.class_eval do
|
||||
def stop_system_service
|
||||
# service management resource
|
||||
service 'mysql' do
|
||||
service_name system_service_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports status: true
|
||||
action [:stop, :disable]
|
||||
end
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
# service management resource
|
||||
service mysql_name.to_s do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports status: true
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("/usr/lib/systemd/system/#{mysql_name}.service") }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,79 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlServiceManagerSysvinit < MysqlServiceBase
|
||||
resource_name :mysql_service_manager_sysvinit
|
||||
|
||||
provides :mysql_service_manager, os: 'linux'
|
||||
|
||||
action :create do
|
||||
# from base
|
||||
create_system_user
|
||||
stop_system_service
|
||||
create_config
|
||||
initialize_database
|
||||
configure_apparmor
|
||||
end
|
||||
|
||||
action :start do
|
||||
template "/etc/init.d/#{mysql_name}" do
|
||||
source 'sysvinit/mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
variables(
|
||||
config: new_resource,
|
||||
defaults_file: defaults_file,
|
||||
error_log: error_log,
|
||||
mysql_name: mysql_name,
|
||||
mysqladmin_bin: mysqladmin_bin,
|
||||
mysqld_safe_bin: mysqld_safe_bin,
|
||||
pid_file: pid_file,
|
||||
scl_name: scl_name
|
||||
)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
service mysql_name do
|
||||
supports restart: true, status: true
|
||||
action [:enable, :start]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
service mysql_name do
|
||||
supports restart: true, status: true
|
||||
action [:stop]
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
service mysql_name do
|
||||
supports restart: true
|
||||
action :restart
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
service mysql_name do
|
||||
action :reload
|
||||
end
|
||||
end
|
||||
|
||||
declare_action_class.class_eval do
|
||||
def stop_system_service
|
||||
service system_service_name do
|
||||
supports status: true
|
||||
action [:stop, :disable]
|
||||
end
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
service mysql_name do
|
||||
supports status: true
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("#{etc_dir}/init.d/#{mysql_name}") }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,103 +0,0 @@
|
||||
module MysqlCookbook
|
||||
class MysqlServiceManagerUpstart < MysqlServiceBase
|
||||
resource_name :mysql_service_manager_upstart
|
||||
|
||||
provides :mysql_service_manager, platform_family: 'debian' do |_node|
|
||||
Chef::Platform::ServiceHelpers.service_resource_providers.include?(:upstart) &&
|
||||
!Chef::Platform::ServiceHelpers.service_resource_providers.include?(:systemd) &&
|
||||
!Chef::Platform::ServiceHelpers.service_resource_providers.include?(:redhat) &&
|
||||
::File.exist?('/sbin/status') # Fix for Docker, in 7 and 8 images /sbin/status doesn't exists and Upstart provider doesn't work
|
||||
end
|
||||
|
||||
action :create do
|
||||
# from base
|
||||
create_system_user
|
||||
stop_system_service
|
||||
create_config
|
||||
configure_apparmor
|
||||
initialize_database
|
||||
end
|
||||
|
||||
action :start do
|
||||
template "/usr/sbin/#{mysql_name}-wait-ready" do
|
||||
source 'upstart/mysqld-wait-ready.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
variables(socket_file: socket_file)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
template "/etc/init/#{mysql_name}.conf" do
|
||||
source 'upstart/mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
defaults_file: defaults_file,
|
||||
mysql_name: mysql_name,
|
||||
run_group: run_group,
|
||||
run_user: run_user,
|
||||
socket_dir: socket_dir
|
||||
)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
service mysql_name do
|
||||
provider Chef::Provider::Service::Upstart
|
||||
supports status: true
|
||||
action [:start]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
service mysql_name do
|
||||
provider Chef::Provider::Service::Upstart
|
||||
supports restart: true, status: true
|
||||
action [:stop]
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
# With Upstart, restarting the service doesn't behave "as expected".
|
||||
# We want the post-start stanzas, which wait until the
|
||||
# service is available before returning
|
||||
#
|
||||
# http://upstart.ubuntu.com/cookbook/#restart
|
||||
service mysql_name do
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action [:stop, :start]
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
# With Upstart, reload just sends a HUP signal to the process.
|
||||
# As far as I can tell, this doesn't work the way it's
|
||||
# supposed to, so we need to actually restart the service.
|
||||
service mysql_name do
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action [:stop, :start]
|
||||
end
|
||||
end
|
||||
|
||||
declare_action_class.class_eval do
|
||||
def stop_system_service
|
||||
service system_service_name do
|
||||
provider Chef::Provider::Service::Upstart
|
||||
supports status: true
|
||||
action [:stop, :disable]
|
||||
end
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
service mysql_name do
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("#{etc_dir}/init/#{mysql_name}") }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
39
cookbooks/mysql/libraries/provider_mysql_client.rb
Normal file
39
cookbooks/mysql/libraries/provider_mysql_client.rb
Normal file
@@ -0,0 +1,39 @@
|
||||
require 'chef/provider/lwrp_base'
|
||||
require_relative 'helpers'
|
||||
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlClient < Chef::Provider::LWRPBase
|
||||
include MysqlCookbook::Helpers
|
||||
provides :mysql_client if defined?(provides)
|
||||
|
||||
use_inline_resources if defined?(use_inline_resources)
|
||||
|
||||
def whyrun_supported?
|
||||
true
|
||||
end
|
||||
|
||||
action :create do
|
||||
# From helpers.rb
|
||||
configure_package_repositories
|
||||
|
||||
client_package_name.each do |p|
|
||||
package "#{new_resource.name} :create #{p}" do
|
||||
package_name p
|
||||
version new_resource.version if node['platform'] == 'smartos'
|
||||
version new_resource.package_version
|
||||
action :install
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
parsed_package_name.each do |p|
|
||||
package "#{new_resource.name} :delete #{p}" do
|
||||
action :remove
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
59
cookbooks/mysql/libraries/provider_mysql_config.rb
Normal file
59
cookbooks/mysql/libraries/provider_mysql_config.rb
Normal file
@@ -0,0 +1,59 @@
|
||||
require 'chef/provider/lwrp_base'
|
||||
require_relative 'helpers'
|
||||
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlConfig < Chef::Provider::LWRPBase
|
||||
include MysqlCookbook::Helpers
|
||||
provides :mysql_config if defined?(provides)
|
||||
|
||||
use_inline_resources if defined?(use_inline_resources)
|
||||
|
||||
def whyrun_supported?
|
||||
true
|
||||
end
|
||||
|
||||
action :create do
|
||||
group "#{new_resource.name} :create #{new_resource.group}" do
|
||||
group_name new_resource.group
|
||||
system true if new_resource.name == 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
user "#{new_resource.name} :create #{new_resource.owner}" do
|
||||
username new_resource.owner
|
||||
gid new_resource.owner
|
||||
system true if new_resource.name == 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :create #{include_dir}" do
|
||||
path include_dir
|
||||
owner new_resource.owner
|
||||
group new_resource.group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
template "#{new_resource.name} :create #{include_dir}/#{new_resource.config_name}.cnf" do
|
||||
path "#{include_dir}/#{new_resource.config_name}.cnf"
|
||||
owner new_resource.owner
|
||||
group new_resource.group
|
||||
mode '0640'
|
||||
variables(new_resource.variables)
|
||||
source new_resource.source
|
||||
cookbook new_resource.cookbook
|
||||
action :create
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
file "#{new_resource.name} :delete #{include_dir}/#{new_resource.config_name}.conf" do
|
||||
path "#{include_dir}/#{new_resource.config_name}.conf"
|
||||
action :delete
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
250
cookbooks/mysql/libraries/provider_mysql_service_base.rb
Normal file
250
cookbooks/mysql/libraries/provider_mysql_service_base.rb
Normal file
@@ -0,0 +1,250 @@
|
||||
require 'chef/provider/lwrp_base'
|
||||
require_relative 'helpers'
|
||||
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlServiceBase < Chef::Provider::LWRPBase
|
||||
use_inline_resources if defined?(use_inline_resources)
|
||||
|
||||
def whyrun_supported?
|
||||
true
|
||||
end
|
||||
|
||||
# Mix in helpers from libraries/helpers.rb
|
||||
include MysqlCookbook::Helpers
|
||||
|
||||
# Service related methods referred to in the :create and :delete
|
||||
# actions need to be implemented in the init system subclasses.
|
||||
#
|
||||
# create_stop_system_service
|
||||
# delete_stop_service
|
||||
|
||||
# All other methods are found in libraries/helpers.rb
|
||||
#
|
||||
# etc_dir, run_dir, log_dir, etc
|
||||
|
||||
action :create do
|
||||
# Yum, Apt, etc. From helpers.rb
|
||||
configure_package_repositories
|
||||
|
||||
# Software installation
|
||||
package "#{new_resource.name} :create #{server_package_name}" do
|
||||
package_name server_package_name
|
||||
version parsed_version if node['platform'] == 'smartos'
|
||||
version new_resource.package_version
|
||||
action new_resource.package_action
|
||||
end
|
||||
|
||||
create_stop_system_service
|
||||
|
||||
# Apparmor
|
||||
configure_apparmor
|
||||
|
||||
# System users
|
||||
group "#{new_resource.name} :create mysql" do
|
||||
group_name 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
user "#{new_resource.name} :create mysql" do
|
||||
username 'mysql'
|
||||
gid 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
# Yak shaving secion. Account for random errata.
|
||||
#
|
||||
# Turns out that mysqld is hard coded to try and read
|
||||
# /etc/mysql/my.cnf, and its presence causes problems when
|
||||
# setting up multiple services.
|
||||
file "#{new_resource.name} :create #{prefix_dir}/etc/mysql/my.cnf" do
|
||||
path "#{prefix_dir}/etc/mysql/my.cnf"
|
||||
action :delete
|
||||
end
|
||||
|
||||
file "#{new_resource.name} :create #{prefix_dir}/etc/my.cnf" do
|
||||
path "#{prefix_dir}/etc/my.cnf"
|
||||
action :delete
|
||||
end
|
||||
|
||||
# mysql_install_db is broken on 5.6.13
|
||||
link "#{new_resource.name} :create #{prefix_dir}/usr/share/my-default.cnf" do
|
||||
target_file "#{prefix_dir}/usr/share/my-default.cnf"
|
||||
to "#{etc_dir}/my.cnf"
|
||||
action :create
|
||||
end
|
||||
|
||||
# Support directories
|
||||
directory "#{new_resource.name} :create #{etc_dir}" do
|
||||
path etc_dir
|
||||
owner new_resource.run_user
|
||||
group new_resource.run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :create #{include_dir}" do
|
||||
path include_dir
|
||||
owner new_resource.run_user
|
||||
group new_resource.run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :create #{run_dir}" do
|
||||
path run_dir
|
||||
owner new_resource.run_user
|
||||
group new_resource.run_group
|
||||
mode '0755'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :create #{log_dir}" do
|
||||
path log_dir
|
||||
owner new_resource.run_user
|
||||
group new_resource.run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :create #{parsed_data_dir}" do
|
||||
path parsed_data_dir
|
||||
owner new_resource.run_user
|
||||
group new_resource.run_group
|
||||
mode '0750'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
# Main configuration file
|
||||
template "#{new_resource.name} :create #{etc_dir}/my.cnf" do
|
||||
path "#{etc_dir}/my.cnf"
|
||||
source 'my.cnf.erb'
|
||||
cookbook 'mysql'
|
||||
owner new_resource.run_user
|
||||
group new_resource.run_group
|
||||
mode '0600'
|
||||
variables(
|
||||
config: new_resource,
|
||||
error_log: error_log,
|
||||
include_dir: include_dir,
|
||||
lc_messages_dir: lc_messages_dir,
|
||||
pid_file: pid_file,
|
||||
socket_file: socket_file,
|
||||
tmp_dir: tmp_dir,
|
||||
data_dir: parsed_data_dir
|
||||
)
|
||||
action :create
|
||||
end
|
||||
|
||||
# initialize database and create initial records
|
||||
bash "#{new_resource.name} :create initial records" do
|
||||
code init_records_script
|
||||
returns [0, 1, 2] # facepalm
|
||||
not_if "/usr/bin/test -f #{parsed_data_dir}/mysql/user.frm"
|
||||
action :run
|
||||
end
|
||||
end
|
||||
|
||||
action :delete do
|
||||
# Stop the service before removing support directories
|
||||
delete_stop_service
|
||||
|
||||
directory "#{new_resource.name} :delete #{etc_dir}" do
|
||||
path etc_dir
|
||||
recursive true
|
||||
action :delete
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :delete #{run_dir}" do
|
||||
path run_dir
|
||||
recursive true
|
||||
action :delete
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :delete #{log_dir}" do
|
||||
path log_dir
|
||||
recursive true
|
||||
action :delete
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Platform specific bits
|
||||
#
|
||||
def configure_apparmor
|
||||
# Do not add these resource if inside a container
|
||||
# Only valid on Ubuntu
|
||||
|
||||
unless ::File.exist?('/.dockerenv') || ::File.exist?('/.dockerinit')
|
||||
if node['platform'] == 'ubuntu'
|
||||
# Apparmor
|
||||
package "#{new_resource.name} :create apparmor" do
|
||||
package_name 'apparmor'
|
||||
action :install
|
||||
end
|
||||
|
||||
directory "#{new_resource.name} :create /etc/apparmor.d/local/mysql" do
|
||||
path '/etc/apparmor.d/local/mysql'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
recursive true
|
||||
action :create
|
||||
end
|
||||
|
||||
template "#{new_resource.name} :create /etc/apparmor.d/local/usr.sbin.mysqld" do
|
||||
path '/etc/apparmor.d/local/usr.sbin.mysqld'
|
||||
cookbook 'mysql'
|
||||
source 'apparmor/usr.sbin.mysqld-local.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
action :create
|
||||
notifies :restart, "service[#{new_resource.name} :create apparmor]", :immediately
|
||||
end
|
||||
|
||||
template "#{new_resource.name} :create /etc/apparmor.d/usr.sbin.mysqld" do
|
||||
path '/etc/apparmor.d/usr.sbin.mysqld'
|
||||
cookbook 'mysql'
|
||||
source 'apparmor/usr.sbin.mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
action :create
|
||||
notifies :restart, "service[#{new_resource.name} :create apparmor]", :immediately
|
||||
end
|
||||
|
||||
template "#{new_resource.name} :create /etc/apparmor.d/local/mysql/#{new_resource.instance}" do
|
||||
path "/etc/apparmor.d/local/mysql/#{new_resource.instance}"
|
||||
cookbook 'mysql'
|
||||
source 'apparmor/usr.sbin.mysqld-instance.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
data_dir: parsed_data_dir,
|
||||
mysql_name: mysql_name,
|
||||
log_dir: log_dir,
|
||||
run_dir: run_dir,
|
||||
pid_file: pid_file,
|
||||
socket_file: socket_file
|
||||
)
|
||||
action :create
|
||||
notifies :restart, "service[#{new_resource.name} :create apparmor]", :immediately
|
||||
end
|
||||
|
||||
service "#{new_resource.name} :create apparmor" do
|
||||
service_name 'apparmor'
|
||||
action :nothing
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
91
cookbooks/mysql/libraries/provider_mysql_service_smf.rb
Normal file
91
cookbooks/mysql/libraries/provider_mysql_service_smf.rb
Normal file
@@ -0,0 +1,91 @@
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlServiceSmf < Chef::Provider::MysqlServiceBase
|
||||
# FIXME: we should have a service_helper to determine if the platform supports SMF similarly
|
||||
# to how we handle systemd on linux
|
||||
if defined?(provides) # foodcritic ~FC023
|
||||
provides :mysql_service, os: %w(solaris2 omnios smartos openindiana opensolaris nexentacore) do
|
||||
File.exist?('/usr/sbin/svccfg')
|
||||
end
|
||||
end
|
||||
|
||||
action :start do
|
||||
method_script_path = "/lib/svc/method/#{mysql_name}" if node['platform'] == 'omnios'
|
||||
method_script_path = "/opt/local/lib/svc/method/#{mysql_name}" if node['platform'] == 'smartos'
|
||||
|
||||
template "#{new_resource.name} :start #{method_script_path}" do
|
||||
path method_script_path
|
||||
cookbook 'mysql'
|
||||
source 'smf/svc.method.mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0555'
|
||||
variables(
|
||||
base_dir: base_dir,
|
||||
data_dir: parsed_data_dir,
|
||||
defaults_file: defaults_file,
|
||||
error_log: error_log,
|
||||
mysql_name: mysql_name,
|
||||
mysqld_bin: mysqld_bin,
|
||||
pid_file: pid_file
|
||||
)
|
||||
action :create
|
||||
end
|
||||
|
||||
smf "#{new_resource.name} :start #{mysql_name}" do
|
||||
name mysql_name
|
||||
user new_resource.run_user
|
||||
group new_resource.run_group
|
||||
start_command "#{method_script_path} start"
|
||||
end
|
||||
|
||||
service "#{new_resource.name} :start #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Solaris
|
||||
supports restart: true
|
||||
action [:enable]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
service "#{new_resource.name} :stop #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Solaris
|
||||
supports restart: true
|
||||
action :stop
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
service "#{new_resource.name} :restart #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Solaris
|
||||
supports restart: true
|
||||
action :restart
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
service "#{new_resource.name} :reload #{mysql_name}" do
|
||||
provider Chef::Provider::Service::Solaris
|
||||
service_name mysql_name
|
||||
supports reload: true
|
||||
action :reload
|
||||
end
|
||||
end
|
||||
|
||||
def create_stop_system_service
|
||||
# nothing to do here
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
service "#{new_resource.name} :delete #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Solaris
|
||||
supports restart: true
|
||||
action :stop
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
135
cookbooks/mysql/libraries/provider_mysql_service_systemd.rb
Normal file
135
cookbooks/mysql/libraries/provider_mysql_service_systemd.rb
Normal file
@@ -0,0 +1,135 @@
|
||||
require_relative 'provider_mysql_service_base'
|
||||
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlServiceSystemd < Chef::Provider::MysqlServiceBase
|
||||
if defined?(provides) # foodcritic ~FC023
|
||||
provides :mysql_service, os: 'linux' do
|
||||
Chef::Platform::ServiceHelpers.service_resource_providers.include?(:systemd)
|
||||
end
|
||||
end
|
||||
|
||||
action :start do
|
||||
# Needed for Debian / Ubuntu
|
||||
directory '/usr/libexec' do
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
action :create
|
||||
end
|
||||
|
||||
# this script is called by the main systemd unit file, and
|
||||
# spins around until the service is actually up and running.
|
||||
template "#{new_resource.name} :start /usr/libexec/#{mysql_name}-wait-ready" do
|
||||
path "/usr/libexec/#{mysql_name}-wait-ready"
|
||||
source 'systemd/mysqld-wait-ready.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
variables(socket_file: socket_file)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
# this is the main systemd unit file
|
||||
template "#{new_resource.name} :start /lib/systemd/system/#{mysql_name}.service" do
|
||||
path "/lib/systemd/system/#{mysql_name}.service"
|
||||
source 'systemd/mysqld.service.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
config: new_resource,
|
||||
etc_dir: etc_dir,
|
||||
base_dir: base_dir,
|
||||
mysqld_bin: mysqld_bin
|
||||
)
|
||||
cookbook 'mysql'
|
||||
notifies :run, "execute[#{new_resource.name} :start systemctl daemon-reload]", :immediately
|
||||
action :create
|
||||
end
|
||||
|
||||
# avoid 'Unit file changed on disk' warning
|
||||
execute "#{new_resource.name} :start systemctl daemon-reload" do
|
||||
command '/bin/systemctl daemon-reload'
|
||||
action :nothing
|
||||
end
|
||||
|
||||
# tmpfiles.d config so the service survives reboot
|
||||
template "#{new_resource.name} :start /usr/lib/tmpfiles.d/#{mysql_name}.conf" do
|
||||
path "/usr/lib/tmpfiles.d/#{mysql_name}.conf"
|
||||
source 'tmpfiles.d.conf.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
run_dir: run_dir,
|
||||
run_user: new_resource.run_user,
|
||||
run_group: new_resource.run_group
|
||||
)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
# service management resource
|
||||
service "#{new_resource.name} :start #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports restart: true, status: true
|
||||
action [:enable, :start]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
# service management resource
|
||||
service "#{new_resource.name} :stop #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports status: true
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("/usr/lib/systemd/system/#{mysql_name}.service") }
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
# service management resource
|
||||
service "#{new_resource.name} :restart #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports restart: true
|
||||
action :restart
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
# service management resource
|
||||
service "#{new_resource.name} :reload #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
action :reload
|
||||
end
|
||||
end
|
||||
|
||||
def create_stop_system_service
|
||||
# service management resource
|
||||
service "#{new_resource.name} :create mysql" do
|
||||
service_name system_service_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports status: true
|
||||
action [:stop, :disable]
|
||||
end
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
# service management resource
|
||||
service "#{new_resource.name} :delete #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Systemd
|
||||
supports status: true
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("/usr/lib/systemd/system/#{mysql_name}.service") }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
89
cookbooks/mysql/libraries/provider_mysql_service_sysvinit.rb
Normal file
89
cookbooks/mysql/libraries/provider_mysql_service_sysvinit.rb
Normal file
@@ -0,0 +1,89 @@
|
||||
require_relative 'provider_mysql_service_base'
|
||||
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlServiceSysvinit < Chef::Provider::MysqlServiceBase
|
||||
provides :mysql_service, os: '!windows' if defined?(provides)
|
||||
|
||||
action :start do
|
||||
template "#{new_resource.name} :start /etc/init.d/#{mysql_name}" do
|
||||
path "/etc/init.d/#{mysql_name}"
|
||||
source 'sysvinit/mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
variables(
|
||||
config: new_resource,
|
||||
defaults_file: defaults_file,
|
||||
error_log: error_log,
|
||||
mysql_name: mysql_name,
|
||||
mysqladmin_bin: mysqladmin_bin,
|
||||
mysqld_safe_bin: mysqld_safe_bin,
|
||||
pid_file: pid_file,
|
||||
scl_name: scl_name
|
||||
)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
service "#{new_resource.name} :start #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Init::Redhat if node['platform_family'] == 'redhat'
|
||||
provider Chef::Provider::Service::Init::Insserv if node['platform_family'] == 'debian'
|
||||
supports restart: true, status: true
|
||||
action [:enable, :start]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
service "#{new_resource.name} :stop #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Init::Redhat if node['platform_family'] == 'redhat'
|
||||
provider Chef::Provider::Service::Init::Insserv if node['platform_family'] == 'debian'
|
||||
supports restart: true, status: true
|
||||
action [:stop]
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
service "#{new_resource.name} :restart #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Init::Redhat if node['platform_family'] == 'redhat'
|
||||
provider Chef::Provider::Service::Init::Insserv if node['platform_family'] == 'debian'
|
||||
supports restart: true
|
||||
action :restart
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
service "#{new_resource.name} :reload #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Init::Redhat if node['platform_family'] == 'redhat'
|
||||
provider Chef::Provider::Service::Init::Insserv if node['platform_family'] == 'debian'
|
||||
action :reload
|
||||
end
|
||||
end
|
||||
|
||||
def create_stop_system_service
|
||||
service "#{new_resource.name} :create #{system_service_name}" do
|
||||
service_name system_service_name
|
||||
provider Chef::Provider::Service::Init::Redhat if node['platform_family'] == 'redhat'
|
||||
provider Chef::Provider::Service::Init::Insserv if node['platform_family'] == 'debian'
|
||||
supports status: true
|
||||
action [:stop, :disable]
|
||||
end
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
service "#{new_resource.name} :delete #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Init::Redhat if node['platform_family'] == 'redhat'
|
||||
provider Chef::Provider::Service::Init::Insserv if node['platform_family'] == 'debian'
|
||||
supports status: true
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("#{etc_dir}/init.d/#{mysql_name}") }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
114
cookbooks/mysql/libraries/provider_mysql_service_upstart.rb
Normal file
114
cookbooks/mysql/libraries/provider_mysql_service_upstart.rb
Normal file
@@ -0,0 +1,114 @@
|
||||
require_relative 'provider_mysql_service_base'
|
||||
|
||||
class Chef
|
||||
class Provider
|
||||
class MysqlServiceUpstart < Chef::Provider::MysqlServiceBase
|
||||
if defined?(provides) # foodcritic ~FC023
|
||||
provides :mysql_service, os: 'linux' do
|
||||
Chef::Platform::ServiceHelpers.service_resource_providers.include?(:upstart) &&
|
||||
!Chef::Platform::ServiceHelpers.service_resource_providers.include?(:redhat)
|
||||
end
|
||||
end
|
||||
|
||||
action :start do
|
||||
template "#{new_resource.name} :start /usr/sbin/#{mysql_name}-wait-ready" do
|
||||
path "/usr/sbin/#{mysql_name}-wait-ready"
|
||||
source 'upstart/mysqld-wait-ready.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0755'
|
||||
variables(socket_file: socket_file)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
template "#{new_resource.name} :start /etc/init/#{mysql_name}.conf" do
|
||||
path "/etc/init/#{mysql_name}.conf"
|
||||
source 'upstart/mysqld.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0644'
|
||||
variables(
|
||||
defaults_file: defaults_file,
|
||||
mysql_name: mysql_name,
|
||||
run_group: new_resource.run_group,
|
||||
run_user: new_resource.run_user,
|
||||
socket_dir: socket_dir
|
||||
)
|
||||
cookbook 'mysql'
|
||||
action :create
|
||||
end
|
||||
|
||||
service "#{new_resource.name} :start #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
supports status: true
|
||||
action [:start]
|
||||
end
|
||||
end
|
||||
|
||||
action :stop do
|
||||
service "#{new_resource.name} :stop #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
supports restart: true, status: true
|
||||
action [:stop]
|
||||
end
|
||||
end
|
||||
|
||||
action :restart do
|
||||
# With Upstart, restarting the service doesn't behave "as expected".
|
||||
# We want the post-start stanzas, which wait until the
|
||||
# service is available before returning
|
||||
#
|
||||
# http://upstart.ubuntu.com/cookbook/#restart
|
||||
service "#{new_resource.name} :restart stop #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action :stop
|
||||
end
|
||||
|
||||
service "#{new_resource.name} :restart start #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action :start
|
||||
end
|
||||
end
|
||||
|
||||
action :reload do
|
||||
# With Upstart, reload just sends a HUP signal to the process.
|
||||
# As far as I can tell, this doesn't work the way it's
|
||||
# supposed to, so we need to actually restart the service.
|
||||
service "#{new_resource.name} :reload stop #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action :stop
|
||||
end
|
||||
|
||||
service "#{new_resource.name} :reload start #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action :start
|
||||
end
|
||||
end
|
||||
|
||||
def create_stop_system_service
|
||||
service "#{new_resource.name} :create #{system_service_name}" do
|
||||
service_name system_service_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
supports status: true
|
||||
action [:stop, :disable]
|
||||
end
|
||||
end
|
||||
|
||||
def delete_stop_service
|
||||
service "#{new_resource.name} :delete #{mysql_name}" do
|
||||
service_name mysql_name
|
||||
provider Chef::Provider::Service::Upstart
|
||||
action [:disable, :stop]
|
||||
only_if { ::File.exist?("#{etc_dir}/init/#{mysql_name}") }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
45
cookbooks/mysql/libraries/provider_priority_linux.rb
Normal file
45
cookbooks/mysql/libraries/provider_priority_linux.rb
Normal file
@@ -0,0 +1,45 @@
|
||||
|
||||
begin
|
||||
require 'chef/platform/provider_priority_map'
|
||||
rescue LoadError # rubocop: disable Lint/HandleExceptions
|
||||
end
|
||||
|
||||
require_relative 'provider_mysql_service_smf'
|
||||
require_relative 'provider_mysql_service_systemd'
|
||||
require_relative 'provider_mysql_service_sysvinit'
|
||||
require_relative 'provider_mysql_service_upstart'
|
||||
require_relative 'provider_mysql_config'
|
||||
require_relative 'provider_mysql_client'
|
||||
|
||||
if defined? Chef::Platform::ProviderPriorityMap
|
||||
Chef::Platform::ProviderPriorityMap.instance.priority(
|
||||
:mysql_service,
|
||||
[Chef::Provider::MysqlServiceSystemd, Chef::Provider::MysqlServiceUpstart, Chef::Provider::MysqlServiceSysvinit],
|
||||
os: 'linux'
|
||||
)
|
||||
else
|
||||
# provider mappings for Chef 11
|
||||
|
||||
# systemd service
|
||||
Chef::Platform.set platform: :fedora, version: '>= 19', resource: :mysql_service, provider: Chef::Provider::MysqlServiceSystemd
|
||||
Chef::Platform.set platform: :redhat, version: '>= 7.0', resource: :mysql_service, provider: Chef::Provider::MysqlServiceSystemd
|
||||
Chef::Platform.set platform: :centos, version: '>= 7.0', resource: :mysql_service, provider: Chef::Provider::MysqlServiceSystemd
|
||||
Chef::Platform.set platform: :scientific, version: '>= 7.0', resource: :mysql_service, provider: Chef::Provider::MysqlServiceSystemd
|
||||
Chef::Platform.set platform: :oracle, version: '>= 7.0', resource: :mysql_service, provider: Chef::Provider::MysqlServiceSystemd
|
||||
|
||||
# smf service
|
||||
Chef::Platform.set platform: :omnios, resource: :mysql_service, provider: Chef::Provider::MysqlServiceSmf
|
||||
Chef::Platform.set platform: :smartos, resource: :mysql_service, provider: Chef::Provider::MysqlServiceSmf
|
||||
|
||||
# upstart service
|
||||
Chef::Platform.set platform: :ubuntu, resource: :mysql_service, provider: Chef::Provider::MysqlServiceUpstart
|
||||
|
||||
# default service
|
||||
Chef::Platform.set resource: :mysql_service, provider: Chef::Provider::MysqlServiceSysvinit
|
||||
|
||||
# config
|
||||
Chef::Platform.set resource: :mysql_config, provider: Chef::Provider::MysqlConfig
|
||||
|
||||
# client
|
||||
Chef::Platform.set resource: :mysql_client, provider: Chef::Provider::MysqlClient
|
||||
end
|
||||
18
cookbooks/mysql/libraries/resource_mysql_client.rb
Normal file
18
cookbooks/mysql/libraries/resource_mysql_client.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
require 'chef/resource/lwrp_base'
|
||||
|
||||
class Chef
|
||||
class Resource
|
||||
class MysqlClient < Chef::Resource::LWRPBase
|
||||
provides :mysql_client
|
||||
|
||||
self.resource_name = :mysql_client
|
||||
actions :create, :delete
|
||||
default_action :create
|
||||
|
||||
attribute :client_name, kind_of: String, name_attribute: true, required: true
|
||||
attribute :package_name, kind_of: Array, default: nil
|
||||
attribute :package_version, kind_of: String, default: nil
|
||||
attribute :version, kind_of: String, default: nil # mysql_version
|
||||
end
|
||||
end
|
||||
end
|
||||
22
cookbooks/mysql/libraries/resource_mysql_config.rb
Normal file
22
cookbooks/mysql/libraries/resource_mysql_config.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
require 'chef/resource/lwrp_base'
|
||||
|
||||
class Chef
|
||||
class Resource
|
||||
class MysqlConfig < Chef::Resource::LWRPBase
|
||||
provides :mysql_config
|
||||
|
||||
self.resource_name = :mysql_config
|
||||
actions :create, :delete
|
||||
default_action :create
|
||||
|
||||
attribute :config_name, kind_of: String, name_attribute: true, required: true
|
||||
attribute :cookbook, kind_of: String, default: nil
|
||||
attribute :group, kind_of: String, default: 'mysql'
|
||||
attribute :instance, kind_of: String, default: 'default'
|
||||
attribute :owner, kind_of: String, default: 'mysql'
|
||||
attribute :source, kind_of: String, default: nil
|
||||
attribute :variables, kind_of: [Hash], default: nil
|
||||
attribute :version, kind_of: String, default: nil
|
||||
end
|
||||
end
|
||||
end
|
||||
31
cookbooks/mysql/libraries/resource_mysql_service.rb
Normal file
31
cookbooks/mysql/libraries/resource_mysql_service.rb
Normal file
@@ -0,0 +1,31 @@
|
||||
require 'chef/resource/lwrp_base'
|
||||
|
||||
class Chef
|
||||
class Resource
|
||||
class MysqlService < Chef::Resource::LWRPBase
|
||||
provides :mysql_service
|
||||
|
||||
self.resource_name = :mysql_service
|
||||
actions :create, :delete, :start, :stop, :restart, :reload
|
||||
default_action :create
|
||||
|
||||
attribute :charset, kind_of: String, default: 'utf8'
|
||||
attribute :data_dir, kind_of: String, default: nil
|
||||
attribute :initial_root_password, kind_of: String, default: 'ilikerandompasswords'
|
||||
attribute :instance, kind_of: String, name_attribute: true
|
||||
attribute :package_action, kind_of: Symbol, default: :install
|
||||
attribute :package_name, kind_of: String, default: nil
|
||||
attribute :package_version, kind_of: String, default: nil
|
||||
attribute :bind_address, kind_of: String, default: nil
|
||||
attribute :port, kind_of: [String, Integer], default: '3306'
|
||||
attribute :run_group, kind_of: String, default: 'mysql'
|
||||
attribute :run_user, kind_of: String, default: 'mysql'
|
||||
attribute :socket, kind_of: String, default: nil
|
||||
attribute :mysqld_options, kind_of: Hash, default: {}
|
||||
attribute :version, kind_of: String, default: nil
|
||||
attribute :error_log, kind_of: String, default: nil
|
||||
attribute :tmp_dir, kind_of: String, default: nil
|
||||
attribute :pid_file, kind_of: String, default: nil
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user