diff options
author | Jan Pokorný <jpokorny@redhat.com> | 2014-05-22 16:22:48 +0200 |
---|---|---|
committer | Jan Pokorný <jpokorny@redhat.com> | 2014-05-22 17:25:55 +0200 |
commit | a1a66adc32c0ed4a649b0cb9ccf6e52862c648da (patch) | |
tree | 868d6b50440b1cdf803c483a175837a1eabe48ce /utils_cib.py | |
parent | 880c23379958048cd7b09157072bde5e0665faff (diff) | |
download | clufter-a1a66adc32c0ed4a649b0cb9ccf6e52862c648da.tar.gz clufter-a1a66adc32c0ed4a649b0cb9ccf6e52862c648da.tar.xz clufter-a1a66adc32c0ed4a649b0cb9ccf6e52862c648da.zip |
utils_cib: unit for CIB-related stuff + test counterpart
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to 'utils_cib.py')
-rw-r--r-- | utils_cib.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/utils_cib.py b/utils_cib.py new file mode 100644 index 0000000..de2bba1 --- /dev/null +++ b/utils_cib.py @@ -0,0 +1,56 @@ +# -*- coding: UTF-8 -*- +# Copyright 2014 Red Hat, Inc. +# Part of clufter project +# Licensed under GPLv2+ (a copy included | http://gnu.org/licenses/gpl-2.0.txt) +"""CIB helpers, mainly used in the filter definitions""" +__author__ = "Jan Pokorný <jpokorny @at@ Red Hat .dot. com>" + +from .error import ClufterError + +class ResourceSpecError(ClufterError): + pass + + +class ResourceSpec(object): + """Representation of simplified resource specification""" + # see also pcs/resource.py:resource_list_available + # get_full_ra_type + # note however that Pacemaker internally prefers this notation: + # class + class == "ocf"?("::" + provider):"" + ":" + type + # (i.e., double colon), as per + # pacemaker/lib/pengine/native.c:{native_print_xml,native_print, + # get_rscs_brief} + def __init__(self, spec): + split = spec.replace('::', ':', 1).split(':', 3) + try: + self._type = split.pop() + maybe_class = split.pop() + self._class = maybe_class if not(split) else split.pop() + self._provider = maybe_class if self._class == 'ocf' else None + except IndexError: + raise ResourceSpecError("Invalid spec: {0}".format(spec)) + + @property + def res_class(self): + return self._class + + @property + def res_provider(self): + if self._class != 'ocf': + raise ResourceSpecError("No provider for class `ocf'") + return self._provider + + @property + def res_type(self): + return self._type + + @property + def xsl_attrs(self): + ret = ('<xsl:attribute name="class">{0}</xsl:attribute>' + .format(self._class)) + if self._provider is not None: + ret += ('<xsl:attribute name="provider">{0}</xsl:attribute>' + .format(self._provider)) + ret += ('<xsl:attribute name="type">{0}</xsl:attribute>' + .format(self._type)) + return ret |