COMMENT_ATTR = "comment"
-def _NameToId(name):
- """Convert an opcode class name to an OP_ID.
+def _NameComponents(name):
+ """Split an opcode class name into its components
@type name: string
@param name: the class name, as OpXxxYyy
- @rtype: string
- @return: the name in the OP_XXXX_YYYY format
+ @rtype: array of strings
+ @return: the components of the name
"""
- if not name.startswith("Op"):
- return None
+ assert name.startswith("Op")
# Note: (?<=[a-z])(?=[A-Z]) would be ideal, since it wouldn't
# consume any input, and hence we would just have all the elements
# in the list, one by one; but it seems that split doesn't work on
# bit
name = _OPID_RE.sub(r"\1,\2", name)
elems = name.split(",")
- return "_".join(n.upper() for n in elems)
+ return elems
+
+
+def _NameToId(name):
+ """Convert an opcode class name to an OP_ID.
+
+ @type name: string
+ @param name: the class name, as OpXxxYyy
+ @rtype: string
+ @return: the name in the OP_XXXX_YYYY format
+
+ """
+ if not name.startswith("Op"):
+ return None
+ return "_".join(n.upper() for n in _NameComponents(name))
+
+
+def NameToReasonSrc(name):
+ """Convert an opcode class name to a source string for the reason trail
+
+ @type name: string
+ @param name: the class name, as OpXxxYyy
+ @rtype: string
+ @return: the name in the OP_XXXX_YYYY format
+
+ """
+ if not name.startswith("Op"):
+ return None
+ return "%s:%s" % (constants.OPCODE_REASON_SRC_OPCODE,
+ "_".join(n.lower() for n in _NameComponents(name)))
def _GenerateObjectTypeCheck(obj, fields_types):
" for details"),
(COMMENT_ATTR, None, ht.TMaybeString,
"Comment describing the purpose of the opcode"),
+ (constants.OPCODE_REASON, None, ht.TMaybeList,
+ "The reason trail, describing why the OpCode is executed"),
]
OP_RESULT = None
Parameters: optional instances list, in case we want to restrict the
checks to only a subset of the instances.
- Result: a list of tuples, (instance, disk, new-size) for changed
+ Result: a list of tuples, (instance, disk, parameter, new-size) for changed
configurations.
In normal operation, the list should be empty.
OP_PARAMS = [
("instances", ht.EmptyList, ht.TListOf(ht.TNonEmptyString), None),
]
- OP_RESULT = ht.TListOf(ht.TAnd(ht.TIsLength(3),
+ OP_RESULT = ht.TListOf(ht.TAnd(ht.TIsLength(4),
ht.TItems([ht.TNonEmptyString,
ht.TNonNegativeInt,
+ ht.TNonEmptyString,
ht.TNonNegativeInt])))
" ``%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"),
+ ("enabled_disk_templates", None,
+ ht.TMaybe(ht.TAnd(ht.TListOf(ht.TElemOf(constants.DISK_TEMPLATES)),
+ ht.TTrue)),
+ "List of enabled disk templates"),
]
OP_RESULT = ht.TNone
"Whether to start the instance even if secondary disks are failing"),
("reboot_type", ht.NoDefault, ht.TElemOf(constants.REBOOT_TYPES),
"How to reboot instance"),
- ("reason", (constants.INSTANCE_REASON_SOURCE_UNKNOWN, None),
- ht.TAnd(ht.TIsLength(2),
- ht.TItems([
- ht.TElemOf(constants.INSTANCE_REASON_SOURCES),
- ht.TMaybeString,
- ])),
- "The reason why the reboot is happening"),
]
OP_RESULT = ht.TNone
mod_item_fn = \
ht.TAnd(ht.TIsLength(3), ht.TItems([
ht.TElemOf(constants.DDMS_VALUES_WITH_MODIFY),
- ht.Comment("Disk index, can be negative, e.g. -1 for last disk")(ht.TInt),
+ ht.Comment("Device index, can be negative, e.g. -1 for last disk")
+ (ht.TOr(ht.TInt, ht.TString)),
fn,
]))
_PForceVariant,
_PIgnoreIpolicy,
("nics", ht.EmptyList, TestNicModifications,
- "List of NIC changes: each item is of the form ``(op, index, settings)``,"
- " ``op`` is one of ``%s``, ``%s`` or ``%s``, ``index`` can be either -1"
- " to refer to the last position, or a zero-based index number; a"
+ "List of NIC changes: each item is of the form"
+ " ``(op, identifier, settings)``, ``op`` is one of ``%s``, ``%s`` or"
+ " ``%s``, ``identifier`` can be a zero-based index number (or -1 to refer"
+ " to the last position), the NIC's UUID of the NIC's name; a"
" deprecated version of this parameter used the form ``(op, settings)``,"
" where ``op`` can be ``%s`` to add a new NIC with the specified"
" settings, ``%s`` to remove the last NIC or a number to modify the"
"Per-instance hypervisor parameters, hypervisor-dependent"),
("disk_template", None, ht.TMaybe(_BuildDiskTemplateCheck(False)),
"Disk template for instance"),
+ ("pnode", None, ht.TMaybeString, "New primary node"),
("remote_node", None, ht.TMaybeString,
"Secondary node (used when changing disk template)"),
("os_name", None, ht.TMaybeString,