public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
* cluster: STABLE3 - config: preliminary support for config validation
@ 2009-09-03 12:34 Fabio M. Di Nitto
  0 siblings, 0 replies; only message in thread
From: Fabio M. Di Nitto @ 2009-09-03 12:34 UTC (permalink / raw)
  To: cluster-cvs-relay

Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=8a7f5a96f6838df9b862f741559dc58d0675adc2
Commit:        8a7f5a96f6838df9b862f741559dc58d0675adc2
Parent:        77d871cbdd4722f91a50b374dccf6e39a3b3c9e7
Author:        Fabio M. Di Nitto <fdinitto@redhat.com>
AuthorDate:    Thu Sep 3 14:29:35 2009 +0200
Committer:     Fabio M. Di Nitto <fdinitto@redhat.com>
CommitterDate: Thu Sep 3 14:29:35 2009 +0200

config: preliminary support for config validation

add ccs_config_dump tool. It prints the current config as stored in the
objdb in XML format.

add ccs_config_validate tool to perform XML <-> RelaxNG schema check.

rename cluster.rng into cluster.rng.in for future. It simplifies the Makefile
and makes it ready for automatic generation at build time.

add new install/uninstall target for files in ${sharedir}

Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
---
 config/tools/xml/Makefile               |   39 +-
 config/tools/xml/ccs_config_dump.c      |   78 +
 config/tools/xml/ccs_config_validate.in |   23 +
 config/tools/xml/cluster.rng            | 2806 -------------------------------
 config/tools/xml/cluster.rng.in         | 2806 +++++++++++++++++++++++++++++++
 make/install.mk                         |    4 +
 make/uninstall.mk                       |    3 +
 7 files changed, 2945 insertions(+), 2814 deletions(-)

diff --git a/config/tools/xml/Makefile b/config/tools/xml/Makefile
index b301eae..31a2aab 100644
--- a/config/tools/xml/Makefile
+++ b/config/tools/xml/Makefile
@@ -1,14 +1,37 @@
 include ../../../make/defines.mk
 
-TARGET	= cluster.rng
+TARGET1 = ccs_config_dump
+TARGET2 = ccs_config_validate
+TARGET3 = cluster.rng
 
-all:
+SBINDIRT = $(TARGET1) $(TARGET2)
+SHAREDIRT = $(TARGET3)
 
-clean:
+all: $(TARGET1) $(TARGET2) $(TARGET3)
 
-install:
-	install -d ${sharedir}
-	install -m644 ${TARGET} ${sharedir}
+include $(OBJDIR)/make/cobj.mk
+include $(OBJDIR)/make/clean.mk
+include $(OBJDIR)/make/install.mk
+include $(OBJDIR)/make/uninstall.mk
 
