1
0
Fork 0

plugin_script: added support for verify

Added 'verify' shell function to the 'functions' API. This
function is optional, if defined in the script, it is called
during the verification. It's return code is checked. Function
return code '0' means verification passed, other value means
failure.

Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
This commit is contained in:
Jaroslav Škarvada 2015-05-19 15:51:04 +02:00
parent 758a561a53
commit d4038a7e64
3 changed files with 32 additions and 6 deletions

View file

@ -504,8 +504,17 @@ process() {
stop
RETVAL=$?
;;
verify)
if declare -f verify &> /dev/null;
then
verify
else
:
fi
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop}"
echo $"Usage: $0 {start|stop|verify}"
RETVAL=2
;;
esac

View file

@ -42,7 +42,9 @@ CFG_DEF_SLEEP_INTERVAL = 1
# update interval for dynamic tuning (in seconds)
CFG_DEF_UPDATE_INTERVAL = 10
STR_VERIFY_PROFILE_DEVICE_VALUE_OK = "verify: device %s: %s = %s"
STR_VERIFY_PROFILE_VALUE_OK = "verify: %s = %s"
STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL = "verify: fail: device %s: %s = %s, expected %s"
STR_VERIFY_PROFILE_VALUE_FAIL = "verify: fail: %s = %s, expected %s"
STR_VERIFY_PROFILE_DEVICE_VALUE_OK = "verify: passed: device %s: %s = %s"
STR_VERIFY_PROFILE_VALUE_OK = "verify: passed: %s = %s"
STR_VERIFY_PROFILE_OK = "verify: passed: %s"
STR_VERIFY_PROFILE_DEVICE_VALUE_FAIL = "verify: failed: device %s: %s = %s, expected %s"
STR_VERIFY_PROFILE_VALUE_FAIL = "verify: failed: %s = %s, expected %s"
STR_VERIFY_PROFILE_FAIL = "verify: failed: %s"

View file

@ -1,3 +1,4 @@
import tuned.consts as consts
import base
import tuned.logs
import os
@ -35,14 +36,28 @@ class ScriptPlugin(base.Plugin):
proc = Popen([script, argument], stdout=PIPE, stderr=PIPE, close_fds=True)
out, err = proc.communicate()
if proc.returncode:
log.error("script '%s' error: %s" % (script, err[:-1]))
log.error("script '%s' error: %d, '%s'" % (script, proc.returncode, err[:-1]))
return False
except (OSError,IOError) as e:
log.error("script '%s' error: %s" % (script, e))
return False
return True
def _instance_apply_static(self, instance):
super(self.__class__, self)._instance_apply_static(instance)
self._call_scripts(instance._scripts, "start")
def _instance_verify_static(self, instance):
ret = True
if super(self.__class__, self)._instance_verify_static(instance) == False:
ret = False
if self._call_scripts(instance._scripts, "verify") == True:
log.info(consts.STR_VERIFY_PROFILE_OK % (instance._scripts))
else:
log.error(consts.STR_VERIFY_PROFILE_FAIL % (instance._scripts))
ret = False
return ret
def _instance_unapply_static(self, instance, profile_switch = False):
self._call_scripts(reversed(instance._scripts), "stop")
super(self.__class__, self)._instance_unapply_static(instance, profile_switch)