5f028b68创建于 2024年12月2日历史提交
/*
 * Copyright (c) KylinSoft  Co., Ltd. 2024.All rights reserved.
 * ha-api licensed under the Mulan Permissive Software License, Version 2. 
 * See LICENSE file for more details.
 * Author: yangzhao_kl <yangzhao1@kylinos.cn>
 * Date: Fri Jan 8 20:56:40 2021 +0800
 */
package models

import (
	"fmt"
	"strings"
	"testing"

	"github.com/beevik/etree"
)

func TestGetResourceInfoByrscID(t *testing.T) {
	out := `xml:
	<primitive class="ocf" id="dummy" provider="pacemaker" type="Dummy">
	  <operations>
		<op id="dummy-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
		<op id="dummy-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
		<op id="dummy-monitor-interval-3s" interval="3s" name="monitor"/>
		<op id="dummy-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
		<op id="dummy-start-interval-0s" interval="0s" name="start" timeout="20s"/>
		<op id="dummy-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
	  </operations>
	</primitive>
	`
	xml := strings.Split(string(out), ":\n")[1]
	doc := etree.NewDocument()
	if err := doc.ReadFromString(xml); err != nil {
		// return ""
	}

	// fmt.Println(doc.Space)
	// fmt.Println(doc.Tag)
	// fmt.Println(doc.Attr)
	// fmt.Println(doc.Child)
	fmt.Println(doc.Root().Tag)
	// var value map[string]interface{}
	// var doc *etree.Document
}

func TestGetGroupRscs(t *testing.T) {
	out := `Resource Group: group1
	dummy2     (ocf::heartbeat:Dummy): Started ha1
	dummy6     (ocf::heartbeat:Dummy): Started ha1
	dummy7     (ocf::heartbeat:Dummy): Started ha1
xml:
<group id="group1">
 <primitive class="ocf" id="dummy2" provider="heartbeat" type="Dummy">
   <meta_attributes id="dummy2-meta_attributes"/>
   <operations>
	 <op id="dummy2-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
	 <op id="dummy2-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
	 <op id="dummy2-monitor-interval-10s" interval="10s" name="monitor" timeout="20s"/>
	 <op id="dummy2-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
	 <op id="dummy2-start-interval-0s" interval="0s" name="start" timeout="20s"/>
	 <op id="dummy2-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
   </operations>
 </primitive>
 <primitive class="ocf" id="dummy6" provider="heartbeat" type="Dummy">
   <meta_attributes id="dummy6-meta_attributes"/>
 </primitive>
 <primitive class="ocf" id="dummy7" provider="heartbeat" type="Dummy">
   <meta_attributes id="dummy7-meta_attributes"/>
 </primitive>
</group>
	`

	xml := strings.Split(string(out), ":\n")[1]
	fmt.Println(xml)
	doc := etree.NewDocument()
	if err := doc.ReadFromString(xml); err != nil {
		fmt.Println(err)
	}
	et := doc.FindElements("//primitive")
	rscs := []string{}

	for _, pri := range et {
		rscs = append(rscs, pri.SelectAttrValue("id", ""))
	}
	fmt.Println(rscs)
}

// [root@ha1 ~]# cibadmin --query --scope resources
// <resources>
//   <clone id="sysinfo-clone">
//     <primitive class="ocf" id="sysinfo" provider="pacemaker" type="SysInfo">
//       <operations>
//         <op id="sysinfo-monitor-interval-60s" interval="60s" name="monitor" timeout="20s"/>
//         <op id="sysinfo-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//         <op id="sysinfo-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//       </operations>
//     </primitive>
//   </clone>
//   <primitive class="ocf" id="dummy" provider="pacemaker" type="Dummy">
//     <operations>
//       <op id="dummy-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
//       <op id="dummy-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
//       <op id="dummy-monitor-interval-3s" interval="3s" name="monitor"/>
//       <op id="dummy-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
//       <op id="dummy-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//       <op id="dummy-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//     </operations>
//   </primitive>
// </resources>

// [root@ha1 ~]# crm_resource --resource dummy --query-xml
//  dummy  (ocf::pacemaker:Dummy): Started ha1
// xml:
// <primitive class="ocf" id="dummy" provider="pacemaker" type="Dummy">
//   <operations>
//     <op id="dummy-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
//     <op id="dummy-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
//     <op id="dummy-monitor-interval-3s" interval="3s" name="monitor"/>
//     <op id="dummy-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
//     <op id="dummy-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//     <op id="dummy-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//   </operations>
// </primitive>

