diff --git a/files/heartbeat/README.md b/files/heartbeat/README.md deleted file mode 100644 index 6c4f7e89..00000000 --- a/files/heartbeat/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Pacemaker High Availability resource agents for OpenStack - -https://github.com/madkiss/openstack-resource-agents diff --git a/files/heartbeat/ceilometer-agent-central b/files/heartbeat/ceilometer-agent-central deleted file mode 100644 index 9c460a37..00000000 --- a/files/heartbeat/ceilometer-agent-central +++ /dev/null @@ -1,345 +0,0 @@ -#!/bin/sh -# -# -# OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) -# -# Description: Manages an OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) process as an HA resource -# -# Authors: Emilien Macchi -# Mainly inspired by the Nova Scheduler resource agent written by Sebastien Han -# -# Support: openstack@lists.launchpad.net -# License: Apache Software License (ASL) 2.0 -# -# -# See usage() function below for more details ... -# -# OCF instance parameters: -# OCF_RESKEY_binary -# OCF_RESKEY_config -# OCF_RESKEY_user -# OCF_RESKEY_pid -# OCF_RESKEY_monitor_binary -# OCF_RESKEY_amqp_server_port -# OCF_RESKEY_additional_parameters -####################################################################### -# Initialization: - -: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} -. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs - -####################################################################### - -# Fill in some defaults if no values are specified - -OCF_RESKEY_binary_default="ceilometer-agent-central" -OCF_RESKEY_config_default="/etc/ceilometer/ceilometer.conf" -OCF_RESKEY_user_default="ceilometer" -OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid" -OCF_RESKEY_amqp_server_port_default="5672" - -: ${OCF_RESKEY_binary=${OCF_RESKEY_binary_default}} -: ${OCF_RESKEY_config=${OCF_RESKEY_config_default}} -: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}} -: ${OCF_RESKEY_pid=${OCF_RESKEY_pid_default}} -: ${OCF_RESKEY_amqp_server_port=${OCF_RESKEY_amqp_server_port_default}} - -####################################################################### - -usage() { - cat < - - -1.0 - - -Resource agent for the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) -May manage a ceilometer-agent-central instance or a clone set that -creates a distributed ceilometer-agent-central cluster. - -Manages the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) - - - - -Location of the OpenStack Ceilometer Central Agent server binary (ceilometer-agent-central) - -OpenStack Ceilometer Central Agent server binary (ceilometer-agent-central) - - - - - -Location of the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) configuration file - -OpenStack Ceilometer Central Agent (ceilometer-agent-central registry) config file - - - - - -User running OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) - -OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) user - - - - - -The pid file to use for this OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) instance - -OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) pid file - - - - - -The listening port number of the AMQP server. Use for monitoring purposes - -AMQP listening port - - - - - - -Additional parameters to pass on to the OpenStack Ceilometer Central Agent Service (ceilometer-agent-central) - -Additional parameters for ceilometer-agent-central - - - - - - - - - - - - - - -END -} - -####################################################################### -# Functions invoked by resource manager actions - -ceilometer_agent_central_check_port() { -# This function has been taken from the squid RA and improved a bit -# The length of the integer must be 4 -# Examples of valid port: "1080", "0080" -# Examples of invalid port: "1080bad", "0", "0000", "" - - local int - local cnt - - int="$1" - cnt=${#int} - echo $int |egrep -qx '[0-9]+(:[0-9]+)?(,[0-9]+(:[0-9]+)?)*' - - if [ $? -ne 0 ] || [ $cnt -ne 4 ]; then - ocf_log err "Invalid port number: $1" - exit $OCF_ERR_CONFIGURED - fi -} - -ceilometer_agent_central_validate() { - local rc - - check_binary $OCF_RESKEY_binary - check_binary netstat - ceilometer_agent_central_check_port $OCF_RESKEY_amqp_server_port - - # A config file on shared storage that is not available - # during probes is OK. - if [ ! -f $OCF_RESKEY_config ]; then - if ! ocf_is_probe; then - ocf_log err "Config $OCF_RESKEY_config doesn't exist" - return $OCF_ERR_INSTALLED - fi - ocf_log_warn "Config $OCF_RESKEY_config not available during a probe" - fi - - getent passwd $OCF_RESKEY_user >/dev/null 2>&1 - rc=$? - if [ $rc -ne 0 ]; then - ocf_log err "User $OCF_RESKEY_user doesn't exist" - return $OCF_ERR_INSTALLED - fi - - true -} - -ceilometer_agent_central_status() { - local pid - local rc - - if [ ! -f $OCF_RESKEY_pid ]; then - ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) is not running" - return $OCF_NOT_RUNNING - else - pid=`cat $OCF_RESKEY_pid` - fi - - ocf_run -warn kill -s 0 $pid - rc=$? - if [ $rc -eq 0 ]; then - return $OCF_SUCCESS - else - ocf_log info "Old PID file found, but OpenStack Ceilometer Central Agent (ceilometer-agent-central) is not running" - return $OCF_NOT_RUNNING - fi -} - -ceilometer_agent_central_monitor() { - local rc - local pid - local scheduler_amqp_check - - ceilometer_agent_central_status - rc=$? - - # If status returned anything but success, return that immediately - if [ $rc -ne $OCF_SUCCESS ]; then - return $rc - fi - - # Check the connections according to the PID. - # We are sure to hit the scheduler process and not other Cinder process with the same connection behavior (for example cinder-api) - pid=`cat $OCF_RESKEY_pid` - scheduler_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"` - rc=$? - if [ $rc -ne 0 ]; then - ocf_log err "Central Agent is not connected to the AMQP server : $rc" - return $OCF_NOT_RUNNING - fi - - ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) monitor succeeded" - return $OCF_SUCCESS -} - -ceilometer_agent_central_start() { - local rc - - ceilometer_agent_central_status - rc=$? - if [ $rc -eq $OCF_SUCCESS ]; then - ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) already running" - return $OCF_SUCCESS - fi - - # run the actual ceilometer-agent-central daemon. Don't use ocf_run as we're sending the tool's output - # straight to /dev/null anyway and using ocf_run would break stdout-redirection here. - su ${OCF_RESKEY_user} -s /bin/sh -c "${OCF_RESKEY_binary} --config-file=$OCF_RESKEY_config \ - $OCF_RESKEY_additional_parameters"' >> /dev/null 2>&1 & echo $!' > $OCF_RESKEY_pid - - # Spin waiting for the server to come up. - while true; do - ceilometer_agent_central_monitor - rc=$? - [ $rc -eq $OCF_SUCCESS ] && break - if [ $rc -ne $OCF_NOT_RUNNING ]; then - ocf_log err "OpenStack Ceilometer Central Agent (ceilometer-agent-central) start failed" - exit $OCF_ERR_GENERIC - fi - sleep 1 - done - - ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) started" - return $OCF_SUCCESS -} - -ceilometer_agent_central_stop() { - local rc - local pid - - ceilometer_agent_central_status - rc=$? - if [ $rc -eq $OCF_NOT_RUNNING ]; then - ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) already stopped" - return $OCF_SUCCESS - fi - - # Try SIGTERM - pid=`cat $OCF_RESKEY_pid` - ocf_run kill -s TERM $pid - rc=$? - if [ $rc -ne 0 ]; then - ocf_log err "OpenStack Ceilometer Central Agent (ceilometer-agent-central) couldn't be stopped" - exit $OCF_ERR_GENERIC - fi - - # stop waiting - shutdown_timeout=15 - if [ -n "$OCF_RESKEY_CRM_meta_timeout" ]; then - shutdown_timeout=$((($OCF_RESKEY_CRM_meta_timeout/1000)-5)) - fi - count=0 - while [ $count -lt $shutdown_timeout ]; do - ceilometer_agent_central_status - rc=$? - if [ $rc -eq $OCF_NOT_RUNNING ]; then - break - fi - count=`expr $count + 1` - sleep 1 - ocf_log debug "OpenStack Ceilometer Central Agent (ceilometer-agent-central) still hasn't stopped yet. Waiting ..." - done - - ceilometer_agent_central_status - rc=$? - if [ $rc -ne $OCF_NOT_RUNNING ]; then - # SIGTERM didn't help either, try SIGKILL - ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) failed to stop after ${shutdown_timeout}s \ - using SIGTERM. Trying SIGKILL ..." - ocf_run kill -s KILL $pid - fi - - ocf_log info "OpenStack Ceilometer Central Agent (ceilometer-agent-central) stopped" - - rm -f $OCF_RESKEY_pid - - return $OCF_SUCCESS -} - -####################################################################### - -case "$1" in - meta-data) meta_data - exit $OCF_SUCCESS;; - usage|help) usage - exit $OCF_SUCCESS;; -esac - -# Anything except meta-data and help must pass validation -ceilometer_agent_central_validate || exit $? - -# What kind of method was invoked? -case "$1" in - start) ceilometer_agent_central_start;; - stop) ceilometer_agent_central_stop;; - status) ceilometer_agent_central_status;; - monitor) ceilometer_agent_central_monitor;; - validate-all) ;; - *) usage - exit $OCF_ERR_UNIMPLEMENTED;; -esac diff --git a/manifests/spof.pp b/manifests/spof.pp index 1b041ab0..7ac21760 100644 --- a/manifests/spof.pp +++ b/manifests/spof.pp @@ -66,7 +66,6 @@ class cloud::spof( class {'pacemaker::stonith': disable => true } - pacemaker::resource::systemd { 'openstack-ceilometer-central': } } else { class { 'corosync': @@ -87,43 +86,9 @@ class cloud::spof( 'pe-warn-series-max': value => 1000; 'pe-input-series-max': value => 1000; 'cluster-recheck-interval': value => '5min'; - } -> - file { '/usr/lib/ocf/resource.d/heartbeat/ceilometer-agent-central': - source => 'puppet:///modules/cloud/heartbeat/ceilometer-agent-central', - mode => '0755', - owner => 'root', - group => 'root', - } -> - cs_primitive { 'ceilometer-agent-central': - primitive_class => 'ocf', - primitive_type => 'ceilometer-agent-central', - provided_by => 'heartbeat', - operations => { - 'monitor' => { - interval => '10s', - timeout => '30s' - }, - 'start' => { - interval => '0', - timeout => '30s', - on-fail => 'restart' - } - } - } -> - exec { 'cleanup_ceilometer_agent_central': - command => 'crm resource cleanup ceilometer-agent-central', - unless => 'crm resource show ceilometer-agent-central | grep Started', - user => 'root', - path => ['/usr/sbin', '/bin'], } } - - # Run OpenStack SPOF service and disable them since they will be managed by Corosync. - class { 'cloud::telemetry::centralagent': - enabled => false, - } - if $::cloud::manage_firewall { cloud::firewall::rule{ '100 allow vrrp access': port => undef, diff --git a/manifests/telemetry/centralagent.pp b/manifests/telemetry/centralagent.pp index 1636f537..bd39b83c 100644 --- a/manifests/telemetry/centralagent.pp +++ b/manifests/telemetry/centralagent.pp @@ -16,29 +16,11 @@ # # == Class: cloud::telemetry::centralagent # -# Telemetry Central Agent node (should be run once) -# Could be managed by spof node as Active / Passive. +# Telemetry Central Agent node # -# === Parameters: -# -# [*enabled*] -# (optional) State of the telemetry central agent service. -# Defaults to true -# -# [*coordination_url*] -# (optional) The url to use for distributed group membership coordination. -# Defaults to undef -# -class cloud::telemetry::centralagent( - $enabled = true, - $coordination_url = undef, -){ +class cloud::telemetry::centralagent{ include 'cloud::telemetry' - - class { 'ceilometer::agent::central': - enabled => $enabled, - coordination_url => $coordination_url, - } + include 'ceilometer::agent::central' } diff --git a/spec/classes/cloud_spof_spec.rb b/spec/classes/cloud_spof_spec.rb index b3f7d5be..6831633f 100644 --- a/spec/classes/cloud_spof_spec.rb +++ b/spec/classes/cloud_spof_spec.rb @@ -41,19 +41,6 @@ describe 'cloud::spof' do :bind_address => '10.0.0.1', :multicast_address => '239.1.1.2', ) - is_expected.to contain_file('/usr/lib/ocf/resource.d/heartbeat/ceilometer-agent-central').with( - :source => 'puppet:///modules/cloud/heartbeat/ceilometer-agent-central', - :mode => '0755', - :owner => 'root', - :group => 'root' - ) - is_expected.to contain_class('cloud::telemetry::centralagent').with(:enabled => false) - is_expected.to contain_exec('cleanup_ceilometer_agent_central').with( - :command => 'crm resource cleanup ceilometer-agent-central', - :path => ['/usr/sbin', '/bin'], - :user => 'root', - :unless => 'crm resource show ceilometer-agent-central | grep Started' - ) end end @@ -73,8 +60,6 @@ describe 'cloud::spof' do :settle_try_sleep => 5, :manage_fw => false, :cluster_members => 'srv1 srv2 srv3') - is_expected.to contain_pcmk_resource('openstack-ceilometer-central') - is_expected.to contain_class('cloud::telemetry::centralagent').with(:enabled => false) end end diff --git a/spec/classes/cloud_telemetry_centralagent_spec.rb b/spec/classes/cloud_telemetry_centralagent_spec.rb index 3d497377..30eaf600 100644 --- a/spec/classes/cloud_telemetry_centralagent_spec.rb +++ b/spec/classes/cloud_telemetry_centralagent_spec.rb @@ -38,35 +38,8 @@ describe 'cloud::telemetry::centralagent' do debug => true }" end - let :params do - { :enabled => 'true', - :coordination_url => 'http://coordination' } - end - - it 'configure ceilometer common' do - is_expected.to contain_class('ceilometer').with( - :verbose => true, - :debug => true, - :rabbit_userid => 'ceilometer', - :rabbit_hosts => ['10.0.0.1'], - :rabbit_password => 'secrete', - :metering_secret => 'secrete', - :use_syslog => true, - :log_facility => 'LOG_LOCAL0', - :log_dir => false - ) - is_expected.to contain_class('ceilometer::agent::auth').with( - :auth_password => 'secrete', - :auth_url => 'http://10.0.0.1:5000/v2.0', - :auth_region => 'MyRegion', - ) - end - it 'configure ceilometer central agent' do - is_expected.to contain_class('ceilometer::agent::central').with({ - 'enabled' => 'true', - 'coordination_url'=> 'http://coordination', - }) + is_expected.to contain_class('ceilometer::agent::central') end end