Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:42.3:Rings:1-MinimalX
pacemaker
bug-1015842_pacemaker-NodeUtilization-RA.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bug-1015842_pacemaker-NodeUtilization-RA.patch of Package pacemaker
commit 501bfa9359923b5c9b1fd3f349d93c497940d0cd Author: Kristoffer Grönlund <krig@koru.se> Date: Thu Feb 2 09:06:00 2017 +0100 Medium: NodeUtilization: Add NodeUtilization agent 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. diff --git a/extra/resources/Makefile.am b/extra/resources/Makefile.am --- a/extra/resources/Makefile.am +++ b/extra/resources/Makefile.am @@ -38,7 +38,8 @@ ocf_SCRIPTS = ClusterMon \ SysInfo \ SystemHealth \ attribute \ - remote + remote \ + NodeUtilization isolationtech_SCRIPTS = docker-wrapper diff --git a/extra/resources/NodeUtilization b/extra/resources/NodeUtilization new file mode 100755 index 00000000..61969e6f --- /dev/null +++ b/heartbeat/NodeUtilization @@ -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 $*
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor