Initial Chef repository
This commit is contained in:
141
cookbooks/mariadb/recipes/galera.rb
Normal file
141
cookbooks/mariadb/recipes/galera.rb
Normal file
@@ -0,0 +1,141 @@
|
||||
#
|
||||
# Cookbook Name:: mariadb
|
||||
# Recipe:: galera
|
||||
#
|
||||
# Copyright 2014, blablacar.com
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
case node['mariadb']['install']['type']
|
||||
when 'package'
|
||||
# include MariaDB repositories
|
||||
include_recipe "#{cookbook_name}::repository"
|
||||
|
||||
case node['platform']
|
||||
when 'debian', 'ubuntu'
|
||||
include_recipe "#{cookbook_name}::_debian_galera"
|
||||
when 'redhat', 'centos', 'fedora', 'scientific', 'amazon'
|
||||
include_recipe "#{cookbook_name}::_redhat_galera"
|
||||
end
|
||||
when 'from_source'
|
||||
# To be filled as soon as possible
|
||||
end
|
||||
|
||||
if node['mariadb']['galera']['wsrep_sst_method'] == 'rsync'
|
||||
package 'rsync' do
|
||||
action :install
|
||||
end
|
||||
else
|
||||
if node['mariadb']['galera']['wsrep_sst_method'] == 'xtrabackup'
|
||||
package 'percona-xtrabackup' do
|
||||
action :install
|
||||
end
|
||||
|
||||
package 'socat' do
|
||||
action :install
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
include_recipe "#{cookbook_name}::config"
|
||||
|
||||
galera_cluster_nodes = []
|
||||
if !node['mariadb'].attribute?('rspec') && Chef::Config[:solo]
|
||||
Chef::Log.warn('This recipe uses search. Chef Solo does not support search.')
|
||||
else
|
||||
if node['mariadb']['galera']['cluster_search_query'].empty?
|
||||
galera_cluster_nodes = search(
|
||||
:node, \
|
||||
"mariadb_galera_cluster_name:#{node['mariadb']['galera']['cluster_name']}"
|
||||
)
|
||||
else
|
||||
galera_cluster_nodes = search 'node', node['mariadb']['galera']['cluster_search_query']
|
||||
log 'Chef search results' do
|
||||
message "Searching for \"#{node['mariadb']['galera']['cluster_search_query']}\" \
|
||||
resulted in \"#{galera_cluster_nodes}\" ..."
|
||||
end
|
||||
end
|
||||
# Sort Nodes by fqdn
|
||||
galera_cluster_nodes.sort! { |x, y| x[:fqdn] <=> y[:fqdn] }
|
||||
end
|
||||
|
||||
first = true
|
||||
gcomm = 'gcomm://'
|
||||
galera_cluster_nodes.each do |lnode|
|
||||
next unless lnode.name != node.name
|
||||
gcomm += ',' unless first
|
||||
gcomm += lnode['fqdn']
|
||||
first = false
|
||||
end
|
||||
|
||||
galera_options = {}
|
||||
|
||||
galera_options['wsrep_cluster_address'] = gcomm
|
||||
galera_options['wsrep_cluster_name'] = \
|
||||
node['mariadb']['galera']['cluster_name']
|
||||
galera_options['wsrep_sst_method'] = \
|
||||
node['mariadb']['galera']['wsrep_sst_method']
|
||||
if node['mariadb']['galera'].attribute?('wsrep_sst_auth')
|
||||
galera_options['wsrep_sst_auth'] = \
|
||||
node['mariadb']['galera']['wsrep_sst_auth']
|
||||
end
|
||||
galera_options['wsrep_provider'] = \
|
||||
node['mariadb']['galera']['wsrep_provider']
|
||||
galera_options['wsrep_slave_threads'] = node['cpu']['total'] * 4
|
||||
node['mariadb']['galera']['options'].each do |key, value|
|
||||
galera_options[key] = value
|
||||
end
|
||||
|
||||
mariadb_configuration 'galera' do
|
||||
section 'mysqld'
|
||||
option galera_options
|
||||
action :add
|
||||
end
|
||||
|
||||
#
|
||||
# Under debian system we have to change the debian-sys-maint default password.
|
||||
# This password is the same for the overall cluster.
|
||||
#
|
||||
if platform?('debian', 'ubuntu')
|
||||
template '/etc/mysql/debian.cnf' do
|
||||
sensitive true
|
||||
source 'debian.cnf.erb'
|
||||
owner 'root'
|
||||
group 'root'
|
||||
mode '0600'
|
||||
end
|
||||
|
||||
execute 'correct-debian-grants' do
|
||||
# Add sensitive true when foodcritic #233 fixed
|
||||
command 'mysql -r -B -N -e "GRANT SELECT, INSERT, UPDATE, DELETE, '\
|
||||
'CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, '\
|
||||
'ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, '\
|
||||
'LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, '\
|
||||
'CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, '\
|
||||
"CREATE USER, EVENT, TRIGGER ON *.* TO '" + \
|
||||
node['mariadb']['debian']['user'] + \
|
||||
"'@'" + node['mariadb']['debian']['host'] + "' IDENTIFIED BY '" + \
|
||||
node['mariadb']['debian']['password'] + "' WITH GRANT OPTION\""
|
||||
action :run
|
||||
only_if do
|
||||
cmd = Mixlib::ShellOut.new("/usr/bin/mysql --user=\"" + \
|
||||
node['mariadb']['debian']['user'] + \
|
||||
"\" --password=\"" + node['mariadb']['debian']['password'] + \
|
||||
"\" -r -B -N -e \"SELECT 1\"")
|
||||
cmd.run_command
|
||||
cmd.error?
|
||||
end
|
||||
ignore_failure true
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user