From 2b7322113eec6a2d789d47d47049ae90c7a46625 Mon Sep 17 00:00:00 2001
From: Peter Romancik <promanci@redhat.com>
Date: Fri, 2 Feb 2024 10:50:11 +0100
Subject: [PATCH] update crm_mon schemas for tests

---
 pcs_test/Makefile.am                          |  11 +-
 pcs_test/resources/crm_mon.minimal.xml        |   4 +-
 .../resources/pcmk_api_rng/api-result.rng     |   2 +-
 .../resources/pcmk_api_rng/crm_mon-2.29.rng   | 213 ++++++++++++
 .../resources/pcmk_api_rng/crm_mon-2.4.rng    | 311 ------------------
 .../resources/pcmk_api_rng/failure-2.8.rng    |  33 ++
 ...nce-event-2.0.rng => fence-event-2.15.rng} |   3 +
 .../resources/pcmk_api_rng/node-attrs-2.8.rng |  24 ++
 .../pcmk_api_rng/node-history-2.12.rng        |  70 ++++
 .../resources/pcmk_api_rng/nodes-2.29.rng     |  54 +++
 .../pcmk_api_rng/pacemakerd-health-2.25.rng   |  20 ++
 .../{resources-2.4.rng => resources-2.29.rng} |  45 ++-
 12 files changed, 472 insertions(+), 318 deletions(-)
 create mode 100644 pcs_test/resources/pcmk_api_rng/crm_mon-2.29.rng
 delete mode 100644 pcs_test/resources/pcmk_api_rng/crm_mon-2.4.rng
 create mode 100644 pcs_test/resources/pcmk_api_rng/failure-2.8.rng
 rename pcs_test/resources/pcmk_api_rng/{fence-event-2.0.rng => fence-event-2.15.rng} (91%)
 create mode 100644 pcs_test/resources/pcmk_api_rng/node-attrs-2.8.rng
 create mode 100644 pcs_test/resources/pcmk_api_rng/node-history-2.12.rng
 create mode 100644 pcs_test/resources/pcmk_api_rng/nodes-2.29.rng
 create mode 100644 pcs_test/resources/pcmk_api_rng/pacemakerd-health-2.25.rng
 rename pcs_test/resources/pcmk_api_rng/{resources-2.4.rng => resources-2.29.rng} (76%)

diff --git a/pcs_test/Makefile.am b/pcs_test/Makefile.am
index 94e4c07a..32ac5eee 100644
--- a/pcs_test/Makefile.am
+++ b/pcs_test/Makefile.am
@@ -35,10 +35,15 @@ EXTRA_DIST		= \
 			  resources/fenced_metadata.xml \
 			  resources/schedulerd_metadata.xml \
 			  resources/pcmk_api_rng/api-result.rng \
-			  resources/pcmk_api_rng/crm_mon-2.4.rng \
+			  resources/pcmk_api_rng/crm_mon-2.29.rng \
 			  resources/pcmk_api_rng/digests-2.9.rng \
-			  resources/pcmk_api_rng/fence-event-2.0.rng \
-			  resources/pcmk_api_rng/resources-2.4.rng \
+			  resources/pcmk_api_rng/failure-2.8.rng \
+			  resources/pcmk_api_rng/fence-event-2.15.rng \
+			  resources/pcmk_api_rng/node-attrs-2.8.rng \
+			  resources/pcmk_api_rng/node-history-2.12.rng \
+			  resources/pcmk_api_rng/nodes-2.29.rng \
+			  resources/pcmk_api_rng/pacemakerd-health-2.25.rng \
+			  resources/pcmk_api_rng/resources-2.29.rng \
 			  resources/pcmk_api_rng/status-2.0.rng \
 			  resources/resource_agent_ocf_heartbeat_dummy_insane_action.xml \
 			  resources/resource_agent_ocf_heartbeat_dummy_utf8.xml \
diff --git a/pcs_test/resources/crm_mon.minimal.xml b/pcs_test/resources/crm_mon.minimal.xml
index 2c3473c0..df02fe3e 100644
--- a/pcs_test/resources/crm_mon.minimal.xml
+++ b/pcs_test/resources/crm_mon.minimal.xml
@@ -1,4 +1,4 @@
-<pacemaker-result api-version="2.3" request="crm_mon --output-as xml">
+<pacemaker-result api-version="2.30" request="crm_mon --output-as xml">
   <summary>
     <stack type="corosync" />
     <current_dc present="false" />
@@ -6,7 +6,7 @@
     <last_change time="Wed Nov  6 10:42:54 2019" user="hacluster" client="crmd" origin="node1" />
     <nodes_configured number="0" />
     <resources_configured number="0" disabled="0" blocked="0" />
-    <cluster_options stonith-enabled="true" symmetric-cluster="true" no-quorum-policy="stop" maintenance-mode="false" stop-all-resources="false" />
+    <cluster_options stonith-enabled="true" symmetric-cluster="true" no-quorum-policy="stop" maintenance-mode="false" stop-all-resources="false" stonith-timeout-ms="60000" priority-fencing-delay-ms="0"/>
   </summary>
   <nodes />
   <resources />
diff --git a/pcs_test/resources/pcmk_api_rng/api-result.rng b/pcs_test/resources/pcmk_api_rng/api-result.rng
index fcd812ac..e01cfdcd 100644
--- a/pcs_test/resources/pcmk_api_rng/api-result.rng
+++ b/pcs_test/resources/pcmk_api_rng/api-result.rng
@@ -6,7 +6,7 @@
       <attribute name="request"> <text /> </attribute>
       <optional>
         <choice>
-          <externalRef href="crm_mon-2.4.rng"/>
+          <externalRef href="crm_mon-2.29.rng"/>
           <externalRef href="digests-2.9.rng"/>
         </choice>
       </optional>
