# # Cookbook Name:: mariadb # Recipe:: server # # 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. # Chef::Recipe.send(:include, MariaDB::Helper) case node['mariadb']['install']['type'] when 'package' if use_os_native_package?(node['mariadb']['install']['prefer_os_package'], node['platform'], node['platform_version']) # currently, no releases with apt (e.g. ubuntu) ship mariadb # only provide one type of server here (with yum support) include_recipe "#{cookbook_name}::_redhat_server_native" else include_recipe "#{cookbook_name}::repository" case node['platform'] when 'debian', 'ubuntu' include_recipe "#{cookbook_name}::_debian_server" when 'redhat', 'centos', 'fedora', 'scientific', 'amazon' include_recipe "#{cookbook_name}::_redhat_server" end end when 'from_source' # To be filled as soon as possible end include_recipe "#{cookbook_name}::config" service 'mysql' do service_name node['mariadb']['mysqld']['service_name'] supports restart: true action :nothing end # move the datadir if needed if node['mariadb']['mysqld']['datadir'] != node['mariadb']['mysqld']['default_datadir'] bash 'move-datadir' do user 'root' code <<-EOH /bin/cp -a #{node['mariadb']['mysqld']['default_datadir']}/* \ #{node['mariadb']['mysqld']['datadir']} && /bin/rm -r #{node['mariadb']['mysqld']['default_datadir']} && /bin/ln -s #{node['mariadb']['mysqld']['datadir']} \ #{node['mariadb']['mysqld']['default_datadir']} EOH action :nothing end directory node['mariadb']['mysqld']['datadir'] do owner 'mysql' group 'mysql' mode 00750 action :create notifies :stop, 'service[mysql]', :immediately notifies :run, 'bash[move-datadir]', :immediately notifies :start, 'service[mysql]', :immediately only_if { !File.symlink?(node['mariadb']['mysqld']['default_datadir']) } end end # restart the service if needed # workaround idea from https://github.com/stissot Chef::Resource::Execute.send(:include, MariaDB::Helper) execute 'mariadb-service-restart-needed' do command 'true' only_if do mariadb_service_restart_required?( '127.0.0.1', node['mariadb']['mysqld']['port'], node['mariadb']['mysqld']['socket'] ) end notifies :restart, 'service[mysql]', :immediately end if node['mariadb']['allow_root_pass_change'] # Used to change root password after first install # Still experimental if node['mariadb']['server_root_password'].empty? md5 = Digest::MD5.hexdigest('empty') else md5 = Digest::MD5.hexdigest(node['mariadb']['server_root_password']) end file '/etc/mysql_root_change' do content md5 action :create notifies :run, 'execute[install-grants]', :immediately end end if node['mariadb']['allow_root_pass_change'] || node['mariadb']['forbid_remote_root'] execute 'install-grants' do # Add sensitive true when foodcritic #233 fixed command '/bin/bash /etc/mariadb_grants \'' + \ node['mariadb']['server_root_password'] + '\'' only_if { File.exist?('/etc/mariadb_grants') } action :nothing end template '/etc/mariadb_grants' do sensitive true source 'mariadb_grants.erb' owner 'root' group 'root' mode '0600' notifies :run, 'execute[install-grants]', :immediately end end # MariaDB Plugins include_recipe "#{cookbook_name}::plugins" if node['mariadb']['plugins_options']['auto_install']