diff --git a/files/heartbeat/heat-engine b/files/heartbeat/heat-engine deleted file mode 100644 index 7b247435..00000000 --- a/files/heartbeat/heat-engine +++ /dev/null @@ -1,355 +0,0 @@ -#!/bin/sh -# -# -# OpenStack Orchestration Engine Service (heat-engine) -# -# Description: Manages an OpenStack Orchestration Engine Service (heat-engine) process as an HA resource -# -# Authors: Emilien Macchi -# -# 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_zeromq -# 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="heat-engine" -OCF_RESKEY_config_default="/etc/heat/heat.conf" -OCF_RESKEY_user_default="heat" -OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid" -OCF_RESKEY_amqp_server_port_default="5672" -OCF_RESKEY_zeromq_default="false" - -: ${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}} -: ${OCF_RESKEY_zeromq=${OCF_RESKEY_zeromq_default}} - -####################################################################### - -usage() { - cat < - - -1.0 - - -Resource agent for the OpenStack Orchestration Engine Service (heat-engine) -May manage a heat-engine instance or a clone set that -creates a distributed heat-engine cluster. - -Manages the OpenStack Orchestration Engine Service (heat-engine) - - - - -Location of the OpenStack Orchestration Engine server binary (heat-engine) - -OpenStack Orchestration Engine server binary (heat-engine) - - - - - -Location of the OpenStack Orchestration Engine Service (heat-engine) configuration file - -OpenStack Orchestration Engine (heat-engine) config file - - - - - -User running OpenStack Orchestration Engine Service (heat-engine) - -OpenStack Orchestration Engine Service (heat-engine) user - - - - - -The pid file to use for this OpenStack Orchestration Engine Service (heat-engine) instance - -OpenStack Orchestration Engine Service (heat-engine) pid file - - - - - -The listening port number of the AMQP server. Use for monitoring purposes - -AMQP listening port - - - - - -If zeromq is used, this will disable the connection test to the AMQP server. Use for monitoring purposes - -Zero-MQ usage - - - - - -Additional parameters to pass on to the OpenStack Orchestration Engine Service (heat-engine) - -Additional parameters for heat-engine - - - - - - - - - - - - - - -END -} - -####################################################################### -# Functions invoked by resource manager actions - -heat_engine_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 -} - -heat_engine_validate() { - local rc - - check_binary $OCF_RESKEY_binary - check_binary netstat - heat_engine_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 -} - -heat_engine_status() { - local pid - local rc - - if [ ! -f $OCF_RESKEY_pid ]; then - ocf_log info "OpenStack Orchestration Engine (heat-engine) 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 Orchestration Engine (heat-engine) is not running" - return $OCF_NOT_RUNNING - fi -} - -heat_engine_monitor() { - local rc - local pid - local rc_amqp - local engine_amqp_check - - heat_engine_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 heat-engine process and not other heat process with the same connection behavior (for example heat-api) - pid=`cat $OCF_RESKEY_pid` - engine_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$pid" | grep -qs "ESTABLISHED"` - rc_amqp=$? - if [ $rc_amqp -ne 0 ]; then - ocf_log err "Heat Engine is not connected to the AMQP server: AMQP connection test returned $rc_amqp" - return $OCF_NOT_RUNNING - fi - - ocf_log debug "OpenStack Orchestration Engine (heat-engine) monitor succeeded" - return $OCF_SUCCESS -} - -heat_engine_start() { - local rc - - heat_engine_status - rc=$? - if [ $rc -eq $OCF_SUCCESS ]; then - ocf_log info "OpenStack Orchestration Engine (heat-engine) already running" - return $OCF_SUCCESS - fi - - # run the actual heat-engine 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 - heat_engine_monitor - rc=$? - [ $rc -eq $OCF_SUCCESS ] && break - if [ $rc -ne $OCF_NOT_RUNNING ]; then - ocf_log err "OpenStack Orchestration Engine (heat-engine) start failed" - exit $OCF_ERR_GENERIC - fi - sleep 1 - done - - ocf_log info "OpenStack Orchestration Engine (heat-engine) started" - return $OCF_SUCCESS -} - -heat_engine_stop() { - local rc - local pid - - heat_engine_status - rc=$? - if [ $rc -eq $OCF_NOT_RUNNING ]; then - ocf_log info "OpenStack Orchestration Engine (heat-engine) 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 Orchestration Engine (heat-engine) 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 - heat_engine_status - rc=$? - if [ $rc -eq $OCF_NOT_RUNNING ]; then - break - fi - count=`expr $count + 1` - sleep 1 - ocf_log debug "OpenStack Orchestration Engine (heat-engine) still hasn't stopped yet. Waiting ..." - done - - heat_engine_status - rc=$? - if [ $rc -ne $OCF_NOT_RUNNING ]; then - # SIGTERM didn't help either, try SIGKILL - ocf_log info "OpenStack Orchestration Engine (heat-engine) failed to stop after ${shutdown_timeout}s \ - using SIGTERM. Trying SIGKILL ..." - ocf_run kill -s KILL $pid - fi - - ocf_log info "OpenStack Orchestration Engine (heat-engine) 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 -heat_engine_validate || exit $? - -# What kind of method was invoked? -case "$1" in - start) heat_engine_start;; - stop) heat_engine_stop;; - status) heat_engine_status;; - monitor) heat_engine_monitor;; - validate-all) ;; - *) usage - exit $OCF_ERR_UNIMPLEMENTED;; -esac diff --git a/manifests/spof.pp b/manifests/spof.pp index 42ec83f3..932273f6 100644 --- a/manifests/spof.pp +++ b/manifests/spof.pp @@ -68,18 +68,6 @@ class cloud::spof( path => ['/usr/bin','/usr/sbin','/sbin/','/bin'], user => 'root', unless => '/usr/sbin/pcs resource | /bin/grep ceilometer-agent-central | /bin/grep Started' - } -> - file { '/usr/lib/ocf/resource.d/heartbeat/heat-engine': - source => 'puppet:///modules/cloud/heartbeat/heat-engine', - mode => '0755', - owner => 'root', - group => 'root', - } -> - exec {'pcmk_heat_engine': - command => 'pcs resource create heat-engine ocf:heartbeat:heat-engine', - path => ['/usr/bin','/usr/sbin','/sbin/','/bin'], - user => 'root', - unless => '/usr/sbin/pcs resource | /bin/grep heat-engine | /bin/grep Started' } } else { @@ -123,37 +111,11 @@ class cloud::spof( on-fail => 'restart' } } - } -> - file { '/usr/lib/ocf/resource.d/heartbeat/heat-engine': - source => 'puppet:///modules/cloud/heartbeat/heat-engine', - mode => '0755', - owner => 'root', - group => 'root', - } -> - cs_primitive { 'heat-engine': - primitive_class => 'ocf', - primitive_type => 'heat-engine', - provided_by => 'heartbeat', - operations => { - 'monitor' => { - interval => '10s', - timeout => '30s' - }, - 'start' => { - interval => '0', - timeout => '30s', - on-fail => 'restart' - } - } } } # Run OpenStack SPOF service and disable them since they will be managed by Corosync. - class { 'cloud::orchestration::engine': - enabled => false, - } - class { 'cloud::telemetry::centralagent': enabled => false, } diff --git a/spec/classes/cloud_spof_spec.rb b/spec/classes/cloud_spof_spec.rb index ab0f76b4..80bc697f 100644 --- a/spec/classes/cloud_spof_spec.rb +++ b/spec/classes/cloud_spof_spec.rb @@ -47,13 +47,6 @@ describe 'cloud::spof' do :owner => 'root', :group => 'root' ) - should contain_file('/usr/lib/ocf/resource.d/heartbeat/heat-engine').with( - :source => 'puppet:///modules/cloud/heartbeat/heat-engine', - :mode => '0755', - :owner => 'root', - :group => 'root' - ) - should contain_class('cloud::orchestration::engine').with(:enabled => false) should contain_class('cloud::telemetry::centralagent').with(:enabled => false) end end @@ -80,25 +73,12 @@ describe 'cloud::spof' do :owner => 'root', :group => 'root' ) - should contain_file('/usr/lib/ocf/resource.d/heartbeat/heat-engine').with( - :source => 'puppet:///modules/cloud/heartbeat/heat-engine', - :mode => '0755', - :owner => 'root', - :group => 'root' - ) should contain_exec('pcmk_ceilometer_agent_central').with( :command => 'pcs resource create ceilometer-agent-central ocf:heartbeat:ceilometer-agent-central', :path => ['/usr/bin','/usr/sbin','/sbin/','/bin'], :user => 'root', :unless => '/usr/sbin/pcs resource | /bin/grep ceilometer-agent-central | /bin/grep Started' ) - should contain_exec('pcmk_heat_engine').with( - :command => 'pcs resource create heat-engine ocf:heartbeat:heat-engine', - :path => ['/usr/bin','/usr/sbin','/sbin/','/bin'], - :user => 'root', - :unless => '/usr/sbin/pcs resource | /bin/grep heat-engine | /bin/grep Started' - ) - should contain_class('cloud::orchestration::engine').with(:enabled => false) should contain_class('cloud::telemetry::centralagent').with(:enabled => false) end end