diff --git a/pcs_test/resources/pcmk_api_rng/crm_mon-2.29.rng b/pcs_test/resources/pcmk_api_rng/crm_mon-2.29.rng
new file mode 100644
index 00000000..9cc554cf
--- /dev/null
+++ b/pcs_test/resources/pcmk_api_rng/crm_mon-2.29.rng
@@ -0,0 +1,213 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <start>
+        <ref name="element-crm-mon"/>
+    </start>
+
+    <define name="element-crm-mon">
+        <choice>
+            <ref name="element-crm-mon-disconnected" />
+            <group>
+                <optional>
+                    <externalRef href="pacemakerd-health-2.25.rng" />
+                </optional>
+                <optional>
+                    <ref name="element-summary" />
+                </optional>
+                <optional>
+                    <ref name="nodes-list" />
+                </optional>
+                <optional>
+                    <ref name="resources-list" />
+                </optional>
+                <optional>
+                    <ref name="node-attributes-list" />
+                </optional>
+                <optional>
+                    <externalRef href="node-history-2.12.rng"/>
+                </optional>
+                <optional>
+                    <ref name="failures-list" />
+                </optional>
+                <optional>
+                    <ref name="fence-event-list" />
+                </optional>
+                <optional>
+                    <ref name="tickets-list" />
+                </optional>
+                <optional>
+                    <ref name="bans-list" />
+                </optional>
+            </group>
+        </choice>
+    </define>
+
+    <define name="element-crm-mon-disconnected">
+        <element name="crm-mon-disconnected">
+            <optional>
+                <attribute name="description"> <text /> </attribute>
+            </optional>
+            <optional>
+                <attribute name="pacemakerd-state"> <text /> </attribute>
+            </optional>
+        </element>
+    </define>
+
+    <define name="element-summary">
+        <element name="summary">
+            <optional>
+                <element name="stack">
+                    <attribute name="type"> <text /> </attribute>
+                    <optional>
+                        <attribute name="pacemakerd-state">
+                            <text />
+                        </attribute>
+                    </optional>
+                </element>
+            </optional>
+            <optional>
+                <element name="current_dc">
+                    <attribute name="present"> <data type="boolean" /> </attribute>
+                    <optional>
+                        <group>
+                            <attribute name="version"> <text /> </attribute>
+                            <attribute name="name"> <text /> </attribute>
+                            <attribute name="id"> <text /> </attribute>
+                            <attribute name="with_quorum"> <data type="boolean" /> </attribute>
+                        </group>
+                    </optional>
+                    <optional>
+                        <attribute name="mixed_version"> <data type="boolean" /> </attribute>
+                    </optional>
+                </element>
+            </optional>
+            <optional>
+                <element name="last_update">
+                    <attribute name="time"> <text /> </attribute>
+                    <optional>
+                        <attribute name="origin"> <text /> </attribute>
+                    </optional>
+                </element>
+                <element name="last_change">
+                    <attribute name="time"> <text /> </attribute>
+                    <attribute name="user"> <text /> </attribute>
+                    <attribute name="client"> <text /> </attribute>
+                    <attribute name="origin"> <text /> </attribute>
+                </element>
+            </optional>
+            <optional>
+                <element name="nodes_configured">
+                    <attribute name="number"> <data type="nonNegativeInteger" /> </attribute>
+                </element>
+                <element name="resources_configured">
+                    <attribute name="number"> <data type="nonNegativeInteger" /> </attribute>
+                    <attribute name="disabled"> <data type="nonNegativeInteger" /> </attribute>
+                    <attribute name="blocked"> <data type="nonNegativeInteger" /> </attribute>
+                </element>
+            </optional>
+            <optional>
+                <element name="cluster_options">
+                    <attribute name="stonith-enabled"> <data type="boolean" /> </attribute>
+                    <attribute name="symmetric-cluster"> <data type="boolean" /> </attribute>
+                    <attribute name="no-quorum-policy"> <text /> </attribute>
+                    <attribute name="maintenance-mode"> <data type="boolean" /> </attribute>
+                    <attribute name="stop-all-resources"> <data type="boolean" /> </attribute>
+                    <attribute name="stonith-timeout-ms"> <data type="integer" /> </attribute>
+                    <attribute name="priority-fencing-delay-ms"> <data type="integer" /> </attribute>
+                </element>
+            </optional>
+        </element>
+    </define>
+
+    <define name="resources-list">
+        <element name="resources">
+            <zeroOrMore>
+                <externalRef href="resources-2.29.rng" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="nodes-list">
+        <element name="nodes">
+            <zeroOrMore>
+                <externalRef href="nodes-2.29.rng" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="node-attributes-list">
+        <element name="node_attributes">
+            <zeroOrMore>
+                <externalRef href="node-attrs-2.8.rng" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="failures-list">
+        <element name="failures">
+            <zeroOrMore>
+                <externalRef href="failure-2.8.rng" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="fence-event-list">
+        <element name="fence_history">
+            <optional>
+                <attribute name="status"> <data type="integer" /> </attribute>
+            </optional>
+            <zeroOrMore>
+                <externalRef href="fence-event-2.15.rng" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="tickets-list">
+        <element name="tickets">
+            <zeroOrMore>
+                <ref name="element-ticket" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="bans-list">
+        <element name="bans">
+            <zeroOrMore>
+                <ref name="element-ban" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="element-ticket">
+        <element name="ticket">
+            <attribute name="id"> <text /> </attribute>
+            <attribute name="status">
+                <choice>
+                    <value>granted</value>
+                    <value>revoked</value>
+                </choice>
+            </attribute>
+            <attribute name="standby"> <data type="boolean" /> </attribute>
+            <optional>
+                <attribute name="last-granted"> <text /> </attribute>
+            </optional>
+        </element>
+    </define>
+
+    <define name="element-ban">
+        <element name="ban">
+            <attribute name="id"> <text /> </attribute>
+            <attribute name="resource"> <text /> </attribute>
+            <attribute name="node"> <text /> </attribute>
+            <attribute name="weight"> <data type="integer" /> </attribute>
+            <attribute name="promoted-only"> <data type="boolean" /> </attribute>
+            <!-- DEPRECATED: master_only is a duplicate of promoted-only that is
+                 provided solely for API backward compatibility. It will be
+                 removed in a future release. Check promoted-only instead.
+              -->
+            <attribute name="master_only"> <data type="boolean" /> </attribute>
+        </element>
+    </define>
+</grammar>
diff --git a/pcs_test/resources/pcmk_api_rng/crm_mon-2.4.rng b/pcs_test/resources/pcmk_api_rng/crm_mon-2.4.rng
deleted file mode 100644
index 88973a4e..00000000
--- a/pcs_test/resources/pcmk_api_rng/crm_mon-2.4.rng
+++ /dev/null
@@ -1,311 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<grammar xmlns="http://relaxng.org/ns/structure/1.0"
-         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
-
-    <start>
-        <ref name="element-crm-mon"/>
-    </start>
-
-    <define name="element-crm-mon">
-        <optional>
-            <ref name="element-summary" />
-        </optional>
-        <optional>
-            <ref name="nodes-list" />
-        </optional>
-        <optional>
-            <ref name="resources-list" />
-        </optional>
-        <optional>
-            <ref name="node-attributes-list" />
-        </optional>
-        <optional>
-            <ref name="node-history-list" />
-        </optional>
-        <optional>
-            <ref name="failures-list" />
-        </optional>
-        <optional>
-            <ref name="fence-event-list" />
-        </optional>
-        <optional>
-            <ref name="tickets-list" />
-        </optional>
-        <optional>
-            <ref name="bans-list" />
-        </optional>
-    </define>
-
-    <define name="element-summary">
-        <element name="summary">
-            <optional>
-                <element name="stack">
-                    <attribute name="type"> <text /> </attribute>
-                </element>
-            </optional>
-            <optional>
-                <element name="current_dc">
-                    <attribute name="present"> <data type="boolean" /> </attribute>
-                    <optional>
-                        <group>
-                            <attribute name="version"> <text /> </attribute>
-                            <attribute name="name"> <text /> </attribute>
-                            <attribute name="id"> <text /> </attribute>
-                            <attribute name="with_quorum"> <data type="boolean" /> </attribute>
-                        </group>
-                    </optional>
-                </element>
-            </optional>
-            <optional>
-                <element name="last_update">
-                    <attribute name="time"> <text /> </attribute>
-                </element>
-                <element name="last_change">
-                    <attribute name="time"> <text /> </attribute>
-                    <attribute name="user"> <text /> </attribute>
-                    <attribute name="client"> <text /> </attribute>
-                    <attribute name="origin"> <text /> </attribute>
-                </element>
-            </optional>
-            <optional>
-                <element name="nodes_configured">
-                    <attribute name="number"> <data type="nonNegativeInteger" /> </attribute>
-                </element>
-                <element name="resources_configured">
-                    <attribute name="number"> <data type="nonNegativeInteger" /> </attribute>
-                    <attribute name="disabled"> <data type="nonNegativeInteger" /> </attribute>
-                    <attribute name="blocked"> <data type="nonNegativeInteger" /> </attribute>
-                </element>
-            </optional>
-            <optional>
-                <element name="cluster_options">
-                    <attribute name="stonith-enabled"> <data type="boolean" /> </attribute>
-                    <attribute name="symmetric-cluster"> <data type="boolean" /> </attribute>
-                    <attribute name="no-quorum-policy"> <text /> </attribute>
-                    <attribute name="maintenance-mode"> <data type="boolean" /> </attribute>
-                    <attribute name="stop-all-resources"> <data type="boolean" /> </attribute>
-                </element>
-            </optional>
-        </element>
-    </define>
-
-    <define name="resources-list">
-        <element name="resources">
-            <zeroOrMore>
-                <externalRef href="resources-2.4.rng" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="nodes-list">
-        <element name="nodes">
-            <zeroOrMore>
-                <ref name="element-full-node" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="node-attributes-list">
-        <element name="node_attributes">
-            <zeroOrMore>
-                <ref name="element-node-with-attributes" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="node-history-list">
-        <element name="node_history">
-            <zeroOrMore>
-                <ref name="element-node-history" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="failures-list">
-        <element name="failures">
-            <zeroOrMore>
-                <ref name="element-failure" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="fence-event-list">
-        <element name="fence_history">
-            <optional>
-                <attribute name="status"> <data type="integer" /> </attribute>
-            </optional>
-            <zeroOrMore>
-                <externalRef href="fence-event-2.0.rng" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="tickets-list">
-        <element name="tickets">
-            <zeroOrMore>
-                <ref name="element-ticket" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="bans-list">
-        <element name="bans">
-            <zeroOrMore>
-                <ref name="element-ban" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="element-full-node">
-        <element name="node">
-            <attribute name="name"> <text/> </attribute>
-            <attribute name="id"> <text/> </attribute>
-            <attribute name="online"> <data type="boolean" /> </attribute>
-            <attribute name="standby"> <data type="boolean" /> </attribute>
-            <attribute name="standby_onfail"> <data type="boolean" /> </attribute>
-            <attribute name="maintenance"> <data type="boolean" /> </attribute>
-            <attribute name="pending"> <data type="boolean" /> </attribute>
-            <attribute name="unclean"> <data type="boolean" /> </attribute>
-            <attribute name="shutdown"> <data type="boolean" /> </attribute>
-            <attribute name="expected_up"> <data type="boolean" /> </attribute>
-            <attribute name="is_dc"> <data type="boolean" /> </attribute>
-            <attribute name="resources_running"> <data type="nonNegativeInteger" /> </attribute>
-            <attribute name="type">
-                <choice>
-                    <value>unknown</value>
-                    <value>member</value>
-                    <value>remote</value>
-                    <value>ping</value>
-                </choice>
-            </attribute>
-            <optional>
-                <!-- for virtualized pacemaker_remote nodes, crm_mon 1.1.13 uses
-                     "container_id" while later versions use "id_as_resource" -->
-                <choice>
-                    <attribute name="container_id"> <text/> </attribute>
-                    <attribute name="id_as_resource"> <text/> </attribute>
-                </choice>
-            </optional>
-            <externalRef href="resources-2.4.rng" />
-        </element>
-    </define>
-
-    <define name="element-node-with-attributes">
-        <element name="node">
-            <attribute name="name"> <text /> </attribute>
-            <zeroOrMore>
-                <element name="attribute">
-                    <attribute name="name"> <text /> </attribute>
-                    <attribute name="value"> <text /> </attribute>
-                    <optional>
-                        <attribute name="expected"> <data type="nonNegativeInteger" /> </attribute>
-                    </optional>
-                </element>
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="element-node-history">
-        <element name="node">
-            <attribute name="name"> <text /> </attribute>
-            <zeroOrMore>
-                <ref name="element-resource-history" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="element-resource-history">
-        <element name="resource_history">
-            <attribute name="id"> <text /> </attribute>
-            <attribute name="orphan"> <data type="boolean" /> </attribute>
-            <optional>
-                <group>
-                    <attribute name="migration-threshold"> <data type="nonNegativeInteger" /> </attribute>
-                    <optional>
-                        <attribute name="fail-count"> <text /> </attribute>
-                    </optional>
-                    <optional>
-                        <attribute name="last-failure"> <text /> </attribute>
-                    </optional>
-                </group>
-            </optional>
-            <zeroOrMore>
-                <ref name="element-operation-history" />
-            </zeroOrMore>
-        </element>
-    </define>
-
-    <define name="element-operation-history">
-        <element name="operation_history">
-            <attribute name="call"> <text /> </attribute>
-            <attribute name="task"> <text /> </attribute>
-            <optional>
-                <attribute name="interval"> <text /> </attribute>
-            </optional>
-            <optional>
-                <attribute name="last-rc-change"> <text /> </attribute>
-            </optional>
-            <optional>
-                <attribute name="last-run"> <text /> </attribute>
-            </optional>
-            <optional>
-                <attribute name="exec-time"> <text /> </attribute>
-            </optional>
-            <optional>
-                <attribute name="queue-time"> <text /> </attribute>
-            </optional>
-            <attribute name="rc"> <data type="integer" /> </attribute>
-            <attribute name="rc_text"> <text /> </attribute>
-        </element>
-    </define>
-
-    <define name="element-failure">
-        <element name="failure">
-            <choice>
-                <attribute name="op_key"> <text/> </attribute>
-                <attribute name="id"> <text/> </attribute>
-            </choice>
-            <attribute name="node"> <text /> </attribute>
-            <attribute name="exitstatus"> <text /> </attribute>
-            <attribute name="exitreason"> <text /> </attribute>
-            <attribute name="exitcode"> <data type="nonNegativeInteger" /> </attribute>
-            <attribute name="call"> <data type="nonNegativeInteger" /> </attribute>
-            <attribute name="status"> <text /> </attribute>
-            <optional>
-                <group>
-                    <attribute name="last-rc-change"> <text /> </attribute>
-                    <attribute name="queued"> <data type="nonNegativeInteger" /> </attribute>
-                    <attribute name="exec"> <data type="nonNegativeInteger" /> </attribute>
-                    <attribute name="interval"> <data type="nonNegativeInteger" /> </attribute>
-                    <attribute name="task"> <text /> </attribute>
-                </group>
-            </optional>
-        </element>
-    </define>
-
-    <define name="element-ticket">
-        <element name="ticket">
-            <attribute name="id"> <text /> </attribute>
-            <attribute name="status">
-                <choice>
-                    <value>granted</value>
-                    <value>revoked</value>
-                </choice>
-            </attribute>
-            <attribute name="standby"> <data type="boolean" /> </attribute>
-            <optional>
-                <attribute name="last-granted"> <text /> </attribute>
-            </optional>
-        </element>
-    </define>
-
-    <define name="element-ban">
-        <element name="ban">
-            <attribute name="id"> <text /> </attribute>
-            <attribute name="resource"> <text /> </attribute>
-            <attribute name="node"> <text /> </attribute>
-            <attribute name="weight"> <data type="integer" /> </attribute>
-            <attribute name="master_only"> <data type="boolean" /> </attribute>
-        </element>
-    </define>
-</grammar>
diff --git a/pcs_test/resources/pcmk_api_rng/failure-2.8.rng b/pcs_test/resources/pcmk_api_rng/failure-2.8.rng
new file mode 100644
index 00000000..a36d2ea9
--- /dev/null
+++ b/pcs_test/resources/pcmk_api_rng/failure-2.8.rng
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <start>
+        <ref name="element-failure"/>
+    </start>
+
+    <define name="element-failure">
+        <element name="failure">
+            <choice>
+                <attribute name="op_key"> <text/> </attribute>
+                <attribute name="id"> <text/> </attribute>
+            </choice>
+            <attribute name="node"> <text /> </attribute>
+            <attribute name="exitstatus"> <text /> </attribute>
+            <attribute name="exitreason"> <text /> </attribute>
+            <attribute name="exitcode"> <data type="nonNegativeInteger" /> </attribute>
+            <attribute name="call"> <data type="integer" /> </attribute>
+            <attribute name="status"> <text /> </attribute>
+            <optional>
+                <group>
+                    <attribute name="last-rc-change"> <text /> </attribute>
+                    <attribute name="queued"> <data type="nonNegativeInteger" /> </attribute>
+                    <attribute name="exec"> <data type="nonNegativeInteger" /> </attribute>
+                    <attribute name="interval"> <data type="nonNegativeInteger" /> </attribute>
+                    <attribute name="task"> <text /> </attribute>
+                </group>
+            </optional>
+        </element>
+    </define>
+</grammar>
+
diff --git a/pcs_test/resources/pcmk_api_rng/fence-event-2.0.rng b/pcs_test/resources/pcmk_api_rng/fence-event-2.15.rng
similarity index 91%
rename from pcs_test/resources/pcmk_api_rng/fence-event-2.0.rng
rename to pcs_test/resources/pcmk_api_rng/fence-event-2.15.rng
index e54687cd..8e000caf 100644
--- a/pcs_test/resources/pcmk_api_rng/fence-event-2.0.rng
+++ b/pcs_test/resources/pcmk_api_rng/fence-event-2.15.rng
@@ -18,6 +18,9 @@
             <optional>
                 <attribute name="extended-status"> <text /> </attribute>
             </optional>