// [root@ha1 ~]# crm_resource --resource group1 --query-xml
//  Resource Group: group1
//      dummy2     (ocf::heartbeat:Dummy): Started ha2
// xml:
// <group id="group1">
//   <primitive class="ocf" id="dummy2" provider="heartbeat" type="Dummy">
//     <operations>
//       <op id="dummy2-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
//       <op id="dummy2-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
//       <op id="dummy2-monitor-interval-10s" interval="10s" name="monitor" timeout="20s"/>
//       <op id="dummy2-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
//       <op id="dummy2-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//       <op id="dummy2-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//     </operations>
//   </primitive>
// </group>

// [root@ha1 ~]# crm_resource --resource sysinfo-clone --query-xml
//  Clone Set: sysinfo-clone [sysinfo]
//      Started: [ ha1 ha2 ]
// xml:
// <clone id="sysinfo-clone">
//   <primitive class="ocf" id="sysinfo" provider="pacemaker" type="SysInfo">
//     <operations>
//       <op id="sysinfo-monitor-interval-60s" interval="60s" name="monitor" timeout="20s"/>
//       <op id="sysinfo-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//       <op id="sysinfo-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//     </operations>
//   </primitive>
// </clone>

// [root@ha1 ~]# cibadmin -Q
// <cib crm_feature_set="3.2.0" validate-with="pacemaker-3.2" epoch="56" num_updates="14818" admin_epoch="0" cib-last-written="Tue Dec 29 14:41:29 2020" update-origin="ha1" update-client="cibadmin" update-user="hacluster" have-quorum="1" dc-uuid="2">
//   <configuration>
//     <crm_config>
//       <cluster_property_set id="cib-bootstrap-options">
//         <nvpair id="cib-bootstrap-options-have-watchdog" name="have-watchdog" value="false"/>
//         <nvpair id="cib-bootstrap-options-dc-version" name="dc-version" value="2.0.3-1.oe1-4b1f869f0f"/>
//         <nvpair id="cib-bootstrap-options-cluster-infrastructure" name="cluster-infrastructure" value="corosync"/>
//         <nvpair id="cib-bootstrap-options-cluster-name" name="cluster-name" value="hacluster"/>
//         <nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
//         <nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="ignore"/>
//       </cluster_property_set>
//     </crm_config>
//     <nodes>
//       <node id="1" uname="ha1">
//         <instance_attributes id="nodes-1"/>
//       </node>
//       <node id="2" uname="ha2"/>
//     </nodes>
//     <resources>
//       <clone id="sysinfo-clone">
//         <primitive class="ocf" id="sysinfo" provider="pacemaker" type="SysInfo">
//           <operations>
//             <op id="sysinfo-monitor-interval-60s" interval="60s" name="monitor" timeout="20s"/>
//             <op id="sysinfo-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//             <op id="sysinfo-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//           </operations>
//         </primitive>
//       </clone>
//       <primitive class="ocf" id="dummy" provider="pacemaker" type="Dummy">
//         <operations>
//           <op id="dummy-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
//           <op id="dummy-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
//           <op id="dummy-monitor-interval-3s" interval="3s" name="monitor"/>
//           <op id="dummy-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
//           <op id="dummy-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//           <op id="dummy-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//         </operations>
//       </primitive>
//     </resources>
//     <constraints/>
//   </configuration>
//   <status>
//     <node_state id="2" uname="ha2" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
//       <transient_attributes id="2">
//         <instance_attributes id="status-2">
//           <nvpair id="status-2-arch" name="arch" value="x86_64"/>
//           <nvpair id="status-2-os" name="os" value="Linux-4.19.90-2012.1.0.0050.oe1.x86_64"/>
//           <nvpair id="status-2-free_swap" name="free_swap" value="3750"/>
//           <nvpair id="status-2-cpu_info" name="cpu_info" value="Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz"/>
//           <nvpair id="status-2-cpu_speed" name="cpu_speed" value="6384.00"/>
//           <nvpair id="status-2-cpu_cores" name="cpu_cores" value="4"/>
//           <nvpair id="status-2-cpu_load" name="cpu_load" value="0.02,"/>
//           <nvpair id="status-2-ram_total" name="ram_total" value="3450"/>
//           <nvpair id="status-2-ram_free" name="ram_free" value="650"/>
//           <nvpair id="status-2-root_free" name="root_free" value="30"/>
//           <nvpair id="status-2-.health_disk" name="#health_disk" value="green"/>
//         </instance_attributes>
//       </transient_attributes>
//       <lrm id="2">
//         <lrm_resources>
//           <lrm_resource id="sysinfo" type="SysInfo" class="ocf" provider="pacemaker">
//             <lrm_rsc_op id="sysinfo_last_0" operation_key="sysinfo_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.2.0" transition-key="3:4:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;3:4:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha2" call-id="7" rc-code="0" op-status="0" interval="0" last-rc-change="10137" last-run="10137" exec-time="119243" queue-time="29" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
//             <lrm_rsc_op id="sysinfo_monitor_60000" operation_key="sysinfo_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.2.0" transition-key="3:6:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;3:6:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha2" call-id="8" rc-code="0" op-status="0" interval="60000" last-rc-change="10137" exec-time="106981" queue-time="17" op-digest="4811cef7f7f94e3a35a70be7916cb2fd"/>
//           </lrm_resource>
//           <lrm_resource id="dummy" type="Dummy" class="ocf" provider="pacemaker">
//             <lrm_rsc_op id="dummy_last_0" operation_key="dummy_stop_0" operation="stop" crm-debug-origin="do_update_resource" crm_feature_set="3.2.0" transition-key="12:17729:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;12:17729:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha2" call-id="57" rc-code="0" op-status="0" interval="0" last-rc-change="1029368" last-run="1029368" exec-time="13514" queue-time="15" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-force-restart=" envfile  op_sleep  passwd  state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
//             <lrm_rsc_op id="dummy_monitor_3000" operation_key="dummy_monitor_3000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.2.0" transition-key="14:17725:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;14:17725:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha2" call-id="55" rc-code="0" op-status="0" interval="3000" last-rc-change="1029323" exec-time="12324" queue-time="68" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
//           </lrm_resource>
//         </lrm_resources>
//       </lrm>
//     </node_state>
//     <node_state id="1" uname="ha1" in_ccm="true" crmd="online" crm-debug-origin="do_update_resource" join="member" expected="member">
//       <lrm id="1">
//         <lrm_resources>
//           <lrm_resource id="sysinfo" type="SysInfo" class="ocf" provider="pacemaker">
//             <lrm_rsc_op id="sysinfo_last_0" operation_key="sysinfo_start_0" operation="start" crm-debug-origin="build_active_RAs" crm_feature_set="3.2.0" transition-key="5:41:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;5:41:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha1" call-id="45" rc-code="0" op-status="0" interval="0" last-rc-change="29007" last-run="29007" exec-time="99736" queue-time="32" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
//             <lrm_rsc_op id="sysinfo_monitor_60000" operation_key="sysinfo_monitor_60000" operation="monitor" crm-debug-origin="build_active_RAs" crm_feature_set="3.2.0" transition-key="6:41:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;6:41:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha1" call-id="46" rc-code="0" op-status="0" interval="60000" last-rc-change="29007" exec-time="101711" queue-time="17" op-digest="4811cef7f7f94e3a35a70be7916cb2fd"/>
//           </lrm_resource>
//           <lrm_resource id="dummy" type="Dummy" class="ocf" provider="pacemaker">
//             <lrm_rsc_op id="dummy_last_0" operation_key="dummy_start_0" operation="start" crm-debug-origin="do_update_resource" crm_feature_set="3.2.0" transition-key="13:17729:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;13:17729:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha1" call-id="78" rc-code="0" op-status="0" interval="0" last-rc-change="1047822" last-run="1047822" exec-time="12155" queue-time="21" op-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-force-restart=" envfile  op_sleep  passwd  state " op-restart-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
//             <lrm_rsc_op id="dummy_monitor_3000" operation_key="dummy_monitor_3000" operation="monitor" crm-debug-origin="do_update_resource" crm_feature_set="3.2.0" transition-key="14:17729:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" transition-magic="0:0;14:17729:0:a056ee7d-3b46-4f8d-8a46-bc2dfc75fc75" exit-reason="" on_node="ha1" call-id="79" rc-code="0" op-status="0" interval="3000" last-rc-change="1047822" exec-time="8472" queue-time="19" op-digest="4811cef7f7f94e3a35a70be7916cb2fd" op-secure-params=" passwd " op-secure-digest="f2317cad3d54cec5d7d7aa7d0bf35cf8"/>
//           </lrm_resource>
//         </lrm_resources>
//       </lrm>
//       <transient_attributes id="1">
//         <instance_attributes id="status-1">
//           <nvpair id="status-1-arch" name="arch" value="x86_64"/>
//           <nvpair id="status-1-free_swap" name="free_swap" value="3850"/>
//           <nvpair id="status-1-cpu_speed" name="cpu_speed" value="6384.00"/>
//           <nvpair id="status-1-cpu_load" name="cpu_load" value="0.04,"/>
//           <nvpair id="status-1-cpu_info" name="cpu_info" value="Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz"/>
//           <nvpair id="status-1-ram_total" name="ram_total" value="3450"/>
//           <nvpair id="status-1-cpu_cores" name="cpu_cores" value="4"/>
//           <nvpair id="status-1-root_free" name="root_free" value="27"/>
//           <nvpair id="status-1-ram_free" name="ram_free" value="650"/>
//           <nvpair id="status-1-.health_disk" name="#health_disk" value="green"/>
//           <nvpair id="status-1-os" name="os" value="Linux-4.19.90-2012.1.0.0050.oe1.x86_64"/>
//         </instance_attributes>
//       </transient_attributes>
//     </node_state>
//   </status>
// </cib>

