comments inline missing man pages. Would be helpful if there were validation of the input prior to the xsltproc. binary name corosync-xml2conf name is a little clunky to type Otherwise looks pretty good Regards -steve On 12/15/2011 09:12 AM, Jan Friesse wrote: > Included are following parts: > - XSLT template with actual conversion > - simple wrapper on top of xsltproc called corosync-xml2conf > - example XML file > > Signed-off-by: Jan Friesse <jfriesse@xxxxxxxxxx> > --- > Makefile.am | 10 ++++- > conf/corosync.xml.example | 110 ++++++++++++++++++++++++++++++++++++++++++++ > conf/xml2conf.xsl | 94 +++++++++++++++++++++++++++++++++++++ > configure.ac | 10 ++++- > tools/.gitignore | 1 + > tools/Makefile.am | 7 +++ > tools/corosync-xml2conf.sh | 54 +++++++++++++++++++++ > 7 files changed, 284 insertions(+), 2 deletions(-) > create mode 100644 conf/corosync.xml.example > create mode 100644 conf/xml2conf.xsl > create mode 100644 tools/corosync-xml2conf.sh > > diff --git a/Makefile.am b/Makefile.am > index 176a762..0a1d033 100644 > --- a/Makefile.am > +++ b/Makefile.am > @@ -40,7 +40,7 @@ EXTRA_DIST = autogen.sh conf/corosync.conf.example $(SPEC).in \ > conf/lenses/tests/test_corosync.aug \ > conf/lenses/corosync.aug \ > conf/corosync.conf.example.udpu \ > - .version > + .version conf/corosync.xml.example > > AUTOMAKE_OPTIONS = foreign > > @@ -63,6 +63,14 @@ corolenstestdir = ${corolensdir}/tests > corolenstest_DATA = conf/lenses/tests/test_corosync.aug > endif > > +if INSTALL_XMLCONF > +corosysxmlconfdir = ${COROSYSCONFDIR} > +corosysxmlconf_DATA = conf/corosync.xml.example > + > +corosysxmlxsltdir = ${datadir}/corosync > +corosysxmlxslt_DATA = conf/xml2conf.xsl > +endif > + > SUBDIRS = include lcr lib exec services tools test cts pkgconfig \ > man init conf > > diff --git a/conf/corosync.xml.example b/conf/corosync.xml.example > new file mode 100644 > index 0000000..4c0db7b > --- /dev/null > +++ b/conf/corosync.xml.example > @@ -0,0 +1,110 @@ > +<?xml version="1.0"?> > + > +<!-- > + Please read the corosync.xml.5 and corosync.conf.5 manual page > +--> > + > +<corosync compatibility="whitetank"> > + > +<!-- > + totem tag configures behavior of totem and interfaces. > + > + secauth: > + Enable mutual node authentication. If you choose to > + enable this ("on"), then do remember to create a shared > + secret with "corosync-keygen". > +--> > +<totem version="2" secauth="off" threads="0"> can remove threads parameter - that no longer exists > + <!-- > + interface tag to define at least one interface to communicate > + over. If you define more than one interface stanza, you must > + also set rrp_mode. > + > + Main parameters: > + ringnumber: > + Rings must be consecutively numbered, starting at 0. > + > + bindnetaddr: > + This is normally the *network* address of the > + interface to bind to. This ensures that you can use > + identical instances of this configuration file > + across all your cluster nodes, without having to > + modify this option. > + > + However, if you have multiple physical network > + interfaces configured for the same subnet, then the > + network address alone is not sufficient to identify > + the interface Corosync should bind to. In that case, > + configure the *host* address of the interface > + instead: bindnetaddr="192.168.1.1" > + > + mcastaddr: > + When selecting a multicast address, consider RFC > + 2365 (which, among other things, specifies that > + 239.255.x.x addresses are left to the discretion of > + the network administrator). Do not reuse multicast > + addresses across multiple Corosync clusters sharing > + the same network. > + > + mcastport: > + Corosync uses the port you specify here for UDP > + messaging, and also the immediately preceding > + port. Thus if you set this to 5405, Corosync send > + messages over UDP ports 5405 and 5404. > + > + ttl: > + Time-to-live for cluster communication packets. The > + number of hops (routers) that this ring will allow > + itself to pass. Note that multicast routing must be > + specifically enabled on most network routers. > + --> > + > + <interface ringnumber="0" bindnetaddr="192.168.1.0" mcastaddr="239.255.1.1" > + mcastport="5405" ttl="1" /> > +</totem> > + > +<!-- > + Logging tag for defining various logging options > + > + Main parameters: > + fileline: > + Log the source file and line where messages are being > + generated. When in doubt, leave off. Potentially useful for > + debugging. > + > + to_stderr: > + Log to standard error. When in doubt, set to no. Useful when > + running in the foreground (when invoking "corosync -f") > + > + to_logfile: > + logfile: > + Log to a log file. When set to "no", the "logfile" option > + must not be set. > + > + to_syslog: > + Log to the system log daemon. When in doubt, set to yes. > + > + debug: > + Log debug messages (very verbose). When in doubt, leave off. > + > + timestamp: > + Log messages with time stamps. When in doubt, set to on > + (unless you are only logging to syslog, where double > + timestamps can be annoying). > + > +--> > + > +<logging fileline="off" to_stderr="no" to_logfile="yes" > + logfile="/var/log/cluster/corosync.log" to_syslog="yes" debug="off" > + timestamp="on"> > + > + <!-- > + Logger susys tag is used to overwrite default settings for given > + subsys if needed. > + --> > + > + <logger_subsys subsys="AMF" debug="off" /> > +</logging> > + > +<amf mode="disabled" /> Can totally remove AMF (ths is from the days of openais). In fact, the main config examples should remove this as well. > +</corosync> > diff --git a/conf/xml2conf.xsl b/conf/xml2conf.xsl > new file mode 100644 > index 0000000..c140d68 > --- /dev/null > +++ b/conf/xml2conf.xsl > @@ -0,0 +1,94 @@ > +<?xml version="1.0" encoding="utf-8"?> > + > +<!-- > + Copyright (c) 2011 Red Hat, Inc. > + > + All rights reserved. > + > + Author: Jan Friesse (jfriesse@xxxxxxxxxx) > + > + This software licensed under BSD license, the text of which follows: > + > + Redistribution and use in source and binary forms, with or without > + modification, are permitted provided that the following conditions are met: > + > + - Redistributions of source code must retain the above copyright notice, > + this list of conditions and the following disclaimer. > + - 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. > + - Neither the name of the Red Hat, Inc. nor the names of its > + contributors may be used to endorse or promote products derived from this > + software without specific prior written permission. > + > + 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 OWNER 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. > +--> > + > +<xsl:stylesheet version="1.0" > + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > + xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date"> > + > +<xsl:output method="text" /> > +<xsl:strip-space elements="*" /> > +<xsl:param name="inputfile"/> > + > +<xsl:variable name='newline'><xsl:text> > +</xsl:text></xsl:variable> > + > +<xsl:template match="/corosync"> > + <xsl:text># Corosync configuration file generated from </xsl:text> > + <xsl:value-of select="$inputfile"/><xsl:text> at </xsl:text> > + <xsl:value-of select="date:date-time()"/> > + > + <xsl:apply-templates select="@*"/> > + <xsl:apply-templates /> > + <xsl:value-of select="$newline" /> > +</xsl:template> > + > +<xsl:template match="/corosync//*"> > + <xsl:value-of select="$newline" /> > + <xsl:value-of select="$newline" /> > + <xsl:call-template name="indent"> > + <xsl:with-param name="depth" select="count(ancestor::*) - 1"/> > + </xsl:call-template> > + <xsl:value-of select="name()"/> {<xsl:apply-templates select="@*"/> > + <xsl:apply-templates /> > + <xsl:value-of select="$newline" /> > + <xsl:call-template name="indent"> > + <xsl:with-param name="depth" select="count(ancestor::*) - 1"/> > + </xsl:call-template> > + <xsl:text>}</xsl:text> > +</xsl:template> > + > +<xsl:template match="@*"> > + <xsl:value-of select="$newline" /> > + <xsl:call-template name="indent"> > + <xsl:with-param name="depth" select="count(ancestor::*) - 1"/> > + </xsl:call-template> > + <xsl:value-of select="name()"/><xsl:text>: </xsl:text><xsl:value-of select="."/> > +</xsl:template> > + > +<xsl:template match="text()"> > +</xsl:template> > + > +<xsl:template name="indent"> > + <xsl:param name="depth"/> > + <xsl:if test="$depth > 0"> > + <xsl:text> </xsl:text> > + <xsl:call-template name="indent"> > + <xsl:with-param name="depth" select="$depth - 1"/> > + </xsl:call-template> > + </xsl:if> > +</xsl:template> > + > +</xsl:stylesheet> > diff --git a/configure.ac b/configure.ac > index 50a1dc9..e7ca328 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -281,7 +281,7 @@ AC_ARG_ENABLE([augeas], > AM_CONDITIONAL(INSTALL_AUGEAS, test x$enable_augeas = xyes) > > AC_ARG_ENABLE([systemd], > - [ --enable-systemd : Install systemd service files],, > + [ --enable-systemd : Install systemd service files],, unrelated change? > [ enable_systemd="no" ]) > AM_CONDITIONAL(INSTALL_SYSTEMD, test x$enable_systemd = xyes) > > @@ -304,6 +304,11 @@ AC_ARG_ENABLE([snmp], > [ --enable-snmp : SNMP protocol support ], > [ default="no" ]) > > +AC_ARG_ENABLE([xmlconf], > + [ --enable-xmlconf : XML configuration support ],, > + [ enable_xmlconf="no" ]) > +AM_CONDITIONAL(INSTALL_XMLCONF, test x$enable_xmlconf = xyes) > + > # OS detection > # THIS SECTION MUST DIE! > CP=cp > @@ -457,6 +462,9 @@ fi > if test "x${enable_systemd}" = xyes; then > PACKAGE_FEATURES="$PACKAGE_FEATURES systemd" > fi > +if test "x${enable_xmlconf}" = xyes; then > + PACKAGE_FEATURES="$PACKAGE_FEATURES xmlconf" > +fi > > if test "x${enable_snmp}" = xyes; then > SNMPCONFIG="" > diff --git a/tools/.gitignore b/tools/.gitignore > index 9651044..ff6c736 100644 > --- a/tools/.gitignore > +++ b/tools/.gitignore > @@ -7,3 +7,4 @@ corosync-pload > corosync-quorumtool > corosync-notifyd > corosync-cmapctl > +corosync-xml2conf > diff --git a/tools/Makefile.am b/tools/Makefile.am > index c74af0f..143209a 100644 > --- a/tools/Makefile.am > +++ b/tools/Makefile.am > @@ -40,6 +40,13 @@ sbin_PROGRAMS = corosync-fplay corosync-cfgtool \ > > bin_SCRIPTS = corosync-blackbox > > +if INSTALL_XMLCONF > +bin_SCRIPTS += corosync-xml2conf > + > +corosync-xml2conf: corosync-xml2conf.sh > + sed -e 's#@''DATADIR@#${datadir}#g' $< > $@ > +endif > + > EXTRA_DIST = $(bin_SCRIPTS) corosync-notifyd.sysconfig.example > > corosync_fplay_LDADD = $(LIBQB_LIBS) > diff --git a/tools/corosync-xml2conf.sh b/tools/corosync-xml2conf.sh > new file mode 100644 > index 0000000..6fcf934 > --- /dev/null > +++ b/tools/corosync-xml2conf.sh > @@ -0,0 +1,54 @@ > +#!/bin/bash > + > +# Copyright (c) 2011 Red Hat, Inc. > +# > +# All rights reserved. > +# > +# Author: Jan Friesse (jfriesse@xxxxxxxxxx) > +# > +# This software licensed under BSD license, the text of which follows: > +# > +# Redistribution and use in source and binary forms, with or without > +# modification, are permitted provided that the following conditions are met: > +# > +# - Redistributions of source code must retain the above copyright notice, > +# this list of conditions and the following disclaimer. > +# - 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. > +# - Neither the name of the Red Hat, Inc. nor the names of its > +# contributors may be used to endorse or promote products derived from this > +# software without specific prior written permission. > +# > +# 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 OWNER 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. > + > +XSLT_PROC=xsltproc > + > +usage() { > + echo "$0 input_config [output]" > + echo " where input_config is valid XML configuration file" > + > + exit 1 > +} > + > +[ "$1" == "" ] && usage > + > +$XSLT_PROC -V >/dev/null 2>&1 > +if [ "$?" != 0 ];then > + echo "Can't find xslt processor $XSLT_PROC" > + exit 2 > +fi > + > +[ "$2" != "" ] && out_param="-o $2" > + > +$XSLT_PROC --stringparam inputfile "$1" $out_param @DATADIR@/corosync/xml2conf.xsl "$1" _______________________________________________ discuss mailing list discuss@xxxxxxxxxxxx http://lists.corosync.org/mailman/listinfo/discuss