database/sql: boostrap mysql on Red Hat / CentOS

Before starting the Galera cluster, we need to manually bootstrap MySQL
database.
It was done in MariaDB packages, but now for Red Hat, we don't use
anymore MariaDB repository.

This patch installs MySQL database and notify the bootstrap.

Closes-bug #567
This commit is contained in:
Emilien Macchi 2014-08-07 11:09:06 +02:00
parent ea76dbef74
commit 7837b3f637
2 changed files with 143 additions and 93 deletions

View File

@ -65,12 +65,103 @@ class cloud::database::sql (
$gcomm_definition = inline_template('<%= @galera_internal_ips.join(",") + "?pc.wait_prim=no" -%>')
# Specific to the Galera master node
if $::hostname == $galera_master_name {
$mysql_service_name = 'mysql-bootstrap'
$mysql_root_password_real = $mysql_root_password
# OpenStack DB
class { 'keystone::db::mysql':
mysql_module => '2.2',
dbname => 'keystone',
user => $keystone_db_user,
password => $keystone_db_password,
host => $keystone_db_host,
allowed_hosts => $keystone_db_allowed_hosts,
}
class { 'glance::db::mysql':
mysql_module => '2.2',
dbname => 'glance',
user => $glance_db_user,
password => $glance_db_password,
host => $glance_db_host,
allowed_hosts => $glance_db_allowed_hosts,
}
class { 'nova::db::mysql':
mysql_module => '2.2',
dbname => 'nova',
user => $nova_db_user,
password => $nova_db_password,
host => $nova_db_host,
allowed_hosts => $nova_db_allowed_hosts,
}
class { 'cinder::db::mysql':
mysql_module => '2.2',
dbname => 'cinder',
user => $cinder_db_user,
password => $cinder_db_password,
host => $cinder_db_host,
allowed_hosts => $cinder_db_allowed_hosts,
}
class { 'neutron::db::mysql':
mysql_module => '2.2',
dbname => 'neutron',
user => $neutron_db_user,
password => $neutron_db_password,
host => $neutron_db_host,
allowed_hosts => $neutron_db_allowed_hosts,
}
class { 'heat::db::mysql':
mysql_module => '2.2',
dbname => 'heat',
user => $heat_db_user,
password => $heat_db_password,
host => $heat_db_host,
allowed_hosts => $heat_db_allowed_hosts,
}
class { 'trove::db::mysql':
mysql_module => '2.2',
dbname => 'trove',
user => $trove_db_user,
password => $trove_db_password,
host => $trove_db_host,
allowed_hosts => $trove_db_allowed_hosts,
}
# Monitoring DB
mysql_database { 'monitoring':
ensure => 'present',
charset => 'utf8',
collate => 'utf8_unicode_ci',
require => File['/root/.my.cnf']
}
mysql_user { "${galera_clustercheck_dbuser}@localhost":
ensure => 'present',
# can not change password in clustercheck script
password_hash => mysql_password($galera_clustercheck_dbpassword),
require => File['/root/.my.cnf']
}
mysql_grant { "${galera_clustercheck_dbuser}@localhost/monitoring":
ensure => 'present',
options => ['GRANT'],
privileges => ['ALL'],
table => 'monitoring.*',
user => "${galera_clustercheck_dbuser}@localhost",
}
Database_user<<| |>>
} else {
$mysql_service_name = 'mysql'
# NOTE(sileht): Only the master must create the password
# into the database, slave nodes must just use the password.
# The one in the database have been retrieved via galera.
file { "${::root_home}/.my.cnf":
content => "[client]\nuser=root\nhost=localhost\npassword=${mysql_root_password}\n",
owner => 'root',
mode => '0600',
}
}
# Specific to Red Hat or Debian systems:
case $::osfamily {
'RedHat': {
# Specific to Red Hat
@ -79,6 +170,12 @@ class cloud::database::sql (
$wsrep_provider = '/usr/lib64/galera/libgalera_smm.so'
$mysql_server_config_file = '/etc/my.cnf'
if $::hostname == $galera_master_name {
$mysql_service_name = 'mysql-bootstrap'
} else {
$mysql_service_name = 'mariadb'
}
$dirs = [ '/var/run/mysqld', '/var/log/mysql' ]
file { $dirs:
@ -87,6 +184,18 @@ class cloud::database::sql (
before => Service['mysqld'],
owner => 'mysql'
}
# In Red Hat, the package does not perform the mysql db installation.
# We need to do this manually.
# Note: in MariaDB repository, package perform this action in post-install,
# but MariaDB is not packaged for Red Hat / CentOS 7 in MariaDB repository.
exec { 'bootstrap-mysql':
command => '/usr/bin/mysql_install_db --rpm --user=mysql',
unless => 'test -d /var/lib/mysql/mysql',
notify => Service['mysqld'],
require => [Package['mysql-server'], File[$mysql_server_config_file]]
}
} # RedHat
'Debian': {
# Specific to Debian / Ubuntu
@ -95,6 +204,12 @@ class cloud::database::sql (
$wsrep_provider = '/usr/lib/galera/libgalera_smm.so'
$mysql_server_config_file = '/etc/mysql/my.cnf'
if $::hostname == $galera_master_name {
$mysql_service_name = 'mysql-bootstrap'
} else {
$mysql_service_name = 'mysql'
}
mysql_user { 'debian-sys-maint@localhost':
ensure => 'present',
password_hash => mysql_password($mysql_sys_maint_password),
@ -152,7 +267,7 @@ class cloud::database::sql (
package_name => $mysql_server_package_name,
service_name => $mysql_service_name,
override_options => { 'mysqld' => { 'bind-address' => $api_eth } },
root_password => $mysql_root_password,
root_password => $mysql_root_password_real,
notify => Service['xinetd'],
}
@ -169,93 +284,6 @@ class cloud::database::sql (
package_name => $mysql_client_package_name,
}
if $::hostname == $galera_master_name {
# OpenStack DB
class { 'keystone::db::mysql':
mysql_module => '2.2',
dbname => 'keystone',
user => $keystone_db_user,
password => $keystone_db_password,
host => $keystone_db_host,
allowed_hosts => $keystone_db_allowed_hosts,
}
class { 'glance::db::mysql':
mysql_module => '2.2',
dbname => 'glance',
user => $glance_db_user,
password => $glance_db_password,
host => $glance_db_host,
allowed_hosts => $glance_db_allowed_hosts,
}
class { 'nova::db::mysql':
mysql_module => '2.2',
dbname => 'nova',
user => $nova_db_user,
password => $nova_db_password,
host => $nova_db_host,
allowed_hosts => $nova_db_allowed_hosts,
}
class { 'cinder::db::mysql':
mysql_module => '2.2',
dbname => 'cinder',
user => $cinder_db_user,
password => $cinder_db_password,
host => $cinder_db_host,
allowed_hosts => $cinder_db_allowed_hosts,
}
class { 'neutron::db::mysql':
mysql_module => '2.2',
dbname => 'neutron',
user => $neutron_db_user,
password => $neutron_db_password,
host => $neutron_db_host,
allowed_hosts => $neutron_db_allowed_hosts,
}
class { 'heat::db::mysql':
mysql_module => '2.2',
dbname => 'heat',
user => $heat_db_user,
password => $heat_db_password,
host => $heat_db_host,
allowed_hosts => $heat_db_allowed_hosts,
}
class { 'trove::db::mysql':
mysql_module => '2.2',
dbname => 'trove',
user => $trove_db_user,
password => $trove_db_password,
host => $trove_db_host,
allowed_hosts => $trove_db_allowed_hosts,
}
# Monitoring DB
mysql_database { 'monitoring':
ensure => 'present',
charset => 'utf8',
collate => 'utf8_unicode_ci',
require => File['/root/.my.cnf']
}
mysql_user { "${galera_clustercheck_dbuser}@localhost":
ensure => 'present',
# can not change password in clustercheck script
password_hash => mysql_password($galera_clustercheck_dbpassword),
require => File['/root/.my.cnf']
}
mysql_grant { "${galera_clustercheck_dbuser}@localhost/monitoring":
ensure => 'present',
options => ['GRANT'],
privileges => ['ALL'],
table => 'monitoring.*',
user => "${galera_clustercheck_dbuser}@localhost",
}
Database_user<<| |>>
} # if $::hostname == $galera_master
# Haproxy http monitoring
file_line { 'mysqlchk-in-etc-services':

View File

@ -71,14 +71,13 @@ describe 'cloud::database::sql' do
it 'configure mysql galera server' do
should contain_class('mysql::client').with(
:package_name => platform_params[:mysql_client_package_name]
)
)
should contain_class('mysql::server').with(
:package_name => platform_params[:mysql_server_package_name],
:root_password => params[:mysql_root_password],
:override_options => { 'mysqld' => { 'bind-address' => '10.0.0.1' } },
:notify => 'Service[xinetd]'
)
)
should contain_file(platform_params[:mysql_server_config_file]).with_content(/^wsrep_cluster_name\s*= "galera_cluster"$/)
should contain_file(platform_params[:mysql_server_config_file]).with_content(/^wsrep_node_address\s*= "#{params[:api_eth]}"$/)
@ -107,6 +106,15 @@ describe 'cloud::database::sql' do
facts.merge!( :hostname => 'os-ci-test1' )
end
it 'configure mysql server' do
should contain_class('mysql::server').with(
:package_name => platform_params[:mysql_server_package_name],
:root_password => 'secrete',
:override_options => { 'mysqld' => { 'bind-address' => '10.0.0.1' } },
:notify => 'Service[xinetd]'
)
end
it 'configure keystone database' do
should contain_class('keystone::db::mysql').with(
:mysql_module => '2.2',
@ -191,6 +199,20 @@ describe 'cloud::database::sql' do
)
end # configure monitoring database
end # configure databases on the galera master server
context 'Bootstrap MySQL database on RedHat plaforms' do
before :each do
facts.merge!( :osfamily => 'RedHat' )
end
it 'configure mysql database' do
should contain_exec('bootstrap-mysql').with(
:command => '/usr/bin/mysql_install_db --rpm --user=mysql',
:unless => "test -d /var/lib/mysql/mysql",
:notify => 'Service[mysqld]'
)
end
end
end # openstack database sql
context 'on Debian platforms' do