// [root@ha1 ~]# crm_mon -1 --as-xml
// <crm_mon version="2.0.3">
//   <summary>
//     <stack type="corosync"/>
//     <current_dc present="true" version="2.0.3-1.oe1-4b1f869f0f" name="ha2" id="2" with_quorum="true"/>
//     <last_update time="Fri Jan  8 13:48:44 2021"/>
//     <last_change time="Tue Dec 29 14:41:29 2020" user="hacluster" client="cibadmin" origin="ha1"/>
//     <nodes_configured number="2"/>
//     <resources_configured number="3" disabled="0" blocked="0"/>
//     <cluster_options stonith-enabled="false" symmetric-cluster="true" no-quorum-policy="ignore" maintenance-mode="false"/>
//   </summary>
//   <nodes>
//     <node name="ha1" id="1" online="true" standby="false" standby_onfail="false" maintenance="false" pending="false" unclean="false" shutdown="false" expected_up="true" is_dc="false" resources_running="2" type="member"/>
//     <node name="ha2" id="2" online="true" standby="false" standby_onfail="false" maintenance="false" pending="false" unclean="false" shutdown="false" expected_up="true" is_dc="true" resources_running="1" type="member"/>
//   </nodes>
//   <resources>
//     <clone id="sysinfo-clone" multi_state="false" unique="false" managed="true" failed="false" failure_ignored="false">
//       <resource id="sysinfo" resource_agent="ocf::pacemaker:SysInfo" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
//         <node name="ha2" id="2" cached="true"/>
//       </resource>
//       <resource id="sysinfo" resource_agent="ocf::pacemaker:SysInfo" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
//         <node name="ha1" id="1" cached="true"/>
//       </resource>
//     </clone>
//     <resource id="dummy" resource_agent="ocf::pacemaker:Dummy" role="Started" active="true" orphaned="false" blocked="false" managed="true" failed="false" failure_ignored="false" nodes_running_on="1">
//       <node name="ha1" id="1" cached="true"/>
//     </resource>
//   </resources>
//   <node_attributes>
//     <node name="ha1">
//       <attribute name="arch" value="x86_64"/>
//       <attribute name="cpu_cores" value="4"/>
//       <attribute name="cpu_info" value="Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz"/>
//       <attribute name="cpu_load" value="0.06,"/>
//       <attribute name="cpu_speed" value="6384.00"/>
//       <attribute name="free_swap" value="3850"/>
//       <attribute name="os" value="Linux-4.19.90-2012.1.0.0050.oe1.x86_64"/>
//       <attribute name="ram_free" value="700"/>
//       <attribute name="ram_total" value="3450"/>
//       <attribute name="root_free" value="27"/>
//     </node>
//     <node name="ha2">
//       <attribute name="arch" value="x86_64"/>
//       <attribute name="cpu_cores" value="4"/>
//       <attribute name="cpu_info" value="Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz"/>
//       <attribute name="cpu_load" value="0.16,"/>
//       <attribute name="cpu_speed" value="6384.00"/>
//       <attribute name="free_swap" value="3750"/>
//       <attribute name="os" value="Linux-4.19.90-2012.1.0.0050.oe1.x86_64"/>
//       <attribute name="ram_free" value="650"/>
//       <attribute name="ram_total" value="3450"/>
//       <attribute name="root_free" value="30"/>
//     </node>
//   </node_attributes>
//   <node_history>
//     <node name="ha2">
//       <resource_history id="sysinfo" orphan="false" migration-threshold="1000000">
//         <operation_history call="7" task="start" last-rc-change="Thu Jan  1 10:48:57 1970" last-run="Thu Jan  1 10:48:57 1970" exec-time="119243ms" queue-time="29ms" rc="0" rc_text="ok"/>
//         <operation_history call="8" task="monitor" interval="60000ms" last-rc-change="Thu Jan  1 10:48:57 1970" exec-time="106981ms" queue-time="17ms" rc="0" rc_text="ok"/>
//       </resource_history>
//       <resource_history id="dummy" orphan="false" migration-threshold="1000000">
//         <operation_history call="55" task="monitor" interval="3000ms" last-rc-change="Tue Jan 13 05:55:23 1970" exec-time="12324ms" queue-time="68ms" rc="0" rc_text="ok"/>
//         <operation_history call="57" task="stop" last-rc-change="Tue Jan 13 05:56:08 1970" last-run="Tue Jan 13 05:56:08 1970" exec-time="13514ms" queue-time="15ms" rc="0" rc_text="ok"/>
//       </resource_history>
//     </node>
//     <node name="ha1">
//       <resource_history id="sysinfo" orphan="false" migration-threshold="1000000">
//         <operation_history call="45" task="start" last-rc-change="Thu Jan  1 16:03:27 1970" last-run="Thu Jan  1 16:03:27 1970" exec-time="99736ms" queue-time="32ms" rc="0" rc_text="ok"/>
//         <operation_history call="46" task="monitor" interval="60000ms" last-rc-change="Thu Jan  1 16:03:27 1970" exec-time="101711ms" queue-time="17ms" rc="0" rc_text="ok"/>
//       </resource_history>
//       <resource_history id="dummy" orphan="false" migration-threshold="1000000">
//         <operation_history call="78" task="start" last-rc-change="Tue Jan 13 11:03:42 1970" last-run="Tue Jan 13 11:03:42 1970" exec-time="12155ms" queue-time="21ms" rc="0" rc_text="ok"/>
//         <operation_history call="79" task="monitor" interval="3000ms" last-rc-change="Tue Jan 13 11:03:42 1970" exec-time="8472ms" queue-time="19ms" rc="0" rc_text="ok"/>
//       </resource_history>
//     </node>
//   </node_history>
// </crm_mon>

// [root@ha1 ~]# cibadmin --query --scope resources
// <resources>
//   <clone id="sysinfo-clone">
//     <primitive class="ocf" id="sysinfo" provider="pacemaker" type="SysInfo">
//       <operations>
//         <op id="sysinfo-monitor-interval-60s" interval="60s" name="monitor" timeout="20s"/>
//         <op id="sysinfo-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//         <op id="sysinfo-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//       </operations>
//     </primitive>
//   </clone>
//   <primitive class="ocf" id="dummy" provider="pacemaker" type="Dummy">
//     <operations>
//       <op id="dummy-migrate_from-interval-0s" interval="0s" name="migrate_from" timeout="20s"/>
//       <op id="dummy-migrate_to-interval-0s" interval="0s" name="migrate_to" timeout="20s"/>
//       <op id="dummy-monitor-interval-3s" interval="3s" name="monitor"/>
//       <op id="dummy-reload-interval-0s" interval="0s" name="reload" timeout="20s"/>
//       <op id="dummy-start-interval-0s" interval="0s" name="start" timeout="20s"/>
//       <op id="dummy-stop-interval-0s" interval="0s" name="stop" timeout="20s"/>
//     </operations>
//   </primitive>
// </resources>