X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/cb92e7a14b7ee510dcc26c2a14dddaa0fa8f10e4..f626cef4580cbcda4631384095cb21743edf6bbf:/lib/opcodes.py diff --git a/lib/opcodes.py b/lib/opcodes.py index 6a922c9..31f6180 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -137,6 +137,24 @@ _PErrorCodes = ("error_codes", False, ht.TBool, "Error codes") _PSkipChecks = ("skip_checks", ht.EmptyList, ht.TListOf(ht.TElemOf(constants.VERIFY_OPTIONAL_CHECKS)), "Which checks to skip") +_PIgnoreErrors = ("ignore_errors", ht.EmptyList, + ht.TListOf(ht.TElemOf(constants.CV_ALL_ECODES_STRINGS)), + "List of error codes that should be treated as warnings") + +# Disk parameters +_PDiskParams = ("diskparams", None, + ht.TOr( + ht.TDictOf(ht.TElemOf(constants.DISK_TEMPLATES), ht.TDict), + ht.TNone), + "Disk templates' parameter defaults") + +# Parameters for node resource model +_PHvState = ("hv_state", None, ht.TMaybeDict, "Set hypervisor states") +_PDiskState = ("disk_state", None, ht.TMaybeDict, "Set disk states") + + +_PIgnoreIpolicy = ("ignore_ipolicy", False, ht.TBool, + "Whether to ignore ipolicy violations") #: OP_ID conversion regular expression _OPID_RE = re.compile("([a-z])([A-Z])") @@ -237,8 +255,20 @@ def _CheckFileStorage(value): return True -_CheckDiskTemplate = ht.TAnd(ht.TElemOf(constants.DISK_TEMPLATES), - _CheckFileStorage) +def _BuildDiskTemplateCheck(accept_none): + """Builds check for disk template. + + @type accept_none: bool + @param accept_none: whether to accept None as a correct value + @rtype: callable + + """ + template_check = ht.TElemOf(constants.DISK_TEMPLATES) + + if accept_none: + template_check = ht.TOr(template_check, ht.TNone) + + return ht.TAnd(template_check, _CheckFileStorage) def _CheckStorageType(storage_type): @@ -483,7 +513,8 @@ class OpCode(BaseOpCode): ht.TElemOf(constants.OP_PRIO_SUBMIT_VALID), "Opcode priority"), (DEPEND_ATTR, None, _BuildJobDepCheck(True), "Job dependencies; if used through ``SubmitManyJobs`` relative (negative)" - " job IDs can be used"), + " job IDs can be used; see :doc:`design document `" + " for details"), (COMMENT_ATTR, None, ht.TMaybeString, "Comment describing the purpose of the opcode"), ] @@ -601,6 +632,7 @@ class OpClusterVerify(OpCode): _PDebugSimulateErrors, _PErrorCodes, _PSkipChecks, + _PIgnoreErrors, _PVerbose, ("group_name", None, ht.TMaybeString, "Group to verify") ] @@ -614,6 +646,7 @@ class OpClusterVerifyConfig(OpCode): OP_PARAMS = [ _PDebugSimulateErrors, _PErrorCodes, + _PIgnoreErrors, _PVerbose, ] OP_RESULT = ht.TBool @@ -635,6 +668,7 @@ class OpClusterVerifyGroup(OpCode): _PDebugSimulateErrors, _PErrorCodes, _PSkipChecks, + _PIgnoreErrors, _PVerbose, ] OP_RESULT = ht.TBool @@ -728,6 +762,8 @@ class OpClusterSetParams(OpCode): """ OP_PARAMS = [ + _PHvState, + _PDiskState, ("vg_name", None, ht.TMaybeString, "Volume group name"), ("enabled_hypervisors", None, ht.TOr(ht.TAnd(ht.TListOf(ht.TElemOf(constants.HYPER_TYPES)), ht.TTrue), @@ -744,6 +780,7 @@ class OpClusterSetParams(OpCode): ("osparams", None, ht.TOr(ht.TDictOf(ht.TNonEmptyString, ht.TDict), ht.TNone), "Cluster-wide OS parameter defaults"), + _PDiskParams, ("candidate_pool_size", None, ht.TOr(ht.TStrictPositiveInt, ht.TNone), "Master candidate pool size"), ("uid_pool", None, ht.NoType, @@ -761,11 +798,14 @@ class OpClusterSetParams(OpCode): "Whether to wipe disks before allocating them to instances"), ("nicparams", None, ht.TMaybeDict, "Cluster-wide NIC parameter defaults"), ("ndparams", None, ht.TMaybeDict, "Cluster-wide node parameter defaults"), + ("ipolicy", None, ht.TMaybeDict, "Cluster-wide instance policy specs"), ("drbd_helper", None, ht.TOr(ht.TString, ht.TNone), "DRBD helper program"), ("default_iallocator", None, ht.TOr(ht.TString, ht.TNone), "Default iallocator for cluster"), ("master_netdev", None, ht.TOr(ht.TString, ht.TNone), "Master network device"), + ("master_netmask", None, ht.TOr(ht.TInt, ht.TNone), + "Netmask of the master IP"), ("reserved_lvs", None, ht.TOr(ht.TListOf(ht.TNonEmptyString), ht.TNone), "List of reserved LVs"), ("hidden_os", None, _TestClusterOsList, @@ -776,6 +816,8 @@ class OpClusterSetParams(OpCode): "Modify list of blacklisted operating systems. Each modification must have" " two items, the operation and the OS name. The operation can be" " ``%s`` or ``%s``." % (constants.DDM_ADD, constants.DDM_REMOVE)), + ("use_external_mip_script", None, ht.TMaybeBool, + "Whether to use an external master IP address setup script"), ] @@ -802,7 +844,7 @@ class OpQuery(OpCode): @ivar what: Resources to query for, must be one of L{constants.QR_VIA_OP} @ivar fields: List of fields to retrieve - @ivar filter: Query filter + @ivar qfilter: Query filter """ OP_DSC_FIELD = "what" @@ -811,7 +853,7 @@ class OpQuery(OpCode): _PUseLocking, ("fields", ht.NoDefault, ht.TListOf(ht.TNonEmptyString), "Requested fields"), - ("filter", None, ht.TOr(ht.TNone, ht.TListOf), + ("qfilter", None, ht.TOr(ht.TNone, ht.TListOf), "Query filter"), ] @@ -894,6 +936,8 @@ class OpNodeAdd(OpCode): OP_DSC_FIELD = "node_name" OP_PARAMS = [ _PNodeName, + _PHvState, + _PDiskState, ("primary_ip", None, ht.NoType, "Primary IP address"), ("secondary_ip", None, ht.TMaybeString, "Secondary IP address"), ("readd", False, ht.TBool, "Whether node is re-added to cluster"), @@ -962,6 +1006,8 @@ class OpNodeSetParams(OpCode): OP_PARAMS = [ _PNodeName, _PForce, + _PHvState, + _PDiskState, ("master_candidate", None, ht.TMaybeBool, "Whether the node should become a master candidate"), ("offline", None, ht.TMaybeBool, @@ -1000,6 +1046,7 @@ class OpNodeMigrate(OpCode): _PMigrationMode, _PMigrationLive, _PMigrationTargetNode, + _PIgnoreIpolicy, ("iallocator", None, ht.TMaybeString, "Iallocator for deciding the target node for shared-storage instances"), ] @@ -1040,6 +1087,7 @@ class OpInstanceCreate(OpCode): _PForceVariant, _PWaitForSync, _PNameCheck, + _PIgnoreIpolicy, ("beparams", ht.EmptyDict, ht.TDict, "Backend parameters for instance"), ("disks", ht.NoDefault, # TODO: Generate check from constants.IDISK_PARAMS_TYPES @@ -1052,7 +1100,8 @@ class OpInstanceCreate(OpCode): (constants.IDISK_SIZE, constants.IDISK_SIZE, constants.IDISK_SIZE, constants.IDISK_MODE, " or ".join("``%s``" % i for i in sorted(constants.DISK_ACCESS_SET)))), - ("disk_template", ht.NoDefault, _CheckDiskTemplate, "Disk template"), + ("disk_template", ht.NoDefault, _BuildDiskTemplateCheck(True), + "Disk template"), ("file_driver", None, ht.TOr(ht.TNone, ht.TElemOf(constants.FILE_DRIVER)), "Driver for file-backed disks"), ("file_storage_dir", None, ht.TMaybeString, @@ -1175,6 +1224,7 @@ class OpInstanceReplaceDisks(OpCode): OP_PARAMS = [ _PInstanceName, _PEarlyRelease, + _PIgnoreIpolicy, ("mode", ht.NoDefault, ht.TElemOf(constants.REPLACE_MODES), "Replacement mode"), ("disks", ht.EmptyList, ht.TListOf(ht.TPositiveInt), @@ -1193,6 +1243,7 @@ class OpInstanceFailover(OpCode): _PShutdownTimeout, _PIgnoreConsistency, _PMigrationTargetNode, + _PIgnoreIpolicy, ("iallocator", None, ht.TMaybeString, "Iallocator for deciding the target node for shared-storage instances"), ] @@ -1214,6 +1265,7 @@ class OpInstanceMigrate(OpCode): _PMigrationMode, _PMigrationLive, _PMigrationTargetNode, + _PIgnoreIpolicy, ("cleanup", False, ht.TBool, "Whether a previously failed migration should be cleaned up"), ("iallocator", None, ht.TMaybeString, @@ -1237,6 +1289,7 @@ class OpInstanceMove(OpCode): OP_PARAMS = [ _PInstanceName, _PShutdownTimeout, + _PIgnoreIpolicy, ("target_node", ht.NoDefault, ht.TNonEmptyString, "Target node"), _PIgnoreConsistency, ] @@ -1269,7 +1322,7 @@ class OpInstanceDeactivateDisks(OpCode): class OpInstanceRecreateDisks(OpCode): - """Deactivate an instance's disks.""" + """Recreate an instance's disks.""" OP_DSC_FIELD = "instance_name" OP_PARAMS = [ _PInstanceName, @@ -1309,6 +1362,7 @@ class OpInstanceSetParams(OpCode): _PInstanceName, _PForce, _PForceVariant, + _PIgnoreIpolicy, # TODO: Use _TestNicDef ("nics", ht.EmptyList, ht.TList, "List of NIC changes. Each item is of the form ``(op, settings)``." @@ -1318,9 +1372,10 @@ class OpInstanceSetParams(OpCode): (constants.DDM_ADD, constants.DDM_REMOVE)), ("disks", ht.EmptyList, ht.TList, "List of disk changes. See ``nics``."), ("beparams", ht.EmptyDict, ht.TDict, "Per-instance backend parameters"), + ("runtime_mem", None, ht.TMaybeStrictPositiveInt, "New runtime memory"), ("hvparams", ht.EmptyDict, ht.TDict, "Per-instance hypervisor parameters, hypervisor-dependent"), - ("disk_template", None, ht.TOr(ht.TNone, _CheckDiskTemplate), + ("disk_template", None, ht.TOr(ht.TNone, _BuildDiskTemplateCheck(False)), "Disk template for instance"), ("remote_node", None, ht.TMaybeString, "Secondary node (used when changing disk template)"), @@ -1329,6 +1384,10 @@ class OpInstanceSetParams(OpCode): ("osparams", None, ht.TMaybeDict, "Per-instance OS parameters"), ("wait_for_sync", True, ht.TBool, "Whether to wait for the disk to synchronize, when changing template"), + ("offline_inst", False, ht.TBool, + "Whether to turn off the down instance completely"), + ("online_inst", False, ht.TBool, + "Whether to enable the offline instance"), ] OP_RESULT = _TSetParamsResult @@ -1367,6 +1426,10 @@ class OpGroupAdd(OpCode): _PGroupName, _PNodeGroupAllocPolicy, _PGroupNodeParams, + _PDiskParams, + _PHvState, + _PDiskState, + ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"), ] @@ -1397,6 +1460,10 @@ class OpGroupSetParams(OpCode): _PGroupName, _PNodeGroupAllocPolicy, _PGroupNodeParams, + _PDiskParams, + _PHvState, + _PDiskState, + ("ipolicy", None, ht.TMaybeDict, "Group-wide instance policy specs"), ] OP_RESULT = _TSetParamsResult