diff --git a/lib/cmdlib.py b/lib/cmdlib.py index d692a3d3ed39be98008a0ba22b21555e276b6f83..cf8494352d8bd8810f05c0148b1d71e354640892 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -3730,11 +3730,11 @@ class LUGetTags(TagsLU): return self.target.GetTags() -class LUAddTag(TagsLU): +class LUAddTags(TagsLU): """Sets a tag on a given object. """ - _OP_REQP = ["kind", "name", "tag"] + _OP_REQP = ["kind", "name", "tags"] def CheckPrereq(self): """Check prerequisites. @@ -3743,14 +3743,16 @@ class LUAddTag(TagsLU): """ TagsLU.CheckPrereq(self) - objects.TaggableObject.ValidateTag(self.op.tag) + for tag in self.op.tags: + objects.TaggableObject.ValidateTag(tag) def Exec(self, feedback_fn): """Sets the tag. """ try: - self.target.AddTag(self.op.tag) + for tag in self.op.tags: + self.target.AddTag(tag) except errors.TagError, err: raise errors.OpExecError("Error while setting tag: %s" % str(err)) try: @@ -3761,11 +3763,11 @@ class LUAddTag(TagsLU): " aborted. Please retry.") -class LUDelTag(TagsLU): - """Delete a tag from a given object. +class LUDelTags(TagsLU): + """Delete a list of tags from a given object. """ - _OP_REQP = ["kind", "name", "tag"] + _OP_REQP = ["kind", "name", "tags"] def CheckPrereq(self): """Check prerequisites. @@ -3774,15 +3776,23 @@ class LUDelTag(TagsLU): """ TagsLU.CheckPrereq(self) - objects.TaggableObject.ValidateTag(self.op.tag) - if self.op.tag not in self.target.GetTags(): - raise errors.OpPrereqError("Tag not found") + for tag in self.op.tags: + objects.TaggableObject.ValidateTag(tag) + del_tags = frozenset(self.op.tags) + cur_tags = self.target.GetTags() + if not del_tags <= cur_tags: + diff_tags = del_tags - cur_tags + diff_names = ["'%s'" % tag for tag in diff_tags] + diff_names.sort() + raise errors.OpPrereqError("Tag(s) %s not found" % + (",".join(diff_names))) def Exec(self, feedback_fn): """Remove the tag from the object. """ - self.target.RemoveTag(self.op.tag) + for tag in self.op.tags: + self.target.RemoveTag(tag) try: self.cfg.Update(self.target) except errors.ConfigurationError: diff --git a/lib/mcpu.py b/lib/mcpu.py index 2714588f7c7d1ca5b3bb5418b3f54bbc048e780d..1f46dbb4985e5b79c42d84593b59ea9f8ac45b34 100644 --- a/lib/mcpu.py +++ b/lib/mcpu.py @@ -79,8 +79,8 @@ class Processor(object): opcodes.OpExportInstance: cmdlib.LUExportInstance, # tags lu opcodes.OpGetTags: cmdlib.LUGetTags, - opcodes.OpSetTag: cmdlib.LUAddTag, - opcodes.OpDelTag: cmdlib.LUDelTag, + opcodes.OpAddTags: cmdlib.LUAddTags, + opcodes.OpDelTags: cmdlib.LUDelTags, } diff --git a/lib/opcodes.py b/lib/opcodes.py index 94a68fa245c85baa88e5fbff1fbde1d98d2d0d04..3544ed6fe04094a2d025e90dd218139212e8b4a1 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -256,13 +256,13 @@ class OpGetTags(OpCode): __slots__ = ["kind", "name"] -class OpSetTag(OpCode): - """Sets the value of a tag on a given object.""" +class OpAddTags(OpCode): + """Add a list of tags on a given object.""" OP_ID = "OP_TAGS_SET" - __slots__ = ["kind", "name", "tag"] + __slots__ = ["kind", "name", "tags"] -class OpDelTag(OpCode): - """Remove a tag from a given object.""" +class OpDelTags(OpCode): + """Remove a list of tags from a given object.""" OP_ID = "OP_TAGS_DEL" - __slots__ = ["kind", "name", "tag"] + __slots__ = ["kind", "name", "tags"]