diff --git a/deployment_scripts/puppet/manifests/create_redis_ocf.pp b/deployment_scripts/puppet/manifests/create_redis_ocf.pp new file mode 100644 index 0000000..1c71971 --- /dev/null +++ b/deployment_scripts/puppet/manifests/create_redis_ocf.pp @@ -0,0 +1,24 @@ +include redis::params + +$ensure = 'present' +$service_name = $redis::params::service +$ocf_root_path = '/usr/lib/ocf' +$handler_root_path = '/usr/local/bin' +$primitive_provider = 'fuel' +$primitive_type = $redis::params::service +$ocf_script_name = "${service_name}-ocf-file" +$ocf_script_file = 'redis/ocf/redis-server' +$ocf_handler_name = "ocf_handler_${service_name}" +$ocf_dir_path = "${ocf_root_path}/resource.d" +$ocf_script_path = "${ocf_dir_path}/${primitive_provider}/${$primitive_type}" +$ocf_handler_path = "${handler_root_path}/${ocf_handler_name}" + + +file { $ocf_script_name : + ensure => $ensure, + path => $ocf_script_path, + mode => '0755', + owner => 'root', + group => 'root', + source => "puppet:///modules/${ocf_script_file}", +} diff --git a/deployment_scripts/puppet/modules/redis/manifests/main.pp b/deployment_scripts/puppet/modules/redis/manifests/main.pp index c820760..86976f8 100644 --- a/deployment_scripts/puppet/modules/redis/manifests/main.pp +++ b/deployment_scripts/puppet/modules/redis/manifests/main.pp @@ -58,6 +58,7 @@ class redis::main ( ) { include ceilometer::params + include aodh::params include redis::params case $::osfamily { @@ -142,18 +143,24 @@ class redis::main ( 'coordination/check_watchers' : value => $timeout; } + aodh_config { + 'coordination/backend_url' : value => redis_backend_url($redis_hosts, $redis_sentinel_port, $timeout, $master_name); + 'coordination/heartbeat' : value => '1.0'; + 'coordination/check_watchers' : value => $timeout; + } + service { 'ceilometer-agent-central': - ensure => 'running', - name => $::ceilometer::params::agent_central_service_name, - enable => true, + ensure => 'running', + name => $::ceilometer::params::agent_central_service_name, + enable => true, hasstatus => true, hasrestart => true, } - service { 'ceilometer-alarm-evaluator': - ensure => 'running', - name => $::ceilometer::params::alarm_evaluator_service_name, - enable => true, + service { 'aodh-evaluator': + ensure => 'running', + name => $::aodh::params::evaluator_service_name, + enable => true, hasstatus => true, hasrestart => true, } @@ -166,38 +173,74 @@ 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::service { $::ceilometer::params::agent_central_service_name : + complex_type => 'clone', + complex_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::service { $::aodh::params::evaluator_service_name : + complex_type => 'clone', + complex_metadata => { 'interleave' => true }, + primitive_type => 'aodh-evaluator', + metadata => $metadata, + parameters => { 'user' => 'aodh' }, + 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::service { 'redis-server' : + ocf_script_file => 'redis/ocf/redis-server', + complex_type => 'clone', + complex_metadata => { 'interleave' => true }, + primitive_type => 'redis-server', + operations => $operations, } - Pacemaker_wrappers::Service['redis-server'] -> - Pacemaker_wrappers::Service["$::ceilometer::params::agent_central_service_name"] -> - Pacemaker_wrappers::Service["$::ceilometer::params::alarm_evaluator_service_name"] + # During deploy of plugin we need to update resource type from simple to + # clone, but this is not working with current implementation of pcmk_resource + # type (https://bugs.launchpad.net/fuel/+bug/1580660), that's why we need a + # workaround below, this dirty workaround should be removed once + # https://bugs.launchpad.net/fuel/+bug/1580660 is fixed. + $old_ceilometer_primitive_exists=inline_template("<%= `if pcs resource show | grep -q '^ p_ceilometer-agent-central'; then /bin/echo true; fi;`%>") + $old_aodh_primitive_exists=inline_template("<%= `if pcs resource show | grep -q '^ p_aodh-evaluator'; then /bin/echo true; fi;`%>") + + if $old_ceilometer_primitive_exists { + + notify { "Ceilometer agent central simple primitive exists and will be removed": } + + exec { 'remove_old_resource_central_agent': + path => '/usr/sbin:/usr/bin:/sbin:/bin', + command => 'pcs resource delete p_ceilometer-agent-central --wait=120', + } + Exec['remove_old_resource_central_agent'] -> + Pacemaker::Service['redis-server'] -> + Pacemaker::Service["$::ceilometer::params::agent_central_service_name"] + } else { + Pacemaker::Service['redis-server'] -> + Pacemaker::Service["$::ceilometer::params::agent_central_service_name"] + } + + if $old_aodh_primitive_exists { + + notify { "Aodh evaluator simple primitive exists and will be removed": } + + exec { 'remove_old_resource_aodh_evaluator': + path => '/usr/sbin:/usr/bin:/sbin:/bin', + command => 'pcs resource delete p_aodh-evaluator --wait=120', + } + Exec['remove_old_resource_aodh_evaluator'] -> + Pacemaker::Service['redis-server'] -> + Pacemaker::Service["$::aodh::params::evaluator_service_name"] + } else { + Pacemaker::Service['redis-server'] -> + Pacemaker::Service["$::aodh::params::evaluator_service_name"] + } Ceilometer_config <||> ~> Service["$::ceilometer::params::agent_central_service_name"] - Ceilometer_config <||> ~> Service["$::ceilometer::params::alarm_evaluator_service_name"] + Aodh_config <||> ~> Service["$::aodh::params::evaluator_service_name"] Ceilometer_config <||> ~> Service['ceilometer-agent-notification'] } diff --git a/deployment_tasks.yaml b/deployment_tasks.yaml index df65581..5d5c407 100644 --- a/deployment_tasks.yaml +++ b/deployment_tasks.yaml @@ -1,8 +1,46 @@ -- id: ceilometer_redis +## we must upload ocf scripts on all controllers before +## create clone resources. +- id: primary_create_redis_ocf type: puppet - groups: [primary-controller, controller] + groups: [primary-controller] required_for: [deploy_end] requires: [ceilometer-controller] + parameters: + puppet_manifest: "puppet/manifests/create_redis_ocf.pp" + puppet_modules: "puppet/modules:/etc/puppet/modules" + timeout: 180 + +- id: create_redis_ocf + type: puppet + groups: [controller] + required_for: [deploy_end] + requires: [ceilometer-controller] + cross-depends: + - name: primary_create_redis_ocf + parameters: + puppet_manifest: "puppet/manifests/create_redis_ocf.pp" + puppet_modules: "puppet/modules:/etc/puppet/modules" + timeout: 180 + +- id: primary_ceilometer_redis + type: puppet + groups: [primary-controller] + required_for: [deploy_end] + requires: [ceilometer-controller] + cross-depends: + - name: create_redis_ocf + parameters: + puppet_manifest: "puppet/manifests/controller.pp" + puppet_modules: "puppet/modules:/etc/puppet/modules" + timeout: 3600 + +- id: ceilometer_redis + type: puppet + groups: [controller] + required_for: [deploy_end] + requires: [ceilometer-controller] + cross-depends: + - name: primary_ceilometer_redis parameters: puppet_manifest: "puppet/manifests/controller.pp" puppet_modules: "puppet/modules:/etc/puppet/modules" diff --git a/metadata.yaml b/metadata.yaml index 875480c..8dd01ff 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -7,7 +7,7 @@ version: 1.0.2 # Description description: Ceilometer extension that provides a workload-partitioning and HA for ceilometer services # Required fuel version -fuel_version: ['7.0','8.0'] +fuel_version: ['9.0'] # Specify license of your plugin licenses: ['Apache License Version 2.0'] # Specify author or company name @@ -20,12 +20,7 @@ groups: [] # The plugin is compatible with releases in the list releases: - os: ubuntu - version: 2015.1.0-7.0 - mode: ['ha'] - deployment_scripts_path: deployment_scripts/ - repository_path: repositories/ubuntu - - os: ubuntu - version: liberty-8.0 + version: mitaka-9.0 mode: ['ha'] deployment_scripts_path: deployment_scripts/ repository_path: repositories/ubuntu