+            <optional>
+                <attribute name="exit-reason"> <text /> </attribute>
+            </optional>
             <optional>
                 <attribute name="delegate"> <text /> </attribute>
             </optional>
diff --git a/pcs_test/resources/pcmk_api_rng/node-attrs-2.8.rng b/pcs_test/resources/pcmk_api_rng/node-attrs-2.8.rng
new file mode 100644
index 00000000..754ddb9e
--- /dev/null
+++ b/pcs_test/resources/pcmk_api_rng/node-attrs-2.8.rng
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <start>
+        <ref name="element-node-with-attributes"/>
+    </start>
+
+    <define name="element-node-with-attributes">
+        <element name="node">
+            <attribute name="name"> <text /> </attribute>
+            <zeroOrMore>
+                <element name="attribute">
+                    <attribute name="name"> <text /> </attribute>
+                    <attribute name="value"> <text /> </attribute>
+                    <optional>
+                        <attribute name="expected"> <data type="integer" /> </attribute>
+                    </optional>
+                </element>
+            </zeroOrMore>
+        </element>
+    </define>
+
+</grammar>
diff --git a/pcs_test/resources/pcmk_api_rng/node-history-2.12.rng b/pcs_test/resources/pcmk_api_rng/node-history-2.12.rng
new file mode 100644
index 00000000..9628000e
--- /dev/null
+++ b/pcs_test/resources/pcmk_api_rng/node-history-2.12.rng
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <start>
+        <ref name="node-history-list" />
+    </start>
+
+    <define name="node-history-list">
+        <element name="node_history">
+            <zeroOrMore>
+                <ref name="element-node-history" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="element-node-history">
+        <element name="node">
+            <attribute name="name"> <text /> </attribute>
+            <zeroOrMore>
+                <ref name="element-resource-history" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="element-resource-history">
+        <element name="resource_history">
+            <attribute name="id"> <text /> </attribute>
+            <attribute name="orphan"> <data type="boolean" /> </attribute>
+            <optional>
+                <group>
+                    <attribute name="migration-threshold"> <data type="nonNegativeInteger" /> </attribute>
+                    <optional>
+                        <attribute name="fail-count"> <text /> </attribute>
+                    </optional>
+                    <optional>
+                        <attribute name="last-failure"> <text /> </attribute>
+                    </optional>
+                </group>
+            </optional>
+            <zeroOrMore>
+                <ref name="element-operation-history" />
+            </zeroOrMore>
+        </element>
+    </define>
+
+    <define name="element-operation-history">
+        <element name="operation_history">
+            <attribute name="call"> <text /> </attribute>
+            <attribute name="task"> <text /> </attribute>
+            <optional>
+                <attribute name="interval"> <text /> </attribute>
+            </optional>
+            <optional>
+                <attribute name="last-rc-change"> <text /> </attribute>
+            </optional>
+            <optional>
+                <attribute name="last-run"> <text /> </attribute>
+            </optional>
+            <optional>
+                <attribute name="exec-time"> <text /> </attribute>
+            </optional>
+            <optional>
+                <attribute name="queue-time"> <text /> </attribute>
+            </optional>
+            <attribute name="rc"> <data type="integer" /> </attribute>
+            <attribute name="rc_text"> <text /> </attribute>
+        </element>
+    </define>
+</grammar>
diff --git a/pcs_test/resources/pcmk_api_rng/nodes-2.29.rng b/pcs_test/resources/pcmk_api_rng/nodes-2.29.rng
new file mode 100644
index 00000000..7dd17989
--- /dev/null
+++ b/pcs_test/resources/pcmk_api_rng/nodes-2.29.rng
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <start>
+        <ref name="element-full-node"/>
+    </start>
+
+    <define name="element-full-node">
+        <element name="node">
+            <attribute name="name"> <text/> </attribute>
+            <attribute name="id"> <text/> </attribute>
+            <attribute name="online"> <data type="boolean" /> </attribute>
+            <attribute name="standby"> <data type="boolean" /> </attribute>
+            <attribute name="standby_onfail"> <data type="boolean" /> </attribute>
+            <attribute name="maintenance"> <data type="boolean" /> </attribute>
+            <attribute name="pending"> <data type="boolean" /> </attribute>
+            <attribute name="unclean"> <data type="boolean" /> </attribute>
+            <optional>
+                <attribute name="health">
+                    <choice>
+                        <value>red</value>
+                        <value>yellow</value>
+                        <value>green</value>
+                    </choice>
+                </attribute>
+            </optional>
+            <optional>
+                <attribute name="feature_set"> <text/> </attribute>
+            </optional>
+            <attribute name="shutdown"> <data type="boolean" /> </attribute>
+            <attribute name="expected_up"> <data type="boolean" /> </attribute>
+            <attribute name="is_dc"> <data type="boolean" /> </attribute>
+            <attribute name="resources_running"> <data type="nonNegativeInteger" /> </attribute>
+            <attribute name="type">
+                <choice>
+                    <value>unknown</value>
+                    <value>member</value>
+                    <value>remote</value>
+                    <value>ping</value>
+                </choice>
+            </attribute>
+            <optional>
+                <!-- for virtualized pacemaker_remote nodes, crm_mon 1.1.13 uses
+                     "container_id" while later versions use "id_as_resource" -->
+                <choice>
+                    <attribute name="container_id"> <text/> </attribute>
+                    <attribute name="id_as_resource"> <text/> </attribute>
+                </choice>
+            </optional>
+            <externalRef href="resources-2.29.rng" />
+        </element>
+    </define>
+</grammar>
diff --git a/pcs_test/resources/pcmk_api_rng/pacemakerd-health-2.25.rng b/pcs_test/resources/pcmk_api_rng/pacemakerd-health-2.25.rng
new file mode 100644
index 00000000..2089b25f
--- /dev/null
+++ b/pcs_test/resources/pcmk_api_rng/pacemakerd-health-2.25.rng
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
+         datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+
+    <start>
+        <ref name="element-pacemakerd-health"/>
+    </start>
+
+    <define name="element-pacemakerd-health">
+        <element name="pacemakerd">
+            <optional>
+                <attribute name="sys_from"> <text /> </attribute>
+            </optional>
+            <attribute name="state"> <text /> </attribute>
+            <optional>
+                <attribute name="last_updated"> <text /> </attribute>
+            </optional>
+        </element>
+    </define>
+</grammar>
diff --git a/pcs_test/resources/pcmk_api_rng/resources-2.4.rng b/pcs_test/resources/pcmk_api_rng/resources-2.29.rng
similarity index 76%
rename from pcs_test/resources/pcmk_api_rng/resources-2.4.rng
rename to pcs_test/resources/pcmk_api_rng/resources-2.29.rng
index e2795836..f4214a7c 100644
--- a/pcs_test/resources/pcmk_api_rng/resources-2.4.rng
+++ b/pcs_test/resources/pcmk_api_rng/resources-2.29.rng
@@ -35,6 +35,16 @@
             </attribute>
             <attribute name="image"> <text/> </attribute>
             <attribute name="unique"> <data type="boolean" /> </attribute>
