X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=puppet%2Fmanifests%2Fovercloud_controller_pacemaker.pp;h=ce8e81ee077aac95e1ecfa8e565b12db13586be0;hb=eaa66742a7de7be8df0f75c8fcb28b5e89572451;hp=4b956bfb33132d138aa31b95f5cf0d75c3de4828;hpb=01935785109a3dbe09978b23b733c00011886d3f;p=apex-tripleo-heat-templates.git diff --git a/puppet/manifests/overcloud_controller_pacemaker.pp b/puppet/manifests/overcloud_controller_pacemaker.pp index 4b956bfb..ce8e81ee 100644 --- a/puppet/manifests/overcloud_controller_pacemaker.pp +++ b/puppet/manifests/overcloud_controller_pacemaker.pp @@ -31,12 +31,21 @@ if !str2bool(hiera('enable_package_install', 'false')) { if $::hostname == downcase(hiera('bootstrap_nodeid')) { $pacemaker_master = true + $sync_db = true } else { $pacemaker_master = false + $sync_db = false } +# When to start and enable services which haven't been Pacemakerized +# FIXME: remove when we start all OpenStack services using Pacemaker +# (occurences of this variable will be gradually replaced with false) +$non_pcmk_start = hiera('step') >= 4 + if hiera('step') >= 1 { + create_resources(sysctl::value, hiera('sysctl_settings'), {}) + if count(hiera('ntp::servers')) > 0 { include ::ntp } @@ -50,7 +59,7 @@ if hiera('step') >= 1 { haproxy_service_manage => false, } - $pacemaker_cluster_members = regsubst(hiera('controller_node_ips'), ',', ' ', 'G') + $pacemaker_cluster_members = downcase(regsubst(hiera('controller_node_names'), ',', ' ', 'G')) user { 'hacluster': ensure => present, } -> @@ -103,8 +112,6 @@ if hiera('step') >= 1 { } $galera_nodes = downcase(hiera('galera_node_names', $::hostname)) $galera_nodes_count = count(split($galera_nodes, ',')) - $clustercheck_password = hiera('mysql_clustercheck_password') - $mysql_root_password = hiera('mysql::server::root_password') $mysqld_options = { 'mysqld' => { @@ -159,18 +166,15 @@ if hiera('step') >= 2 { pacemaker::resource::service { 'haproxy': clone_params => true, } - } - - # MongoDB - if downcase(hiera('ceilometer_backend')) == 'mongodb' { - $mongo_node_ips = split(hiera('mongo_node_ips'), ',') - $mongo_node_ips_with_port = suffix($mongo_node_ips, ':27017') - $mongo_node_string = join($mongo_node_ips_with_port, ',') - $mongodb_replset = hiera('mongodb::server::replset') - $ceilometer_mongodb_conn_string = "mongodb://${mongo_node_string}/ceilometer?replicaSet=${mongodb_replset}" - if downcase(hiera('bootstrap_nodeid')) == $::hostname { + pacemaker::resource::ocf { 'rabbitmq': + ocf_agent_name => 'heartbeat:rabbitmq-cluster', + resource_params => 'set_policy=\'ha-all ^(?!amq\.).* {"ha-mode":"all"}\'', + clone_params => 'ordered=true interleave=true', + require => Class['::rabbitmq'], + } + if downcase(hiera('ceilometer_backend')) == 'mongodb' { pacemaker::resource::service { $::mongodb::params::service_name : op_params => 'start timeout=120s', clone_params => true, @@ -179,19 +183,35 @@ if hiera('step') >= 2 { } # NOTE (spredzy) : The replset can only be run # once all the nodes have joined the cluster. + $mongo_node_ips = split(hiera('mongo_node_ips'), ',') + $mongo_node_ips_with_port = suffix($mongo_node_ips, ':27017') + $mongo_node_string = join($mongo_node_ips_with_port, ',') + $mongodb_replset = hiera('mongodb::server::replset') $mongodb_cluster_ready_command = join(suffix(prefix($mongo_node_ips, '/bin/nc -w1 '), ' 27017 < /dev/null'), ' && ') exec { 'mongodb-ready' : command => $mongodb_cluster_ready_command, - timeout => 600, - tries => 60, + timeout => 30, + tries => 180, try_sleep => 10, - before => Mongodb_replset[$mongodb_replset], } - mongodb_replset { $mongodb_replset : members => $mongo_node_ips_with_port, + require => Exec['mongodb-ready'], } } + + pacemaker::resource::ocf { 'galera' : + ocf_agent_name => 'heartbeat:galera', + op_params => 'promote timeout=300s on-fail=block --master', + meta_params => "master-max=${galera_nodes_count} ordered=true", + resource_params => "additional_parameters='--open-files-limit=16384' enable_creation=true wsrep_cluster_address='gcomm://${galera_nodes}'", + require => Class['::mysql::server'], + before => Exec['galera-ready'], + } + mysql_user { 'clustercheckuser@localhost' : + password_hash => mysql_password($clustercheck_password), + require => Exec['galera-ready'], + } } # Redis @@ -215,42 +235,20 @@ if hiera('step') >= 2 { } } - # Galera - if $pacemaker_master { - $sync_db = true - - pacemaker::resource::ocf { 'galera' : - ocf_agent_name => 'heartbeat:galera', - op_params => 'promote timeout=300s on-fail=block --master', - meta_params => "master-max=${galera_nodes_count} ordered=true", - resource_params => "additional_parameters='--open-files-limit=16384' enable_creation=true wsrep_cluster_address='gcomm://${galera_nodes}'", - require => Class['::mysql::server'], - before => Exec['galera-ready'], - } - - mysql_user { 'clustercheckuser@localhost' : - password_hash => mysql_password($clustercheck_password), - require => Exec['galera-ready'], - } - } else { - $sync_db = false - } - exec { 'galera-ready' : - command => '/bin/mysql -e "SHOW GLOBAL VARIABLES LIKE \'read_only\'" | /bin/grep -i off', - timeout => 3600, - tries => 60, - try_sleep => 60, - environment => 'HOME=/root', - require => Class['::mysql::server'], + command => '/usr/bin/clustercheck >/dev/null', + timeout => 30, + tries => 180, + try_sleep => 10, + environment => ["AVAILABLE_WHEN_READONLY=0"], + require => File['/etc/sysconfig/clustercheck'], } file { '/etc/sysconfig/clustercheck' : ensure => file, - content => "MYSQL_USERNAME=clustercheckuser\n -MYSQL_PASSWORD=${clustercheck_password}\n + content => "MYSQL_USERNAME=root\n +MYSQL_PASSWORD=''\n MYSQL_HOST=localhost\n", - require => Exec['galera-ready'], } xinetd::service { 'galera-monitor' : @@ -266,7 +264,6 @@ MYSQL_HOST=localhost\n", require => File['/etc/sysconfig/clustercheck'], } - # FIXME: this should only occur on the bootstrap host (ditto for db syncs) # Create all the database schemas # Example DSN format: mysql://user:password@host/dbname if $sync_db { @@ -338,16 +335,6 @@ MYSQL_HOST=localhost\n", } } - # RabbitMQ - if $pacemaker_master { - pacemaker::resource::ocf { 'rabbitmq': - ocf_agent_name => 'heartbeat:rabbitmq-cluster', - resource_params => 'set_policy=\'ha-all ^(?!amq\.).* {"ha-mode":"all"}\'', - clone_params => true, - require => Class['::rabbitmq'], - } - } - # pre-install swift here so we can build rings include ::swift @@ -372,10 +359,12 @@ MYSQL_HOST=localhost\n", } #END STEP 2 -if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { +if hiera('step') >= 3 { class { '::keystone': sync_db => $sync_db, + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, } #TODO: need a cleanup-keystone-tokens.sh solution here @@ -421,10 +410,14 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { # TODO: notifications, scrubber, etc. include ::glance class { 'glance::api': - known_stores => [$glance_store] + known_stores => [$glance_store], + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, } class { '::glance::registry' : sync_db => $sync_db, + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, } include join(['::glance::backend::', $glance_backend]) @@ -434,20 +427,45 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { class { '::nova::api' : sync_db => $sync_db, + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::nova::cert' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::nova::conductor' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::nova::consoleauth' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::nova::vncproxy' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::nova::scheduler' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, } - include ::nova::cert - include ::nova::conductor - include ::nova::consoleauth include ::nova::network::neutron - include ::nova::vncproxy - include ::nova::scheduler include ::neutron class { '::neutron::server' : sync_db => $sync_db, + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::neutron::agents::dhcp' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::neutron::agents::l3' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, } - include ::neutron::agents::dhcp - include ::neutron::agents::l3 file { '/etc/neutron/dnsmasq-neutron.conf': content => hiera('neutron_dnsmasq_options'), @@ -464,11 +482,15 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { } class { 'neutron::agents::ml2::ovs': + # manage_service => $non_pcmk_start, -- not implemented + enabled => $non_pcmk_start, bridge_mappings => split(hiera('neutron_bridge_mappings'), ','), tunnel_types => split(hiera('neutron_tunnel_types'), ','), } class { 'neutron::agents::metadata': + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, auth_url => join(['http://', hiera('controller_virtual_ip'), ':35357/v2.0']), } @@ -480,10 +502,18 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { include ::cinder class { '::cinder::api': sync_db => $sync_db, + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::cinder::scheduler' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::cinder::volume' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, } include ::cinder::glance - include ::cinder::scheduler - include ::cinder::volume class {'cinder::setup_test_volume': size => join([hiera('cinder_lvm_loop_device_size'), 'M']), } @@ -531,7 +561,10 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { } # swift proxy - include ::swift::proxy + class { '::swift::proxy' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } include ::swift::proxy::proxy_logging include ::swift::proxy::healthcheck include ::swift::proxy::cache @@ -546,9 +579,21 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { # swift storage if str2bool(hiera('enable_swift_storage', 'true')) { - class {'swift::storage::all': + class {'::swift::storage::all': mount_check => str2bool(hiera('swift_mount_check')) } + class {'::swift::storage::account': + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class {'::swift::storage::container': + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class {'::swift::storage::object': + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } if(!defined(File['/srv/node'])) { file { '/srv/node': ensure => directory, @@ -569,17 +614,35 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { $ceilometer_database_connection = hiera('ceilometer_mysql_conn_string') } default : { - $ceilometer_database_connection = $ceilometer_mongodb_conn_string + $ceilometer_database_connection = "mongodb://${mongo_node_string}/ceilometer?replicaSet=${mongodb_replset}" } } include ::ceilometer - include ::ceilometer::api - include ::ceilometer::agent::notification - include ::ceilometer::agent::central - include ::ceilometer::alarm::notifier - include ::ceilometer::alarm::evaluator + class { '::ceilometer::api' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::ceilometer::agent::notification' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::ceilometer::agent::central' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::ceilometer::alarm::notifier' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::ceilometer::alarm::evaluator' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::ceilometer::collector' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } include ::ceilometer::expirer - include ::ceilometer::collector class { '::ceilometer::db' : database_connection => $ceilometer_database_connection, sync_db => $sync_db, @@ -594,10 +657,22 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { class { '::heat' : sync_db => $sync_db, } - include ::heat::api - include ::heat::api_cfn - include ::heat::api_cloudwatch - include ::heat::engine + class { '::heat::api' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::heat::api_cfn' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::heat::api_cloudwatch' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } + class { '::heat::engine' : + manage_service => $non_pcmk_start, + enabled => $non_pcmk_start, + } # Horizon $vhost_params = { add_listen => false } @@ -617,3 +692,7 @@ if (hiera('step') >= 3 and $pacemaker_master) or hiera('step') >= 4 { } } #END STEP 3 + +if hiera('step') >= 4 { + # TODO: pacemaker::resource::service for OpenStack services go here +} #END STEP 4