diff options
author | Jan Pokorný <jpokorny@redhat.com> | 2014-11-30 11:51:40 +0100 |
---|---|---|
committer | Jan Pokorný <jpokorny@redhat.com> | 2014-12-08 16:37:49 +0100 |
commit | 375666134b456d18b335693cb9868554d7355757 (patch) | |
tree | 39d0925bcc491eb9b9ef6959e8af0d7df3764f83 /ext-plugins | |
parent | 4f5642db7a263de56cb025b9694ffeccd4242413 (diff) | |
download | clufter-375666134b456d18b335693cb9868554d7355757.tar.gz clufter-375666134b456d18b335693cb9868554d7355757.tar.xz clufter-375666134b456d18b335693cb9868554d7355757.zip |
lib-ccs collection of unbound filters incl. ccs-subst-nodes
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to 'ext-plugins')
-rw-r--r-- | ext-plugins/lib-ccs/filters/ccs_subst_nodes.py | 38 | ||||
-rw-r--r-- | ext-plugins/lib-ccs/filters/cluster/__init__.py | 34 | ||||
l--------- | ext-plugins/lib-ccs/filters/cluster/_vimrc_local.vim | 1 |
3 files changed, 73 insertions, 0 deletions
diff --git a/ext-plugins/lib-ccs/filters/ccs_subst_nodes.py b/ext-plugins/lib-ccs/filters/ccs_subst_nodes.py new file mode 100644 index 0000000..6762ebb --- /dev/null +++ b/ext-plugins/lib-ccs/filters/ccs_subst_nodes.py @@ -0,0 +1,38 @@ +# -*- 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) +"""ccs-subst-nodes filter""" +__author__ = "Jan Pokorný <jpokorny @at@ Red Hat .dot. com>" + +from ..filter import FilterError, XMLFilter +from ..utils_cman import get_nodes + +from logging import getLogger + +log = getLogger(__name__) + +@XMLFilter.deco('ccs', 'ccs') +def ccs_subst_nodes(flt_ctxt, in_obj): + # could be in-situ, but stick with the default assumptions; + # we temporarily store also the old name as <OLD>@<NEW> as name + from copy import deepcopy + + self = flt_ctxt.ctxt_wrapped + + ret = deepcopy(in_obj('etree')) + declared, existing = flt_ctxt['nodes'].split(' '), get_nodes(ret) + declared_no, existing_no = map(len, (declared, existing)) + if declared_no != existing_no: + raise FilterError(self, "number of provided node names does not match" + " the real configuration: {0} vs {1}" + .format(declared_no, existing_no)) + declared.reverse() + for clusternode in existing: + old, new = clusternode.attrib['name'], declared.pop() + clusternode.attrib['name'] = '@'.join((old, new)) + log.info("substituted nodename: {0} -> {1}".format(old, new)) + + # pick <OLD>@<NEW> naming from previous phase and run some implied + # translations, dropping "<OLD>@" part along + return ('etree', flt_ctxt.ctxt_proceed_xslt(type(in_obj)('etree', ret))) diff --git a/ext-plugins/lib-ccs/filters/cluster/__init__.py b/ext-plugins/lib-ccs/filters/cluster/__init__.py new file mode 100644 index 0000000..569c207 --- /dev/null +++ b/ext-plugins/lib-ccs/filters/cluster/__init__.py @@ -0,0 +1,34 @@ +# -*- 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) +__author__ = "Jan Pokorný <jpokorny @at@ Red Hat .dot. com>" + +from ...utils_xslt import xslt_is_member + +ccs_subst_nodes = '''\ + <xsl:key name="node-old-to-new" + match="/cluster/clusternodes/clusternode/@name" + use="substring-before(., '@')"/> + <xsl:template match="/cluster/clusternodes/clusternode/@name"> + <xsl:attribute name="{name()}"> + <xsl:value-of select="substring-after(., '@')"/> + </xsl:attribute> + </xsl:template> + <xsl:template match="/cluster/rm/failoverdomains/failoverdomain/failoverdomainnode/@name"> + <xsl:attribute name="{name()}"> + <xsl:value-of select="substring-after(key('node-old-to-new', .), '@')"/> + </xsl:attribute> + </xsl:template> + <xsl:template match="/cluster/clusternodes/clusternode/fence/method/device[ + @name = /cluster/fencedevices/fencedevice[ +''' + ( + xslt_is_member('@agent', ('fence_xvm', + )) +) + ''' ]/@name + ]/@port"> + <xsl:attribute name="{name()}"> + <xsl:value-of select="substring-after(key('node-old-to-new', .), '@')"/> + </xsl:attribute> + </xsl:template> +''' diff --git a/ext-plugins/lib-ccs/filters/cluster/_vimrc_local.vim b/ext-plugins/lib-ccs/filters/cluster/_vimrc_local.vim new file mode 120000 index 0000000..dba5948 --- /dev/null +++ b/ext-plugins/lib-ccs/filters/cluster/_vimrc_local.vim @@ -0,0 +1 @@ +../../../../misc/_vimrc_local.vim
\ No newline at end of file |