You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
252 lines
9.1 KiB
252 lines
9.1 KiB
diff -uNr a/doc/man/Makefile.am b/doc/man/Makefile.am |
|
--- a/doc/man/Makefile.am 2017-03-15 14:11:58.136058131 +0100 |
|
+++ b/doc/man/Makefile.am 2017-03-15 14:31:58.181539045 +0100 |
|
@@ -73,6 +73,7 @@ |
|
ocf_heartbeat_MailTo.7 \ |
|
ocf_heartbeat_ManageRAID.7 \ |
|
ocf_heartbeat_ManageVE.7 \ |
|
+ ocf_heartbeat_NodeUtilization.7 \ |
|
ocf_heartbeat_nova-compute-wait.7 \ |
|
ocf_heartbeat_NovaEvacuate.7 \ |
|
ocf_heartbeat_Pure-FTPd.7 \ |
|
diff -uNr a/heartbeat/Makefile.am b/heartbeat/Makefile.am |
|
--- a/heartbeat/Makefile.am 2017-03-15 14:11:58.136058131 +0100 |
|
+++ b/heartbeat/Makefile.am 2017-03-15 14:32:45.554873187 +0100 |
|
@@ -95,6 +95,7 @@ |
|
MailTo \ |
|
ManageRAID \ |
|
ManageVE \ |
|
+ NodeUtilization \ |
|
mysql \ |
|
mysql-proxy \ |
|
nagios \ |
|
diff -uNr a/heartbeat/NodeUtilization b/heartbeat/NodeUtilization |
|
--- a/heartbeat/NodeUtilization 1970-01-01 01:00:00.000000000 +0100 |
|
+++ b/heartbeat/NodeUtilization 2017-03-15 14:29:18.141788491 +0100 |
|
@@ -0,0 +1,226 @@ |
|
+#!/bin/sh |
|
+# |
|
+# |
|
+# NodeUtilization OCF Resource Agent |
|
+# |
|
+# Copyright (c) 2011 SUSE LINUX, John Shi |
|
+# Copyright (c) 2016 SUSE LINUX, Kristoffer Gronlund |
|
+# All Rights Reserved. |
|
+# |
|
+# This program is free software; you can redistribute it and/or modify |
|
+# it under the terms of version 2 of the GNU General Public License as |
|
+# published by the Free Software Foundation. |
|
+# |
|
+# This program is distributed in the hope that it would be useful, but |
|
+# WITHOUT ANY WARRANTY; without even the implied warranty of |
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
|
+# |
|
+# Further, this software is distributed without any warranty that it is |
|
+# free of the rightful claim of any third person regarding infringement |
|
+# or the like. Any license provided herein, whether implied or |
|
+# otherwise, applies only to this software file. Patent licenses, if |
|
+# any, provided herein do not apply to combinations of this program with |
|
+# other software, or any other product whatsoever. |
|
+# |
|
+# You should have received a copy of the GNU General Public License |
|
+# along with this program; if not, write the Free Software Foundation, |
|
+# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. |
|
+# |
|
+####################################################################### |
|
+# Initialization: |
|
+ |
|
+: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} |
|
+. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs |
|
+ |
|
+####################################################################### |
|
+ |
|
+NodeUtilization_meta_data() { |
|
+ cat <<END |
|
+<?xml version="1.0"?> |
|
+<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> |
|
+<resource-agent name="NodeUtilization"> |
|
+<version>1.0</version> |
|
+ |
|
+<longdesc lang="en"> |
|
+The Node Utilization agent detects system parameters like available CPU, host |
|
+memory and hypervisor memory availability, and adds them into the CIB for each |
|
+node using crm_attribute. Run the agent as a clone resource to have it populate |
|
+these parameters on each node. |
|
+Note: Setting hv_memory only works with Xen at the moment, using the xl or xm |
|
+command line tools. |
|
+</longdesc> |
|
+<shortdesc lang="en">Node Utilization</shortdesc> |
|
+ |
|
+<parameters> |
|
+<parameter name="dynamic" unique="0" required="0"> |
|
+<longdesc lang="en"> |
|
+If set, parameters will be updated if there are differences between the HA |
|
+parameters and the system values when running the monitor action. |
|
+If not set, the parameters will be set once when the resource instance starts. |
|
+</longdesc> |
|
+<shortdesc lang="en">Dynamically update parameters in monitor</shortdesc> |
|
+<content type="boolean" default="true" /> |
|
+</parameter> |
|
+ |
|
+<parameter name="utilization_cpu" unique="0" required="0"> |
|
+<longdesc lang="en">Enable setting node CPU utilization limit.</longdesc> |
|
+<shortdesc lang="en">Set node CPU utilization limit.</shortdesc> |
|
+<content type="boolean" default="true" /> |
|
+</parameter> |
|
+ |
|
+<parameter name="utilization_cpu_reservation" unique="0" required="0"> |
|
+<longdesc lang="en">Subtract this value when setting the CPU utilization parameter.</longdesc> |
|
+<shortdesc lang="en">CPU reservation.</shortdesc> |
|
+<content type="integer" default="1" /> |
|
+</parameter> |
|
+ |
|
+<parameter name="utilization_host_memory" unique="0" required="0"> |
|
+<longdesc lang="en">Enable setting available host memory.</longdesc> |
|
+<shortdesc lang="en">Set available host memory.</shortdesc> |
|
+<content type="boolean" default="true" /> |
|
+</parameter> |
|
+ |
|
+<parameter name="utilization_host_memory_reservation" unique="0" required="0"> |
|
+<longdesc lang="en">Subtract this value when setting host memory utilization, in MB.</longdesc> |
|
+<shortdesc lang="en">Host memory reservation, in MB.</shortdesc> |
|
+<content type="integer" default="512" /> |
|
+</parameter> |
|
+ |
|
+<parameter name="utilization_hv_memory" unique="0" required="0"> |
|
+<longdesc lang="en">Enable setting available hypervisor memory.</longdesc> |
|
+<shortdesc lang="en">Set available hypervisor memory.</shortdesc> |
|
+<content type="boolean" default="true" /> |
|
+</parameter> |
|
+ |
|
+<parameter name="utilization_hv_memory_reservation" unique="0" required="0"> |
|
+<longdesc lang="en">Subtract this value when setting hypervisor memory utilization, in MB.</longdesc> |
|
+<shortdesc lang="en">Hypervisor memory reservation, in MB.</shortdesc> |
|
+<content type="integer" default="512" /> |
|
+</parameter> |
|
+</parameters> |
|
+ |
|
+<actions> |
|
+<action name="start" timeout="90" /> |
|
+<action name="stop" timeout="100" /> |
|
+<action name="monitor" timeout="20s" interval="60s"/> |
|
+<action name="meta-data" timeout="5" /> |
|
+<action name="validate-all" timeout="30" /> |
|
+</actions> |
|
+</resource-agent> |
|
+END |
|
+} |
|
+ |
|
+Host_Total_Memory() { |
|
+ local xentool |
|
+ |
|
+ xentool=$(which xl 2> /dev/null || which xm 2> /dev/null) |
|
+ |
|
+ if [ -x $xentool ]; then |
|
+ $xentool info | awk '/total_memory/{printf("%d\n",$3);exit(0)}' |
|
+ else |
|
+ ocf_log warn "Can only set hv_memory for Xen hypervisor" |
|
+ echo "0" |
|
+ fi |
|
+} |
|
+ |
|
+ |
|
+set_utilization() { |
|
+ host_name="$(ocf_local_nodename)" |
|
+ |
|
+ if ocf_is_true "$OCF_RESKEY_utilization_cpu"; then |
|
+ sys_cpu=$(( $(grep -c processor /proc/cpuinfo) - $OCF_RESKEY_utilization_cpu_reservation )) |
|
+ uti_cpu=$(crm_attribute -Q -t nodes -U "$host_name" -z -n cpu 2>/dev/null) |
|
+ |
|
+ if [ "$sys_cpu" != "$uti_cpu" ]; then |
|
+ if ! crm_attribute -t nodes -U "$host_name" -z -n cpu -v $sys_cpu; then |
|
+ ocf_log err "Failed to set the cpu utilization attribute for $host_name using crm_attribute." |
|
+ return 1 |
|
+ fi |
|
+ fi |
|
+ fi |
|
+ |
|
+ if ocf_is_true "$OCF_RESKEY_utilization_host_memory"; then |
|
+ sys_mem=$(( $(awk '/MemTotal/{printf("%d\n",$2/1024);exit(0)}' /proc/meminfo) - $OCF_RESKEY_utilization_host_memory_reservation )) |
|
+ uti_mem=$(crm_attribute -Q -t nodes -U "$host_name" -z -n host_memory 2>/dev/null) |
|
+ |
|
+ if [ "$sys_mem" != "$uti_mem" ]; then |
|
+ if ! crm_attribute -t nodes -U "$host_name" -z -n host_memory -v $sys_mem; then |
|
+ ocf_log err "Failed to set the host_memory utilization attribute for $host_name using crm_attribute." |
|
+ return 1 |
|
+ fi |
|
+ fi |
|
+ fi |
|
+ |
|
+ if ocf_is_true "$OCF_RESKEY_utilization_hv_memory"; then |
|
+ hv_mem=$(( $(Host_Total_Memory) - OCF_RESKEY_utilization_hv_memory_reservation )) |
|
+ uti_mem=$(crm_attribute -Q -t nodes -U "$host_name" -z -n hv_memory 2>/dev/null) |
|
+ |
|
+ [ $hv_mem -lt 0 ] && hv_mem=0 |
|
+ |
|
+ if [ "$hv_mem" != "$uti_mem" ]; then |
|
+ if ! crm_attribute -t nodes -U "$host_name" -z -n hv_memory -v $hv_mem; then |
|
+ ocf_log err "Failed to set the hv_memory utilization attribute for $host_name using crm_attribute." |
|
+ return 1 |
|
+ fi |
|
+ fi |
|
+ fi |
|
+} |
|
+ |
|
+NodeUtilization_usage() { |
|
+ cat <<END |
|
+usage: $0 {start|stop|monitor|validate-all|meta-data} |
|
+ |
|
+Expects to have a fully populated OCF RA-compliant environment set. |
|
+END |
|
+} |
|
+ |
|
+NodeUtilization_start() { |
|
+ ha_pseudo_resource $statefile start |
|
+ if ! ocf_is_true "$OCF_RESKEY_dynamic"; then |
|
+ if ! set_utilization; then |
|
+ exit $OCF_ERR_GENERIC |
|
+ fi |
|
+ fi |
|
+ exit $OCF_SUCCESS |
|
+} |
|
+ |
|
+NodeUtilization_stop() { |
|
+ ha_pseudo_resource $statefile stop |
|
+ exit $OCF_SUCCESS |
|
+} |
|
+ |
|
+NodeUtilization_monitor() { |
|
+ local rc |
|
+ ha_pseudo_resource $statefile monitor |
|
+ rc=$? |
|
+ |
|
+ case $rc in |
|
+ $OCF_SUCCESS) |
|
+ if ocf_is_true "$OCF_RESKEY_dynamic"; then |
|
+ if ! set_utilization; then |
|
+ exit $OCF_ERR_GENERIC |
|
+ fi |
|
+ fi |
|
+ ;; |
|
+ *) exit $rc;; |
|
+ esac |
|
+} |
|
+ |
|
+NodeUtilization_validate() { |
|
+ exit $OCF_SUCCESS |
|
+} |
|
+ |
|
+statefile=$OCF_RESOURCE_TYPE.$(echo $OCF_RESOURCE_INSTANCE | sed -e 's/^.*://') |
|
+ |
|
+: ${OCF_RESKEY_pidfile:="$HA_VARRUN/NodeUtilization-${OCF_RESOURCE_INSTANCE}"} |
|
+: ${OCF_RESKEY_dynamic:="true"} |
|
+: ${OCF_RESKEY_utilization_cpu:="true"} |
|
+: ${OCF_RESKEY_utilization_cpu_reservation="1"} |
|
+: ${OCF_RESKEY_utilization_hv_memory:="true"} |
|
+: ${OCF_RESKEY_utilization_hv_memory_reservation="512"} |
|
+: ${OCF_RESKEY_utilization_host_memory:="true"} |
|
+: ${OCF_RESKEY_utilization_host_memory_reservation="512"} |
|
+ |
|
+OCF_REQUIRED_PARAMS="" |
|
+OCF_REQUIRED_BINARIES="" |
|
+ocf_rarun $*
|
|
|