In order to be able to verify exclusion tag violations in cluster
verify, we need to decide which tags are exclusion tags. So add
two python utility functions: one for extracting exclusion prefixes
from from the cluster tags and one testing if a tag starts with
one of a set of given prefixes.

Signed-off-by: Klaus Aehlig <[email protected]>
---
 Makefile.am           |  1 +
 lib/utils/__init__.py |  1 +
 lib/utils/tags.py     | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+)
 create mode 100644 lib/utils/tags.py

diff --git a/Makefile.am b/Makefile.am
index a8e6f3c..c45779a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -629,6 +629,7 @@ utils_PYTHON = \
        lib/utils/security.py \
        lib/utils/storage.py \
        lib/utils/text.py \
+       lib/utils/tags.py \
        lib/utils/version.py \
        lib/utils/wrapper.py \
        lib/utils/x509.py \
diff --git a/lib/utils/__init__.py b/lib/utils/__init__.py
index bdd9761..ce89869 100644
--- a/lib/utils/__init__.py
+++ b/lib/utils/__init__.py
@@ -65,6 +65,7 @@ from ganeti.utils.process import *
 from ganeti.utils.retry import *
 from ganeti.utils.security import *
 from ganeti.utils.storage import *
+from ganeti.utils.tags import *
 from ganeti.utils.text import *
 from ganeti.utils.wrapper import *
 from ganeti.utils.version import *
diff --git a/lib/utils/tags.py b/lib/utils/tags.py
new file mode 100644
index 0000000..1353901
--- /dev/null
+++ b/lib/utils/tags.py
@@ -0,0 +1,59 @@
+#
+#
+
+# Copyright (C) 2015 Google Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Utility functions for tag related operations
+
+"""
+
+from ganeti import constants
+
+
+def GetExclusionPrefixes(ctags):
+  """Extract the exclusion tag prefixes from the cluster tags
+
+  """
+  prefixes = set([])
+  for tag in ctags:
+    if tag.startswith(constants.EX_TAGS_PREFIX):
+      prefixes.add(tag[len(constants.EX_TAGS_PREFIX):])
+  return prefixes
+
+
+def IsGoodTag(prefixes, tag):
+  """Decide if a string is a tag
+
+  @param prefixes: set of prefixes that would indicate
+      the tag being suitable
+  @param tag: the tag in question
+
+  """
+  for prefix in prefixes:
+    if tag.startswith(prefix):
+      return True
+  return False
-- 
2.2.0.rc0.207.ga3a616c

Reply via email to