Skip to content

Instantly share code, notes, and snippets.

@hagzag
Created June 7, 2014 07:34
Show Gist options
  • Save hagzag/7f7f7c6125d688959fe5 to your computer and use it in GitHub Desktop.
Save hagzag/7f7f7c6125d688959fe5 to your computer and use it in GitHub Desktop.
require 'chef/provider/lwrp_base'
require 'shellwords'
require_relative 'helpers'
extend Opscode::Mysql::Helpers
class Chef
class Provider
class MysqlService
class Rhel < Chef::Provider::MysqlService
use_inline_resources if defined?(use_inline_resources)
def whyrun_supported?
true
end
action :create do
case node['platform_version'].to_i.to_s
when '2013'
case new_resource.version
when '5.1'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysqld'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql-server'
service_name = 'mysqld'
when '5.5'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysqld'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql-server'
service_name = 'mysqld'
end
when '2014'
case new_resource.version
when '5.1'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysqld'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql-server'
service_name = 'mysqld'
when '5.5'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysqld'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql-server'
service_name = 'mysqld'
end
when '6'
case new_resource.version
when '5.1'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysqld'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql-server'
service_name = 'mysqld'
end
when '5'
case new_resource.version
when '5.0'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysqld'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql-server'
service_name = 'mysqld'
when '5.1'
base_dir = '/opt/rh/mysql51/root'
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/opt/rh/mysql51/root/usr'
lc_messages_dir = nil
run_dir = '/opt/rh/mysql51/root/var/run/mysqld/'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql51-mysql-server'
service_name = 'mysql51-mysqld'
when '5.5'
base_dir = '/opt/rh/mysql55/root'
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/opt/rh/mysql55/root/usr'
lc_messages_dir = nil
run_dir = '/opt/rh/mysql55/root/var/run/mysqld/'
pid_file = '/var/run/mysql/mysql.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql55-mysql-server'
service_name = 'mysql55-mysqld'
end
when '11.3' || '11'
case new_resource.version
when '5.5'
base_dir = ''
include_dir = "#{base_dir}/etc/mysql/conf.d"
prefix_dir = '/usr'
lc_messages_dir = nil
run_dir = '/var/run/mysql'
pid_file = '/var/run/mysql/mysqld.pid'
socket_file = '/var/lib/mysql/mysql.sock'
package_name = 'mysql'
service_name = 'mysql'
end
end
converge_by 'rhel pattern' do
package package_name do
action :install
end
directory include_dir do
owner 'mysql'
group 'mysql'
mode '0750'
recursive true
action :create
end
directory run_dir do
owner 'mysql'
group 'mysql'
mode '0755'
recursive true
action :create
end
directory new_resource.data_dir do
owner 'mysql'
group 'mysql'
mode '0755'
recursive true
action :create
end
service service_name do
supports :restart => true
action [:start, :enable]
end
execute 'wait for mysql' do
command "until [ -S #{socket_file} ] ; do sleep 1 ; done"
timeout 10
action :run
end
template '/etc/mysql_grants.sql' do
cookbook 'mysql'
source 'grants/grants.sql.erb'
owner 'root'
group 'root'
mode '0600'
variables(:config => new_resource)
action :create
notifies :run, 'execute[install-grants]'
end
if new_resource.server_root_password.empty?
pass_string = ''
else
pass_string = '-p' + Shellwords.escape(new_resource.server_root_password)
end
execute 'install-grants' do
cmd = "#{prefix_dir}/bin/mysql"
cmd << ' -u root '
cmd << "#{pass_string} < /etc/mysql_grants.sql"
command cmd
action :nothing
end
template "#{base_dir}/etc/my.cnf" do
if new_resource.template_source.nil?
source "#{new_resource.version}/my.cnf.erb"
cookbook 'mysql'
else
source new_resource.template_source
end
owner 'mysql'
group 'mysql'
mode '0600'
variables(
:base_dir => base_dir,
:data_dir => new_resource.data_dir,
:include_dir => include_dir,
:lc_messages_dir => lc_messages_dir,
:pid_file => pid_file,
:port => new_resource.port,
:socket_file => socket_file
)
action :create
notifies :run, 'bash[move mysql data to datadir]'
notifies :restart, "service[#{service_name}]"
end
bash 'move mysql data to datadir' do
user 'root'
code <<-EOH
service #{service_name} stop \
&& for i in `ls #{base_dir}/var/lib/mysql | grep -v mysql.sock` ; do mv #{base_dir}/var/lib/mysql/$i #{new_resource.data_dir} ; done
EOH
action :nothing
creates "#{new_resource.data_dir}/ibdata1"
creates "#{new_resource.data_dir}/ib_logfile0"
creates "#{new_resource.data_dir}/ib_logfile1"
end
execute 'assign-root-password' do
cmd = "#{prefix_dir}/bin/mysqladmin"
cmd << ' -u root password '
cmd << Shellwords.escape(new_resource.server_root_password)
command cmd
action :run
only_if "#{prefix_dir}/bin/mysql -u root -e 'show databases;'"
end
end
end
action :restart do
service_name = service_name_for(
node['platform'],
node['platform_family'],
node['platform_version'],
new_resource.version
)
converge_by 'rhel pattern' do
service service_name do
supports :restart => true
action :restart
end
end
end
action :reload do
service_name = service_name_for(
node['platform'],
node['platform_family'],
node['platform_version'],
new_resource.version
)
converge_by 'rhel pattern' do
service service_name do
action :reload
end
end
end
end
end
end
end
Chef::Platform.set :platform => :amazon, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :redhat, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :centos, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :oracle, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :scientific, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Chef::Platform.set :platform => :suse, :resource => :mysql_service, :provider => Chef::Provider::MysqlService::Rhel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment