From 70030ab28f81609292cfbb3c7b34f3f033b09c57 Mon Sep 17 00:00:00 2001 From: Oyvind Albrigtsen Date: Thu, 23 Mar 2017 10:50:45 +0100 Subject: [PATCH] oraasm: new resource agent for Oracle ASM Disk Groups --- doc/man/Makefile.am | 1 + heartbeat/Makefile.am | 1 + heartbeat/oraasm | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 181 insertions(+) create mode 100755 heartbeat/oraasm diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am index 43a3f70..f5f64c8 100644 --- a/doc/man/Makefile.am +++ b/doc/man/Makefile.am @@ -122,6 +122,7 @@ man_MANS = ocf_heartbeat_AoEtarget.7 \ ocf_heartbeat_nfsnotify.7 \ ocf_heartbeat_nfsserver.7 \ ocf_heartbeat_nginx.7 \ + ocf_heartbeat_oraasm.7 \ ocf_heartbeat_oracle.7 \ ocf_heartbeat_oralsnr.7 \ ocf_heartbeat_pgsql.7 \ diff --git a/heartbeat/Makefile.am b/heartbeat/Makefile.am index 91d4090..229db71 100644 --- a/heartbeat/Makefile.am +++ b/heartbeat/Makefile.am @@ -119,6 +119,7 @@ ocf_SCRIPTS = AoEtarget \ named \ nfsnotify \ nfsserver \ + oraasm \ oracle \ oralsnr \ pingd \ diff --git a/heartbeat/oraasm b/heartbeat/oraasm new file mode 100755 index 0000000..22b88ea --- /dev/null +++ b/heartbeat/oraasm @@ -0,0 +1,179 @@ +#!/bin/sh +# +# License: GNU General Public License (GPL) +# (c) 2017 O. Albrigtsen +# and Linux-HA contributors +# +# ----------------------------------------------------------------------------- +# O C F R E S O U R C E S C R I P T S P E C I F I C A T I O N +# ----------------------------------------------------------------------------- +# +# NAME +# oraasm : OCF resource agent script for Oracle ASM +# + +# Initialization: +: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} +. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + +# Defaults +OCF_RESKEY_user_default="grid" + +: ${OCF_RESKEY_user=${OCF_RESKEY_user_default}} + + +oraasm_usage() { + cat < + + +0.75 + +OCF Resource script for Oracle ASM. It uses the ohasd init-script to manage a Oracle ASM Disk Group as a HA resource. +Oracle ASM resource agent + + + + + Oracle Grid user + Oracle Grid user + + + + + +The name of the Oracle Disk Group. +If not specified, then the Disk Group along with its home should be listed in /etc/oratab. + + Oracle Disk Group + + + + +The Oracle Grid home directory +home + + + + + + + + + + + + + + +END +} + +oraasm_methods() { + cat <<-! + start + stop + status + monitor + validate-all + methods + meta-data + usage + ! +} + +oraasm_getconfig() { + [ x = "x$OCF_RESKEY_home" ] && + OCF_RESKEY_home=`awk -F: "/^+$OCF_RESKEY_diskgroup:/"'{print $2}' /etc/oratab` + PATH="$OCF_RESKEY_home/bin:$PATH" + + ORA_ENVF=`mktemp` + cat << EOF > $ORA_ENVF +PATH="$OCF_RESKEY_home/bin:$PATH" +EOF + chmod 644 $ORA_ENVF + trap "rm -f $ORA_ENVF" EXIT +} + +oraasm_start() { + # if resource is already running, no need to continue code after this. + if oraasm_monitor; then + ocf_log info "Oracle ASM is already running" + return $OCF_SUCCESS + fi + + ocf_run -q /etc/init.d/ohasd start + + while ! oraasm_monitor; do + sleep 1 + done + + return $OCF_SUCCESS +} + +oraasm_stop() { + oraasm_monitor + if [ $? -ne $OCF_SUCCESS ]; then + # Currently not running. Nothing to do. + ocf_log info "Oracle ASM is already stopped" + + return $OCF_SUCCESS + fi + + ocf_run -q /etc/init.d/ohasd stop + + # Wait for process to stop + while oraasm_monitor; do + sleep 1 + done + + return $OCF_SUCCESS +} + +oraasm_monitor() { + su - $OCF_RESKEY_user -c ". $ORA_ENVF; crsctl check has | grep -q \"CRS-4638\"" + case "$?" in + 0) + rc=$OCF_SUCCESS + ;; + 1) + rc=$OCF_NOT_RUNNING + ocf_log info "Oracle ASM is not running" + ;; + *) + rc=$OCF_ERR_GENERIC + ;; + esac + return $rc +} + +oraasm_status() { + rc=$(oraasm_monitor) + return $rc +} + +oraasm_validate_all() { + if [ x = "x$OCF_RESKEY_home" ]; then + ocf_exit_reason "home not set" + return $OCF_ERR_CONFIGURED + fi +} + + +OCF_REQUIRED_PARAMS="user diskgroup" +OCF_REQUIRED_BINARIES="/etc/init.d/ohasd crsctl" +ocf_rarun $* + +# vim:tabstop=4:shiftwidth=4:textwidth=0:wrapmargin=0