diff --git a/files/default/cinder-volume b/files/default/cinder-volume deleted file mode 100644 index d3d9484..0000000 --- a/files/default/cinder-volume +++ /dev/null @@ -1,353 +0,0 @@ -#!/bin/sh -# -# -# OpenStack Cinder Volume (cinder-volume) -# -# Description: Manages an OpenStack Volumes (cinder-volume) process as an HA resource -# -# Authors: Sébastien Han -# Mainly inspired by the Glance API resource agent written by Martin Gerhard Loschwitz from Hastexo: http://goo.gl/whLpr -# -# 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_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="cinder-volume" -OCF_RESKEY_config_default="/etc/cinder/cinder.conf" -OCF_RESKEY_user_default="cinder" -OCF_RESKEY_pid_default="$HA_RSCTMP/$OCF_RESOURCE_INSTANCE.pid" -OCF_RESKEY_amqp_server_port_default="5672" -OCF_RESKEY_multibackend_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_multibackend=${OCF_RESKEY_multibackend_default}} - -####################################################################### - -usage() { - cat < - - -1.0 - - -Resource agent for the OpenStack Cinder Volume (cinder-volume) -May manage a cinder-volume instance or a clone set that -creates a distributed cinder-volume cluster. - -Manages the OpenStack Cinder Volume (cinder-volume) - - - - -Location of the OpenStack Cinder Volume server binary (cinder-volume) - -OpenStack Cinder Volume server binary (cinder-volume) - - - - - -Location of the OpenStack Cinder Volume (cinder-volume) configuration file - -OpenStack Cinder Volume (cinder-volume) config file - - - - - -User running OpenStack Cinder Volume (cinder-volume) - -OpenStack Cinder Volume (cinder-volume) user - - - - - -The pid file to use for this OpenStack Cinder Volume (cinder-volume) instance - -OpenStack Cinder Volume (cinder-volume) pid file - - - - - -The listening port number of the AMQP server. Mandatory to perform a monitor check - -AMQP listening port - - - - - -If the multi-backend is enabled, the monitor check is slightly different since cinder-volume spawns one thread for each backend. - -Multi Backend usage - - - - - -Additional parameters to pass on to the OpenStack Cinder Volume (cinder-volume) - -Additional parameters for cinder-volume - - - - - - - - - - - - - - -END -} - -####################################################################### -# Functions invoked by resource manager actions - -cinder_volume_validate() { - local rc - - check_binary $OCF_RESKEY_binary - check_binary netstat - - # 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 -} - -cinder_volume_status() { - local pid - local rc - - if [ ! -f $OCF_RESKEY_pid ]; then - ocf_log info "OpenStack Cinder Volume (cinder-volume) 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 Cinder Volume (cinder-volume) is not running" - return $OCF_NOT_RUNNING - fi -} - -cinder_volume_monitor() { - local rc - local pid - local volume_amqp_check - - cinder_volume_status - rc=$? - - # If status returned anything but success, return that immediately - if [ $rc -ne $OCF_SUCCESS ]; then - return $rc - fi - - # Grab cinder-volume PID - pid=`cat $OCF_RESKEY_pid` - - if ocf_is_true "$OCF_RESKEY_multibackend"; then - # Grab the child's PIDs - for i in `ps -o pid --no-headers --ppid $pid` - do - volume_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$i" | grep -qs "ESTABLISHED"` - rc=$? - if [ $rc -ne 0 ]; then - ocf_log err "This child process from Cinder Volume is not connected to the AMQP server: $rc" - return $OCF_NOT_RUNNING - fi - done - else - # Check the connections according to the PID - # We are sure to hit the scheduler process and not other nova process with the same connection behavior (for example nova-cert) - # check the connections according to the PID - - # [Robert] Fixed: Need to grep child_pid instead of pid. - child_pid=`ps -o pid --no-headers --ppid $pid` - volume_amqp_check=`netstat -punt | grep -s "$OCF_RESKEY_amqp_server_port" | grep -s "$child_pid" | grep -qs "ESTABLISHED"` - rc=$? - if [ $rc -ne 0 ]; then - ocf_log err "Cinder Volume is not connected to the AMQP server: $rc" - return $OCF_NOT_RUNNING - fi - fi - - ocf_log debug "OpenStack Cinder Volume (cinder-volume) monitor succeeded" - return $OCF_SUCCESS -} - -cinder_volume_start() { - local rc - - cinder_volume_status - rc=$? - if [ $rc -eq $OCF_SUCCESS ]; then - ocf_log info "OpenStack Cinder Volume (cinder-volume) already running" - return $OCF_SUCCESS - fi - - # run the actual cinder-volume 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. - # Let the CRM/LRM time us out if required - while true; do - cinder_volume_monitor - rc=$? - [ $rc -eq $OCF_SUCCESS ] && break - if [ $rc -ne $OCF_NOT_RUNNING ]; then - ocf_log err "OpenStack Cinder Volume (cinder-volume) start failed" - exit $OCF_ERR_GENERIC - fi - sleep 1 - done - - ocf_log info "OpenStack Cinder Volume (cinder-volume) started" - return $OCF_SUCCESS -} - -cinder_volume_stop() { - local rc - local pid - - cinder_volume_status - rc=$? - if [ $rc -eq $OCF_NOT_RUNNING ]; then - ocf_log info "OpenStack Cinder Volume (cinder-volume) 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 Cinder Volume (cinder-volume) 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 - cinder_volume_status - rc=$? - if [ $rc -eq $OCF_NOT_RUNNING ]; then - break - fi - count=`expr $count + 1` - sleep 1 - ocf_log debug "OpenStack Cinder Volume (cinder-volume) still hasn't stopped yet. Waiting ..." - done - - cinder_volume_status - rc=$? - if [ $rc -ne $OCF_NOT_RUNNING ]; then - # SIGTERM didn't help either, try SIGKILL - ocf_log info "OpenStack Cinder Volume (cinder-volume) failed to stop after ${shutdown_timeout}s \ - using SIGTERM. Trying SIGKILL ..." - ocf_run kill -s KILL $pid - fi - - ocf_log info "OpenStack Cinder Volume (cinder-volume) 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 -cinder_volume_validate || exit $? - -# What kind of method was invoked? -case "$1" in - start) cinder_volume_start;; - stop) cinder_volume_stop;; - status) cinder_volume_status;; - monitor) cinder_volume_monitor;; - validate-all) ;; - *) usage - exit $OCF_ERR_UNIMPLEMENTED;; -esac diff --git a/recipes/config.rb b/recipes/config.rb index 957a92d..8b7e616 100644 --- a/recipes/config.rb +++ b/recipes/config.rb @@ -20,22 +20,6 @@ include_recipe "pacemaker::setup" -directory "/usr/lib/ocf/resource.d/openstack" do - owner "root" - group "root" - mode 0755 - action :create - notifies :create, "cookbook_file[/usr/lib/ocf/resource.d/openstack/cinder-volume]", :immediately -end - -cookbook_file "/usr/lib/ocf/resource.d/openstack/cinder-volume" do - source "cinder-volume" - owner "root" - group "root" - mode 0755 - action :nothing -end - # Get cinder-volume's myip which might have been set by 'ktc-cinder' cookbook. if node['pacemaker']['primitive'].include?('vip') and node['cinder'] and node['cinder']['services']['volume']['myip'] node.default['pacemaker']['primitive']['vip']['params']['ip'] = node['cinder']['services']['volume']['myip']