Commit d0b98288 authored by René Nussbaumer's avatar René Nussbaumer
Browse files

Check payload of OOB execution


Signed-off-by: default avatarRené Nussbaumer <rn@google.com>
Reviewed-by: default avatarIustin Pop <iustin@google.com>
parent 9d5198ad
......@@ -3274,6 +3274,8 @@ class LUOutOfBand(NoHooksLU):
result.Raise("An error occurred on execution of OOB helper")
self._CheckPayload(result)
if self.op.command == constants.OOB_HEALTH:
# For health we should log important events
for item, status in result.payload:
......@@ -3284,6 +3286,42 @@ class LUOutOfBand(NoHooksLU):
return result.payload
def _CheckPayload(self, result):
"""Checks if the payload is valid.
@param result: RPC result
@raises errors.OpExecError: If payload is not valid
"""
errs = []
if self.op.command == constants.OOB_HEALTH:
if not isinstance(result.payload, list):
errs.append("command 'health' is expected to return a list but got %s" %
type(result.payload))
for item, status in result.payload:
if status not in constants.OOB_STATUSES:
errs.append("health item '%s' has invalid status '%s'" %
(item, status))
if self.op.command == constants.OOB_POWER_STATUS:
if not isinstance(result.payload, dict):
errs.append("power-status is expected to return a dict but got %s" %
type(result.payload))
if self.op.command in [
constants.OOB_POWER_ON,
constants.OOB_POWER_OFF,
constants.OOB_POWER_CYCLE,
]:
if result.payload is not None:
errs.append("%s is expected to not return payload but got '%s'" %
(self.op.command, result.payload))
if errs:
raise errors.OpExecError("Check of out-of-band payload failed due to %s" %
utils.CommaJoin(errs))
class LUDiagnoseOS(NoHooksLU):
"""Logical unit for OS diagnose/query.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment