X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/b107fe050d0bce1c2c9e81812409830cc2b4526a..8d99a8bf5852330464f87b40b96d6fe80e7cdbf5:/lib/opcodes.py diff --git a/lib/opcodes.py b/lib/opcodes.py index 83eee25..6a5f3be 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -114,6 +114,14 @@ _PQueryWhat = ("what", ht.NoDefault, ht.TElemOf(constants.QR_VIA_OP), _PIpCheckDoc = "Whether to ensure instance's IP address is inactive" +#: Do not remember instance state changes +_PNoRemember = ("no_remember", False, ht.TBool, + "Do not remember the state change") + +#: Target node for instance migration/failover +_PMigrationTargetNode = ("target_node", None, ht.TMaybeString, + "Target node for shared-storage instances") + #: OP_ID conversion regular expression _OPID_RE = re.compile("([a-z])([A-Z])") @@ -129,6 +137,13 @@ _TestClusterOsList = ht.TOr(ht.TNone, _TestNicDef = ht.TDictOf(ht.TElemOf(constants.INIC_PARAMS), ht.TOr(ht.TNone, ht.TNonEmptyString)) +_SUMMARY_PREFIX = { + "CLUSTER_": "C_", + "GROUP_": "G_", + "NODE_": "N_", + "INSTANCE_": "I_", + } + def _NameToId(name): """Convert an opcode class name to an OP_ID. @@ -463,6 +478,20 @@ class OpCode(BaseOpCode): txt = "%s(%s)" % (txt, field_value) return txt + def TinySummary(self): + """Generates a compact summary description of the opcode. + + """ + assert self.OP_ID.startswith("OP_") + + text = self.OP_ID[3:] + + for (prefix, supplement) in _SUMMARY_PREFIX.items(): + if text.startswith(prefix): + return supplement + text[len(prefix):] + + return text + # cluster opcodes @@ -488,8 +517,19 @@ class OpClusterQuery(OpCode): """Query cluster information.""" -class OpClusterVerify(OpCode): - """Verify the cluster state. +class OpClusterVerifyConfig(OpCode): + """Verify the cluster config. + + """ + OP_PARAMS = [ + ("verbose", False, ht.TBool, None), + ("error_codes", False, ht.TBool, None), + ("debug_simulate_errors", False, ht.TBool, None), + ] + + +class OpClusterVerifyGroup(OpCode): + """Run verify on a node group from the cluster. @type skip_checks: C{list} @ivar skip_checks: steps to be skipped from the verify process; this @@ -498,7 +538,9 @@ class OpClusterVerify(OpCode): only L{constants.VERIFY_NPLUSONE_MEM} can be passed """ + OP_DSC_FIELD = "group_name" OP_PARAMS = [ + ("group_name", ht.NoDefault, ht.TNonEmptyString, None), ("skip_checks", ht.EmptyList, ht.TListOf(ht.TElemOf(constants.VERIFY_OPTIONAL_CHECKS)), None), ("verbose", False, ht.TBool, None), @@ -836,6 +878,7 @@ class OpNodeMigrate(OpCode): _PNodeName, _PMigrationMode, _PMigrationLive, + _PMigrationTargetNode, ("iallocator", None, ht.TMaybeString, "Iallocator for deciding the target node for shared-storage instances"), ] @@ -967,6 +1010,7 @@ class OpInstanceStartup(OpCode): ("hvparams", ht.EmptyDict, ht.TDict, "Temporary hypervisor parameters, hypervisor-dependent"), ("beparams", ht.EmptyDict, ht.TDict, "Temporary backend parameters"), + _PNoRemember, ] @@ -978,6 +1022,7 @@ class OpInstanceShutdown(OpCode): _PIgnoreOfflineNodes, ("timeout", constants.DEFAULT_SHUTDOWN_TIMEOUT, ht.TPositiveInt, "How long to wait for instance to shut down"), + _PNoRemember, ] @@ -1018,10 +1063,9 @@ class OpInstanceFailover(OpCode): _PInstanceName, _PShutdownTimeout, _PIgnoreConsistency, + _PMigrationTargetNode, ("iallocator", None, ht.TMaybeString, "Iallocator for deciding the target node for shared-storage instances"), - ("target_node", None, ht.TMaybeString, - "Target node for shared-storage instances"), ] @@ -1040,12 +1084,11 @@ class OpInstanceMigrate(OpCode): _PInstanceName, _PMigrationMode, _PMigrationLive, + _PMigrationTargetNode, ("cleanup", False, ht.TBool, "Whether a previously failed migration should be cleaned up"), ("iallocator", None, ht.TMaybeString, "Iallocator for deciding the target node for shared-storage instances"), - ("target_node", None, ht.TMaybeString, - "Target node for shared-storage instances"), ("allow_failover", False, ht.TBool, "Whether we can fallback to failover if migration is not possible"), ] @@ -1066,6 +1109,7 @@ class OpInstanceMove(OpCode): _PInstanceName, _PShutdownTimeout, ("target_node", ht.NoDefault, ht.TNonEmptyString, "Target node"), + _PIgnoreConsistency, ] @@ -1102,6 +1146,8 @@ class OpInstanceRecreateDisks(OpCode): _PInstanceName, ("disks", ht.EmptyList, ht.TListOf(ht.TPositiveInt), "List of disk indexes"), + ("nodes", ht.EmptyList, ht.TListOf(ht.TNonEmptyString), + "New instance nodes, if relocation is desired"), ] @@ -1152,6 +1198,8 @@ class OpInstanceSetParams(OpCode): ("os_name", None, ht.TMaybeString, "Change instance's OS name. Does not reinstall the instance."), ("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"), ] @@ -1393,7 +1441,7 @@ class OpTestAllocator(OpCode): ("mode", ht.NoDefault, ht.TElemOf(constants.VALID_IALLOCATOR_MODES), None), ("name", ht.NoDefault, ht.TNonEmptyString, None), ("nics", ht.NoDefault, ht.TOr(ht.TNone, ht.TListOf( - ht.TDictOf(ht.TElemOf(["mac", "ip", "bridge"]), + ht.TDictOf(ht.TElemOf([constants.INIC_MAC, constants.INIC_IP, "bridge"]), ht.TOr(ht.TNone, ht.TNonEmptyString)))), None), ("disks", ht.NoDefault, ht.TOr(ht.TNone, ht.TList), None), ("hypervisor", None, ht.TMaybeString, None), @@ -1405,6 +1453,12 @@ class OpTestAllocator(OpCode): ("disk_template", None, ht.TMaybeString, None), ("evac_nodes", None, ht.TOr(ht.TNone, ht.TListOf(ht.TNonEmptyString)), None), + ("instances", None, ht.TOr(ht.TNone, ht.TListOf(ht.TNonEmptyString)), + None), + ("reloc_mode", None, + ht.TOr(ht.TNone, ht.TElemOf(constants.IALLOCATOR_MRELOC_MODES)), None), + ("target_groups", None, ht.TOr(ht.TNone, ht.TListOf(ht.TNonEmptyString)), + None), ]