Merge pull request #568 from enovance/issue/567/emilien

database/sql: boostrap mysql on Red Hat / CentOS
This commit is contained in:
Emilien Macchi 2014-08-07 21:20:09 +02:00
commit bcdc407228
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