diff --git a/lib/hypervisor/hv_base.py b/lib/hypervisor/hv_base.py index bb0da911e10f63cd121550ed50fc72cf30aa595d..1cc054a30fd2997118302eca0c9d5f76f957dcd9 100644 --- a/lib/hypervisor/hv_base.py +++ b/lib/hypervisor/hv_base.py @@ -102,6 +102,9 @@ _MULTI_CPU_MASK_CHECK = (_IsMultiCpuMaskWellFormed, _NET_PORT_CHECK = (lambda x: 0 < x < 65535, "invalid port number", None, None) +# Check that an integer is non negative +_NONNEGATIVE_INT_CHECK = (lambda x: x >= 0, "cannot be negative", None, None) + # nice wrappers for users REQ_FILE_CHECK = (True, ) + _FILE_CHECK OPT_FILE_CHECK = (False, ) + _FILE_CHECK @@ -113,6 +116,8 @@ REQ_CPU_MASK_CHECK = (True, ) + _CPU_MASK_CHECK OPT_CPU_MASK_CHECK = (False, ) + _CPU_MASK_CHECK REQ_MULTI_CPU_MASK_CHECK = (True, ) + _MULTI_CPU_MASK_CHECK OPT_MULTI_CPU_MASK_CHECK = (False, ) + _MULTI_CPU_MASK_CHECK +REQ_NONNEGATIVE_INT_CHECK = (True, ) + _NONNEGATIVE_INT_CHECK +OPT_NONNEGATIVE_INT_CHECK = (False, ) + _NONNEGATIVE_INT_CHECK # no checks at all NO_CHECK = (False, None, None, None, None) diff --git a/lib/hypervisor/hv_kvm.py b/lib/hypervisor/hv_kvm.py index 8087d49883ba5cbc37a626d950162af31afc40d2..aebbefcf54604e98c8751048eb58231b1cafc2ad 100644 --- a/lib/hypervisor/hv_kvm.py +++ b/lib/hypervisor/hv_kvm.py @@ -514,8 +514,8 @@ class KVMHypervisor(hv_base.BaseHypervisor): hv_base.ParamInSet(False, constants.HT_KVM_VALID_MOUSE_TYPES), constants.HV_KEYMAP: hv_base.NO_CHECK, constants.HV_MIGRATION_PORT: hv_base.REQ_NET_PORT_CHECK, - constants.HV_MIGRATION_BANDWIDTH: hv_base.NO_CHECK, - constants.HV_MIGRATION_DOWNTIME: hv_base.NO_CHECK, + constants.HV_MIGRATION_BANDWIDTH: hv_base.REQ_NONNEGATIVE_INT_CHECK, + constants.HV_MIGRATION_DOWNTIME: hv_base.REQ_NONNEGATIVE_INT_CHECK, constants.HV_MIGRATION_MODE: hv_base.MIGRATION_MODE_CHECK, constants.HV_USE_LOCALTIME: hv_base.NO_CHECK, constants.HV_DISK_CACHE: @@ -532,9 +532,9 @@ class KVMHypervisor(hv_base.BaseHypervisor): hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS), constants.HV_CPU_MASK: hv_base.OPT_MULTI_CPU_MASK_CHECK, constants.HV_CPU_TYPE: hv_base.NO_CHECK, - constants.HV_CPU_CORES: hv_base.NO_CHECK, - constants.HV_CPU_THREADS: hv_base.NO_CHECK, - constants.HV_CPU_SOCKETS: hv_base.NO_CHECK, + constants.HV_CPU_CORES: hv_base.OPT_NONNEGATIVE_INT_CHECK, + constants.HV_CPU_THREADS: hv_base.OPT_NONNEGATIVE_INT_CHECK, + constants.HV_CPU_SOCKETS: hv_base.OPT_NONNEGATIVE_INT_CHECK, } _MIGRATION_STATUS_RE = re.compile("Migration\s+status:\s+(\w+)", diff --git a/lib/hypervisor/hv_xen.py b/lib/hypervisor/hv_xen.py index d936d84368715da5c25a07f17426fb4832ea396f..d60f6f84283ab024bc5e13adc4e684307a466375 100644 --- a/lib/hypervisor/hv_xen.py +++ b/lib/hypervisor/hv_xen.py @@ -632,7 +632,7 @@ class XenPvmHypervisor(XenHypervisor): constants.HV_REBOOT_BEHAVIOR: hv_base.ParamInSet(True, constants.REBOOT_BEHAVIORS), constants.HV_CPU_MASK: hv_base.OPT_MULTI_CPU_MASK_CHECK, - constants.HV_CPU_CAP: hv_base.NO_CHECK, + constants.HV_CPU_CAP: hv_base.OPT_NONNEGATIVE_INT_CHECK, constants.HV_CPU_WEIGHT: (False, lambda x: 0 < x < 65536, "invalid weight", None, None), }