summaryrefslogtreecommitdiffstats
path: root/ext-plugins
diff options
context:
space:
mode:
authorJan Pokorný <jpokorny@redhat.com>2014-11-30 11:51:40 +0100
committerJan Pokorný <jpokorny@redhat.com>2014-12-08 16:37:49 +0100
commit375666134b456d18b335693cb9868554d7355757 (patch)
tree39d0925bcc491eb9b9ef6959e8af0d7df3764f83 /ext-plugins
parent4f5642db7a263de56cb025b9694ffeccd4242413 (diff)
downloadclufter-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.py38
-rw-r--r--ext-plugins/lib-ccs/filters/cluster/__init__.py34
l---------ext-plugins/lib-ccs/filters/cluster/_vimrc_local.vim1
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