+            <optional>
+                <attribute name="maintenance">
+                    <data type="boolean" />
+                </attribute>
+            </optional>
+            <optional>
+                <attribute name="description">
+                    <text/>
+                </attribute>
+            </optional>
             <attribute name="managed"> <data type="boolean" /> </attribute>
             <attribute name="failed"> <data type="boolean" /> </attribute>
             <zeroOrMore>
@@ -53,6 +63,16 @@
             <attribute name="id"> <text/> </attribute>
             <attribute name="multi_state"> <data type="boolean" /> </attribute>
             <attribute name="unique"> <data type="boolean" /> </attribute>
+            <optional>
+                <attribute name="maintenance">
+                    <data type="boolean" />
+                </attribute>
+            </optional>
+            <optional>
+                <attribute name="description">
+                    <text/>
+                </attribute>
+            </optional>
             <attribute name="managed"> <data type="boolean" /> </attribute>
             <attribute name="disabled"> <data type="boolean" /> </attribute>
             <attribute name="failed"> <data type="boolean" /> </attribute>
@@ -68,6 +88,16 @@
         <element name="group">
             <attribute name="id"> <text/> </attribute>
             <attribute name="number_resources"> <data type="nonNegativeInteger" /> </attribute>
+            <optional>
+                <attribute name="maintenance">
+                    <data type="boolean" />
+                </attribute>
+            </optional>
+            <optional>
+                <attribute name="description">
+                    <text/>
+                </attribute>
+            </optional>
             <attribute name="managed"> <data type="boolean" /> </attribute>
             <attribute name="disabled"> <data type="boolean" /> </attribute>
             <ref name="element-resource-list" />
@@ -87,13 +117,26 @@
             <optional>
                 <attribute name="blocked"> <data type="boolean" /> </attribute>
             </optional>
-            <attribute name="managed"> <data type="boolean" /> </attribute>
+            <optional>
+                <attribute name="maintenance">
+                    <data type="boolean" />
+                </attribute>
+            </optional>
+            <optional>
+                <attribute name="description">
+                    <text/>
+                </attribute>
+            </optional>
             <attribute name="failed"> <data type="boolean" /> </attribute>
+            <attribute name="managed"> <data type="boolean" /> </attribute>
             <attribute name="failure_ignored"> <data type="boolean" /> </attribute>
             <attribute name="nodes_running_on"> <data type="nonNegativeInteger" />  </attribute>
             <optional>
                 <attribute name="pending"> <text/> </attribute>
             </optional>
+            <optional>
+                <attribute name="locked_to"> <text/> </attribute>
+            </optional>
             <zeroOrMore>
                 <element name="node">
                     <attribute name="name"> <text/> </attribute>
-- 
2.25.1

