From 7aca0c5f1c2b4dbd6b56b762c0bde69f24cf0881 Mon Sep 17 00:00:00 2001 From: Mykyta Karpin Date: Mon, 29 Feb 2016 17:18:35 +0200 Subject: [PATCH] Fix idempotency for Ceilometer Redis plugin Change-Id: I4acf9f2fc86a3d00345ce5a0dcde227f77106bfb Closes-Bug: #1528827 --- .../puppet/modules/redis/manifests/main.pp | 202 +++++------------- 1 file changed, 57 insertions(+), 145 deletions(-) diff --git a/deployment_scripts/puppet/modules/redis/manifests/main.pp b/deployment_scripts/puppet/modules/redis/manifests/main.pp index 1212343..11f3106 100644 --- a/deployment_scripts/puppet/modules/redis/manifests/main.pp +++ b/deployment_scripts/puppet/modules/redis/manifests/main.pp @@ -71,6 +71,23 @@ class redis::main ( } } + $metadata = { + 'resource-stickiness' => '1', + } + + $operations = { + 'monitor' => { + 'interval' => '20', + 'timeout' => '10', + }, + 'start' => { + 'timeout' => '360', + }, + 'stop' => { + 'timeout' => '360', + }, + } + firewall {'121 redis_port': port => $redis_port, proto => 'tcp', @@ -91,8 +108,8 @@ class redis::main ( # Use custom function to generate sentinel configuration $sentinel_confs = sentinel_confs($redis_hosts, $redis_port, $quorum, - $parallel_syncs, $down_after_milliseconds, - $failover_timeout) + $parallel_syncs, $down_after_milliseconds, + $failover_timeout) package {'python-redis': ensure => 'present', @@ -101,8 +118,8 @@ class redis::main ( class { '::redis': conf_bind => $redis_bind_address, conf_slave_read_only => 'no', - service_enable => false, - service_ensure => 'stopped', + service_enable => true, + service_ensure => 'running', conf_slaveof => $conf_slaveof, } -> @@ -119,152 +136,16 @@ class redis::main ( 'notification/workload_partitioning': value => true } - if $primary_controller { - exec {'remove_old_resource_central_agent': - path => '/usr/sbin:/usr/bin:/sbin:/bin', - command => 'pcs resource delete p_ceilometer-agent-central --wait=120', - onlyif => 'pcs resource show p_ceilometer-agent-central > /dev/null 2>&1', - } - - exec {'remove_old_resource_alarm_evaluator': - path => '/usr/sbin:/usr/bin:/sbin:/bin', - command => 'pcs resource delete p_ceilometer-alarm-evaluator --wait=120', - onlyif => 'pcs resource show p_ceilometer-alarm-evaluator > /dev/null 2>&1', - } - - Exec['remove_old_resource_central_agent'] -> Cluster::Corosync::Cs_service["$::ceilometer::params::agent_central_service_name"] - Exec['remove_old_resource_alarm_evaluator'] -> Cluster::Corosync::Cs_service["$::ceilometer::params::alarm_evaluator_service_name"] - } - - file {'redis_ocf_script': - path => '/usr/lib/ocf/resource.d/fuel/redis-server', - owner => 'root', - group => 'root', - mode => '0755', - source => 'puppet:///modules/redis/ocf/redis-server' - } - - cluster::corosync::cs_service { "$::ceilometer::params::agent_central_service_name": - ocf_script => 'ceilometer-agent-central', - csr_parameters => {}, - csr_metadata => undef, - csr_complex_type => 'clone', - csr_ms_metadata => { 'interleave' => true }, - csr_mon_intr => '20', - csr_mon_timeout => '10', - csr_timeout => '60', - service_name => $::ceilometer::params::agent_central_service_name, - package_name => $::ceilometer::params::agent_central_package_name, - service_title => 'ceilometer-agent-central', - primary => $primary_controller, - hasrestart => false, - } - - cluster::corosync::cs_service { "$::ceilometer::params::alarm_evaluator_service_name": - ocf_script => 'ceilometer-alarm-evaluator', - csr_parameters => {}, - csr_metadata => undef, - csr_complex_type => 'clone', - csr_ms_metadata => { 'interleave' => true }, - csr_mon_intr => '20', - csr_mon_timeout => '10', - csr_timeout => '60', - service_name => $::ceilometer::params::alarm_evaluator_service_name, - package_name => $::ceilometer::params::alarm_evaluator_package_name, - service_title => 'ceilometer-alarm-evaluator', - primary => $primary_controller, - hasrestart => false, - } - - cluster::corosync::cs_service { 'redis': - ocf_script => 'redis-server', - csr_parameters => {}, - csr_metadata => undef, - csr_complex_type => 'clone', - csr_ms_metadata => { 'interleave' => true }, - csr_mon_intr => '20', - csr_mon_timeout => '10', - csr_timeout => '60', - service_name => $::redis::params::service, - package_name => $::redis::params::package, - service_title => 'redis', - primary => $primary_controller, - hasrestart => false, - } - - - File['redis_ocf_script'] -> - Cluster::Corosync::Cs_service['redis'] -> - Ceilometer_config <||> -> - Cluster::Corosync::Cs_service["$::ceilometer::params::agent_central_service_name"] -> - Cluster::Corosync::Cs_service["$::ceilometer::params::alarm_evaluator_service_name"] - - if !$primary_controller { - exec {'waiting-for-agent-up-on-primary': - tries => 10, - try_sleep => 30, - command => "pcs resource | grep -A 1 p_${::ceilometer::params::agent_central_service_name} | grep Started > /dev/null 2>&1", - path => '/usr/sbin:/usr/bin:/sbin:/bin', - } - - exec {'waiting-for-evaluator-up-on-primary': - tries => 10, - try_sleep => 30, - command => "pcs resource | grep -A 1 p_${::ceilometer::params::alarm_evaluator_service_name} | grep Started > /dev/null 2>&1", - path => '/usr/sbin:/usr/bin:/sbin:/bin', - } - - exec {'waiting-for-redis-up-on-primary': - tries => 10, - try_sleep => 30, - command => "pcs resource | grep -A 1 p_${::redis::params::service} | grep Started > /dev/null 2>&1", - path => '/usr/sbin:/usr/bin:/sbin:/bin', - } - - service {"p_${::ceilometer::params::agent_central_service_name}": - enable => true, - ensure => 'running', - hasstatus => true, - hasrestart => true, - provider => 'pacemaker', - } - - service {"p_${::ceilometer::params::alarm_evaluator_service_name}": - enable => true, - ensure => 'running', - hasstatus => true, - hasrestart => true, - provider => 'pacemaker', - } - - service {"p_${::redis::params::service}": - enable => true, - ensure => 'running', - hasstatus => true, - hasrestart => true, - provider => 'pacemaker', - } - - Exec['waiting-for-redis-up-on-primary'] -> - Service["p_${::redis::params::service}"] -> - Cluster::Corosync::Cs_service['redis'] -> - Exec['waiting-for-agent-up-on-primary'] -> - Ceilometer_config <||> -> - Cluster::Corosync::Cs_service["$::ceilometer::params::agent_central_service_name"] -> - Exec['waiting-for-evaluator-up-on-primary'] -> - Cluster::Corosync::Cs_service["$::ceilometer::params::alarm_evaluator_service_name"] - } - service { 'ceilometer-agent-central': - ensure => 'stopped', + ensure => 'running', name => $::ceilometer::params::agent_central_service_name, - enable => false, + enable => true, } service { 'ceilometer-alarm-evaluator': - ensure => 'stopped', + ensure => 'running', name => $::ceilometer::params::alarm_evaluator_service_name, - enable => false, + enable => true, } service { 'ceilometer-agent-notification': @@ -275,6 +156,37 @@ class redis::main ( hasrestart => true, } + pacemaker_wrappers::service { $::ceilometer::params::agent_central_service_name : + complex_type => 'clone', + ms_metadata => { 'interleave' => true }, + primitive_type => 'ceilometer-agent-central', + metadata => $metadata, + parameters => { 'user' => 'ceilometer' }, + operations => $operations, + } + + pacemaker_wrappers::service { $::ceilometer::params::alarm_evaluator_service_name : + complex_type => 'clone', + ms_metadata => { 'interleave' => true }, + primitive_type => 'ceilometer-alarm-evaluator', + metadata => $metadata, + parameters => { 'user' => 'ceilometer' }, + operations => $operations, + } + + pacemaker_wrappers::service { 'redis-server' : + ocf_script_file => 'redis/ocf/redis-server', + complex_type => 'clone', + ms_metadata => { 'interleave' => true }, + primitive_type => 'redis-server', + operations => $operations, + } + + Pacemaker_wrappers::Service['redis-server'] -> + Ceilometer_config <||> -> + Pacemaker_wrappers::Service["$::ceilometer::params::agent_central_service_name"] -> + Pacemaker_wrappers::Service["$::ceilometer::params::alarm_evaluator_service_name"] + Ceilometer_config <||> ~> Service['ceilometer-agent-notification'] -} +} \ No newline at end of file