-uninstall:
-	${UNINSTALL} ${TARGET} ${sharedir}
+OBJS =	ccs_config_dump.o
+
+CFLAGS += -I${corosyncincdir}
+CFLAGS += -I${incdir}
+
+LDFLAGS += -L${corosynclibdir} -lconfdb
+LDFLAGS += -L${libdir}
+
+${TARGET1}: ${OBJS}
+	$(CC) -o $@ $^ $(LDFLAGS)
+
+${TARGET2}: $(S)/${TARGET2}.in
+	cat $(S)/$(TARGET2).in | sed \
+		-e 's#@SBINDIR@#${sbindir}#g' \
+		-e 's#@SHAREDIR@#${sharedir}#g' \
+	> $(TARGET2)
+
+${TARGET3}: $(S)/${TARGET3}.in
+	cp $(S)/${TARGET3}.in ${TARGET3}
+
+clean: generalclean
diff --git a/config/tools/xml/ccs_config_dump.c b/config/tools/xml/ccs_config_dump.c
new file mode 100644
index 0000000..7723c40
--- /dev/null
+++ b/config/tools/xml/ccs_config_dump.c
@@ -0,0 +1,78 @@
+#include <stdio.h>
+#include <limits.h>
+#include <corosync/corotypes.h>
+#include <corosync/confdb.h>
+
+static confdb_callbacks_t callbacks = {};
+
+static int dump_objdb_buff(confdb_handle_t dump_handle, hdb_handle_t cluster_handle,
+			   hdb_handle_t parent_object_handle)
+{
+	hdb_handle_t object_handle;
+	char object_name[PATH_MAX], key_name[PATH_MAX], key_value[PATH_MAX];
+	size_t key_value_len = 0, key_name_len = 0, object_name_len = 0;
+
+	if (confdb_key_iter_start(dump_handle, parent_object_handle) != CS_OK)
+		return -1;
+
+	while (confdb_key_iter(dump_handle, parent_object_handle, key_name,
+				&key_name_len, key_value,
+				&key_value_len) == CS_OK) {
+		key_name[key_name_len] = '\0';
+		key_value[key_value_len] = '\0';
+		printf(" %s=\"%s\"", key_name, key_value);
+	}
+
+	if (parent_object_handle > 0)
+		printf(">\n");
+
+	if (confdb_object_iter_start(dump_handle, parent_object_handle) != CS_OK)
+		return -1;
+
+	while (confdb_object_iter(dump_handle, parent_object_handle,
+				   &object_handle, object_name,
+				   &object_name_len) == CS_OK) {
+		hdb_handle_t parent;
+
+		if (confdb_object_parent_get(dump_handle, object_handle, &parent) != CS_OK)
+			return -1;
+
+		object_name[object_name_len] = '\0';
+		printf("<%s", object_name);
+
+		if(dump_objdb_buff(dump_handle, cluster_handle, object_handle))
+			return -1;
+
+		if (object_handle != parent_object_handle)
+			printf("</%s>\n", object_name);
+		else
+			printf(">\n");
+	}
+	return 0;
+}
+
+int main(void) {
+	confdb_handle_t handle = 0;
+	hdb_handle_t cluster_handle;
+
+	if (confdb_initialize(&handle, &callbacks) != CS_OK)
+		return -1;
+
+	if (confdb_object_find_start(handle, OBJECT_PARENT_HANDLE) != CS_OK)
+		return -1;
+
+	if (confdb_object_find(handle, OBJECT_PARENT_HANDLE, "cluster", strlen("cluster"), &cluster_handle) != CS_OK)
+		return -1;
+
+	printf("<?xml version=\"1.0\"?>\n<cluster");
+
+	if (dump_objdb_buff(handle, cluster_handle, cluster_handle))
+		return -1;
+
+	printf("</cluster>\n");
+
+	if (confdb_finalize(handle) != CS_OK)
+		return -1;
+
+	return 0;
+}
diff --git a/config/tools/xml/ccs_config_validate.in b/config/tools/xml/ccs_config_validate.in
new file mode 100644
index 0000000..6891cd4
--- /dev/null
+++ b/config/tools/xml/ccs_config_validate.in
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+
+# rpm based distros
+if [ -d /etc/sysconfig ]; then
+	[ -f /etc/sysconfig/cluster ] && . /etc/sysconfig/cluster
+	[ -f /etc/sysconfig/cman ] && . /etc/sysconfig/cman
+fi
+
+# deb based distros
+if [ -d /etc/default ]; then
+	[ -f /etc/default/cluster ] && . /etc/default/cluster
+	[ -f /etc/default/cman ] && . /etc/default/cman
+fi
+
+[ -z "$CONFIG_LOADER" ] && CONFIG_LOADER=xmlconfig
+export COROSYNC_DEFAULT_CONFIG_IFACE=$CONFIG_LOADER:cmanpreconfig
+
+ccs_config_dump | xmllint \
+		--relaxng @SHAREDIR@/cluster.rng \
+		- >/dev/null
+exit $?
diff --git a/config/tools/xml/cluster.rng b/config/tools/xml/cluster.rng
deleted file mode 100644
index 318afd6..0000000
--- a/config/tools/xml/cluster.rng
+++ /dev/null
@@ -1,2806 +0,0 @@
-<grammar  datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
-xmlns="http://relaxng.org/ns/structure/1.0"
-xmlns:rha="http://redhat.com/~pkennedy/annotation_namespace/cluster_conf_annot_namespace">
-
-<!-- The cluster.conf schema follows this outline:
-
-cluster
-- cman
-- totem
-- quorumd
-- fence_daemon
-- fence_xvmd
-- dlm
-- gfs_controld
-- group
-- logging
-- clusternodes
-- fencedevices
-- rm
-
-Element defnitions:
-- Resource
-- Fence
-
-To validate your cluster.conf against this schema, run:
-
-  xmllint \-\-relaxng cluster.rng /path/to/cluster.conf
-
--->
-
-<start>
-<element name="cluster" rha:description="The cluster element is the
-    top-level element and contains attributes that define the cluster
-    name and the configuration version number.">
- <attribute name="name" rha:description="Specifies a unique cluster name;
-      it can be up to 16 characters long." rha:sample="my_cluster"/>
- <attribute name="config_version" rha:description="Identifies the
-     revision level of the cluster.conf file. To propagate a revised
-     configuration file, this value must be advanced to a value higher
-     than the current value." rha:sample="1" rha:default="1"/>
- <optional>
-  <attribute name="alias" rha:description="Pretty name for cluster that
-      is not parsed by cluster tag software; only the Conga and
-      system-config-cluster GUIs use this value."
-      rha:sample="My Cluster"/>
- </optional>
- <interleave>
-
-<!-- cman block -->
- <optional>
-   <element name="cman" rha:description="The cman element contains
-       attributes that define the following cluster-wide parameters and
-       behaviors: whether the cluster is a two-node cluster, expected
-       votes, user-specified multicast address, and logging.">
-    <optional>
-     <attribute name="two_node" rha:description="The two_node attribute
-         allows you to configure a cluster with only two
-         nodes. Ordinarily, the loss of quorum after one of two nodes
-         fails prevents the remaining node from continuing (if both
-         nodes have one vote.) To enable a two-node cluster, set the
-         two_node value equal to 1. If the two_node value is enabled,
-         the expected_votes value must be set to 1." rha:sample="1"/>
-    </optional>
-    <optional>
-     <attribute name="expected_votes" rha:description="The expected
-         votes value is used by cman to determine quorum. The cluster
-         is quorate if the sum of votes of members is over
-         half of the expected votes value. By default, cman sets the
-         expected votes value to be the sum of votes of all nodes listed
-         in cluster.conf. This can be overriden by setting an explicit
-         expected_votes value." rha:sample="4">
-      <data type="positiveInteger"/>
-     </attribute>
-    </optional>
-    <optional>
-     <attribute name="quorum_dev_poll" rha:description="The amount of time
-         after a qdisk poll, in milliseconds, before a quorum disk is
-         considered dead. The quorum disk daemon, qdisk, periodically
-         sends hello messages to cman and ais, indicating that qdisk
-         is present. If qdisk takes more time to send a hello message
-         to cman and ais than by quorum_dev_poll, then cman declares
-         qdisk dead and prints a message indicating that connection to
-         the quorum device has been lost." rha:sample="50000"/>
-    </optional>
-    <!--FIXME: Clarify the following. What is meant by "service"? Also, is
-     there a default value? What is a good sample value?-->
-    <optional>
-     <attribute name="shutdown_timeout" rha:description="Timeout period,
-         in milliseconds, to allow a service to respond during a
-         shutdown." rha:sample="5000"/>
-    </optional>
-    <optional>
-     <attribute name="ccsd_poll" rha:description="" rha:sample=""
-         rha:default="1000"/>
-    </optional>
-    <optional>
-     <attribute name="debug_mask" rha:description="" rha:sample=""/>
-    </optional>
-    <optional>
-     <attribute name="port">
-      <data type="nonNegativeInteger"/>
-     </attribute>
-    </optional>
-    <optional>
-     <attribute name="cluster_id">
-      <data type="nonNegativeInteger"/>
-     </attribute>
-    </optional>
-    <optional>
-     <attribute name="broadcast">
-      <data type="nonNegativeInteger"/>
-     </attribute>
-    </optional>
-    <optional>
-     <attribute name="keyfile" rha:description=""/>
-    </optional>
-    <optional>
-     <attribute name="disable_openais"/>
-    </optional>
-    <optional>
-     <element name="multicast" rha:description="The multicast element
-         provides the ability for a user to specify a multicast address
-         instead of using the multicast address generated by cman. If
-         a user does not specify a multicast address, cman creates one. It
-         forms the upper 16 bits of the multicast address with 239.192 and
-         forms the lower 16 bits based on the cluster ID."> <attribute
-         name="addr" rha:description="A multicast address specified
-         by a user. If you do specify a multicast address, you should
-         use the 239.192.x.x series that cman uses. Otherwise, using a
-         multicast address outside that range may cause unpredictable
-         results. For example, using 224.0.0.x (All hosts on the network)
-         may not be routed correctly, or even routed at all by some
-         hardware." rha:sample="239.192.0.1"/>
-     </element>
-    </optional>
-   </element>
- </optional>
-<!-- end cman block -->
-
-<!-- totem block -->
- <optional>
-  <element name="totem" rha:description="OpenAIS msg transport
-    protocol">
-   <optional>
-    <attribute name="consensus" rha:description="This is a timeout value
-        that specifies how many milliseconds to wait for consensus
-        to be achieved before starting a new round of membership
-        configuration." rha:default="200" rha:sample="235"/>
-   </optional>
-   <optional>
-    <attribute name="join" rha:description="This is a timeout value that
-        specifies how many milliseconds to wait for join messages in
-        the membership protocol." rha:default="100" rha:sample="95"/>
-   </optional>
-   <optional>
-    <attribute name="token" rha:description="This is a timeout value
-        that specifies how many milliseconds elapse before a
-        token loss is declared after not receiving a token. This
-        is the time spent detecting a failure of a processor in
-        the current configuration. Reforming a new configuration
-        takes about 50 milliseconds in addition to this
-        timeout." rha:default="5000" rha:sample="5300"/>
-   </optional>
-   <optional>
-    <attribute name="token_retransmits_before_loss_const"
-      rha:description="This value identifies how many token retransmits
-      should be attempted before forming a new configuration. If
-      this value is set, retransmit and hold will be automatically
-      calculated from retransmits_before_loss and token." rha:default="4"
-      rha:sample="5"/>
-   </optional>
-   <!-- FIXME: The following description was adapted from the man page.
-   It may be tool long for the schema docuement. Consider cutting text
-   after the second sentence and referring the reader to the openais.conf
-   man page. -->
-   <optional>
-    <attribute name="rrp_mode" rha:description="This attribute
-        specifies the redundant ring protocol mode. Its value can be
-        set to active, passive, or none. Active replication offers
-        slightly lower latency from transmit to delivery in faulty
-        network environments but with less performance. Passive
-        replication may nearly double the speed of the totem protocol
-        if the protocol doesn't become cpu bound. The final option is
-        none, in which case only one network interface is used to
-        operate the totem protocol. If only one interface directive is
-        specified, none is automatically chosen. If multiple interface
-        directives are specified, only active or passive may be
-        chosen." rha:sample="active"/>
-   </optional>
-   <optional>
-    <attribute name="secauth" rha:description="This attribute specifies
-       that HMAC/SHA1 authentication should be used to authenticate all
-       messages. It further specifies that all data should be encrypted
-       with the sober128 encryption algorithm to protect data from
-       eavesdropping. For more information setting this value, refer
-       the the openais.conf man page." rha:default="on" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="keyfile" rha:description="" rha:sample=""/>
-   </optional>
-   <!-- multicast address -->
-   <zeroOrMore>
-    <element name="interface" rha:description="" rha:sample="">
-     <optional>
-      <attribute name="ringnumber" rha:description="" rha:sample=""/>
-     </optional>
-     <optional>
-      <attribute name="bindnetaddr" rha:description="" rha:sample=""/>
-     </optional>
-     <optional>
-      <attribute name="mcastaddr" rha:description="" rha:sample=""/>
-     </optional>
-     <optional>
-      <attribute name="mcastport" rha:description="" rha:sample=""/>
-     </optional>
-     <optional>
-      <attribute name="broadcast" rha:description="" rha:sample=""/>
-     </optional>
-    </element>
-   </zeroOrMore>
-  </element>
- </optional>
-<!-- end totem block -->
-
-<!-- quorumd block -->
- <optional>
-  <element name="quorumd" rha:description="This element and its
-      attributes define parameters for the quorum disk daemon,
-      quorumd.">
-   <optional>
-    <attribute name="interval" rha:description="The frequency of
-        read/write cycles, in seconds." rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="tko" rha:description="The number of cycles a node
-        must miss to be declared dead." rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="votes" rha:description="The number of votes the
-        quorum daemon advertises to CMAN when it has a high enough
-        score." rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="min_score" rha:description="The minimum score for a
-        node to be considered alive. If omitted or set to 0, the default
-        function, floor((n+1)/2), is used, where n is the sum of the
-        heuristics scores. The Minimum Score value must never exceed the
-        sum of the heuristic scores; otherwise, the quorum disk cannot
-        be available." rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="device" rha:description="The storage device the
-        quorum daemon uses. The device must be the same on all
-        nodes." rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="label" rha:description="Specifies the quorum disk
-        label created by the mkqdisk utility. If this field contains an
-        entry, the label overrides the Device field. If this field is
-        used, the quorum daemon reads /proc/partitions and checks for
-        qdisk signatures on every block device found, comparing the
-        label against the specified label. This is useful in configurations
-        where the quorum device name differs among nodes." rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="status_file" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="scheduler" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="reboot" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="priority" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="stop_cman" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="paranoid" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="allow_kill" rha:description="" rha:sample=""/>
-   </optional>
-   <optional>
-    <attribute name="max_error_cycles" rha:description="" rha:sample=""/>
-   </optional>
-   <zeroOrMore>
-    <element name="heuristic" rha:description="">
-     <attribute name="program" rha:description="The program used to
-         determine if this heuristic is alive. This can be anything that
-         can be executed by /bin/sh -c. A return value of 0 indicates
-         success; anything else indicates failure." rha:sample=""/>
-     <optional>
-      <attribute name="score" rha:description="The weight of this
-          heuristic. Be careful when determining scores for
-          heuristics." rha:default="1" rha:sample=""/>
-     </optional>
-     <optional>
-      <attribute name="interval" rha:description="The frequency (in
-          seconds) at which the heuristic is polled." rha:default="2"
-          rha:sample=""/>
-     </optional>
-     <optional>
-      <attribute name="tko" rha:description="" rha:sample=""/>
-     </optional>
-    </element>
-   </zeroOrMore>
-  </element>
- </optional>
-<!-- end quorumd block -->
-
-<!-- fence_daemon block -->
- <optional>
-  <element name="fence_daemon"  rha:description="This element and its
-      attributes define cluster-wide parameters for basic fence timing
-      properties used when a node joins a cluster or is fenced from
-      the cluster.">
-   <optional>
-    <attribute name="post_join_delay"  rha:description="The number of
-        seconds the fence daemon (fenced) waits before fencing a node
-        after the node joins the fence domain. A typical setting for
-        post_join_delay is between 20 and 30 seconds, but can vary
-        according to cluster and network performance requirements."
-        rha:default="3" rha:sample="20"/>
-   </optional>
-   <optional>
-    <attribute name="post_fail_delay" rha:description="The the number of
-        seconds the fence daemon (fenced) waits before fencing
-        a node (a member of the fence domain) after the node has
-        failed." rha:default="0" rha:sample="2"/>
-   </optional>
-   <optional>
-    <attribute name="override_path" rha:description="The location of a
-       FIFO used for communication between fenced and fence_ack_manual"
-       rha:default="/var/run/cluster/fenced_override"
-       rha:sample="/opt/cluster/fenced_override"/>
-   </optional>
-   <optional>
-    <attribute name="override_time" rha:description="The location of a
-       FIFO used for communication between fenced and fence_ack_manual"
-       rha:default="/var/run/cluster/fenced_override"
-       rha:sample="/opt/cluster/fenced_override"/>
-   </optional>
-   <optional>
-    <attribute name="clean_start" rha:description="Clean-start is used
-       to prevent any startup fencing the daemon might do." rha:default="0"
-       rha:sample="1"/>
-   </optional>
-   <optional>
-    <attribute name="skip_undefined" rha:description="Do not do startup
-       fencing of nodes with no fence methods defined." rha:default="0"
-       rha:sample="1"/>
-   </optional>
-  </element>
- </optional>
-<!-- end fence_daemon block -->
-
-<!-- fence_xvmd block -->
- <optional>
-  <element name="fence_xvmd" rha:description="Fence_xvm daemon. The
-      fence_xvmd fence device is an I/O fencing host that resides
-      on dom0 and is used in conjunction with the fence_xvm fencing
-      agent. Together, these two programs fence Xen virtual machines
-      that are in a cluster. There is a requirement that the parent
-      dom0s are also a part of their own CMAN/OpenAIS based cluster,
-      and that the dom0 cluster does not share any members with the domU
-      cluster. Furthermore, the dom0 cluster is required to have fencing
-      if domU recovery is expected to be automatic.">
-    <optional>
-      <attribute name="debug" rha:description="" rha:sample="">
-	<data type="integer"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="port" rha:description="" rha:sample="">
-	<data type="integer"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="use_uuid" rha:description="" rha:sample="">
-	<data type="boolean"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="multicast_address" rha:description="" rha:sample="">
-	<data type="string"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="auth" rha:description="" rha:sample="">
-	<data type="string"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="hash" rha:description="" rha:sample="">
-	<data type="string"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="uri" rha:description="" rha:sample="">
-	<data type="string"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="key_file" rha:description="" rha:sample="">
-	<data type="string"/>
-      </attribute>
-    </optional>
-    <optional>
-      <attribute name="multicast_interface" rha:description="" rha:sample="">
-	<data type="string"/>
-      </attribute>
-    </optional>
-  </element>
- </optional>
-<!-- end fence_xvmd block -->
-
-<!-- dlm block -->
- <optional>
- <element name="dlm" rha:description="">
-  <optional>
-    <attribute name="log_debug" rha:description="Enable dlm
-      kernel debug messages." rha:default="0" rha:sample="1"/>
-  </optional>
-  <optional>
-   <attribute name="timewarn" rha:description="The number of centiseconds
-     a lock is blocked before a warning is sent to userland, for lockspaces
-     created with TIMEWARN flag." rha:default="500" rha:sample="100"/>
-  </optional>
-  <optional>
-   <attribute name="protocol" rha:description="The network protocol
-     used by the dlm." rha:default="tcp" rha:sample="sctp"/>
-  </optional>
-  <optional>
-   <attribute name="enable_fencing" rha:description="Enable fencing recovery
-     dependency." rha:default="1" rha:sample="0"/>
-  </optional>
-  <optional>
-   <attribute name="enable_quorum" rha:description="Enable quorum recovery
-     dependency." rha:default="1" rha:sample="0"/>
-  </optional>
-  <optional>
-   <attribute name="enable_deadlk" rha:description="Enable deadlock detection
-     code." rha:default="0" rha:sample="1"/>
-  </optional>
-  <optional>
-   <attribute name="enable_plock" rha:description="Enable posix lock code for
-     cluster fs." rha:default="1" rha:sample="0"/>
-  </optional>
-  <optional>
-   <attribute name="plock_debug" rha:description="Enable posix lock debugging."
-     rha:default="0" rha:sample="1"/>
-  </optional>
-  <optional>
-   <attribute name="plock_rate_limit" rha:description="The maximum
-     number of plock operations that will be sent every second.  This is
-     used to prevent potentially excessive network load.  For best
-     performance it is recommended to disable this rate limiting by
-     setting the value to 0." rha:sample="10000" rha:default="100"/>
-  </optional>
-  <optional>
-   <attribute name="plock_ownership" rha:description="Enabling this
-     option by setting to 1 optimizes plock performance for repeated
-     locking of the same locks by processes on a single node.
-     All dlm_controld daemons in the cluster must be stopped before
-     changing this value." rha:sample="0" rha:default="1"/>
-  </optional>
-  <optional>
-   <attribute name="drop_resources_time" rha:description="For tuning the
-     plock_ownership resource caching.  This is the frequence of
-     attempts in milliseconds to drop unused resources from the
-     cache." rha:sample="5000" rha:default="10000"/>
-  </optional>
-  <optional>
-   <attribute name="drop_resources_count" rha:description="For tuning
-     the plock_ownership resource caching.  This is the maximum number
-     of resources to drop from the cache each time." rha:sample="100"
-     rha:default="10"/>
-  </optional>
-  <optional>
-   <attribute name="drop_resources_age" rha:description="For tuning the
-     plock_ownership resource caching.  This is the time in milliseconds
-     that a cached resource should be unused before consideration for
-     dropping." rha:sample="5000" rha:default="10000"/>
-  </optional>
-  <optional>
-   <zeroOrMore>
-    <element name="lockspace" rha:description="Individual lockspace
-      configuration.">
-     <attribute name="name" rha:description="The name of the lockspace."
-        rha:sample="foo"/>
-     <optional>
-      <attribute name="nodir" rha:description="The lockspace will not use a
-        resource directory when this is set to 1." rha:default="0"
-        rha:sample="1"/>
-     </optional>
-     <optional>
-      <zeroOrMore>
-       <element name="master" rha:description="Define a particular node to be
-         responsible for a certain amount of lock mastering.">
-        <attribute name="name" rha:description="The name of the node that
-          should be mastering resources/locks.  This needs to match one of
-          the nodes defined in clusternodes." rha:sample="node01"/>
-        <attribute name="weight" rha:description="The proportion of
-          resources/locks this node should master." rha:default="1"
-          rha:sample="2"/>
-       </element>
-      </zeroOrMore>
-     </optional>
-    </element>
-   </zeroOrMore>
-  </optional>
- </element>
- </optional>
-<!-- end dlm block -->
-
-<!-- gfs_controld block -->
- <optional>
- <element name="gfs_controld" rha:description="This element and its
-   attributes configure the gfs_controld daemon.">
-  <optional>
-   <attribute name="enable_withdraw" rha:description="Enable the code that
-     handles gfs withdraw." rha:default="1" rha:sample="0"/>
-  </optional>
-  <optional>
-   <attribute name="enable_plock" rha:description="Enable posix lock code for
-     cluster fs.  gfs_controld only handles plocks when daemons run in compat
-     mode, otherwise dlm_controld processes plocks." rha:default="1"
-     rha:sample="0"/>
-  </optional>
-  <optional>
-   <attribute name="plock_debug" rha:description="Enable posix lock
-     debugging." rha:default="0" rha:sample="1"/>
-  </optional>
-  <optional>
-   <attribute name="plock_rate_limit" rha:description="The maximum
-     number of plock operations that will be sent every second.  This is
-     used to prevent potentially excessive network load.  For best
-     performance it is recommended to disable this rate limiting by
-     setting the value to 0." rha:sample="10000" rha:default="100"/>
-  </optional>
-  <optional>
-   <attribute name="plock_ownership" rha:description="Enabling this
-     option by setting to 1 optimizes plock performance for repeated
-     locking of the same locks by processes on a single node.
-     All gfs_controld daemons in the cluster must be stopped before
-     changing this value." rha:sample="1" rha:default="0"/>
-  </optional>
-  <optional>
-   <attribute name="drop_resources_time" rha:description="For tuning the
-     plock_ownership resource caching.  This is the frequence of
-     attempts in milliseconds to drop unused resources from the
-     cache." rha:sample="5000" rha:default="10000"/>
-  </optional>
-  <optional>
-   <attribute name="drop_resources_count" rha:description="For tuning
-     the plock_ownership resource caching.  This is the maximum number
-     of resources to drop from the cache each time." rha:sample="100"
-     rha:default="10"/>
-  </optional>
-  <optional>
-   <attribute name="drop_resources_age" rha:description="For tuning the
-     plock_ownership resource caching.  This is the time in milliseconds
-     that a cached resource should be unused before consideration for
-     dropping." rha:sample="5000" rha:default="10000"/>
-  </optional>
- </element>
- </optional>
-<!-- end gfs_controld block -->
-
-<!-- group block -->
- <optional>
- <element name="group" rha:description="">
-  <optional>
-   <attribute name="groupd_compat" rha:description="Enable compatibility with
-     cluster2 (RHEL5) nodes" rha:default="0" rha:sample="1"/>
-  </optional>
- </element>
- </optional>
-<!-- end group block -->
-
-<!-- logging block -->
- <optional>
-  <element name="logging" rha:description="Global logging config applies
-    to all daemons.">
-   <optional>
-    <attribute name="to_syslog" rha:description="enable/disable messages to
-      syslog" rha:default="yes"/>
-   </optional>
-   <optional>
-    <attribute name="to_logfile" rha:description="enable/disable messages to
-      log file" rha:default="yes"/>
-   </optional>
-   <optional>
-    <attribute name="syslog_facility" rha:description="facility used for
-      syslog messages" rha:default="daemon"/>
-   </optional>
-   <optional>
-    <attribute name="syslog_priority" rha:description="messages at this level
-      and up will be sent to syslog" rha:default="info"/>
-   </optional>
-   <optional>
-    <attribute name="logfile_priority" rha:description="messages at this level
-      and up will be written to log file" rha:default="info"/>
-   </optional>
-   <optional>
-    <attribute name="logfile" rha:description="the log file name"
-      rha:default="/var/log/cluster/daemon_name.log"/>
-   </optional>
-   <optional>
-    <attribute name="debug" rha:description="turn on debugging, a shortcut for
-      setting logfile_priority to debug" rha:sample="on"/>
-   </optional>
-   <optional>
-    <element name="logging_daemon" rha:description="Per-daemon logging
-      config overrides global settings for named daemon.">
-     <attribute name="name" rha:description="daemon name" rha:sample="fenced"/>
-     <optional>
-      <attribute name="subsys" rha:description="corosync subsystem name"
-        rha:sample="CMAN"/>
-     </optional>
-     <optional>
-      <attribute name="to_syslog" rha:description="same as global"/>
-     </optional>
-     <optional>
-      <attribute name="to_logfile" rha:description="same as global"/>
-     </optional>
-     <optional>
-      <attribute name="syslog_facility" rha:description="same as global"/>
-     </optional>
-     <optional>
-      <attribute name="syslog_priority" rha:description="same as global"/>
-     </optional>
-     <optional>
-      <attribute name="logfile_priority" rha:description="same as global"/>
-     </optional>
-     <optional>
-      <attribute name="logfile" rha:description="same as global"/>
-     </optional>
-     <optional>
-      <attribute name="debug" rha:description="same as global"/>
-     </optional>
-    </element>
-   </optional>
-  </element>
- </optional>
-<!-- end logging block -->
-
-<!-- clusternode block -->
- <element name="clusternodes" rha:description="This element defines the
-     cluster nodes configuration; it contains one clusternode element
-     per node.">
-   <zeroOrMore>
-     <element name="clusternode" rha:description="This element and its
-         attributes define a cluster node, specifying node name, node ID,
-         number of quorum votes, and fencing method for that node. There
-         is one clusernode element per node in a cluster.">
-      <attribute name="name" rha:description="The hostname or the IP
-          address of the node." rha:sample="node-01">
-	 <data type="ID"/>
-       </attribute>
-       <optional>
-	 <attribute name="votes" rha:description="The number of votes a
-            node can cast" rha:sample="2" rha:default="1">
-	   <data type="positiveInteger"/>
-	 </attribute>
-       </optional>
-       <optional>
-	 <attribute name="nodeid" rha:description="Each node requires
-             a unique integer value as its node ID." rha:sample="1">
-	   <data type="positiveInteger"/>
-	 </attribute>
-       </optional>
-       <optional>
-	 <attribute name="weight" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-         <element name="altname" rha:description="">
-           <optional>
-             <attribute name="name" rha:description="" rha:sample=""/>
-           </optional>
-           <optional>
-             <attribute name="port" rha:description="" rha:sample=""/>
-           </optional>
-           <optional>
-             <attribute name="mcast" rha:description="" rha:sample=""/>
-           </optional>
-         </element>
-       </optional>
-       <interleave>
-	 <optional>
-	   <ref name="FENCE"/>
-	 </optional>
-	 <optional>
-	   <ref name="UNFENCE"/>
-	 </optional>
-       </interleave>
-     </element>
-   </zeroOrMore>
- </element>
-<!-- end clusternode block -->
-
-<!-- fencedevices block -->
- <optional>
- <element name="fencedevices" rha:description="This element and its
-     attributes define the fence devices in the cluster. Parameters
-     vary according to the type of fence device. For example, for a
-     power controller used as a fence device, the cluster configuration
-     defines the name of the power controller, its IP address, login,
-     and password.">
-  <zeroOrMore>
-   <element name="fencedevice" rha:description="The fencedevice element
-       and its attributes define each fence device in a
-       cluster. Parameters for each fence device vary according to the
-       type of fence device.">
-     <attribute name="name" rha:description="This is a reference
-         name that you assign to a fence device. It is specific to a
-         cluster configuration file. It is required
-         when configuring a fence method for a node (refer
-         to the method and device elements in the clusternode
-         element)." rha:sample="apc_123">
-      <data type="ID"/>
-     </attribute>
-     <attribute name="agent" rha:description="Specifies a fence agent to
-         be used." rha:sample="fence_apc"/>
-     <optional>
-      <choice>
-       <!-- begin specific fence devices -->
-
-       <!-- begin non-generated device definitions -->
-       <!-- RPS10 -->
-       <group rha:description="RPS10 Serial Switch" >
-        <attribute name="device" rha:description="The device the switch
-            is connected to on the controlling host."
-            rha:sample="/dev/ttys2"/>
-        <attribute name="port" rha:description="The switch outlet
-            number." rha:sample="2"/>
-       </group>
-       <!--FIXME: Determine if the following group should exclude
-       the auth and lanplus attributes. Those attributes apply only to
-       the impilan fence device.-->
-       <!-- Brocade, McData, SANBox2, Bladecenter,bullpap, ipmilan -->
-       <group>
-        <attribute name="ipaddr" rha:description="IP address or the name
-            of the device." rha:sample="rack007"/>
-        <optional>
-        <attribute name="login" rha:description="The login name used to
-            access the device. " rha:sample="admin"/>
-        </optional>
-        <optional>
-        <attribute name="passwd" rha:description="The password used to
-            authenticate the connection to the
-            device." rha:sample="pa$$word"/>
-        </optional>
-        <optional>
-        <attribute name="passwd_script" rha:description="The script that
-            supplies a password for access to the fence device. Using
-            this supersedes the Password parameter." rha:sample=""/>
-        </optional>
-        <optional>
-         <attribute name="auth" rha:description="For IPMI LAN
-             only. Authentication Type: none, password,
-             md2, or md5" rha:sample=""/>
-        </optional>
-        <optional>
-         <attribute name="lanplus" rha:description="For IPMI LAN only.
-             Set value to either True or 1; leave out for false."
-             rha:sample="True"/>
-        </optional>
-       </group>
-       <!-- Vixel -->
-       <group>
-        <optional>
-         <attribute name="ipaddr" rha:description="IP address or the
-             name of the device." rha:sample="10.1.0.1"/>
-        </optional>
-        <optional>
-        <attribute name="passwd" rha:description="The password used to
-            authenticate the connection to the
-            device." rha:sample="pa$$word"/>
-        </optional>
-        <optional>
-         <attribute name="passwd_script" rha:description="The script
-             that supplies a password for access to the
-             fence device. Using this supersedes the Password
-             parameter." rha:sample=""/>
-        </optional>
-       </group>
-       <!-- scsi reservations -->
-       <group>
-        <attribute name="nodename" rha:description="Name of the node to
-            be fenced. Refer to fence_scsi(8) for more
-            information." rha:sample=""/>
-        <attribute name="self" rha:description="" rha:sample=""/>
-       </group>
-       <!-- GNBD -->
-       <group>
-        <attribute name="servers" rha:description="The hostname of each
-            GNBD to disable. For multiple hostnames, separate each
-            hostname with a space." rha:sample=""/>
-       </group>
-       <!-- Egenera -->
-       <!-- FIXME: Note that in the schema web page each is listed as a
-       parameter. Likewise for Conga. In addition, Conga shows Ipan
-       and pserver parameters. Also, in Conga, the esh parameter is
-       an optional ESH path. Presumably those should be attributes in
-       the schema. We need more invormation on this. -->
-       <group>
-        <attribute name="cserver" rha:description="The hostname (and
-            optionally the username in the form of username@hostname)
-            assigned to the device. Refer to the fence_egenera(8) man
-            page for more information." rha:sample=""/>
-       </group>
-       <!-- FIXME: It appears that xCat is no longer supported. Found no
-       fence agents for x Cat in RHEL 5.3. -->
-       <!-- xCAT -->
-       <group>
-        <attribute name="rpowerpath" rha:description="" rha:sample=""/>
-       </group>
-       <!-- end non-generated device definitions -->
-
-       <!-- begin auto-generated device definitions -->
-      <!-- fence_alom -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_apc -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="switch"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_bladecenter -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="identity_file"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_drac5 -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_eps -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <optional>
-          <attribute name="login"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_ilo -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="ssl"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_ldom -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="identity_file"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_lpar -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="partition"/>
-        </optional>
-        <optional>
-          <attribute name="managed"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_virsh -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="identity_file"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_vmware -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="exec"/>
-        </optional>
-        <optional>
-          <attribute name="vmware_type"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="vmware_datacenter"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_wti -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="ipaddr"/>
-        <optional>
-          <attribute name="login"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_xvm -->
-      <group>
-        <optional>
-          <attribute name="debug"/>
-        </optional>
-        <optional>
-          <attribute name="ip_family"/>
-        </optional>
-        <optional>
-          <attribute name="multicast_address"/>
-        </optional>
-        <optional>
-          <attribute name="port"/>
-        </optional>
-        <optional>
-          <attribute name="multicast_ttl"/>
-        </optional>
-        <optional>
-          <attribute name="retrans"/>
-        </optional>
-        <optional>
-          <attribute name="auth"/>
-        </optional>
-        <optional>
-          <attribute name="hash"/>
-        </optional>
-        <optional>
-          <attribute name="key_file"/>
-        </optional>
-        <optional>
-          <attribute name="domain"/>
-        </optional>
-        <optional>
-          <attribute name="use_uuid"/>
-        </optional>
-        <optional>
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="timeout"/>
-        </optional>
-      </group>
-       <!-- end auto-generated device definitions -->
-
-       <group>
-        <optional>
-         <empty/>
-        </optional>
-       </group>
-
-       <!-- end specific fence devices -->
-      </choice>
-     </optional>
-    </element>
-  </zeroOrMore>
- </element>
- </optional>
-<!-- end fencedevices block -->
-
-<!-- rm block -->
- <optional>
-  <element name="rm" rha:description="This element and its attributes
-      define resources (for example an IP address) required to create HA
-      cluster services, the HA cluster services themselves, and failover
-      domains for the HA cluster services.">
-   <optional>
-    <!-- FIXME: The following text needs clarifying. What is meant by
-    "...for all levels less than the selected."? -->
-    <attribute name="log_level" rha:description="An integer 0-7,
-        inclusive, for all levels less than the selected.
-        0, system is unusable, emergency;
-        1, action must be taken immediately;
-        2, critical conditions;
-        3, error conditions;
-        4, warning conditions;
-        5, normal but significant condition;
-        6, informational;
-        7, debug-level messages." rha:sample="6">
-     <data type="integer"/>
-    </attribute>
-   </optional>
-   <optional>
-    <attribute name="status_child_max" rha:description="" rha:sample="">
-     <data type="integer"/>
-    </attribute>
-   </optional>
-   <optional>
-    <attribute name="status_poll_interval" rha:description=""
-      rha:sample="">
-     <data type="integer"/>
-    </attribute>
-   </optional>
-   <optional>
-    <attribute name="transition_throttling" rha:description=""
-      rha:sample="">
-     <data type="integer"/>
-    </attribute>
-   </optional>
-   <optional>
-    <attribute name="central_processing" rha:description=""
-      rha:sample="">
-     <data type="integer"/>
-    </attribute>
-   </optional>
-   <optional>
-    <attribute name="log_facility" rha:description="The facility is one
-       of the following keywords: auth, authpriv, cron, daemon, kern,
-       lpr, mail, news, syslog, user, uucp and local0 through local7"
-       rha:sample="local4">
-     <data type="string"/>
-    </attribute>
-   </optional>
-   <interleave>
-   <optional>
-    <element name="failoverdomains" rha:description="">
-     <zeroOrMore>
-      <element name="failoverdomain" rha:description="Specifies
-        properties of a specific failover domain">
-       <attribute name="name" rha:description="The name of the failover
-         domain." rha:sample="foo"/>
-       <optional>
-        <attribute name="ordered" rha:description="Set value to 1 if
-          the failover domain is ordered; set value to 0 if
-          unordered." rha:default="0" rha:sample="1"/>
-       </optional>
-       <optional>
-        <attribute name="restricted" rha:description="Set value to 1 if
-          the failover domain is restricted; set value to 0 if
-          unrestricted." rha:default="0" rha:sample="1"/>
-       </optional>
-       <optional>
-        <attribute name="nofailback" rha:description="" rha:sample=""/>
-       </optional>
-       <zeroOrMore>
-        <element name="failoverdomainnode" rha:description="A node in
-          a failover domain">
-         <optional>
-          <attribute name="priority" rha:description="A number
-            specifying the priority; lower numbers having higher
-            priority"
-              rha:sample="1"/>
-         </optional>
-         <attribute name="name" rha:description="Name of the node."
-             rha:sample="member2"/>
-        </element>
-       </zeroOrMore>
-      </element>
-     </zeroOrMore>
-    </element>
-   </optional>  <!-- End of failoverdomains block -->
-   <optional>
-    <element name="events" rha:description="">
-     <zeroOrMore>
-      <element name="event" rha:description="">
-       <attribute name="name" rha:description="" rha:sample=""/>
-       <optional>
-        <text/>
-       </optional>
-       <optional>
-        <attribute name="file" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="priority" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="class" rha:description="" rha:sample=""/>
-       </optional>
-       <!-- Service event class attributes -->
-       <optional>
-        <attribute name="service" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="service_state" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="service_owner" rha:description="" rha:sample=""/>
-       </optional>
-       <!-- Node event -->
-       <optional>
-        <attribute name="node" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="node_id" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="node_state" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="node_clean" rha:description="" rha:sample=""/>
-       </optional>
-       <optional>
-        <attribute name="node_local" rha:description="" rha:sample=""/>
-       </optional>
-       <!-- Config event attributes -->
-       <!-- NOT USED -->
-      </element>
-     </zeroOrMore>
-    </element>
-   </optional>  <!-- End of events block -->
-   <optional>
-    <element name="resources" rha:description="">
-     <zeroOrMore>
-      <ref name="CHILDREN"/>
-     </zeroOrMore>
-    </element>
-   </optional>
-   <zeroOrMore>
-    <ref name="SERVICE"/>
-   </zeroOrMore>
-   <zeroOrMore>
-    <ref name="VM"/>
-   </zeroOrMore>
-  </interleave>
-  </element>
- </optional>
-
- </interleave>
-</element> <!-- cluster end -->
-</start>
-
-
-<!--Beginning of resource definitions-->
-<!-- Autogenerated.  Paste in to cluster.ng in the 'resources' section -->
-
-  <define name="SERVICE">
-    <element name="service">
-      <!-- Defines a services. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="domain"/>
-        </optional>
-        <optional>
-          <attribute name="autostart"/>
-        </optional>
-        <optional>
-          <attribute name="hardrecovery"/>
-        </optional>
-        <optional>
-          <attribute name="exclusive"/>
-        </optional>
-        <optional>
-          <attribute name="nfslock"/>
-        </optional>
-        <optional>
-          <attribute name="nfs_client_cache"/>
-        </optional>
-        <optional>
-          <attribute name="recovery"/>
-        </optional>
-        <optional>
-          <attribute name="depend"/>
-        </optional>
-        <optional>
-          <attribute name="depend_mode"/>
-        </optional>
-        <optional>
-          <attribute name="max_restarts"/>
-        </optional>
-        <optional>
-          <attribute name="restart_expire_time"/>
-        </optional>
-        <optional>
-          <attribute name="priority"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="IP">
-    <element name="ip">
-      <!-- This is an IP address. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="address"/>
-        <optional>
-          <attribute name="family"/>
-        </optional>
-        <optional>
-          <attribute name="monitor_link"/>
-        </optional>
-        <optional>
-          <attribute name="nfslock"/>
-        </optional>
-        <optional>
-          <attribute name="sleeptime"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="NFSCLIENT">
-    <element name="nfsclient">
-      <!-- Defines an NFS client. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="target"/>
-        <optional>
-          <attribute name="path"/>
-        </optional>
-        <optional>
-          <attribute name="svcname"/>
-        </optional>
-        <optional>
-          <attribute name="fsid"/>
-        </optional>
-        <optional>
-          <attribute name="options"/>
-        </optional>
-        <optional>
-          <attribute name="allow_recover"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-        <optional>
-          <attribute name="use_cache"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="NFSEXPORT">
-    <element name="nfsexport">
-      <!-- This defines an NFS export. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="device"/>
-        </optional>
-        <optional>
-          <attribute name="path"/>
-        </optional>
-        <optional>
-          <attribute name="fsid"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="SCRIPT">
-    <element name="script">
-      <!-- LSB-compliant init script as a clustered resource. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="file"/>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="NETFS">
-    <element name="netfs">
-      <!-- Defines an NFS/CIFS file system mount. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="mountpoint"/>
-        <attribute name="host"/>
-        <attribute name="export"/>
-        <optional>
-          <attribute name="fstype"/>
-        </optional>
-        <optional>
-          <attribute name="no_unmount"/>
-        </optional>
-        <optional>
-          <attribute name="force_unmount"/>
-        </optional>
-        <optional>
-          <attribute name="options"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="CLUSTERFS">
-    <element name="clusterfs">
-      <!-- Defines a cluster file system mount. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="mountpoint"/>
-        <attribute name="device"/>
-        <optional>
-          <attribute name="fstype"/>
-        </optional>
-        <optional>
-          <attribute name="force_unmount"/>
-        </optional>
-        <optional>
-          <attribute name="options"/>
-        </optional>
-        <optional>
-          <attribute name="self_fence"/>
-        </optional>
-        <optional>
-          <attribute name="fsid"/>
-        </optional>
-        <optional>
-          <attribute name="nfslock"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="SMB">
-    <element name="smb">
-      <!-- Dynamic smbd/nmbd resource agent -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="workgroup"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="APACHE">
-    <element name="apache">
-      <!-- Defines an Apache web server -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="server_root"/>
-        </optional>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="httpd_options"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="OPENLDAP">
-    <element name="openldap">
-      <!-- Defines an Open LDAP server -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="url_list"/>
-        </optional>
-        <optional>
-          <attribute name="slapd_options"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="SAMBA">
-    <element name="samba">
-      <!-- Dynamic smbd/nmbd resource agent -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="smbd_options"/>
-        </optional>
-        <optional>
-          <attribute name="nmbd_options"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="MYSQL">
-    <element name="mysql">
-      <!-- Defines a MySQL database server -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="listen_address"/>
-        </optional>
-        <optional>
-          <attribute name="mysqld_options"/>
-        </optional>
-        <optional>
-          <attribute name="startup_wait"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="POSTGRES-8">
-    <element name="postgres-8">
-      <!-- Defines a PostgreSQL server -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="postmaster_user"/>
-        </optional>
-        <optional>
-          <attribute name="postmaster_options"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="TOMCAT-5">
-    <element name="tomcat-5">
-      <!-- Defines a Tomcat server -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="tomcat_user"/>
-        </optional>
-        <optional>
-          <attribute name="catalina_options"/>
-        </optional>
-        <optional>
-          <attribute name="catalina_base"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="LVM">
-    <element name="lvm">
-      <!-- LVM Failover script -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="vg_name"/>
-        <optional>
-          <attribute name="lv_name"/>
-        </optional>
-        <optional>
-          <attribute name="self_fence"/>
-        </optional>
-        <optional>
-          <attribute name="nfslock"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="VM">
-    <element name="vm">
-      <!-- Defines a Virtual Machine -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="domain"/>
-        </optional>
-        <optional>
-          <attribute name="autostart"/>
-        </optional>
-        <optional>
-          <attribute name="hardrecovery"/>
-        </optional>
-        <optional>
-          <attribute name="exclusive"/>
-        </optional>
-        <optional>
-          <attribute name="recovery"/>
-        </optional>
-        <optional>
-          <attribute name="migration_mapping"/>
-        </optional>
-        <optional>
-          <attribute name="use_virsh"/>
-        </optional>
-        <optional>
-          <attribute name="xmlfile"/>
-        </optional>
-        <optional>
-          <attribute name="migrate"/>
-        </optional>
-        <optional>
-          <attribute name="snapshot"/>
-        </optional>
-        <optional>
-          <attribute name="depend"/>
-        </optional>
-        <optional>
-          <attribute name="depend_mode"/>
-        </optional>
-        <optional>
-          <attribute name="max_restarts"/>
-        </optional>
-        <optional>
-          <attribute name="restart_expire_time"/>
-        </optional>
-        <optional>
-          <attribute name="hypervisor"/>
-        </optional>
-        <optional>
-          <attribute name="hypervisor_uri"/>
-        </optional>
-        <optional>
-          <attribute name="migration_uri"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="SAPINSTANCE">
-    <element name="SAPInstance">
-      <!-- SAP instance resource agent -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="InstanceName"/>
-        <optional>
-          <attribute name="DIR_EXECUTABLE"/>
-        </optional>
-        <optional>
-          <attribute name="DIR_PROFILE"/>
-        </optional>
-        <optional>
-          <attribute name="START_PROFILE"/>
-        </optional>
-        <optional>
-          <attribute name="START_WAITTIME"/>
-        </optional>
-        <optional>
-          <attribute name="AUTOMATIC_RECOVER"/>
-        </optional>
-        <optional>
-          <attribute name="PRE_START_USEREXIT"/>
-        </optional>
-        <optional>
-          <attribute name="POST_START_USEREXIT"/>
-        </optional>
-        <optional>
-          <attribute name="PRE_STOP_USEREXIT"/>
-        </optional>
-        <optional>
-          <attribute name="POST_STOP_USEREXIT"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="SAPDATABASE">
-    <element name="SAPDatabase">
-      <!-- SAP database resource agent -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="SID"/>
-        <optional>
-          <attribute name="DIR_EXECUTABLE"/>
-        </optional>
-        <attribute name="DBTYPE"/>
-        <optional>
-          <attribute name="NETSERVICENAME"/>
-        </optional>
-        <optional>
-          <attribute name="DBJ2EE_ONLY"/>
-        </optional>
-        <optional>
-          <attribute name="JAVA_HOME"/>
-        </optional>
-        <optional>
-          <attribute name="STRICT_MONITORING"/>
-        </optional>
-        <optional>
-          <attribute name="AUTOMATIC_RECOVER"/>
-        </optional>
-        <optional>
-          <attribute name="DIR_BOOTSTRAP"/>
-        </optional>
-        <optional>
-          <attribute name="DIR_SECSTORE"/>
-        </optional>
-        <optional>
-          <attribute name="DB_JARS"/>
-        </optional>
-        <optional>
-          <attribute name="PRE_START_USEREXIT"/>
-        </optional>
-        <optional>
-          <attribute name="POST_START_USEREXIT"/>
-        </optional>
-        <optional>
-          <attribute name="PRE_STOP_USEREXIT"/>
-        </optional>
-        <optional>
-          <attribute name="POST_STOP_USEREXIT"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="NAMED">
-    <element name="named">
-      <!-- Defines an instance of named server -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="config_file"/>
-        </optional>
-        <optional>
-          <attribute name="named_sdb"/>
-        </optional>
-        <optional>
-          <attribute name="named_working_dir"/>
-        </optional>
-        <optional>
-          <attribute name="named_options"/>
-        </optional>
-        <optional>
-          <attribute name="shutdown_wait"/>
-        </optional>
-        <optional>
-          <attribute name="service_name"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="ASEHAAGENT">
-    <element name="ASEHAagent">
-      <!-- Sybase ASE Failover Instance -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="sybase_home"/>
-        <attribute name="sybase_ase"/>
-        <attribute name="sybase_ocs"/>
-        <attribute name="server_name"/>
-        <attribute name="login_file"/>
-        <attribute name="interfaces_file"/>
-        <attribute name="sybase_user"/>
-        <attribute name="shutdown_timeout"/>
-        <attribute name="start_timeout"/>
-        <attribute name="deep_probe_timeout"/>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="FS">
-    <element name="fs">
-      <!-- Defines a file system mount. -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <attribute name="mountpoint"/>
-        <attribute name="device"/>
-        <optional>
-          <attribute name="fstype"/>
-        </optional>
-        <optional>
-          <attribute name="force_unmount"/>
-        </optional>
-        <optional>
-          <attribute name="quick_status"/>
-        </optional>
-        <optional>
-          <attribute name="self_fence"/>
-        </optional>
-        <optional>
-          <attribute name="nfslock"/>
-        </optional>
-        <optional>
-          <attribute name="fsid"/>
-        </optional>
-        <optional>
-          <attribute name="force_fsck"/>
-        </optional>
-        <optional>
-          <attribute name="options"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-
-  <define name="ORACLEDB">
-    <element name="oracledb">
-      <!-- Oracle 10g Failover Instance -->
-      <choice>
-      <group>
-        <!-- rgmanager specific stuff -->
-        <attribute name="ref"/>
-      </group>
-      <group>
-        <attribute name="name"/>
-        <optional>
-          <attribute name="listener_name"/>
-        </optional>
-        <attribute name="user"/>
-        <attribute name="home"/>
-        <optional>
-          <attribute name="type"/>
-        </optional>
-        <optional>
-          <attribute name="vhost"/>
-        </optional>
-      </group>
-      </choice>
-      <optional>
-        <attribute name="__independent_subtree"/>
-      </optional>
-      <optional>
-        <attribute name="__enforce_timeouts"/>
-      </optional>
-      <optional>
-        <ref name="CHILDREN"/>
-      </optional>
-    </element>
-  </define>
-
-  <define name="CHILD">
-  <!-- for recursion to work properly, CHILD may be referenced at CHILDREN only -->
-    <zeroOrMore>
-     <choice>
-
-        <ref name="SERVICE"/>
-        <ref name="IP"/>
-        <ref name="NFSCLIENT"/>
-        <ref name="NFSEXPORT"/>
-        <ref name="SCRIPT"/>
-        <ref name="NETFS"/>
-        <ref name="CLUSTERFS"/>
-        <ref name="SMB"/>
-        <ref name="APACHE"/>
-        <ref name="OPENLDAP"/>
-        <ref name="SAMBA"/>
-        <ref name="MYSQL"/>
-        <ref name="POSTGRES-8"/>
-        <ref name="TOMCAT-5"/>
-        <ref name="LVM"/>
-        <ref name="VM"/>
-        <ref name="SAPINSTANCE"/>
-        <ref name="SAPDATABASE"/>
-        <ref name="NAMED"/>
-        <ref name="ASEHAAGENT"/>
-        <ref name="FS"/>
-        <ref name="ORACLEDB"/>
-      <ref name="RESOURCEACTION"/>
-     </choice>
-    </zeroOrMore>
-  </define>
-
-  <define name="CHILDREN">
-   <zeroOrMore>
-    <choice>
-     <ref name="CHILD"/>
-    </choice>
-   </zeroOrMore>
-  </define>
-
-  <define name="RESOURCEACTION">
-   <zeroOrMore>
-    <element name="action">
-     <attribute name="name"/>
-     <optional>
-      <attribute name="depth"/>
-     </optional>
-     <optional>
-      <attribute name="interval"/>
-     </optional>
-     <optional>
-      <attribute name="timeout"/>
-     </optional>
-    </element>
-   </zeroOrMore>
-  </define>
-
-<!-- End autogenerated resources definitions -->
-<!--End of resource definitions-->
-
-<!-- begin node fence definitions -->
-
- <define name="FENCE">
-  <element name="fence" rha:description="The fence element specifies how
-      a node is fenced. Its elements and attributes identify fence device
-      (or devices) to use and the parameters specific to each fence device
-      (for example, IP address and port number in an APC fence device)">
-   <zeroOrMore>
-    <element name="method" rha:description="Typically, there is a single
-        method used to fence each node (the name  given to the method is
-        not significant). A method refers to a specific device listed in
-        the fencedevices section (a separate section from the clusternode
-        section), and then lists any node-specific parameters related
-        to using the device.">
-     <attribute name="name" rha:description="" rha:sample="apc123"/>
-     <zeroOrMore>
-       <ref name="DEVICE"/>
-     </zeroOrMore>
-    </element>
-   </zeroOrMore>
-  </element>
- </define>
-
- <define name="UNFENCE">
-  <element name="unfence" rha:description="">
-   <zeroOrMore>
-    <ref name="DEVICE"/>
-   </zeroOrMore>
-  </element>
- </define>
-
- <define name="DEVICE">
-  <element name="device" rha:description="">
-   <attribute name="name" rha:description="" rha:sample="">
-    <data type="IDREF"/>
-   </attribute>
-   <choice>
-      <!-- begin node fence specific devices -->
-
-      <!-- begin auto-generated device definitions -->
-      <!-- fence_alom -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <attribute name="login"/>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_apc -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="switch"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_bladecenter -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="identity_file"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_drac5 -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_eps -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="login"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_ilo -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="ssl"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_ldom -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="identity_file"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_lpar -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="partition"/>
-        </optional>
-        <optional>
-          <attribute name="managed"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_virsh -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="identity_file"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_vmware -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="exec"/>
-        </optional>
-        <optional>
-          <attribute name="vmware_type"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <optional>
-          <attribute name="vmware_datacenter"/>
-        </optional>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_wti -->
-      <group>
-        <optional>
-          <attribute name="action"/>
-        </optional>
-        <optional> <!-- lhh - compat -->
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="login"/>
-        </optional>
-        <optional>
-          <attribute name="passwd"/>
-        </optional>
-        <optional>
-          <attribute name="passwd_script"/>
-        </optional>
-        <optional>
-          <attribute name="secure"/>
-        </optional>
-        <attribute name="port"/>
-        <optional>
-          <attribute name="verbose"/>
-        </optional>
-      </group>
-
-      <!-- fence_xvm -->
-      <group>
-        <optional>
-          <attribute name="debug"/>
-        </optional>
-        <optional>
-          <attribute name="ip_family"/>
-        </optional>
-        <optional>
-          <attribute name="multicast_address"/>
-        </optional>
-        <optional>
-          <attribute name="port"/>
-        </optional>
-        <optional>
-          <attribute name="multicast_ttl"/>
-        </optional>
-        <optional>
-          <attribute name="retrans"/>
-        </optional>
-        <optional>
-          <attribute name="auth"/>
-        </optional>
-        <optional>
-          <attribute name="hash"/>
-        </optional>
-        <optional>
-          <attribute name="key_file"/>
-        </optional>
-        <optional>
-          <attribute name="domain"/>
-        </optional>
-        <optional>
-          <attribute name="use_uuid"/>
-        </optional>
-        <optional>
-          <attribute name="option"/>
-        </optional>
-        <optional>
-          <attribute name="timeout"/>
-        </optional>
-      </group>
-      <!-- end auto-generated device definitions -->
-
-      <!-- begin non-generated device definitions -->
-        <!-- Brocade, Vixel, McData, SANBox2 -->
-        <group>
-         <attribute name="port"/>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-        <!-- BladeCenter -->
-        <group>
-         <attribute name="blade"/>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-        <!-- xCAT, manual -->
-        <group>
-         <attribute name="nodename"/>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-	<!-- GNBD -->
-        <group>
-         <attribute name="nodename"/>
-	 <optional>
-	  <attribute name="ipaddr"/>
-	 </optional>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-        <!-- bullpap -->
-        <group>
-         <attribute name="domain"/>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-        <!-- Egenera -->
-        <group>
-         <attribute name="lpan"/>
-         <attribute name="pserver"/>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-        <!-- ILO, ipmilan -->
-        <group>
-         <optional>
-          <empty/>
-         </optional>
-         <optional>
-          <attribute name="lanplus"/>
-         </optional>
-         <optional>
-          <attribute name="option"/>
-         </optional>
-        </group>
-        <!-- scsi reservations -->
-        <group>
-         <optional>
-          <attribute name="node"/>
-         </optional>
-        </group>
-        <!-- xvm -->
-        <group>
-         <optional>
-          <attribute name="domain"/>
-         </optional>
-        </group>
-      <!-- end non-generated device definitions -->
-
-   <!-- end node fence specific devices -->
-   </choice>
-  </element>
- </define>
-<!-- end node fence definitions -->
-
-</grammar>
diff --git a/config/tools/xml/cluster.rng.in b/config/tools/xml/cluster.rng.in
new file mode 100644
index 0000000..318afd6
--- /dev/null
+++ b/config/tools/xml/cluster.rng.in
@@ -0,0 +1,2806 @@
+<grammar  datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+xmlns="http://relaxng.org/ns/structure/1.0"
+xmlns:rha="http://redhat.com/~pkennedy/annotation_namespace/cluster_conf_annot_namespace">
+
+<!-- The cluster.conf schema follows this outline:
+
+cluster
+- cman
+- totem
+- quorumd
+- fence_daemon
+- fence_xvmd
+- dlm
+- gfs_controld
+- group
+- logging
+- clusternodes
+- fencedevices
+- rm
+
+Element defnitions:
+- Resource
+- Fence
+
+To validate your cluster.conf against this schema, run:
+
+  xmllint \-\-relaxng cluster.rng /path/to/cluster.conf
+
+-->
+
+<start>
+<element name="cluster" rha:description="The cluster element is the
+    top-level element and contains attributes that define the cluster
+    name and the configuration version number.">
+ <attribute name="name" rha:description="Specifies a unique cluster name;
+      it can be up to 16 characters long." rha:sample="my_cluster"/>
+ <attribute name="config_version" rha:description="Identifies the
+     revision level of the cluster.conf file. To propagate a revised
+     configuration file, this value must be advanced to a value higher
+     than the current value." rha:sample="1" rha:default="1"/>
+ <optional>
+  <attribute name="alias" rha:description="Pretty name for cluster that
+      is not parsed by cluster tag software; only the Conga and
+      system-config-cluster GUIs use this value."
+      rha:sample="My Cluster"/>
+ </optional>
+ <interleave>
+
+<!-- cman block -->
+ <optional>
+   <element name="cman" rha:description="The cman element contains
+       attributes that define the following cluster-wide parameters and
+       behaviors: whether the cluster is a two-node cluster, expected
+       votes, user-specified multicast address, and logging.">
+    <optional>
+     <attribute name="two_node" rha:description="The two_node attribute
+         allows you to configure a cluster with only two
+         nodes. Ordinarily, the loss of quorum after one of two nodes
+         fails prevents the remaining node from continuing (if both
+         nodes have one vote.) To enable a two-node cluster, set the
+         two_node value equal to 1. If the two_node value is enabled,
+         the expected_votes value must be set to 1." rha:sample="1"/>
+    </optional>
+    <optional>
+     <attribute name="expected_votes" rha:description="The expected
+         votes value is used by cman to determine quorum. The cluster
+         is quorate if the sum of votes of members is over
+         half of the expected votes value. By default, cman sets the
+         expected votes value to be the sum of votes of all nodes listed
+         in cluster.conf. This can be overriden by setting an explicit
+         expected_votes value." rha:sample="4">
+      <data type="positiveInteger"/>
+     </attribute>
+    </optional>
+    <optional>
+     <attribute name="quorum_dev_poll" rha:description="The amount of time
+         after a qdisk poll, in milliseconds, before a quorum disk is
+         considered dead. The quorum disk daemon, qdisk, periodically
+         sends hello messages to cman and ais, indicating that qdisk
+         is present. If qdisk takes more time to send a hello message
+         to cman and ais than by quorum_dev_poll, then cman declares
+         qdisk dead and prints a message indicating that connection to
+         the quorum device has been lost." rha:sample="50000"/>
+    </optional>
+    <!--FIXME: Clarify the following. What is meant by "service"? Also, is
+     there a default value? What is a good sample value?-->
+    <optional>
+     <attribute name="shutdown_timeout" rha:description="Timeout period,
+         in milliseconds, to allow a service to respond during a
+         shutdown." rha:sample="5000"/>
+    </optional>
+    <optional>
+     <attribute name="ccsd_poll" rha:description="" rha:sample=""
+         rha:default="1000"/>
+    </optional>
+    <optional>
+     <attribute name="debug_mask" rha:description="" rha:sample=""/>
+    </optional>
+    <optional>
+     <attribute name="port">
+      <data type="nonNegativeInteger"/>
+     </attribute>
+    </optional>
+    <optional>
+     <attribute name="cluster_id">
+      <data type="nonNegativeInteger"/>
+     </attribute>
+    </optional>
+    <optional>
+     <attribute name="broadcast">
+      <data type="nonNegativeInteger"/>
+     </attribute>
+    </optional>
+    <optional>
+     <attribute name="keyfile" rha:description=""/>
+    </optional>
+    <optional>
+     <attribute name="disable_openais"/>
+    </optional>
+    <optional>
+     <element name="multicast" rha:description="The multicast element
+         provides the ability for a user to specify a multicast address
+         instead of using the multicast address generated by cman. If
+         a user does not specify a multicast address, cman creates one. It
+         forms the upper 16 bits of the multicast address with 239.192 and
+         forms the lower 16 bits based on the cluster ID."> <attribute
+         name="addr" rha:description="A multicast address specified
+         by a user. If you do specify a multicast address, you should
+         use the 239.192.x.x series that cman uses. Otherwise, using a
+         multicast address outside that range may cause unpredictable
+         results. For example, using 224.0.0.x (All hosts on the network)
+         may not be routed correctly, or even routed at all by some
+         hardware." rha:sample="239.192.0.1"/>
+     </element>
+    </optional>
+   </element>
+ </optional>
+<!-- end cman block -->
+
+<!-- totem block -->
+ <optional>
+  <element name="totem" rha:description="OpenAIS msg transport
+    protocol">
+   <optional>
+    <attribute name="consensus" rha:description="This is a timeout value
+        that specifies how many milliseconds to wait for consensus
+        to be achieved before starting a new round of membership
+        configuration." rha:default="200" rha:sample="235"/>
+   </optional>
+   <optional>
+    <attribute name="join" rha:description="This is a timeout value that
+        specifies how many milliseconds to wait for join messages in
+        the membership protocol." rha:default="100" rha:sample="95"/>
+   </optional>
+   <optional>
+    <attribute name="token" rha:description="This is a timeout value
+        that specifies how many milliseconds elapse before a
+        token loss is declared after not receiving a token. This
+        is the time spent detecting a failure of a processor in
+        the current configuration. Reforming a new configuration
+        takes about 50 milliseconds in addition to this
+        timeout." rha:default="5000" rha:sample="5300"/>
+   </optional>
+   <optional>
+    <attribute name="token_retransmits_before_loss_const"
+      rha:description="This value identifies how many token retransmits
+      should be attempted before forming a new configuration. If
+      this value is set, retransmit and hold will be automatically
+      calculated from retransmits_before_loss and token." rha:default="4"
+      rha:sample="5"/>
+   </optional>
+   <!-- FIXME: The following description was adapted from the man page.
+   It may be tool long for the schema docuement. Consider cutting text
+   after the second sentence and referring the reader to the openais.conf
+   man page. -->
+   <optional>
+    <attribute name="rrp_mode" rha:description="This attribute
+        specifies the redundant ring protocol mode. Its value can be
+        set to active, passive, or none. Active replication offers
+        slightly lower latency from transmit to delivery in faulty
+        network environments but with less performance. Passive
+        replication may nearly double the speed of the totem protocol
+        if the protocol doesn't become cpu bound. The final option is
+        none, in which case only one network interface is used to
+        operate the totem protocol. If only one interface directive is
+        specified, none is automatically chosen. If multiple interface
+        directives are specified, only active or passive may be
+        chosen." rha:sample="active"/>
+   </optional>
+   <optional>
+    <attribute name="secauth" rha:description="This attribute specifies
+       that HMAC/SHA1 authentication should be used to authenticate all
+       messages. It further specifies that all data should be encrypted
+       with the sober128 encryption algorithm to protect data from
+       eavesdropping. For more information setting this value, refer
+       the the openais.conf man page." rha:default="on" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="keyfile" rha:description="" rha:sample=""/>
+   </optional>
+   <!-- multicast address -->
+   <zeroOrMore>
+    <element name="interface" rha:description="" rha:sample="">
+     <optional>
+      <attribute name="ringnumber" rha:description="" rha:sample=""/>
+     </optional>
+     <optional>
+      <attribute name="bindnetaddr" rha:description="" rha:sample=""/>
+     </optional>
+     <optional>
+      <attribute name="mcastaddr" rha:description="" rha:sample=""/>
+     </optional>
+     <optional>
+      <attribute name="mcastport" rha:description="" rha:sample=""/>
+     </optional>
+     <optional>
+      <attribute name="broadcast" rha:description="" rha:sample=""/>
+     </optional>
+    </element>
+   </zeroOrMore>
+  </element>
+ </optional>
+<!-- end totem block -->
+
+<!-- quorumd block -->
+ <optional>
+  <element name="quorumd" rha:description="This element and its
+      attributes define parameters for the quorum disk daemon,
+      quorumd.">
+   <optional>
+    <attribute name="interval" rha:description="The frequency of
+        read/write cycles, in seconds." rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="tko" rha:description="The number of cycles a node
+        must miss to be declared dead." rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="votes" rha:description="The number of votes the
+        quorum daemon advertises to CMAN when it has a high enough
+        score." rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="min_score" rha:description="The minimum score for a
+        node to be considered alive. If omitted or set to 0, the default
+        function, floor((n+1)/2), is used, where n is the sum of the
+        heuristics scores. The Minimum Score value must never exceed the
+        sum of the heuristic scores; otherwise, the quorum disk cannot
+        be available." rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="device" rha:description="The storage device the
+        quorum daemon uses. The device must be the same on all
+        nodes." rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="label" rha:description="Specifies the quorum disk
+        label created by the mkqdisk utility. If this field contains an
+        entry, the label overrides the Device field. If this field is
+        used, the quorum daemon reads /proc/partitions and checks for
+        qdisk signatures on every block device found, comparing the
+        label against the specified label. This is useful in configurations
+        where the quorum device name differs among nodes." rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="status_file" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="scheduler" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="reboot" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="priority" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="stop_cman" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="paranoid" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="allow_kill" rha:description="" rha:sample=""/>
+   </optional>
+   <optional>
+    <attribute name="max_error_cycles" rha:description="" rha:sample=""/>
+   </optional>
+   <zeroOrMore>
+    <element name="heuristic" rha:description="">
+     <attribute name="program" rha:description="The program used to
+         determine if this heuristic is alive. This can be anything that
+         can be executed by /bin/sh -c. A return value of 0 indicates
+         success; anything else indicates failure." rha:sample=""/>
+     <optional>
+      <attribute name="score" rha:description="The weight of this
+          heuristic. Be careful when determining scores for
+          heuristics." rha:default="1" rha:sample=""/>
+     </optional>
+     <optional>
+      <attribute name="interval" rha:description="The frequency (in
+          seconds) at which the heuristic is polled." rha:default="2"
+          rha:sample=""/>
+     </optional>
+     <optional>
+      <attribute name="tko" rha:description="" rha:sample=""/>
+     </optional>
+    </element>
+   </zeroOrMore>
+  </element>
+ </optional>
+<!-- end quorumd block -->
+
+<!-- fence_daemon block -->
+ <optional>
+  <element name="fence_daemon"  rha:description="This element and its
+      attributes define cluster-wide parameters for basic fence timing
+      properties used when a node joins a cluster or is fenced from
+      the cluster.">
+   <optional>
+    <attribute name="post_join_delay"  rha:description="The number of
+        seconds the fence daemon (fenced) waits before fencing a node
+        after the node joins the fence domain. A typical setting for
+        post_join_delay is between 20 and 30 seconds, but can vary
+        according to cluster and network performance requirements."
+        rha:default="3" rha:sample="20"/>
+   </optional>
+   <optional>
+    <attribute name="post_fail_delay" rha:description="The the number of
+        seconds the fence daemon (fenced) waits before fencing
+        a node (a member of the fence domain) after the node has
+        failed." rha:default="0" rha:sample="2"/>
+   </optional>
+   <optional>
+    <attribute name="override_path" rha:description="The location of a
+       FIFO used for communication between fenced and fence_ack_manual"
+       rha:default="/var/run/cluster/fenced_override"
+       rha:sample="/opt/cluster/fenced_override"/>
+   </optional>
+   <optional>
+    <attribute name="override_time" rha:description="The location of a
+       FIFO used for communication between fenced and fence_ack_manual"
+       rha:default="/var/run/cluster/fenced_override"
+       rha:sample="/opt/cluster/fenced_override"/>
+   </optional>
+   <optional>
+    <attribute name="clean_start" rha:description="Clean-start is used
+       to prevent any startup fencing the daemon might do." rha:default="0"
+       rha:sample="1"/>
+   </optional>
+   <optional>
+    <attribute name="skip_undefined" rha:description="Do not do startup
+       fencing of nodes with no fence methods defined." rha:default="0"
+       rha:sample="1"/>
+   </optional>
+  </element>
+ </optional>
+<!-- end fence_daemon block -->
+
+<!-- fence_xvmd block -->
+ <optional>
+  <element name="fence_xvmd" rha:description="Fence_xvm daemon. The
+      fence_xvmd fence device is an I/O fencing host that resides
+      on dom0 and is used in conjunction with the fence_xvm fencing
+      agent. Together, these two programs fence Xen virtual machines
+      that are in a cluster. There is a requirement that the parent
+      dom0s are also a part of their own CMAN/OpenAIS based cluster,
+      and that the dom0 cluster does not share any members with the domU
+      cluster. Furthermore, the dom0 cluster is required to have fencing
+      if domU recovery is expected to be automatic.">
+    <optional>
+      <attribute name="debug" rha:description="" rha:sample="">
+	<data type="integer"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="port" rha:description="" rha:sample="">
+	<data type="integer"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="use_uuid" rha:description="" rha:sample="">
+	<data type="boolean"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="multicast_address" rha:description="" rha:sample="">
+	<data type="string"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="auth" rha:description="" rha:sample="">
+	<data type="string"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="hash" rha:description="" rha:sample="">
+	<data type="string"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="uri" rha:description="" rha:sample="">
+	<data type="string"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="key_file" rha:description="" rha:sample="">
+	<data type="string"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="multicast_interface" rha:description="" rha:sample="">
+	<data type="string"/>
+      </attribute>
+    </optional>
+  </element>
+ </optional>
+<!-- end fence_xvmd block -->
+
+<!-- dlm block -->
+ <optional>
+ <element name="dlm" rha:description="">
+  <optional>
+    <attribute name="log_debug" rha:description="Enable dlm
+      kernel debug messages." rha:default="0" rha:sample="1"/>
+  </optional>
+  <optional>
+   <attribute name="timewarn" rha:description="The number of centiseconds
+     a lock is blocked before a warning is sent to userland, for lockspaces
+     created with TIMEWARN flag." rha:default="500" rha:sample="100"/>
+  </optional>
+  <optional>
+   <attribute name="protocol" rha:description="The network protocol
+     used by the dlm." rha:default="tcp" rha:sample="sctp"/>
+  </optional>
+  <optional>
+   <attribute name="enable_fencing" rha:description="Enable fencing recovery
+     dependency." rha:default="1" rha:sample="0"/>
+  </optional>
+  <optional>
+   <attribute name="enable_quorum" rha:description="Enable quorum recovery
+     dependency." rha:default="1" rha:sample="0"/>
+  </optional>
+  <optional>
+   <attribute name="enable_deadlk" rha:description="Enable deadlock detection
+     code." rha:default="0" rha:sample="1"/>
+  </optional>
+  <optional>
+   <attribute name="enable_plock" rha:description="Enable posix lock code for
+     cluster fs." rha:default="1" rha:sample="0"/>
+  </optional>
+  <optional>
+   <attribute name="plock_debug" rha:description="Enable posix lock debugging."
+     rha:default="0" rha:sample="1"/>
+  </optional>
+  <optional>
+   <attribute name="plock_rate_limit" rha:description="The maximum
+     number of plock operations that will be sent every second.  This is
+     used to prevent potentially excessive network load.  For best
+     performance it is recommended to disable this rate limiting by
+     setting the value to 0." rha:sample="10000" rha:default="100"/>
+  </optional>
+  <optional>
+   <attribute name="plock_ownership" rha:description="Enabling this
+     option by setting to 1 optimizes plock performance for repeated
+     locking of the same locks by processes on a single node.
+     All dlm_controld daemons in the cluster must be stopped before
+     changing this value." rha:sample="0" rha:default="1"/>
+  </optional>
+  <optional>
+   <attribute name="drop_resources_time" rha:description="For tuning the
+     plock_ownership resource caching.  This is the frequence of
+     attempts in milliseconds to drop unused resources from the
+     cache." rha:sample="5000" rha:default="10000"/>
+  </optional>
+  <optional>
+   <attribute name="drop_resources_count" rha:description="For tuning
+     the plock_ownership resource caching.  This is the maximum number
+     of resources to drop from the cache each time." rha:sample="100"
+     rha:default="10"/>
+  </optional>
+  <optional>
+   <attribute name="drop_resources_age" rha:description="For tuning the
+     plock_ownership resource caching.  This is the time in milliseconds
+     that a cached resource should be unused before consideration for
+     dropping." rha:sample="5000" rha:default="10000"/>
+  </optional>
+  <optional>
+   <zeroOrMore>
+    <element name="lockspace" rha:description="Individual lockspace
+      configuration.">
+     <attribute name="name" rha:description="The name of the lockspace."
+        rha:sample="foo"/>
+     <optional>
+      <attribute name="nodir" rha:description="The lockspace will not use a
+        resource directory when this is set to 1." rha:default="0"
+        rha:sample="1"/>
+     </optional>
+     <optional>
+      <zeroOrMore>
+       <element name="master" rha:description="Define a particular node to be
+         responsible for a certain amount of lock mastering.">
+        <attribute name="name" rha:description="The name of the node that
+          should be mastering resources/locks.  This needs to match one of
+          the nodes defined in clusternodes." rha:sample="node01"/>
+        <attribute name="weight" rha:description="The proportion of
+          resources/locks this node should master." rha:default="1"
+          rha:sample="2"/>
+       </element>
+      </zeroOrMore>
+     </optional>
+    </element>
+   </zeroOrMore>
+  </optional>
+ </element>
+ </optional>
+<!-- end dlm block -->
+
+<!-- gfs_controld block -->
+ <optional>
+ <element name="gfs_controld" rha:description="This element and its
+   attributes configure the gfs_controld daemon.">
+  <optional>
+   <attribute name="enable_withdraw" rha:description="Enable the code that
+     handles gfs withdraw." rha:default="1" rha:sample="0"/>
+  </optional>
+  <optional>
+   <attribute name="enable_plock" rha:description="Enable posix lock code for
+     cluster fs.  gfs_controld only handles plocks when daemons run in compat
+     mode, otherwise dlm_controld processes plocks." rha:default="1"
+     rha:sample="0"/>
+  </optional>
+  <optional>
+   <attribute name="plock_debug" rha:description="Enable posix lock
+     debugging." rha:default="0" rha:sample="1"/>
+  </optional>
+  <optional>
+   <attribute name="plock_rate_limit" rha:description="The maximum
+     number of plock operations that will be sent every second.  This is
+     used to prevent potentially excessive network load.  For best
+     performance it is recommended to disable this rate limiting by
+     setting the value to 0." rha:sample="10000" rha:default="100"/>
+  </optional>
+  <optional>
+   <attribute name="plock_ownership" rha:description="Enabling this
+     option by setting to 1 optimizes plock performance for repeated
+     locking of the same locks by processes on a single node.
+     All gfs_controld daemons in the cluster must be stopped before
+     changing this value." rha:sample="1" rha:default="0"/>
+  </optional>
+  <optional>
+   <attribute name="drop_resources_time" rha:description="For tuning the
+     plock_ownership resource caching.  This is the frequence of
+     attempts in milliseconds to drop unused resources from the
+     cache." rha:sample="5000" rha:default="10000"/>
+  </optional>
+  <optional>
+   <attribute name="drop_resources_count" rha:description="For tuning
+     the plock_ownership resource caching.  This is the maximum number
+     of resources to drop from the cache each time." rha:sample="100"
+     rha:default="10"/>
+  </optional>
+  <optional>
+   <attribute name="drop_resources_age" rha:description="For tuning the
+     plock_ownership resource caching.  This is the time in milliseconds
+     that a cached resource should be unused before consideration for
+     dropping." rha:sample="5000" rha:default="10000"/>
+  </optional>
+ </element>
+ </optional>
+<!-- end gfs_controld block -->
+
+<!-- group block -->
+ <optional>
+ <element name="group" rha:description="">
+  <optional>
+   <attribute name="groupd_compat" rha:description="Enable compatibility with
+     cluster2 (RHEL5) nodes" rha:default="0" rha:sample="1"/>
+  </optional>
+ </element>
+ </optional>
+<!-- end group block -->
+
+<!-- logging block -->
+ <optional>
+  <element name="logging" rha:description="Global logging config applies
+    to all daemons.">
+   <optional>
+    <attribute name="to_syslog" rha:description="enable/disable messages to
+      syslog" rha:default="yes"/>
+   </optional>
+   <optional>
+    <attribute name="to_logfile" rha:description="enable/disable messages to
+      log file" rha:default="yes"/>
+   </optional>
+   <optional>
+    <attribute name="syslog_facility" rha:description="facility used for
+      syslog messages" rha:default="daemon"/>
+   </optional>
+   <optional>
+    <attribute name="syslog_priority" rha:description="messages at this level
+      and up will be sent to syslog" rha:default="info"/>
+   </optional>
+   <optional>
+    <attribute name="logfile_priority" rha:description="messages at this level
+      and up will be written to log file" rha:default="info"/>
+   </optional>
+   <optional>
+    <attribute name="logfile" rha:description="the log file name"
+      rha:default="/var/log/cluster/daemon_name.log"/>
+   </optional>
+   <optional>
+    <attribute name="debug" rha:description="turn on debugging, a shortcut for
+      setting logfile_priority to debug" rha:sample="on"/>
+   </optional>
+   <optional>
+    <element name="logging_daemon" rha:description="Per-daemon logging
+      config overrides global settings for named daemon.">
+     <attribute name="name" rha:description="daemon name" rha:sample="fenced"/>
+     <optional>
+      <attribute name="subsys" rha:description="corosync subsystem name"
+        rha:sample="CMAN"/>
+     </optional>
+     <optional>
+      <attribute name="to_syslog" rha:description="same as global"/>
+     </optional>
+     <optional>
+      <attribute name="to_logfile" rha:description="same as global"/>
+     </optional>
+     <optional>
+      <attribute name="syslog_facility" rha:description="same as global"/>
+     </optional>
+     <optional>
+      <attribute name="syslog_priority" rha:description="same as global"/>
+     </optional>
+     <optional>
+      <attribute name="logfile_priority" rha:description="same as global"/>
+     </optional>
+     <optional>
+      <attribute name="logfile" rha:description="same as global"/>
+     </optional>
+     <optional>
+      <attribute name="debug" rha:description="same as global"/>
+     </optional>
+    </element>
+   </optional>
+  </element>
+ </optional>
+<!-- end logging block -->
+
+<!-- clusternode block -->
+ <element name="clusternodes" rha:description="This element defines the
+     cluster nodes configuration; it contains one clusternode element
+     per node.">
+   <zeroOrMore>
+     <element name="clusternode" rha:description="This element and its
+         attributes define a cluster node, specifying node name, node ID,
+         number of quorum votes, and fencing method for that node. There
+         is one clusernode element per node in a cluster.">
+      <attribute name="name" rha:description="The hostname or the IP
+          address of the node." rha:sample="node-01">
+	 <data type="ID"/>
+       </attribute>
+       <optional>
+	 <attribute name="votes" rha:description="The number of votes a
+            node can cast" rha:sample="2" rha:default="1">
+	   <data type="positiveInteger"/>
+	 </attribute>
+       </optional>
+       <optional>
+	 <attribute name="nodeid" rha:description="Each node requires
+             a unique integer value as its node ID." rha:sample="1">
+	   <data type="positiveInteger"/>
+	 </attribute>
+       </optional>
+       <optional>
+	 <attribute name="weight" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+         <element name="altname" rha:description="">
+           <optional>
+             <attribute name="name" rha:description="" rha:sample=""/>
+           </optional>
+           <optional>
+             <attribute name="port" rha:description="" rha:sample=""/>
+           </optional>
+           <optional>
+             <attribute name="mcast" rha:description="" rha:sample=""/>
+           </optional>
+         </element>
+       </optional>
+       <interleave>
+	 <optional>
+	   <ref name="FENCE"/>
+	 </optional>
+	 <optional>
+	   <ref name="UNFENCE"/>
+	 </optional>
+       </interleave>
+     </element>
+   </zeroOrMore>
+ </element>
+<!-- end clusternode block -->
+
+<!-- fencedevices block -->
+ <optional>
+ <element name="fencedevices" rha:description="This element and its
+     attributes define the fence devices in the cluster. Parameters
+     vary according to the type of fence device. For example, for a
+     power controller used as a fence device, the cluster configuration
+     defines the name of the power controller, its IP address, login,
+     and password.">
+  <zeroOrMore>
+   <element name="fencedevice" rha:description="The fencedevice element
+       and its attributes define each fence device in a
+       cluster. Parameters for each fence device vary according to the
+       type of fence device.">
+     <attribute name="name" rha:description="This is a reference
+         name that you assign to a fence device. It is specific to a
+         cluster configuration file. It is required
+         when configuring a fence method for a node (refer
+         to the method and device elements in the clusternode
+         element)." rha:sample="apc_123">
+      <data type="ID"/>
+     </attribute>
+     <attribute name="agent" rha:description="Specifies a fence agent to
+         be used." rha:sample="fence_apc"/>
+     <optional>
+      <choice>
+       <!-- begin specific fence devices -->
+
+       <!-- begin non-generated device definitions -->
+       <!-- RPS10 -->
+       <group rha:description="RPS10 Serial Switch" >
+        <attribute name="device" rha:description="The device the switch
+            is connected to on the controlling host."
+            rha:sample="/dev/ttys2"/>
+        <attribute name="port" rha:description="The switch outlet
+            number." rha:sample="2"/>
+       </group>
+       <!--FIXME: Determine if the following group should exclude
+       the auth and lanplus attributes. Those attributes apply only to
+       the impilan fence device.-->
+       <!-- Brocade, McData, SANBox2, Bladecenter,bullpap, ipmilan -->
+       <group>
+        <attribute name="ipaddr" rha:description="IP address or the name
+            of the device." rha:sample="rack007"/>
+        <optional>
+        <attribute name="login" rha:description="The login name used to
+            access the device. " rha:sample="admin"/>
+        </optional>
+        <optional>
+        <attribute name="passwd" rha:description="The password used to
+            authenticate the connection to the
+            device." rha:sample="pa$$word"/>
+        </optional>
+        <optional>
+        <attribute name="passwd_script" rha:description="The script that
+            supplies a password for access to the fence device. Using
+            this supersedes the Password parameter." rha:sample=""/>
+        </optional>
+        <optional>
+         <attribute name="auth" rha:description="For IPMI LAN
+             only. Authentication Type: none, password,
+             md2, or md5" rha:sample=""/>
+        </optional>
+        <optional>
+         <attribute name="lanplus" rha:description="For IPMI LAN only.
+             Set value to either True or 1; leave out for false."
+             rha:sample="True"/>
+        </optional>
+       </group>
+       <!-- Vixel -->
+       <group>
+        <optional>
+         <attribute name="ipaddr" rha:description="IP address or the
+             name of the device." rha:sample="10.1.0.1"/>
+        </optional>
+        <optional>
+        <attribute name="passwd" rha:description="The password used to
+            authenticate the connection to the
+            device." rha:sample="pa$$word"/>
+        </optional>
+        <optional>
+         <attribute name="passwd_script" rha:description="The script
+             that supplies a password for access to the
+             fence device. Using this supersedes the Password
+             parameter." rha:sample=""/>
+        </optional>
+       </group>
+       <!-- scsi reservations -->
+       <group>
+        <attribute name="nodename" rha:description="Name of the node to
+            be fenced. Refer to fence_scsi(8) for more
+            information." rha:sample=""/>
+        <attribute name="self" rha:description="" rha:sample=""/>
+       </group>
+       <!-- GNBD -->
+       <group>
+        <attribute name="servers" rha:description="The hostname of each
+            GNBD to disable. For multiple hostnames, separate each
+            hostname with a space." rha:sample=""/>
+       </group>
+       <!-- Egenera -->
+       <!-- FIXME: Note that in the schema web page each is listed as a
+       parameter. Likewise for Conga. In addition, Conga shows Ipan
+       and pserver parameters. Also, in Conga, the esh parameter is
+       an optional ESH path. Presumably those should be attributes in
+       the schema. We need more invormation on this. -->
+       <group>
+        <attribute name="cserver" rha:description="The hostname (and
+            optionally the username in the form of username@hostname)
+            assigned to the device. Refer to the fence_egenera(8) man
+            page for more information." rha:sample=""/>
+       </group>
+       <!-- FIXME: It appears that xCat is no longer supported. Found no
+       fence agents for x Cat in RHEL 5.3. -->
+       <!-- xCAT -->
+       <group>
+        <attribute name="rpowerpath" rha:description="" rha:sample=""/>
+       </group>
+       <!-- end non-generated device definitions -->
+
+       <!-- begin auto-generated device definitions -->
+      <!-- fence_alom -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_apc -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="switch"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_bladecenter -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="identity_file"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_drac5 -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_eps -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <optional>
+          <attribute name="login"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_ilo -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="ssl"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_ldom -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="identity_file"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_lpar -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="partition"/>
+        </optional>
+        <optional>
+          <attribute name="managed"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_virsh -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="identity_file"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_vmware -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="exec"/>
+        </optional>
+        <optional>
+          <attribute name="vmware_type"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="vmware_datacenter"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_wti -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="ipaddr"/>
+        <optional>
+          <attribute name="login"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_xvm -->
+      <group>
+        <optional>
+          <attribute name="debug"/>
+        </optional>
+        <optional>
+          <attribute name="ip_family"/>
+        </optional>
+        <optional>
+          <attribute name="multicast_address"/>
+        </optional>
+        <optional>
+          <attribute name="port"/>
+        </optional>
+        <optional>
+          <attribute name="multicast_ttl"/>
+        </optional>
+        <optional>
+          <attribute name="retrans"/>
+        </optional>
+        <optional>
+          <attribute name="auth"/>
+        </optional>
+        <optional>
+          <attribute name="hash"/>
+        </optional>
+        <optional>
+          <attribute name="key_file"/>
+        </optional>
+        <optional>
+          <attribute name="domain"/>
+        </optional>
+        <optional>
+          <attribute name="use_uuid"/>
+        </optional>
+        <optional>
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="timeout"/>
+        </optional>
+      </group>
+       <!-- end auto-generated device definitions -->
+
+       <group>
+        <optional>
+         <empty/>
+        </optional>
+       </group>
+
+       <!-- end specific fence devices -->
+      </choice>
+     </optional>
+    </element>
+  </zeroOrMore>
+ </element>
+ </optional>
+<!-- end fencedevices block -->
+
+<!-- rm block -->
+ <optional>
+  <element name="rm" rha:description="This element and its attributes
+      define resources (for example an IP address) required to create HA
+      cluster services, the HA cluster services themselves, and failover
+      domains for the HA cluster services.">
+   <optional>
+    <!-- FIXME: The following text needs clarifying. What is meant by
+    "...for all levels less than the selected."? -->
+    <attribute name="log_level" rha:description="An integer 0-7,
+        inclusive, for all levels less than the selected.
+        0, system is unusable, emergency;
+        1, action must be taken immediately;
+        2, critical conditions;
+        3, error conditions;
+        4, warning conditions;
+        5, normal but significant condition;
+        6, informational;
+        7, debug-level messages." rha:sample="6">
+     <data type="integer"/>
+    </attribute>
+   </optional>
+   <optional>
+    <attribute name="status_child_max" rha:description="" rha:sample="">
+     <data type="integer"/>
+    </attribute>
+   </optional>
+   <optional>
+    <attribute name="status_poll_interval" rha:description=""
+      rha:sample="">
+     <data type="integer"/>
+    </attribute>
+   </optional>
+   <optional>
+    <attribute name="transition_throttling" rha:description=""
+      rha:sample="">
+     <data type="integer"/>
+    </attribute>
+   </optional>
+   <optional>
+    <attribute name="central_processing" rha:description=""
+      rha:sample="">
+     <data type="integer"/>
+    </attribute>
+   </optional>
+   <optional>
+    <attribute name="log_facility" rha:description="The facility is one
+       of the following keywords: auth, authpriv, cron, daemon, kern,
+       lpr, mail, news, syslog, user, uucp and local0 through local7"
+       rha:sample="local4">
+     <data type="string"/>
+    </attribute>
+   </optional>
+   <interleave>
+   <optional>
+    <element name="failoverdomains" rha:description="">
+     <zeroOrMore>
+      <element name="failoverdomain" rha:description="Specifies
+        properties of a specific failover domain">
+       <attribute name="name" rha:description="The name of the failover
+         domain." rha:sample="foo"/>
+       <optional>
+        <attribute name="ordered" rha:description="Set value to 1 if
+          the failover domain is ordered; set value to 0 if
+          unordered." rha:default="0" rha:sample="1"/>
+       </optional>
+       <optional>
+        <attribute name="restricted" rha:description="Set value to 1 if
+          the failover domain is restricted; set value to 0 if
+          unrestricted." rha:default="0" rha:sample="1"/>
+       </optional>
+       <optional>
+        <attribute name="nofailback" rha:description="" rha:sample=""/>
+       </optional>
+       <zeroOrMore>
+        <element name="failoverdomainnode" rha:description="A node in
+          a failover domain">
+         <optional>
+          <attribute name="priority" rha:description="A number
+            specifying the priority; lower numbers having higher
+            priority"
+              rha:sample="1"/>
+         </optional>
+         <attribute name="name" rha:description="Name of the node."
+             rha:sample="member2"/>
+        </element>
+       </zeroOrMore>
+      </element>
+     </zeroOrMore>
+    </element>
+   </optional>  <!-- End of failoverdomains block -->
+   <optional>
+    <element name="events" rha:description="">
+     <zeroOrMore>
+      <element name="event" rha:description="">
+       <attribute name="name" rha:description="" rha:sample=""/>
+       <optional>
+        <text/>
+       </optional>
+       <optional>
+        <attribute name="file" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="priority" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="class" rha:description="" rha:sample=""/>
+       </optional>
+       <!-- Service event class attributes -->
+       <optional>
+        <attribute name="service" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="service_state" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="service_owner" rha:description="" rha:sample=""/>
+       </optional>
+       <!-- Node event -->
+       <optional>
+        <attribute name="node" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="node_id" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="node_state" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="node_clean" rha:description="" rha:sample=""/>
+       </optional>
+       <optional>
+        <attribute name="node_local" rha:description="" rha:sample=""/>
+       </optional>
+       <!-- Config event attributes -->
+       <!-- NOT USED -->
+      </element>
+     </zeroOrMore>
+    </element>
+   </optional>  <!-- End of events block -->
+   <optional>
+    <element name="resources" rha:description="">
+     <zeroOrMore>
+      <ref name="CHILDREN"/>
+     </zeroOrMore>
+    </element>
+   </optional>
+   <zeroOrMore>
+    <ref name="SERVICE"/>
+   </zeroOrMore>
+   <zeroOrMore>
+    <ref name="VM"/>
+   </zeroOrMore>
+  </interleave>
+  </element>
+ </optional>
+
+ </interleave>
+</element> <!-- cluster end -->
+</start>
+
+
+<!--Beginning of resource definitions-->
+<!-- Autogenerated.  Paste in to cluster.ng in the 'resources' section -->
+
+  <define name="SERVICE">
+    <element name="service">
+      <!-- Defines a services. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="domain"/>
+        </optional>
+        <optional>
+          <attribute name="autostart"/>
+        </optional>
+        <optional>
+          <attribute name="hardrecovery"/>
+        </optional>
+        <optional>
+          <attribute name="exclusive"/>
+        </optional>
+        <optional>
+          <attribute name="nfslock"/>
+        </optional>
+        <optional>
+          <attribute name="nfs_client_cache"/>
+        </optional>
+        <optional>
+          <attribute name="recovery"/>
+        </optional>
+        <optional>
+          <attribute name="depend"/>
+        </optional>
+        <optional>
+          <attribute name="depend_mode"/>
+        </optional>
+        <optional>
+          <attribute name="max_restarts"/>
+        </optional>
+        <optional>
+          <attribute name="restart_expire_time"/>
+        </optional>
+        <optional>
+          <attribute name="priority"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="IP">
+    <element name="ip">
+      <!-- This is an IP address. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="address"/>
+        <optional>
+          <attribute name="family"/>
+        </optional>
+        <optional>
+          <attribute name="monitor_link"/>
+        </optional>
+        <optional>
+          <attribute name="nfslock"/>
+        </optional>
+        <optional>
+          <attribute name="sleeptime"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="NFSCLIENT">
+    <element name="nfsclient">
+      <!-- Defines an NFS client. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="target"/>
+        <optional>
+          <attribute name="path"/>
+        </optional>
+        <optional>
+          <attribute name="svcname"/>
+        </optional>
+        <optional>
+          <attribute name="fsid"/>
+        </optional>
+        <optional>
+          <attribute name="options"/>
+        </optional>
+        <optional>
+          <attribute name="allow_recover"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+        <optional>
+          <attribute name="use_cache"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="NFSEXPORT">
+    <element name="nfsexport">
+      <!-- This defines an NFS export. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="device"/>
+        </optional>
+        <optional>
+          <attribute name="path"/>
+        </optional>
+        <optional>
+          <attribute name="fsid"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="SCRIPT">
+    <element name="script">
+      <!-- LSB-compliant init script as a clustered resource. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="file"/>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="NETFS">
+    <element name="netfs">
+      <!-- Defines an NFS/CIFS file system mount. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="mountpoint"/>
+        <attribute name="host"/>
+        <attribute name="export"/>
+        <optional>
+          <attribute name="fstype"/>
+        </optional>
+        <optional>
+          <attribute name="no_unmount"/>
+        </optional>
+        <optional>
+          <attribute name="force_unmount"/>
+        </optional>
+        <optional>
+          <attribute name="options"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="CLUSTERFS">
+    <element name="clusterfs">
+      <!-- Defines a cluster file system mount. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="mountpoint"/>
+        <attribute name="device"/>
+        <optional>
+          <attribute name="fstype"/>
+        </optional>
+        <optional>
+          <attribute name="force_unmount"/>
+        </optional>
+        <optional>
+          <attribute name="options"/>
+        </optional>
+        <optional>
+          <attribute name="self_fence"/>
+        </optional>
+        <optional>
+          <attribute name="fsid"/>
+        </optional>
+        <optional>
+          <attribute name="nfslock"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="SMB">
+    <element name="smb">
+      <!-- Dynamic smbd/nmbd resource agent -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="workgroup"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="APACHE">
+    <element name="apache">
+      <!-- Defines an Apache web server -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="server_root"/>
+        </optional>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="httpd_options"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="OPENLDAP">
+    <element name="openldap">
+      <!-- Defines an Open LDAP server -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="url_list"/>
+        </optional>
+        <optional>
+          <attribute name="slapd_options"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="SAMBA">
+    <element name="samba">
+      <!-- Dynamic smbd/nmbd resource agent -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="smbd_options"/>
+        </optional>
+        <optional>
+          <attribute name="nmbd_options"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="MYSQL">
+    <element name="mysql">
+      <!-- Defines a MySQL database server -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="listen_address"/>
+        </optional>
+        <optional>
+          <attribute name="mysqld_options"/>
+        </optional>
+        <optional>
+          <attribute name="startup_wait"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="POSTGRES-8">
+    <element name="postgres-8">
+      <!-- Defines a PostgreSQL server -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="postmaster_user"/>
+        </optional>
+        <optional>
+          <attribute name="postmaster_options"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="TOMCAT-5">
+    <element name="tomcat-5">
+      <!-- Defines a Tomcat server -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="tomcat_user"/>
+        </optional>
+        <optional>
+          <attribute name="catalina_options"/>
+        </optional>
+        <optional>
+          <attribute name="catalina_base"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="LVM">
+    <element name="lvm">
+      <!-- LVM Failover script -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="vg_name"/>
+        <optional>
+          <attribute name="lv_name"/>
+        </optional>
+        <optional>
+          <attribute name="self_fence"/>
+        </optional>
+        <optional>
+          <attribute name="nfslock"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="VM">
+    <element name="vm">
+      <!-- Defines a Virtual Machine -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="domain"/>
+        </optional>
+        <optional>
+          <attribute name="autostart"/>
+        </optional>
+        <optional>
+          <attribute name="hardrecovery"/>
+        </optional>
+        <optional>
+          <attribute name="exclusive"/>
+        </optional>
+        <optional>
+          <attribute name="recovery"/>
+        </optional>
+        <optional>
+          <attribute name="migration_mapping"/>
+        </optional>
+        <optional>
+          <attribute name="use_virsh"/>
+        </optional>
+        <optional>
+          <attribute name="xmlfile"/>
+        </optional>
+        <optional>
+          <attribute name="migrate"/>
+        </optional>
+        <optional>
+          <attribute name="snapshot"/>
+        </optional>
+        <optional>
+          <attribute name="depend"/>
+        </optional>
+        <optional>
+          <attribute name="depend_mode"/>
+        </optional>
+        <optional>
+          <attribute name="max_restarts"/>
+        </optional>
+        <optional>
+          <attribute name="restart_expire_time"/>
+        </optional>
+        <optional>
+          <attribute name="hypervisor"/>
+        </optional>
+        <optional>
+          <attribute name="hypervisor_uri"/>
+        </optional>
+        <optional>
+          <attribute name="migration_uri"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="SAPINSTANCE">
+    <element name="SAPInstance">
+      <!-- SAP instance resource agent -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="InstanceName"/>
+        <optional>
+          <attribute name="DIR_EXECUTABLE"/>
+        </optional>
+        <optional>
+          <attribute name="DIR_PROFILE"/>
+        </optional>
+        <optional>
+          <attribute name="START_PROFILE"/>
+        </optional>
+        <optional>
+          <attribute name="START_WAITTIME"/>
+        </optional>
+        <optional>
+          <attribute name="AUTOMATIC_RECOVER"/>
+        </optional>
+        <optional>
+          <attribute name="PRE_START_USEREXIT"/>
+        </optional>
+        <optional>
+          <attribute name="POST_START_USEREXIT"/>
+        </optional>
+        <optional>
+          <attribute name="PRE_STOP_USEREXIT"/>
+        </optional>
+        <optional>
+          <attribute name="POST_STOP_USEREXIT"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="SAPDATABASE">
+    <element name="SAPDatabase">
+      <!-- SAP database resource agent -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="SID"/>
+        <optional>
+          <attribute name="DIR_EXECUTABLE"/>
+        </optional>
+        <attribute name="DBTYPE"/>
+        <optional>
+          <attribute name="NETSERVICENAME"/>
+        </optional>
+        <optional>
+          <attribute name="DBJ2EE_ONLY"/>
+        </optional>
+        <optional>
+          <attribute name="JAVA_HOME"/>
+        </optional>
+        <optional>
+          <attribute name="STRICT_MONITORING"/>
+        </optional>
+        <optional>
+          <attribute name="AUTOMATIC_RECOVER"/>
+        </optional>
+        <optional>
+          <attribute name="DIR_BOOTSTRAP"/>
+        </optional>
+        <optional>
+          <attribute name="DIR_SECSTORE"/>
+        </optional>
+        <optional>
+          <attribute name="DB_JARS"/>
+        </optional>
+        <optional>
+          <attribute name="PRE_START_USEREXIT"/>
+        </optional>
+        <optional>
+          <attribute name="POST_START_USEREXIT"/>
+        </optional>
+        <optional>
+          <attribute name="PRE_STOP_USEREXIT"/>
+        </optional>
+        <optional>
+          <attribute name="POST_STOP_USEREXIT"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="NAMED">
+    <element name="named">
+      <!-- Defines an instance of named server -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="config_file"/>
+        </optional>
+        <optional>
+          <attribute name="named_sdb"/>
+        </optional>
+        <optional>
+          <attribute name="named_working_dir"/>
+        </optional>
+        <optional>
+          <attribute name="named_options"/>
+        </optional>
+        <optional>
+          <attribute name="shutdown_wait"/>
+        </optional>
+        <optional>
+          <attribute name="service_name"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="ASEHAAGENT">
+    <element name="ASEHAagent">
+      <!-- Sybase ASE Failover Instance -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="sybase_home"/>
+        <attribute name="sybase_ase"/>
+        <attribute name="sybase_ocs"/>
+        <attribute name="server_name"/>
+        <attribute name="login_file"/>
+        <attribute name="interfaces_file"/>
+        <attribute name="sybase_user"/>
+        <attribute name="shutdown_timeout"/>
+        <attribute name="start_timeout"/>
+        <attribute name="deep_probe_timeout"/>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="FS">
+    <element name="fs">
+      <!-- Defines a file system mount. -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <attribute name="mountpoint"/>
+        <attribute name="device"/>
+        <optional>
+          <attribute name="fstype"/>
+        </optional>
+        <optional>
+          <attribute name="force_unmount"/>
+        </optional>
+        <optional>
+          <attribute name="quick_status"/>
+        </optional>
+        <optional>
+          <attribute name="self_fence"/>
+        </optional>
+        <optional>
+          <attribute name="nfslock"/>
+        </optional>
+        <optional>
+          <attribute name="fsid"/>
+        </optional>
+        <optional>
+          <attribute name="force_fsck"/>
+        </optional>
+        <optional>
+          <attribute name="options"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+
+  <define name="ORACLEDB">
+    <element name="oracledb">
+      <!-- Oracle 10g Failover Instance -->
+      <choice>
+      <group>
+        <!-- rgmanager specific stuff -->
+        <attribute name="ref"/>
+      </group>
+      <group>
+        <attribute name="name"/>
+        <optional>
+          <attribute name="listener_name"/>
+        </optional>
+        <attribute name="user"/>
+        <attribute name="home"/>
+        <optional>
+          <attribute name="type"/>
+        </optional>
+        <optional>
+          <attribute name="vhost"/>
+        </optional>
+      </group>
+      </choice>
+      <optional>
+        <attribute name="__independent_subtree"/>
+      </optional>
+      <optional>
+        <attribute name="__enforce_timeouts"/>
+      </optional>
+      <optional>
+        <ref name="CHILDREN"/>
+      </optional>
+    </element>
+  </define>
+
+  <define name="CHILD">
+  <!-- for recursion to work properly, CHILD may be referenced at CHILDREN only -->
+    <zeroOrMore>
+     <choice>
+
+        <ref name="SERVICE"/>
+        <ref name="IP"/>
+        <ref name="NFSCLIENT"/>
+        <ref name="NFSEXPORT"/>
+        <ref name="SCRIPT"/>
+        <ref name="NETFS"/>
+        <ref name="CLUSTERFS"/>
+        <ref name="SMB"/>
+        <ref name="APACHE"/>
+        <ref name="OPENLDAP"/>
+        <ref name="SAMBA"/>
+        <ref name="MYSQL"/>
+        <ref name="POSTGRES-8"/>
+        <ref name="TOMCAT-5"/>
+        <ref name="LVM"/>
+        <ref name="VM"/>
+        <ref name="SAPINSTANCE"/>
+        <ref name="SAPDATABASE"/>
+        <ref name="NAMED"/>
+        <ref name="ASEHAAGENT"/>
+        <ref name="FS"/>
+        <ref name="ORACLEDB"/>
+      <ref name="RESOURCEACTION"/>
+     </choice>
+    </zeroOrMore>
+  </define>
+
+  <define name="CHILDREN">
+   <zeroOrMore>
+    <choice>
+     <ref name="CHILD"/>
+    </choice>
+   </zeroOrMore>
+  </define>
+
+  <define name="RESOURCEACTION">
+   <zeroOrMore>
+    <element name="action">
+     <attribute name="name"/>
+     <optional>
+      <attribute name="depth"/>
+     </optional>
+     <optional>
+      <attribute name="interval"/>
+     </optional>
+     <optional>
+      <attribute name="timeout"/>
+     </optional>
+    </element>
+   </zeroOrMore>
+  </define>
+
+<!-- End autogenerated resources definitions -->
+<!--End of resource definitions-->
+
+<!-- begin node fence definitions -->
+
+ <define name="FENCE">
+  <element name="fence" rha:description="The fence element specifies how
+      a node is fenced. Its elements and attributes identify fence device
+      (or devices) to use and the parameters specific to each fence device
+      (for example, IP address and port number in an APC fence device)">
+   <zeroOrMore>
+    <element name="method" rha:description="Typically, there is a single
+        method used to fence each node (the name  given to the method is
+        not significant). A method refers to a specific device listed in
+        the fencedevices section (a separate section from the clusternode
+        section), and then lists any node-specific parameters related
+        to using the device.">
+     <attribute name="name" rha:description="" rha:sample="apc123"/>
+     <zeroOrMore>
+       <ref name="DEVICE"/>
+     </zeroOrMore>
+    </element>
+   </zeroOrMore>
+  </element>
+ </define>
+
+ <define name="UNFENCE">
+  <element name="unfence" rha:description="">
+   <zeroOrMore>
+    <ref name="DEVICE"/>
+   </zeroOrMore>
+  </element>
+ </define>
+
+ <define name="DEVICE">
+  <element name="device" rha:description="">
+   <attribute name="name" rha:description="" rha:sample="">
+    <data type="IDREF"/>
+   </attribute>
+   <choice>
+      <!-- begin node fence specific devices -->
+
+      <!-- begin auto-generated device definitions -->
+      <!-- fence_alom -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <attribute name="login"/>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_apc -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="switch"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_bladecenter -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="identity_file"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_drac5 -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_eps -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="login"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_ilo -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="ssl"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_ldom -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="identity_file"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_lpar -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="partition"/>
+        </optional>
+        <optional>
+          <attribute name="managed"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_virsh -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="identity_file"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_vmware -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="exec"/>
+        </optional>
+        <optional>
+          <attribute name="vmware_type"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <optional>
+          <attribute name="vmware_datacenter"/>
+        </optional>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_wti -->
+      <group>
+        <optional>
+          <attribute name="action"/>
+        </optional>
+        <optional> <!-- lhh - compat -->
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="login"/>
+        </optional>
+        <optional>
+          <attribute name="passwd"/>
+        </optional>
+        <optional>
+          <attribute name="passwd_script"/>
+        </optional>
+        <optional>
+          <attribute name="secure"/>
+        </optional>
+        <attribute name="port"/>
+        <optional>
+          <attribute name="verbose"/>
+        </optional>
+      </group>
+
+      <!-- fence_xvm -->
+      <group>
+        <optional>
+          <attribute name="debug"/>
+        </optional>
+        <optional>
+          <attribute name="ip_family"/>
+        </optional>
+        <optional>
+          <attribute name="multicast_address"/>
+        </optional>
+        <optional>
+          <attribute name="port"/>
+        </optional>
+        <optional>
+          <attribute name="multicast_ttl"/>
+        </optional>
+        <optional>
+          <attribute name="retrans"/>
+        </optional>
+        <optional>
+          <attribute name="auth"/>
+        </optional>
+        <optional>
+          <attribute name="hash"/>
+        </optional>
+        <optional>
+          <attribute name="key_file"/>
+        </optional>
+        <optional>
+          <attribute name="domain"/>
+        </optional>
+        <optional>
+          <attribute name="use_uuid"/>
+        </optional>
+        <optional>
+          <attribute name="option"/>
+        </optional>
+        <optional>
+          <attribute name="timeout"/>
+        </optional>
+      </group>
+      <!-- end auto-generated device definitions -->
+
+      <!-- begin non-generated device definitions -->
+        <!-- Brocade, Vixel, McData, SANBox2 -->
+        <group>
+         <attribute name="port"/>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+        <!-- BladeCenter -->
+        <group>
+         <attribute name="blade"/>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+        <!-- xCAT, manual -->
+        <group>
+         <attribute name="nodename"/>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+	<!-- GNBD -->
+        <group>
+         <attribute name="nodename"/>
+	 <optional>
+	  <attribute name="ipaddr"/>
+	 </optional>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+        <!-- bullpap -->
+        <group>
+         <attribute name="domain"/>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+        <!-- Egenera -->
+        <group>
+         <attribute name="lpan"/>
+         <attribute name="pserver"/>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+        <!-- ILO, ipmilan -->
+        <group>
+         <optional>
+          <empty/>
+         </optional>
+         <optional>
+          <attribute name="lanplus"/>
+         </optional>
+         <optional>
+          <attribute name="option"/>
+         </optional>
+        </group>
+        <!-- scsi reservations -->
+        <group>
+         <optional>
+          <attribute name="node"/>
+         </optional>
+        </group>
+        <!-- xvm -->
+        <group>
+         <optional>
+          <attribute name="domain"/>
+         </optional>
+        </group>
+      <!-- end non-generated device definitions -->
+
+   <!-- end node fence specific devices -->
+   </choice>
+  </element>
+ </define>
+<!-- end node fence definitions -->
+
+</grammar>
diff --git a/make/install.mk b/make/install.mk
index f493f07..5bd30d6 100644
--- a/make/install.mk
+++ b/make/install.mk
@@ -78,3 +78,7 @@ ifdef PKGCONF
 	install -d ${pkgconfigdir}
 	install -m644 ${PKGCONF} ${pkgconfigdir}
 endif
+ifdef SHAREDIRT
+	install -d ${sharedir}
+	install -m644 ${SHAREDIRT} ${sharedir}
+endif
diff --git a/make/uninstall.mk b/make/uninstall.mk
index 49e47bb..396e61f 100644
--- a/make/uninstall.mk
+++ b/make/uninstall.mk
@@ -47,3 +47,6 @@ endif
 ifdef PKGCONF
 	${UNINSTALL} ${PKGCONF} ${pkgconfigdir}
 endif
+ifdef SHAREDIRT
+	${UNINSTALL} ${SHAREDIRT} ${sharedir}
+endif


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-09-03 12:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-09-03 12:34 cluster: STABLE3 - config: preliminary support for config validation Fabio M. Di Nitto

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).