diff --git a/cts/cli/regression.crm_mon.exp b/cts/cli/regression.crm_mon.exp index c823c3674d..83b5f083c4 100644 --- a/cts/cli/regression.crm_mon.exp +++ b/cts/cli/regression.crm_mon.exp @@ -1,5039 +1,5071 @@ -=#=#=#= Begin test: Basic text output =#=#=#= +=#=#=#= Begin test: Basic output =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster01 cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] * Unpromoted: [ cluster01 ] -=#=#=#= End test: Basic text output - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output -=#=#=#= Begin test: XML output =#=#=#= - +=#=#=#= End test: Basic output - OK (0) =#=#=#= +* Passed: crm_mon - Basic output +=#=#=#= Begin test: Basic output (XML) =#=#=#= + -=#=#=#= End test: XML output - OK (0) =#=#=#= -* Passed: crm_mon - XML output -=#=#=#= Begin test: Basic text output without node section =#=#=#= +=#=#=#= End test: Basic output (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Basic output (XML) +=#=#=#= Begin test: Output without node section =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster01 cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] * Unpromoted: [ cluster01 ] -=#=#=#= End test: Basic text output without node section - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output without node section -=#=#=#= Begin test: XML output without the node section =#=#=#= - +=#=#=#= End test: Output without node section - OK (0) =#=#=#= +* Passed: crm_mon - Output without node section +=#=#=#= Begin test: Output without node section (XML) =#=#=#= + -=#=#=#= End test: XML output without the node section - OK (0) =#=#=#= -* Passed: crm_mon - XML output without the node section -=#=#=#= Begin test: Text output with only the node section =#=#=#= +=#=#=#= End test: Output without node section (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output without node section (XML) +=#=#=#= Begin test: Output with only the node section =#=#=#= Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] -=#=#=#= End test: Text output with only the node section - OK (0) =#=#=#= -* Passed: crm_mon - Text output with only the node section +=#=#=#= End test: Output with only the node section - OK (0) =#=#=#= +* Passed: crm_mon - Output with only the node section =#=#=#= Begin test: Complete text output =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster01 cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] * Unpromoted: [ cluster01 ] Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * dummy: migration-threshold=1000000: * (18) start * (19) monitor: interval="60000ms" * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (4) monitor: interval="10000ms" * (5) cancel: interval="10000ms" * (6) promote * (7) monitor: interval="5000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * dummy: migration-threshold=1000000: * (16) stop * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (2) start * (4) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1: * httpd: migration-threshold=1000000: * (1) start Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 =#=#=#= End test: Complete text output - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output +* Passed: crm_mon - Complete text output =#=#=#= Begin test: Complete text output with detail =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster02 * ping (ocf:pacemaker:ping): Started cluster01 * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd-bundle-ip-192.168.122.131 (ocf:heartbeat:IPaddr2): Started cluster01 * httpd (ocf:heartbeat:apache): Started httpd-bundle-0 * httpd-bundle-docker-0 (ocf:heartbeat:docker): Started cluster01 * httpd-bundle-0 (ocf:pacemaker:remote): Started cluster01 * Replica[1] * httpd-bundle-ip-192.168.122.132 (ocf:heartbeat:IPaddr2): Started cluster02 * httpd (ocf:heartbeat:apache): Started httpd-bundle-1 * httpd-bundle-docker-1 (ocf:heartbeat:docker): Started cluster02 * httpd-bundle-1 (ocf:pacemaker:remote): Started cluster02 * Replica[2] * httpd-bundle-ip-192.168.122.133 (ocf:heartbeat:IPaddr2): Stopped * httpd (ocf:heartbeat:apache): Stopped * httpd-bundle-docker-2 (ocf:heartbeat:docker): Stopped * httpd-bundle-2 (ocf:pacemaker:remote): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:0: * mysql-proxy (lsb:mysql-proxy): Started cluster02 * Resource Group: mysql-group:1: * mysql-proxy (lsb:mysql-proxy): Started cluster01 * Clone Set: promotable-clone [promotable-rsc] (promotable): * promotable-rsc (ocf:pacemaker:Stateful): Promoted cluster02 (test_description) * promotable-rsc (ocf:pacemaker:Stateful): Unpromoted cluster01 (test_description) * promotable-rsc (ocf:pacemaker:Stateful): Stopped (test_description) * promotable-rsc (ocf:pacemaker:Stateful): Stopped (test_description) * promotable-rsc (ocf:pacemaker:Stateful): Stopped (test_description) Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * dummy: migration-threshold=1000000: * (18) start * (19) monitor: interval="60000ms" * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (4) monitor: interval="10000ms" * (5) cancel: interval="10000ms" * (6) promote * (7) monitor: interval="5000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: cluster01 (1): * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * dummy: migration-threshold=1000000: * (16) stop * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (2) start * (4) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0@cluster01: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1@cluster02: * httpd: migration-threshold=1000000: * (1) start Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 (1) =#=#=#= End test: Complete text output with detail - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output with detail +* Passed: crm_mon - Complete text output with detail =#=#=#= Begin test: Complete brief text output =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * 1 (ocf:pacemaker:Dummy): Active cluster02 * 1 (stonith:fence_xvm): Active cluster01 * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * 1/1 (lsb:exim): Active cluster02 * 1/1 (ocf:heartbeat:IPaddr): Active cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster01 cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] * Unpromoted: [ cluster01 ] Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * dummy: migration-threshold=1000000: * (18) start * (19) monitor: interval="60000ms" * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (4) monitor: interval="10000ms" * (5) cancel: interval="10000ms" * (6) promote * (7) monitor: interval="5000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * dummy: migration-threshold=1000000: * (16) stop * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (2) start * (4) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1: * httpd: migration-threshold=1000000: * (1) start Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 =#=#=#= End test: Complete brief text output - OK (0) =#=#=#= -* Passed: crm_mon - Complete brief text output +* Passed: crm_mon - Complete brief text output =#=#=#= Begin test: Complete text output grouped by node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01: online: * Resources: * ping (ocf:pacemaker:ping): Started * Fencing (stonith:fence_xvm): Started * mysql-proxy (lsb:mysql-proxy): Started * promotable-rsc (ocf:pacemaker:Stateful): Unpromoted (test_description) * httpd-bundle-ip-192.168.122.131 (ocf:heartbeat:IPaddr2): Started * httpd-bundle-docker-0 (ocf:heartbeat:docker): Started * Node cluster02: online: * Resources: * ping (ocf:pacemaker:ping): Started * dummy (ocf:pacemaker:Dummy): Started * Public-IP (ocf:heartbeat:IPaddr): Started * Email (lsb:exim): Started * mysql-proxy (lsb:mysql-proxy): Started * promotable-rsc (ocf:pacemaker:Stateful): Promoted (test_description) * httpd-bundle-ip-192.168.122.132 (ocf:heartbeat:IPaddr2): Started * httpd-bundle-docker-1 (ocf:heartbeat:docker): Started * GuestNode httpd-bundle-0: online: * Resources: * httpd (ocf:heartbeat:apache): Started * GuestNode httpd-bundle-1: online: * Resources: * httpd (ocf:heartbeat:apache): Started * GuestNode httpd-bundle-2: OFFLINE: * Resources: Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * dummy: migration-threshold=1000000: * (18) start * (19) monitor: interval="60000ms" * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (4) monitor: interval="10000ms" * (5) cancel: interval="10000ms" * (6) promote * (7) monitor: interval="5000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * dummy: migration-threshold=1000000: * (16) stop * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (2) start * (4) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1: * httpd: migration-threshold=1000000: * (1) start Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 =#=#=#= End test: Complete text output grouped by node - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output grouped by node +* Passed: crm_mon - Complete text output grouped by node =#=#=#= Begin test: Complete brief text output grouped by node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01: online: * Resources: * 1 (lsb:mysql-proxy): Active * 1 (ocf:heartbeat:IPaddr2): Active * 1 (ocf:heartbeat:docker): Active * 1 (ocf:pacemaker:Stateful): Active * 1 (ocf:pacemaker:ping): Active * 1 (ocf:pacemaker:remote): Active * 1 (stonith:fence_xvm): Active * Node cluster02: online: * Resources: * 1 (lsb:exim): Active * 1 (lsb:mysql-proxy): Active * 1 (ocf:heartbeat:IPaddr): Active * 1 (ocf:heartbeat:IPaddr2): Active * 1 (ocf:heartbeat:docker): Active * 1 (ocf:pacemaker:Dummy): Active * 1 (ocf:pacemaker:Stateful): Active * 1 (ocf:pacemaker:ping): Active * 1 (ocf:pacemaker:remote): Active * GuestNode httpd-bundle-0: online: * Resources: * 1 (ocf:heartbeat:apache): Active * GuestNode httpd-bundle-1: online: * Resources: * 1 (ocf:heartbeat:apache): Active Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * dummy: migration-threshold=1000000: * (18) start * (19) monitor: interval="60000ms" * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (4) monitor: interval="10000ms" * (5) cancel: interval="10000ms" * (6) promote * (7) monitor: interval="5000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * dummy: migration-threshold=1000000: * (16) stop * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (2) start * (4) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1: * httpd: migration-threshold=1000000: * (1) start Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 =#=#=#= End test: Complete brief text output grouped by node - OK (0) =#=#=#= -* Passed: crm_mon - Complete brief text output grouped by node -=#=#=#= Begin test: XML output grouped by node =#=#=#= - +* Passed: crm_mon - Complete brief text output grouped by node +=#=#=#= Begin test: Output grouped by node (XML) =#=#=#= + -=#=#=#= End test: XML output grouped by node - OK (0) =#=#=#= -* Passed: crm_mon - XML output grouped by node -=#=#=#= Begin test: Complete text output filtered by node =#=#=#= +=#=#=#= End test: Output grouped by node (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output grouped by node (XML) +=#=#=#= Begin test: Complete output filtered by node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 ] Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 ] * Fencing (stonith:fence_xvm): Started cluster01 * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster01 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Unpromoted: [ cluster01 ] Node Attributes: * Node: cluster01: * location : office * pingd : 1000 Operations: * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * dummy: migration-threshold=1000000: * (16) stop * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (2) start * (4) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 -=#=#=#= End test: Complete text output filtered by node - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by node -=#=#=#= Begin test: XML output filtered by node =#=#=#= - +=#=#=#= End test: Complete output filtered by node - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by node +=#=#=#= Begin test: Complete output filtered by node (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by node - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by node -=#=#=#= Begin test: Complete text output filtered by tag =#=#=#= +=#=#=#= End test: Complete output filtered by node (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by node (XML) +=#=#=#= Begin test: Complete output filtered by tag =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster02 ] Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster02 ] * dummy (ocf:pacemaker:Dummy): Started cluster02 * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] Node Attributes: * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * dummy: migration-threshold=1000000: * (18) start * (19) monitor: interval="60000ms" * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * promotable-rsc: migration-threshold=1000000: * (4) monitor: interval="10000ms" * (5) cancel: interval="10000ms" * (6) promote * (7) monitor: interval="5000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" Negative Location Constraints: * not-on-cluster1 prevents dummy from running on cluster01 -=#=#=#= End test: Complete text output filtered by tag - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by tag -=#=#=#= Begin test: XML output filtered by tag =#=#=#= - +=#=#=#= End test: Complete output filtered by tag - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by tag +=#=#=#= Begin test: Complete output filtered by tag (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by tag - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by tag -=#=#=#= Begin test: Complete text output filtered by resource tag =#=#=#= +=#=#=#= End test: Complete output filtered by tag (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by tag (XML) +=#=#=#= Begin test: Complete output filtered by resource tag =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Fencing (stonith:fence_xvm): Started cluster01 Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster01: * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" -=#=#=#= End test: Complete text output filtered by resource tag - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by resource tag -=#=#=#= Begin test: XML output filtered by resource tag =#=#=#= - +=#=#=#= End test: Complete output filtered by resource tag - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by resource tag +=#=#=#= Begin test: Complete output filtered by resource tag (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by resource tag - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by resource tag -=#=#=#= Begin test: Basic text output filtered by node that doesn't exist =#=#=#= +=#=#=#= End test: Complete output filtered by resource tag (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by resource tag (XML) +=#=#=#= Begin test: Output filtered by node that doesn't exist =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Active Resources: * No active resources -=#=#=#= End test: Basic text output filtered by node that doesn't exist - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output filtered by node that doesn't exist -=#=#=#= Begin test: XML output filtered by node that doesn't exist =#=#=#= - +=#=#=#= End test: Output filtered by node that doesn't exist - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by node that doesn't exist +=#=#=#= Begin test: Output filtered by node that doesn't exist (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by node that doesn't exist - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by node that doesn't exist +=#=#=#= End test: Output filtered by node that doesn't exist (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by node that doesn't exist (XML) =#=#=#= Begin test: Basic text output with inactive resources =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 * Clone Set: inactive-clone [inactive-dhcpd] (disabled): * Stopped (disabled): [ cluster01 cluster02 ] * Resource Group: inactive-group (disabled): * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled) * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled) * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster01 cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] * Unpromoted: [ cluster01 ] =#=#=#= End test: Basic text output with inactive resources - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources +* Passed: crm_mon - Basic text output with inactive resources =#=#=#= Begin test: Basic text output with inactive resources, filtered by node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster02 ] Full List of Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster02 ] * dummy (ocf:pacemaker:Dummy): Started cluster02 * Clone Set: inactive-clone [inactive-dhcpd] (disabled): * Stopped (disabled): [ cluster02 ] * Resource Group: inactive-group (disabled): * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled) * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled) * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 * Clone Set: mysql-clone-group [mysql-group]: * Started: [ cluster02 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * Promoted: [ cluster02 ] =#=#=#= End test: Basic text output with inactive resources, filtered by node - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by node -=#=#=#= Begin test: Complete text output filtered by primitive resource =#=#=#= +* Passed: crm_mon - Basic text output with inactive resources, filtered by node +=#=#=#= Begin test: Complete output filtered by primitive resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Fencing (stonith:fence_xvm): Started cluster01 Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster01: * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" -=#=#=#= End test: Complete text output filtered by primitive resource - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by primitive resource -=#=#=#= Begin test: XML output filtered by primitive resource =#=#=#= - +=#=#=#= End test: Complete output filtered by primitive resource - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by primitive resource +=#=#=#= Begin test: Complete output filtered by primitive resource (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by primitive resource - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by primitive resource -=#=#=#= Begin test: Complete text output filtered by group resource =#=#=#= +=#=#=#= End test: Complete output filtered by primitive resource (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by primitive resource (XML) +=#=#=#= Begin test: Complete output filtered by group resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 * Email (lsb:exim): Started cluster02 Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * Public-IP: migration-threshold=1000000: * (2) start * Email: migration-threshold=1000000: * (2) start -=#=#=#= End test: Complete text output filtered by group resource - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by group resource -=#=#=#= Begin test: XML output filtered by group resource =#=#=#= - +=#=#=#= End test: Complete output filtered by group resource - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by group resource +=#=#=#= Begin test: Complete output filtered by group resource (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by group resource - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by group resource +=#=#=#= End test: Complete output filtered by group resource (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by group resource (XML) =#=#=#= Begin test: Complete text output filtered by group resource member =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * Public-IP: migration-threshold=1000000: * (2) start =#=#=#= End test: Complete text output filtered by group resource member - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by group resource member -=#=#=#= Begin test: XML output filtered by group resource member =#=#=#= +* Passed: crm_mon - Complete text output filtered by group resource member +=#=#=#= Begin test: Output filtered by group resource member (XML) =#=#=#= -=#=#=#= End test: XML output filtered by group resource member - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by group resource member -=#=#=#= Begin test: Complete text output filtered by clone resource =#=#=#= +=#=#=#= End test: Output filtered by group resource member (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by group resource member (XML) +=#=#=#= Begin test: Complete output filtered by clone resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" -=#=#=#= End test: Complete text output filtered by clone resource - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by clone resource -=#=#=#= Begin test: XML output filtered by clone resource =#=#=#= - +=#=#=#= End test: Complete output filtered by clone resource - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by clone resource +=#=#=#= Begin test: Complete output filtered by clone resource (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by clone resource - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by clone resource -=#=#=#= Begin test: Complete text output filtered by clone resource instance =#=#=#= +=#=#=#= End test: Complete output filtered by clone resource (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by clone resource (XML) +=#=#=#= Begin test: Complete output filtered by clone resource instance =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 cluster02 ] Node Attributes: * Node: cluster01: * location : office * pingd : 1000 * Node: cluster02: * pingd : 1000 Operations: * Node: cluster02: * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * Node: cluster01: * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" -=#=#=#= End test: Complete text output filtered by clone resource instance - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by clone resource instance -=#=#=#= Begin test: XML output filtered by clone resource instance =#=#=#= - +=#=#=#= End test: Complete output filtered by clone resource instance - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by clone resource instance +=#=#=#= Begin test: Complete output filtered by clone resource instance (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by clone resource instance - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by clone resource instance +=#=#=#= End test: Complete output filtered by clone resource instance (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Complete output filtered by clone resource instance (XML) =#=#=#= Begin test: Complete text output filtered by exact clone resource instance =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster02 Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * ping: migration-threshold=1000000: * (11) start * (12) monitor: interval="10000ms" * Node: cluster01 (1): * ping: migration-threshold=1000000: * (17) start * (18) monitor: interval="10000ms" =#=#=#= End test: Complete text output filtered by exact clone resource instance - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output filtered by exact clone resource instance -=#=#=#= Begin test: XML output filtered by exact clone resource instance =#=#=#= +* Passed: crm_mon - Complete text output filtered by exact clone resource instance +=#=#=#= Begin test: Output filtered by exact clone resource instance (XML) =#=#=#= -=#=#=#= End test: XML output filtered by exact clone resource instance - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by exact clone resource instance -=#=#=#= Begin test: Basic text output filtered by resource that doesn't exist =#=#=#= +=#=#=#= End test: Output filtered by exact clone resource instance (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by exact clone resource instance (XML) +=#=#=#= Begin test: Output filtered by resource that doesn't exist =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * No active resources -=#=#=#= End test: Basic text output filtered by resource that doesn't exist - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output filtered by resource that doesn't exist -=#=#=#= Begin test: XML output filtered by resource that doesn't exist =#=#=#= - +=#=#=#= End test: Output filtered by resource that doesn't exist - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by resource that doesn't exist +=#=#=#= Begin test: Output filtered by resource that doesn't exist (XML) =#=#=#= + -=#=#=#= End test: XML output filtered by resource that doesn't exist - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by resource that doesn't exist +=#=#=#= End test: Output filtered by resource that doesn't exist (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by resource that doesn't exist (XML) =#=#=#= Begin test: Basic text output with inactive resources, filtered by tag =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Clone Set: inactive-clone [inactive-dhcpd] (disabled): * Stopped (disabled): [ cluster01 cluster02 ] * Resource Group: inactive-group (disabled): * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled) * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled) =#=#=#= End test: Basic text output with inactive resources, filtered by tag - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by tag +* Passed: crm_mon - Basic text output with inactive resources, filtered by tag =#=#=#= Begin test: Basic text output with inactive resources, filtered by bundle resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped =#=#=#= End test: Basic text output with inactive resources, filtered by bundle resource - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by bundle resource -=#=#=#= Begin test: XML output filtered by inactive bundle resource =#=#=#= +* Passed: crm_mon - Basic text output with inactive resources, filtered by bundle resource +=#=#=#= Begin test: Output filtered by inactive bundle resource (XML) =#=#=#= -=#=#=#= End test: XML output filtered by inactive bundle resource - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by inactive bundle resource +=#=#=#= End test: Output filtered by inactive bundle resource (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by inactive bundle resource (XML) =#=#=#= Begin test: Basic text output with inactive resources, filtered by bundled IP address resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd-bundle-ip-192.168.122.131 (ocf:heartbeat:IPaddr2): Started cluster01 =#=#=#= End test: Basic text output with inactive resources, filtered by bundled IP address resource - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by bundled IP address resource -=#=#=#= Begin test: XML output filtered by bundled IP address resource =#=#=#= +* Passed: crm_mon - Basic text output with inactive resources, filtered by bundled IP address resource +=#=#=#= Begin test: Output filtered by bundled IP address resource (XML) =#=#=#= -=#=#=#= End test: XML output filtered by bundled IP address resource - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by bundled IP address resource +=#=#=#= End test: Output filtered by bundled IP address resource (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by bundled IP address resource (XML) =#=#=#= Begin test: Basic text output with inactive resources, filtered by bundled container =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Container bundle set: httpd-bundle [pcmk:http]: * Replica[1] * httpd-bundle-docker-1 (ocf:heartbeat:docker): Started cluster02 =#=#=#= End test: Basic text output with inactive resources, filtered by bundled container - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by bundled container -=#=#=#= Begin test: XML output filtered by bundled container =#=#=#= +* Passed: crm_mon - Basic text output with inactive resources, filtered by bundled container +=#=#=#= Begin test: Output filtered by bundled container (XML) =#=#=#= -=#=#=#= End test: XML output filtered by bundled container - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by bundled container +=#=#=#= End test: Output filtered by bundled container (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by bundled container (XML) =#=#=#= Begin test: Basic text output with inactive resources, filtered by bundle connection =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd-bundle-0 (ocf:pacemaker:remote): Started cluster01 =#=#=#= End test: Basic text output with inactive resources, filtered by bundle connection - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by bundle connection -=#=#=#= Begin test: XML output filtered by bundle connection =#=#=#= +* Passed: crm_mon - Basic text output with inactive resources, filtered by bundle connection +=#=#=#= Begin test: Output filtered by bundle connection (XML) =#=#=#= -=#=#=#= End test: XML output filtered by bundle connection - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by bundle connection +=#=#=#= End test: Output filtered by bundle connection (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by bundle connection (XML) =#=#=#= Begin test: Basic text output with inactive resources, filtered by bundled primitive resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd (ocf:heartbeat:apache): Started httpd-bundle-0 * Replica[1] * httpd (ocf:heartbeat:apache): Started httpd-bundle-1 * Replica[2] * httpd (ocf:heartbeat:apache): Stopped =#=#=#= End test: Basic text output with inactive resources, filtered by bundled primitive resource - OK (0) =#=#=#= -* Passed: crm_mon - Basic text output with inactive resources, filtered by bundled primitive resource -=#=#=#= Begin test: XML output filtered by bundled primitive resource =#=#=#= +* Passed: crm_mon - Basic text output with inactive resources, filtered by bundled primitive resource +=#=#=#= Begin test: Output filtered by bundled primitive resource (XML) =#=#=#= -=#=#=#= End test: XML output filtered by bundled primitive resource - OK (0) =#=#=#= -* Passed: crm_mon - XML output filtered by bundled primitive resource +=#=#=#= End test: Output filtered by bundled primitive resource (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output filtered by bundled primitive resource (XML) =#=#=#= Begin test: Complete text output, filtered by clone name in cloned group =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:0: * mysql-proxy (lsb:mysql-proxy): Started cluster02 * Resource Group: mysql-group:1: * mysql-proxy (lsb:mysql-proxy): Started cluster01 Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * Node: cluster01 (1): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" =#=#=#= End test: Complete text output, filtered by clone name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output, filtered by clone name in cloned group -=#=#=#= Begin test: XML output, filtered by clone name in cloned group =#=#=#= +* Passed: crm_mon - Complete text output, filtered by clone name in cloned group +=#=#=#= Begin test: Output, filtered by clone name in cloned group (XML) =#=#=#= -=#=#=#= End test: XML output, filtered by clone name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - XML output, filtered by clone name in cloned group +=#=#=#= End test: Output, filtered by clone name in cloned group (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output, filtered by clone name in cloned group (XML) =#=#=#= Begin test: Complete text output, filtered by group name in cloned group =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:0: * mysql-proxy (lsb:mysql-proxy): Started cluster02 * Resource Group: mysql-group:1: * mysql-proxy (lsb:mysql-proxy): Started cluster01 Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * Node: cluster01 (1): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" =#=#=#= End test: Complete text output, filtered by group name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output, filtered by group name in cloned group -=#=#=#= Begin test: XML output, filtered by group name in cloned group =#=#=#= +* Passed: crm_mon - Complete text output, filtered by group name in cloned group +=#=#=#= Begin test: Output, filtered by group name in cloned group (XML) =#=#=#= -=#=#=#= End test: XML output, filtered by group name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - XML output, filtered by group name in cloned group +=#=#=#= End test: Output, filtered by group name in cloned group (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output, filtered by group name in cloned group (XML) =#=#=#= Begin test: Complete text output, filtered by exact group instance name in cloned group =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:1: * mysql-proxy (lsb:mysql-proxy): Started cluster01 Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * Node: cluster01 (1): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" =#=#=#= End test: Complete text output, filtered by exact group instance name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output, filtered by exact group instance name in cloned group -=#=#=#= Begin test: XML output, filtered by exact group instance name in cloned group =#=#=#= +* Passed: crm_mon - Complete text output, filtered by exact group instance name in cloned group +=#=#=#= Begin test: Output, filtered by exact group instance name in cloned group (XML) =#=#=#= -=#=#=#= End test: XML output, filtered by exact group instance name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - XML output, filtered by exact group instance name in cloned group +=#=#=#= End test: Output, filtered by exact group instance name in cloned group (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output, filtered by exact group instance name in cloned group (XML) =#=#=#= Begin test: Complete text output, filtered by primitive name in cloned group =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:0: * mysql-proxy (lsb:mysql-proxy): Started cluster02 * Resource Group: mysql-group:1: * mysql-proxy (lsb:mysql-proxy): Started cluster01 Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * Node: cluster01 (1): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" =#=#=#= End test: Complete text output, filtered by primitive name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output, filtered by primitive name in cloned group -=#=#=#= Begin test: XML output, filtered by primitive name in cloned group =#=#=#= +* Passed: crm_mon - Complete text output, filtered by primitive name in cloned group +=#=#=#= Begin test: Output, filtered by primitive name in cloned group (XML) =#=#=#= -=#=#=#= End test: XML output, filtered by primitive name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - XML output, filtered by primitive name in cloned group +=#=#=#= End test: Output, filtered by primitive name in cloned group (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output, filtered by primitive name in cloned group (XML) =#=#=#= Begin test: Complete text output, filtered by exact primitive instance name in cloned group =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster01: online * GuestNode httpd-bundle-1@cluster02: online * GuestNode httpd-bundle-2@: OFFLINE Active Resources: * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:1: * mysql-proxy (lsb:mysql-proxy): Started cluster01 Node Attributes: * Node: cluster01 (1): * location : office * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * Node: cluster01 (1): * mysql-proxy: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" =#=#=#= End test: Complete text output, filtered by exact primitive instance name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output, filtered by exact primitive instance name in cloned group -=#=#=#= Begin test: XML output, filtered by exact primitive instance name in cloned group =#=#=#= +* Passed: crm_mon - Complete text output, filtered by exact primitive instance name in cloned group +=#=#=#= Begin test: Output, filtered by exact primitive instance name in cloned group (XML) =#=#=#= -=#=#=#= End test: XML output, filtered by exact primitive instance name in cloned group - OK (0) =#=#=#= -* Passed: crm_mon - XML output, filtered by exact primitive instance name in cloned group -=#=#=#= Begin test: Text output of partially active resources =#=#=#= +=#=#=#= End test: Output, filtered by exact primitive instance name in cloned group (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output, filtered by exact primitive instance name in cloned group (XML) +=#=#=#= Begin test: Check that CIB_file="-" works =#=#=#= +Cluster Summary: + * Stack: corosync + * Current DC: cluster02 (version) - partition with quorum + * Last updated: + * Last change: + * 5 nodes configured + * 32 resource instances configured (4 DISABLED) + +Node List: + * Online: [ cluster01 cluster02 ] + * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] + +Active Resources: + * Clone Set: ping-clone [ping]: + * Started: [ cluster01 cluster02 ] + * Fencing (stonith:fence_xvm): Started cluster01 + * dummy (ocf:pacemaker:Dummy): Started cluster02 + * Container bundle set: httpd-bundle [pcmk:http]: + * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 + * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 + * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped + * Resource Group: exim-group: + * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 + * Email (lsb:exim): Started cluster02 + * Clone Set: mysql-clone-group [mysql-group]: + * Started: [ cluster01 cluster02 ] + * Clone Set: promotable-clone [promotable-rsc] (promotable): + * Promoted: [ cluster02 ] + * Unpromoted: [ cluster01 ] +=#=#=#= End test: Check that CIB_file="-" works - OK (0) =#=#=#= +* Passed: crm_mon - Check that CIB_file="-" works +=#=#=#= Begin test: Output of partially active resources =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster02: online * GuestNode httpd-bundle-1@cluster01: online Active Resources: * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster01 * ping (ocf:pacemaker:ping): Stopped (not installed) * Fencing (stonith:fence_xvm): Started cluster01 * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd-bundle-ip-192.168.122.131 (ocf:heartbeat:IPaddr2): Started cluster02 * httpd (ocf:heartbeat:apache): Started httpd-bundle-0 * httpd-bundle-docker-0 (ocf:heartbeat:docker): Started cluster02 * httpd-bundle-0 (ocf:pacemaker:remote): Started cluster02 * Replica[1] * httpd-bundle-ip-192.168.122.132 (ocf:heartbeat:IPaddr2): Started cluster01 * httpd (ocf:heartbeat:apache): FAILED httpd-bundle-1 * httpd-bundle-docker-1 (ocf:heartbeat:docker): Started cluster01 * httpd-bundle-1 (ocf:pacemaker:remote): Started cluster01 * Resource Group: partially-active-group (2 members inactive): * dummy-1 (ocf:pacemaker:Dummy): Started cluster02 * dummy-2 (ocf:pacemaker:Dummy): FAILED cluster02 Failed Resource Actions: * dummy-2_monitor_0 on cluster02 'unimplemented feature' (3): call=2, status='complete', queued=0ms, exec=33ms -=#=#=#= End test: Text output of partially active resources - OK (0) =#=#=#= -* Passed: crm_mon - Text output of partially active resources -=#=#=#= Begin test: XML output of partially active resources =#=#=#= +=#=#=#= End test: Output of partially active resources - OK (0) =#=#=#= +* Passed: crm_mon - Output of partially active resources +=#=#=#= Begin test: Output of partially active resources (XML) =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 - + -=#=#=#= End test: XML output of partially active resources - OK (0) =#=#=#= -* Passed: crm_mon - XML output of partially active resources -=#=#=#= Begin test: Text output of partially active resources, with inactive resources =#=#=#= +=#=#=#= End test: Output of partially active resources (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output of partially active resources (XML) +=#=#=#= Begin test: Output of partially active resources, with inactive resources =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster02: online * GuestNode httpd-bundle-1@cluster01: online Full List of Resources: * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster01 * ping (ocf:pacemaker:ping): Stopped (not installed) * Fencing (stonith:fence_xvm): Started cluster01 * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd-bundle-ip-192.168.122.131 (ocf:heartbeat:IPaddr2): Started cluster02 * httpd (ocf:heartbeat:apache): Started httpd-bundle-0 * httpd-bundle-docker-0 (ocf:heartbeat:docker): Started cluster02 * httpd-bundle-0 (ocf:pacemaker:remote): Started cluster02 * Replica[1] * httpd-bundle-ip-192.168.122.132 (ocf:heartbeat:IPaddr2): Started cluster01 * httpd (ocf:heartbeat:apache): FAILED httpd-bundle-1 * httpd-bundle-docker-1 (ocf:heartbeat:docker): Started cluster01 * httpd-bundle-1 (ocf:pacemaker:remote): Started cluster01 * Resource Group: partially-active-group: * dummy-1 (ocf:pacemaker:Dummy): Started cluster02 * dummy-2 (ocf:pacemaker:Dummy): FAILED cluster02 * dummy-3 (ocf:pacemaker:Dummy): Stopped (disabled) * dummy-4 (ocf:pacemaker:Dummy): Stopped (not installed) * smart-mon (ocf:pacemaker:HealthSMART): Stopped (not installed) Failed Resource Actions: * dummy-2_monitor_0 on cluster02 'unimplemented feature' (3): call=2, status='complete', queued=0ms, exec=33ms -=#=#=#= End test: Text output of partially active resources, with inactive resources - OK (0) =#=#=#= -* Passed: crm_mon - Text output of partially active resources, with inactive resources +=#=#=#= End test: Output of partially active resources, with inactive resources - OK (0) =#=#=#= +* Passed: crm_mon - Output of partially active resources, with inactive resources =#=#=#= Begin test: Complete brief text output, with inactive resources =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster02: online * GuestNode httpd-bundle-1@cluster01: online Full List of Resources: * 0/1 (ocf:pacemaker:HealthSMART): Active * 1/1 (stonith:fence_xvm): Active cluster01 * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster01 * ping (ocf:pacemaker:ping): Stopped (not installed) * Container bundle set: httpd-bundle [pcmk:http]: * Replica[0] * httpd-bundle-ip-192.168.122.131 (ocf:heartbeat:IPaddr2): Started cluster02 * httpd (ocf:heartbeat:apache): Started httpd-bundle-0 * httpd-bundle-docker-0 (ocf:heartbeat:docker): Started cluster02 * httpd-bundle-0 (ocf:pacemaker:remote): Started cluster02 * Replica[1] * httpd-bundle-ip-192.168.122.132 (ocf:heartbeat:IPaddr2): Started cluster01 * httpd (ocf:heartbeat:apache): FAILED httpd-bundle-1 * httpd-bundle-docker-1 (ocf:heartbeat:docker): Started cluster01 * httpd-bundle-1 (ocf:pacemaker:remote): Started cluster01 * Resource Group: partially-active-group: * 2/4 (ocf:pacemaker:Dummy): Active cluster02 Node Attributes: * Node: cluster01 (1): * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * dummy-1: migration-threshold=1000000: * (2) start * dummy-2: migration-threshold=1000000: * (2) probe * dummy-4: migration-threshold=1000000: * (2) probe * smart-mon: migration-threshold=1000000: * (9) probe * ping: migration-threshold=1000000: * (6) probe * Node: cluster01 (1): * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * ping: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0@cluster02: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1@cluster01: * httpd: migration-threshold=1000000: * (1) probe Failed Resource Actions: * dummy-2_monitor_0 on cluster02 'unimplemented feature' (3): call=2, status='complete', queued=0ms, exec=33ms =#=#=#= End test: Complete brief text output, with inactive resources - OK (0) =#=#=#= -* Passed: crm_mon - Complete brief text output, with inactive resources +* Passed: crm_mon - Complete brief text output, with inactive resources =#=#=#= Begin test: Text output of partially active group =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Resource Group: partially-active-group (2 members inactive): * dummy-1 (ocf:pacemaker:Dummy): Started cluster02 * dummy-2 (ocf:pacemaker:Dummy): FAILED cluster02 =#=#=#= End test: Text output of partially active group - OK (0) =#=#=#= -* Passed: crm_mon - Text output of partially active group +* Passed: crm_mon - Text output of partially active group =#=#=#= Begin test: Text output of partially active group, with inactive resources =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Full List of Resources: * Resource Group: partially-active-group: * dummy-1 (ocf:pacemaker:Dummy): Started cluster02 * dummy-2 (ocf:pacemaker:Dummy): FAILED cluster02 * dummy-3 (ocf:pacemaker:Dummy): Stopped (disabled) * dummy-4 (ocf:pacemaker:Dummy): Stopped (not installed) =#=#=#= End test: Text output of partially active group, with inactive resources - OK (0) =#=#=#= -* Passed: crm_mon - Text output of partially active group, with inactive resources +* Passed: crm_mon - Text output of partially active group, with inactive resources =#=#=#= Begin test: Text output of active member of partially active group =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Online: [ cluster01 cluster02 ] * GuestOnline: [ httpd-bundle-0 httpd-bundle-1 ] Active Resources: * Resource Group: partially-active-group (2 members inactive): * dummy-1 (ocf:pacemaker:Dummy): Started cluster02 =#=#=#= End test: Text output of active member of partially active group - OK (0) =#=#=#= -* Passed: crm_mon - Text output of active member of partially active group +* Passed: crm_mon - Text output of active member of partially active group =#=#=#= Begin test: Text output of inactive member of partially active group =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1 * Node cluster02 (2): online, feature set <3.15.1 * GuestNode httpd-bundle-0@cluster02: online * GuestNode httpd-bundle-1@cluster01: online Active Resources: * Resource Group: partially-active-group (2 members inactive): * dummy-2 (ocf:pacemaker:Dummy): FAILED cluster02 Failed Resource Actions: * dummy-2_monitor_0 on cluster02 'unimplemented feature' (3): call=2, status='complete', queued=0ms, exec=33ms =#=#=#= End test: Text output of inactive member of partially active group - OK (0) =#=#=#= -* Passed: crm_mon - Text output of inactive member of partially active group +* Passed: crm_mon - Text output of inactive member of partially active group =#=#=#= Begin test: Complete brief text output grouped by node, with inactive resources =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (2) (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Node cluster01 (1): online, feature set <3.15.1: * Resources: * 1 (ocf:heartbeat:IPaddr2): Active * 1 (ocf:heartbeat:docker): Active * 1 (ocf:pacemaker:ping): Active * 1 (ocf:pacemaker:remote): Active * 1 (stonith:fence_xvm): Active * Node cluster02 (2): online, feature set <3.15.1: * Resources: * 1 (ocf:heartbeat:IPaddr2): Active * 1 (ocf:heartbeat:docker): Active * 2 (ocf:pacemaker:Dummy): Active * 1 (ocf:pacemaker:remote): Active * GuestNode httpd-bundle-0@cluster02: online: * Resources: * 1 (ocf:heartbeat:apache): Active * GuestNode httpd-bundle-1@cluster01: online: * Resources: * 1 (ocf:heartbeat:apache): Active Inactive Resources: * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster01 * ping (ocf:pacemaker:ping): Stopped (not installed) * Resource Group: partially-active-group: * 2/4 (ocf:pacemaker:Dummy): Active cluster02 * smart-mon (ocf:pacemaker:HealthSMART): Stopped (not installed) Node Attributes: * Node: cluster01 (1): * pingd : 1000 * Node: cluster02 (2): * pingd : 1000 Operations: * Node: cluster02 (2): * httpd-bundle-ip-192.168.122.131: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-0: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * dummy-1: migration-threshold=1000000: * (2) start * dummy-2: migration-threshold=1000000: * (2) probe * dummy-4: migration-threshold=1000000: * (2) probe * smart-mon: migration-threshold=1000000: * (9) probe * ping: migration-threshold=1000000: * (6) probe * Node: cluster01 (1): * Fencing: migration-threshold=1000000: * (15) start * (20) monitor: interval="60000ms" * ping: migration-threshold=1000000: * (2) start * (3) monitor: interval="10000ms" * httpd-bundle-ip-192.168.122.132: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-docker-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="60000ms" * httpd-bundle-1: migration-threshold=1000000: * (2) start * (3) monitor: interval="30000ms" * Node: httpd-bundle-0@cluster02: * httpd: migration-threshold=1000000: * (1) start * Node: httpd-bundle-1@cluster01: * httpd: migration-threshold=1000000: * (1) probe Failed Resource Actions: * dummy-2_monitor_0 on cluster02 'unimplemented feature' (3): call=2, status='complete', queued=0ms, exec=33ms =#=#=#= End test: Complete brief text output grouped by node, with inactive resources - OK (0) =#=#=#= -* Passed: crm_mon - Complete brief text output grouped by node, with inactive resources +* Passed: crm_mon - Complete brief text output grouped by node, with inactive resources =#=#=#= Begin test: Text output of partially active resources, with inactive resources, filtered by node =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 16 resource instances configured (1 DISABLED) Node List: * Online: [ cluster01 ] Full List of Resources: * Clone Set: ping-clone [ping]: * Started: [ cluster01 ] * Fencing (stonith:fence_xvm): Started cluster01 * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): FAILED cluster01 * smart-mon (ocf:pacemaker:HealthSMART): Stopped (not installed) =#=#=#= End test: Text output of partially active resources, with inactive resources, filtered by node - OK (0) =#=#=#= -* Passed: crm_mon - Text output of partially active resources, with inactive resources, filtered by node -=#=#=#= Begin test: Text output of partially active resources, filtered by node =#=#=#= +* Passed: crm_mon - Text output of partially active resources, with inactive resources, filtered by node +=#=#=#= Begin test: Output of partially active resources, filtered by node (XML) =#=#=#= unpack_rsc_op error: Preventing dummy-2 from restarting on cluster02 because of hard failure (unimplemented feature) | dummy-2_last_failure_0 unpack_rsc_op error: Preventing httpd-bundle-clone from restarting on httpd-bundle-1 because of hard failure (invalid parameter) | httpd_last_failure_0 - + -=#=#=#= End test: Text output of partially active resources, filtered by node - OK (0) =#=#=#= -* Passed: crm_mon - Text output of partially active resources, filtered by node -=#=#=#= Begin test: Text output of active unmanaged resource on offline node =#=#=#= +=#=#=#= End test: Output of partially active resources, filtered by node (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output of partially active resources, filtered by node (XML) +=#=#=#= Begin test: Output of active unmanaged resource on offline node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 2 nodes configured * 3 resource instances configured *** Resource management is DISABLED *** The cluster will not attempt to start, stop or recover services Node List: * Online: [ cluster01 ] * OFFLINE: [ cluster02 ] Active Resources: * Fencing (stonith:fence_xvm): Started cluster01 (maintenance) * rsc1 (ocf:pacemaker:Dummy): Started cluster01 (maintenance) * rsc2 (ocf:pacemaker:Dummy): Started cluster02 (maintenance) -=#=#=#= End test: Text output of active unmanaged resource on offline node - OK (0) =#=#=#= -* Passed: crm_mon - Text output of active unmanaged resource on offline node -=#=#=#= Begin test: XML output of active unmanaged resource on offline node =#=#=#= +=#=#=#= End test: Output of active unmanaged resource on offline node - OK (0) =#=#=#= +* Passed: crm_mon - Output of active unmanaged resource on offline node +=#=#=#= Begin test: Output of active unmanaged resource on offline node (XML) =#=#=#= -=#=#=#= End test: XML output of active unmanaged resource on offline node - OK (0) =#=#=#= -* Passed: crm_mon - XML output of active unmanaged resource on offline node +=#=#=#= End test: Output of active unmanaged resource on offline node (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output of active unmanaged resource on offline node (XML) =#=#=#= Begin test: Brief text output of active unmanaged resource on offline node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 2 nodes configured * 3 resource instances configured *** Resource management is DISABLED *** The cluster will not attempt to start, stop or recover services Node List: * Online: [ cluster01 ] * OFFLINE: [ cluster02 ] Active Resources: * 1 (ocf:pacemaker:Dummy): Active cluster01 * 1 (ocf:pacemaker:Dummy): Active cluster02 * 1 (stonith:fence_xvm): Active cluster01 =#=#=#= End test: Brief text output of active unmanaged resource on offline node - OK (0) =#=#=#= -* Passed: crm_mon - Brief text output of active unmanaged resource on offline node +* Passed: crm_mon - Brief text output of active unmanaged resource on offline node =#=#=#= Begin test: Brief text output of active unmanaged resource on offline node, grouped by node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 2 nodes configured * 3 resource instances configured *** Resource management is DISABLED *** The cluster will not attempt to start, stop or recover services Node List: * Node cluster01: online: * Resources: * 1 (ocf:pacemaker:Dummy): Active * 1 (stonith:fence_xvm): Active * Node cluster02: OFFLINE: * Resources: * 1 (ocf:pacemaker:Dummy): Active =#=#=#= End test: Brief text output of active unmanaged resource on offline node, grouped by node - OK (0) =#=#=#= -* Passed: crm_mon - Brief text output of active unmanaged resource on offline node, grouped by node -=#=#=#= Begin test: Text output of all resources with maintenance-mode enabled =#=#=#= +* Passed: crm_mon - Brief text output of active unmanaged resource on offline node, grouped by node +=#=#=#= Begin test: Output of all resources with maintenance-mode enabled =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) *** Resource management is DISABLED *** The cluster will not attempt to start, stop or recover services Node List: * GuestNode httpd-bundle-0: maintenance * GuestNode httpd-bundle-1: maintenance * Online: [ cluster01 cluster02 ] Full List of Resources: * Clone Set: ping-clone [ping] (maintenance): * ping (ocf:pacemaker:ping): Started cluster02 (maintenance) * ping (ocf:pacemaker:ping): Started cluster01 (maintenance) * Fencing (stonith:fence_xvm): Started cluster01 (maintenance) * dummy (ocf:pacemaker:Dummy): Started cluster02 (maintenance) * Clone Set: inactive-clone [inactive-dhcpd] (disabled, maintenance): * Stopped (disabled): [ cluster01 cluster02 ] * Resource Group: inactive-group (disabled, maintenance): * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled, maintenance) * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled, maintenance) * Container bundle set: httpd-bundle [pcmk:http] (maintenance): * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 (maintenance) * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 (maintenance) * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped (maintenance) * Resource Group: exim-group (maintenance): * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 (maintenance) * Email (lsb:exim): Started cluster02 (maintenance) * Clone Set: mysql-clone-group [mysql-group] (maintenance): * Resource Group: mysql-group:0 (maintenance): * mysql-proxy (lsb:mysql-proxy): Started cluster02 (maintenance) * Resource Group: mysql-group:1 (maintenance): * mysql-proxy (lsb:mysql-proxy): Started cluster01 (maintenance) * Clone Set: promotable-clone [promotable-rsc] (promotable, maintenance): * promotable-rsc (ocf:pacemaker:Stateful): Promoted cluster02 (maintenance) * promotable-rsc (ocf:pacemaker:Stateful): Unpromoted cluster01 (maintenance) -=#=#=#= End test: Text output of all resources with maintenance-mode enabled - OK (0) =#=#=#= -* Passed: crm_mon - Text output of all resources with maintenance-mode enabled -=#=#=#= Begin test: XML output of all resources with maintenance-mode enabled =#=#=#= +=#=#=#= End test: Output of all resources with maintenance-mode enabled - OK (0) =#=#=#= +* Passed: crm_mon - Output of all resources with maintenance-mode enabled +=#=#=#= Begin test: Output of all resources with maintenance-mode enabled (XML) =#=#=#= -=#=#=#= End test: XML output of all resources with maintenance-mode enabled - OK (0) =#=#=#= -* Passed: crm_mon - XML output of all resources with maintenance-mode enabled -=#=#=#= Begin test: Text output of all resources with maintenance enabled for a node =#=#=#= +=#=#=#= End test: Output of all resources with maintenance-mode enabled (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output of all resources with maintenance-mode enabled (XML) +=#=#=#= Begin test: Output of all resources with maintenance enabled for a node =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * Node cluster02: maintenance * GuestNode httpd-bundle-1: maintenance * Online: [ cluster01 ] * GuestOnline: [ httpd-bundle-0 ] Full List of Resources: * Clone Set: ping-clone [ping]: * ping (ocf:pacemaker:ping): Started cluster02 (maintenance) * Started: [ cluster01 ] * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 (maintenance) * Clone Set: inactive-clone [inactive-dhcpd] (disabled): * Stopped (disabled): [ cluster01 cluster02 ] * Resource Group: inactive-group (disabled): * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled) * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled) * Container bundle set: httpd-bundle [pcmk:http]: * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 (maintenance) * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped * Resource Group: exim-group: * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 (maintenance) * Email (lsb:exim): Started cluster02 (maintenance) * Clone Set: mysql-clone-group [mysql-group]: * Resource Group: mysql-group:0: * mysql-proxy (lsb:mysql-proxy): Started cluster02 (maintenance) * Started: [ cluster01 ] * Clone Set: promotable-clone [promotable-rsc] (promotable): * promotable-rsc (ocf:pacemaker:Stateful): Promoted cluster02 (maintenance) * Unpromoted: [ cluster01 ] -=#=#=#= End test: Text output of all resources with maintenance enabled for a node - OK (0) =#=#=#= -* Passed: crm_mon - Text output of all resources with maintenance enabled for a node -=#=#=#= Begin test: XML output of all resources with maintenance enabled for a node =#=#=#= +=#=#=#= End test: Output of all resources with maintenance enabled for a node - OK (0) =#=#=#= +* Passed: crm_mon - Output of all resources with maintenance enabled for a node +=#=#=#= Begin test: Output of all resources with maintenance enabled for a node (XML) =#=#=#= -=#=#=#= End test: XML output of all resources with maintenance enabled for a node - OK (0) =#=#=#= -* Passed: crm_mon - XML output of all resources with maintenance enabled for a node -=#=#=#= Begin test: Text output of all resources with maintenance meta attribute true =#=#=#= +=#=#=#= End test: Output of all resources with maintenance enabled for a node (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output of all resources with maintenance enabled for a node (XML) +=#=#=#= Begin test: Output of all resources with maintenance meta attribute true =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cluster02 (version) - partition with quorum * Last updated: * Last change: * 5 nodes configured * 32 resource instances configured (4 DISABLED) Node List: * GuestNode httpd-bundle-0: maintenance * GuestNode httpd-bundle-1: maintenance * Online: [ cluster01 cluster02 ] Full List of Resources: * Clone Set: ping-clone [ping] (maintenance): * ping (ocf:pacemaker:ping): Started cluster02 (maintenance) * ping (ocf:pacemaker:ping): Started cluster01 (maintenance) * Fencing (stonith:fence_xvm): Started cluster01 * dummy (ocf:pacemaker:Dummy): Started cluster02 (maintenance) * Clone Set: inactive-clone [inactive-dhcpd] (disabled, maintenance): * Stopped (disabled): [ cluster01 cluster02 ] * Resource Group: inactive-group (disabled, maintenance): * inactive-dummy-1 (ocf:pacemaker:Dummy): Stopped (disabled, maintenance) * inactive-dummy-2 (ocf:pacemaker:Dummy): Stopped (disabled, maintenance) * Container bundle set: httpd-bundle [pcmk:http] (maintenance): * httpd-bundle-0 (192.168.122.131) (ocf:heartbeat:apache): Started cluster01 (maintenance) * httpd-bundle-1 (192.168.122.132) (ocf:heartbeat:apache): Started cluster02 (maintenance) * httpd-bundle-2 (192.168.122.133) (ocf:heartbeat:apache): Stopped (maintenance) * Resource Group: exim-group (maintenance): * Public-IP (ocf:heartbeat:IPaddr): Started cluster02 (maintenance) * Email (lsb:exim): Started cluster02 (maintenance) * Clone Set: mysql-clone-group [mysql-group] (maintenance): * Resource Group: mysql-group:0 (maintenance): * mysql-proxy (lsb:mysql-proxy): Started cluster02 (maintenance) * Resource Group: mysql-group:1 (maintenance): * mysql-proxy (lsb:mysql-proxy): Started cluster01 (maintenance) * Clone Set: promotable-clone [promotable-rsc] (promotable, maintenance): * promotable-rsc (ocf:pacemaker:Stateful): Promoted cluster02 (maintenance) * promotable-rsc (ocf:pacemaker:Stateful): Unpromoted cluster01 (maintenance) -=#=#=#= End test: Text output of all resources with maintenance meta attribute true - OK (0) =#=#=#= -* Passed: crm_mon - Text output of all resources with maintenance meta attribute true -=#=#=#= Begin test: XML output of all resources with maintenance meta attribute true =#=#=#= +=#=#=#= End test: Output of all resources with maintenance meta attribute true - OK (0) =#=#=#= +* Passed: crm_mon - Output of all resources with maintenance meta attribute true +=#=#=#= Begin test: Output of all resources with maintenance meta attribute true (XML) =#=#=#= -=#=#=#= End test: XML output of all resources with maintenance meta attribute true - OK (0) =#=#=#= -* Passed: crm_mon - XML output of all resources with maintenance meta attribute true +=#=#=#= End test: Output of all resources with maintenance meta attribute true (XML) - OK (0) =#=#=#= +* Passed: crm_mon - Output of all resources with maintenance meta attribute true (XML) =#=#=#= Begin test: Text output of guest node's container on different node from its remote resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cent7-host2 (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 10 resource instances configured Node List: * Online: [ cent7-host1 cent7-host2 ] * GuestOnline: [ httpd-bundle1-0 httpd-bundle2-0 ] Active Resources: * Resource Group: group1: * dummy1 (ocf:pacemaker:Dummy): Started cent7-host1 * Resource Group: group2: * dummy2 (ocf:pacemaker:Dummy): Started cent7-host2 * Container bundle: httpd-bundle1 [pcmktest:http]: * httpd-bundle1-0 (192.168.20.188) (ocf:heartbeat:apache): Started cent7-host1 * Container bundle: httpd-bundle2 [pcmktest:http]: * httpd-bundle2-0 (192.168.20.190) (ocf:heartbeat:apache): Started cent7-host2 =#=#=#= End test: Text output of guest node's container on different node from its remote resource - OK (0) =#=#=#= -* Passed: crm_mon - Text output of guest node's container on different node from its remote resource +* Passed: crm_mon - Text output of guest node's container on different node from its remote resource =#=#=#= Begin test: Complete text output of guest node's container on different node from its remote resource =#=#=#= Cluster Summary: * Stack: corosync * Current DC: cent7-host2 (3232262829) (version) - partition with quorum * Last updated: * Last change: * 4 nodes configured * 10 resource instances configured Node List: * Node cent7-host1 (3232262828): online, feature set <3.15.1 * Node cent7-host2 (3232262829): online, feature set <3.15.1 * GuestNode httpd-bundle1-0@cent7-host1: online * GuestNode httpd-bundle2-0@cent7-host2: online Active Resources: * Resource Group: group1: * dummy1 (ocf:pacemaker:Dummy): Started cent7-host1 * Resource Group: group2: * dummy2 (ocf:pacemaker:Dummy): Started cent7-host2 * Container bundle: httpd-bundle1 [pcmktest:http]: * httpd-bundle1-ip-192.168.20.188 (ocf:heartbeat:IPaddr2): Started cent7-host1 * httpd1 (ocf:heartbeat:apache): Started httpd-bundle1-0 * httpd-bundle1-docker-0 (ocf:heartbeat:docker): Started cent7-host1 * httpd-bundle1-0 (ocf:pacemaker:remote): Started cent7-host2 * Container bundle: httpd-bundle2 [pcmktest:http]: * httpd-bundle2-ip-192.168.20.190 (ocf:heartbeat:IPaddr2): Started cent7-host2 * httpd2 (ocf:heartbeat:apache): Started httpd-bundle2-0 * httpd-bundle2-docker-0 (ocf:heartbeat:docker): Started cent7-host2 * httpd-bundle2-0 (ocf:pacemaker:remote): Started cent7-host2 =#=#=#= End test: Complete text output of guest node's container on different node from its remote resource - OK (0) =#=#=#= -* Passed: crm_mon - Complete text output of guest node's container on different node from its remote resource +* Passed: crm_mon - Complete text output of guest node's container on different node from its remote resource diff --git a/cts/cts-cli.in b/cts/cts-cli.in index b313feb8ec..fc62552869 100644 --- a/cts/cts-cli.in +++ b/cts/cts-cli.in @@ -1,930 +1,1137 @@ #!@PYTHON@ """Regression tests for Pacemaker's command line tools.""" # pylint doesn't like the module name "cts-cli" which is an invalid complaint for this file # but probably something we want to continue warning about elsewhere # pylint: disable=invalid-name # pacemaker imports need to come after we modify sys.path, which pylint will complain about. # pylint: disable=wrong-import-position __copyright__ = "Copyright 2024 the Pacemaker project contributors" __license__ = "GNU General Public License version 2 or later (GPLv2+) WITHOUT ANY WARRANTY" import argparse from contextlib import contextmanager from functools import partial from multiprocessing import Pool, cpu_count import os import pathlib import re from shutil import copyfile import signal import subprocess import sys from tempfile import NamedTemporaryFile, mkstemp import types # These imports allow running from a source checkout after running `make`. if os.path.exists("@abs_top_srcdir@/python"): sys.path.insert(0, "@abs_top_srcdir@/python") # pylint: disable=comparison-of-constants,comparison-with-itself,condition-evals-to-constant if os.path.exists("@abs_top_builddir@/python") and "@abs_top_builddir@" != "@abs_top_srcdir@": sys.path.insert(0, "@abs_top_builddir@/python") from pacemaker._cts.errors import XmlValidationError from pacemaker._cts.validate import validate from pacemaker.buildoptions import BuildOptions from pacemaker.exitstatus import ExitStatus # The default list of tests to run, in the order they should be run default_tests = ["access_render", "daemons", "dates", "error_codes", "tools", "crm_mon", "acls", "validity", "upgrade", "rules", "feature_set"] other_tests = ["agents"] # The directory containing this program test_home = os.path.dirname(os.path.realpath(__file__)) # Arguments to pass to valgrind VALGRIND_ARGS = ["-q", "--gen-suppressions=all", "--show-reachable=no", "--leak-check=full", "--trace-children=no", "--time-stamp=yes", "--num-callers=20", "--suppressions=%s/valgrind-pcmk.suppressions" % test_home] def apply_substitutions(s, extra=None): """Apply text substitutions to an input string and return it.""" substitutions = { + "cts_cli_data": "%s/cli" % test_home, "test_home": test_home, } if extra is not None: substitutions.update(extra) return s.format(**substitutions) def copy_existing_cib(existing): """ Generate a CIB by copying an existing one to a temporary location. This is suitable for use with the cib_gen= parameter to the TestGroup class. """ (fp, new) = mkstemp(prefix="cts-cli.cib.xml.") os.close(fp) copyfile(apply_substitutions(existing), new) return new def current_cib(): """Return the complete current CIB.""" with environ({"CIB_user": "root"}): return subprocess.check_output(["cibadmin", "-Q"], encoding="utf-8") def make_test_group(desc, cmd, classes, **kwargs): """ Create a TestGroup that replicates the same test for multiple classes. The given description, cmd, and kwargs will be passed as arguments to each Test subclass in the classes parameter. The resulting objects will then be added to a TestGroup and returned. The main purpose of this function is to be able to run the same test for both text and XML formats without having to duplicate everything. Thus, the cmd string may contain "{fmt}", which will have any --output-as= class variable substituted in. """ tests = [] for c in classes: obj = c(desc, apply_substitutions(cmd, extra={"fmt": c.format_args}), **kwargs) tests.append(obj) return TestGroup(tests) def run_cmd_list(cmds): """ Run one or more shell commands. cmds can be: * A string * A Python function * A list of the above Raises subprocess.CalledProcessError on error. """ if cmds is None: return if isinstance(cmds, (str, types.FunctionType)): cmds = [cmds] for c in cmds: if isinstance(c, types.FunctionType): c() else: subprocess.run(apply_substitutions(c), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True, universal_newlines=True, check=True) def sanitize_output(s): """ Replace content in the output expected to change between test runs. This is stuff like version numbers, timestamps, source line numbers, build options, system names and messages, etc. """ # A list of tuples of regular expressions and their replacements. replacements = [ + (r'Last change: .*', r'Last change:'), + (r'Last updated: .*', r'Last updated:'), + (r' api-version="[^"]*"', r' api-version="X"'), (r' default="[^"]*"', r' default=""'), - (r' version="[^"]*"', r' version=""') + (r'last_change time=".*"', r'last_change time=""'), + (r'last_update time=".*"', r'last_update time=""'), + (r' last-rc-change=[\'"][-+A-Za-z0-9: ]*[\'"],?', r''), + (r'request=".*(crm_[a-zA-Z0-9]*)', r'request="\1'), + (r'.*\((unpack_.*)@.*\.c:[0-9][0-9]*\)', r'\1'), + (r' version="[^"]*"', r' version=""'), + (r'\(version .*\)', r'(version)') ] new_output = [] for line in s: for (pattern, repl) in replacements: line = re.sub(pattern, repl, line) new_output.append(line) return new_output @contextmanager def environ(env): """ Run code in an environment modified with the provided dict. This context manager augments the current process environment with the provided dict, allowing code to be constructed like so: e = {"CIB_user": "xyx"} with environ(e): ... When the context manager exits, the previous environment will be restored. It is possible to remove an environment key (whether it was in the environment by default, or given with a nested call to this context) by passing None for the value. Additionally, this context manager accepts None for the env parameter, in which case nothing will be done. Finally, note that values in env will be passed to apply_substitutions before being set in the environment. """ if env is None: env = {} original_env = {} else: original_env = os.environ.copy() for k, v in env.items(): if v is None: os.environ.pop(k) else: os.environ[k] = apply_substitutions(v) try: yield finally: for k, v in original_env.items(): if v is None: os.environ.pop(k) else: os.environ[k] = v class StdinCmd: """ A class for defining a command that should be run later. subprocess.Popen (and its various helper functions) start running the command immediately, which doesn't work if we want to provide the command when a Test is created, but delay its execution until the environment is defined when the Test is run. This class allows us to do that. """ def __init__(self, cmd): """Create a new StdinCmd instance. Arguments: cmd -- The command string to run later. This string will be passed to apply_substitutions before being executed. """ self._cmd = cmd def run(self): """Run this command, returning a subprocess.Popen object.""" return subprocess.Popen(apply_substitutions(self._cmd), shell=True, encoding="utf-8", stdout=subprocess.PIPE) class Test: """A base class for defining a single command line regression test.""" format_args = "" def __init__(self, desc, cmd, expected_rc=ExitStatus.OK, update_cib=False, setup=None, teardown=None, stdin=None, env=None): """ Create a new Test instance. Arguments: desc -- A short human-readable description of this test cmd -- The command to run for this test, as a string. This string will be passed to apply_substitutions before being executed. Keyword arguments: expected_rc -- The expected return value of cmd update_cib -- If True, the resulting CIB will be printed after performing the test setup -- A shell command to be run in the same environment as cmd, immediately before the test. Valid types are: a string, a Python function, or a list of the above teardown -- Like setup, but runs immediately after the test stdin -- If not None, the text to feed to cmd as its stdin env -- If not None, a dict of values to be added to the test environment. This will be added when the test is run and will override anything given to the TestGroup. """ self.desc = desc self.cmd = cmd self.expected_rc = expected_rc self.update_cib = update_cib self._setup = setup self._teardown = teardown self._stdin = stdin if env is None: self._env = {} else: self._env = env self._output = None @property def output(self): """Return the test's detailed output.""" return self._output def _log_end_test(self, rc): """Log a message when a test ends.""" if isinstance(rc, ExitStatus): rc_str = str(rc) else: if rc < 0: rc = abs(rc) rc_str = signal.strsignal(rc) else: rc = ExitStatus(rc) rc_str = str(rc) self._output.append("=#=#=#= End test: %s - %s (%d) =#=#=#=" % (self.desc, rc_str, rc)) def _log_start_test(self): """Log a message when a test starts.""" self._output.append("=#=#=#= Begin test: %s =#=#=#=" % self.desc) def _log_test_failed(self, app, rc): """Log a message when a test fails.""" self._output.append("* Failed (rc=%.3d): %-23s - %s" % (rc, app, self.desc)) def _log_test_passed(self, app): """Log a message when a test passes.""" self._output.append("* Passed: %-21s - %s" % (app, self.desc)) # pylint: disable=unused-argument def _validate_hook(self, rc, _stdout, _stderr, valgrind=False): """Validate test output.""" self._log_end_test(rc) return rc def _run_setup_teardown(self, cmd, app): """ Run any setup or teardown command required by this test. On success (or if no command is present), return True. On failure, return False and log the stdout/stderr of the command for debugging. Arguments: cmd -- The setup/teardown command(s) to run app -- The base name of the test command, for logging purposes """ try: run_cmd_list(cmd) return True except subprocess.CalledProcessError as exn: rc = exn.returncode self._output.extend(exn.stderr.splitlines()) self._output.extend(exn.stdout.splitlines()) self._log_test_failed(app, rc) return False def run(self, group, env=None, valgrind=False): """ Run this test. Basic output is printed to stdout, while detailed output is available in the self.output property after this function has been run. Return True if the return code matches self.expected_rc, and False otherwise. Arguments: group -- The name of the group this test is a part of, for logging purposes Keyword arguments: env -- If not None, a dict of values to be added to the test environment """ self._output = [] cmd = apply_substitutions(self.cmd) app = cmd.split(" ")[0] test_id = "%s(%s)" % (app, group) print("* Running: %-31s - %s" % (test_id, self.desc)) self._log_start_test() # Add any environment variables specified in Test.__init__ if env is None: env = self._env else: env = env.update(self._env) with environ(env): # Run the setup hook, if any if not self._run_setup_teardown(self._setup, app): return False # Define basic arguments for all forms of running this test. kwargs = {"stdout": subprocess.PIPE, "stderr": subprocess.PIPE, "shell": True, "universal_newlines": True, "check": False} stdin_p = None # Handle the stdin= parameter. if isinstance(self._stdin, StdinCmd): stdin_p = self._stdin.run() kwargs["stdin"] = stdin_p.stdout elif isinstance(self._stdin, pathlib.Path): kwargs["input"] = self._stdin.read_text() else: kwargs["input"] = self._stdin if valgrind: cmd = "valgrind %s %s" % (" ".join(VALGRIND_ARGS), cmd) # Run the test command # We handle the "check" argument above in the kwargs dict. # pylint: disable-msg=subprocess-run-check cmd_p = subprocess.run(cmd, **kwargs) rc = cmd_p.returncode if stdin_p is not None: stdin_p.stdout.close() self._output.extend(cmd_p.stderr.splitlines()) self._output.extend(cmd_p.stdout.splitlines()) # Run the teardown hook, if any if not self._run_setup_teardown(self._teardown, app): return False if self.update_cib: self._output.append("=#=#=#= Current cib after: %s =#=#=#=" % self.desc) self._output.extend(current_cib().splitlines()) self._validate_hook(rc, cmd_p.stdout, cmd_p.stderr, valgrind=valgrind) if rc == self.expected_rc: self._log_test_passed(app) return True self._log_test_failed(app, rc) return False class ValidatingTest(Test): """A Test subclass that additionally runs test results through xmllint.""" format_args = "--output-as=xml" def __init__(self, desc, cmd, **kwargs): """Create a new ValidatingTest instance.""" Test.__init__(self, desc + " (XML)", cmd, **kwargs) def _validate_hook(self, rc, stdout, stderr, valgrind=False): """Validate test output with xmllint.""" # Do not validate if running under valgrind, even if told to do so. Valgrind # will output a lot more stuff that is not XML, so it wouldn't validate # anyway. if valgrind: return Test._validate_hook(self, rc, stdout, stderr, valgrind=valgrind) try: validate(stdout) # We only care about the return code from validation if there was an error, # which will be dealt with below. Here, we want to log the original return # code from the test itself. self._log_end_test(rc) return 0 except XmlValidationError as e: self._output.append("=#=#=#= End test: %s - Failed to validate (%d) =#=#=#=" % (self.desc, e.exit_code)) self._output.extend(e.output.splitlines()) return e.exit_code class TestGroup: """A base class for a group of related tests.""" def __init__(self, tests, cib_gen=None, env=None, setup=None, teardown=None): """ Create a new TestGroup instance. Arguments: tests -- A list of Test instances Keyword arguments: cib_gen -- If not None, a function that generates a CIB file and returns the name of that CIB. This will be added to the test environment as CIB_file and used for all tests in this group. The file will then be deleted after all tests have been run. env -- If not None, a dict of values to be added to the test environment setup -- A command string, python function, or list of the previous types to run immediately before the test. This will be run in the same environment as cmd. teardown -- Like setup, but runs immediately after the tests """ self.tests = tests self._cib_gen = cib_gen self._env = env self._setup = setup self._teardown = teardown self._successes = None self._failures = None self._output = None @property def failures(self): """Return the number of member tests that failed.""" return self._failures @property def output(self): """Return the test's detailed output.""" return self._output @property def successes(self): """Return the number of member tests that succeeded.""" return self._successes def _run_setup_teardown(self, cmd): """ Run any setup or teardown command required by this test group. On success (or if no command is present), return True. On failure, return False and log the stdout/stderr of the command for debugging. Arguments: cmd -- The setup/teardown command(s) to run """ try: run_cmd_list(cmd) return True except subprocess.CalledProcessError as exn: self._output.extend(exn.stderr.splitlines()) self._output.extend(exn.stdout.splitlines()) return False def run(self, group, valgrind=False): """ Run all Test instances that are a part of this regression test. Additionally, record their stdout and stderr in the self.output property and the total number of tests that passed and failed. Arguments: group -- The name of the group this test is a part of, for logging purposes """ self._failures = 0 self._successes = 0 self._output = [] cib_file = None with environ(self._env): # If we were given a way to generate a CIB, do that now and add it to the # environment. if self._cib_gen is not None: cib_file = self._cib_gen() os.environ.update({"CIB_file": cib_file}) # Run the setup hook, if any if not self._run_setup_teardown(self._setup): return False # Run the tests for t in self.tests: rc = t.run(group, valgrind=valgrind) if isinstance(t, TestGroup): self._successes += t.successes self._failures += t.failures else: if rc: self._successes += 1 else: self._failures += 1 self._output.extend(t.output) if cib_file is not None: os.environ.pop("CIB_file") os.unlink(cib_file) # Run the teardown hook, if any if self._run_setup_teardown(self._teardown): return False return True class RegressionTest: """A base class for testing a single command line tool.""" def __init__(self): """Create a new RegressionTest instance.""" self._identical = None self._successes = None self._failures = None self._tempfile = None self._output = None @property def failures(self): """Return the number of member tests that failed.""" return self._failures @property def identical(self): """Return whether the expected output matches the actual output.""" return self._identical @property def name(self): """ Return the name of this regression test. This should be a unique, very short, single word name without any special characters. It must match the name of some word in the default_tests list because it may be given with the -r option on the command line to select only certain tests to run. All subclasses must define this property. """ raise NotImplementedError @property def results_file(self): """Return the location where the regression test results are stored.""" return self._tempfile @property def successes(self): """Return the number of member tests that succeeded.""" return self._successes @property def summary(self): """Return a list of all Passed/Failed lines for tests in this regression test.""" retval = [] for line in self._output: if line.startswith("* Failed") or line.startswith("* Passed"): retval.append(line) return retval @property def tests(self): """A list of Test and TestGroup instances to be run as part of this regression test.""" return [] def cleanup(self): """Remove the temp file where test output is stored.""" os.remove(self._tempfile) self._tempfile = None def diff(self, verbose=False): """ Compare the results of this regression test to the expected results. Arguments: verbose -- If True, the diff will be written to stdout """ args = ["diff", "-wu", "%s/cli/regression.%s.exp" % (test_home, self.name), self.results_file] try: if verbose: subprocess.run(args, check=True) else: subprocess.run(args, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, check=True) self._identical = True except subprocess.CalledProcessError: self._identical = False def process_results(self, verbose): """If actual output differs from expected output, print the actual output.""" if self.identical: self.cleanup() return print(" %s" % self.results_file) if verbose: print("======================================================") with open(self.results_file, encoding="utf-8") as f: print(f.read()) print("======================================================") def run(self, valgrind=False): """ Run all Test and TestGroup instances that are a part of this regression test. Additionally, record their stdout and stderr in the self.output property and the total number of tests that passed and failed. """ self._failures = 0 self._successes = 0 self._output = [] for t in self.tests: rc = t.run(self.name, valgrind=valgrind) if isinstance(t, TestGroup): self._successes += t.successes self._failures += t.failures else: if rc: self._successes += 1 else: self._failures += 1 self._output.extend(t.output) self._output = sanitize_output(self._output) def write(self): """ Write test results to a temporary file and set self.results to its location. If self.run() has not yet been called, or there is otherwise no output, self.results will be None """ if not self._output: self._tempfile = None return s = "\n".join(self._output).encode() s += b"\n" (fp, self._tempfile) = mkstemp(prefix="cts-cli.%s." % self.name) os.write(fp, s) os.close(fp) class DaemonsRegressionTest(RegressionTest): """A class for testing command line options of pacemaker daemons.""" @property def name(self): """Return the name of this regression test.""" return "daemons" @property def tests(self): """A list of Test instances to be run as part of this regression test.""" return [ Test("Get CIB manager metadata", "pacemaker-based metadata"), Test("Get controller metadata", "pacemaker-controld metadata"), Test("Get fencer metadata", "pacemaker-fenced metadata"), Test("Get scheduler metadata", "pacemaker-schedulerd metadata"), ] +class CrmMonRegressionTest(RegressionTest): + """A class for testing crm_mon.""" + + @property + def name(self): + """Return the name of this regression test.""" + return "crm_mon" + + @property + def tests(self): + """A list of Test instances to be run as part of this regression test.""" + basic_tests = [ + make_test_group("Basic output", "crm_mon -1 {fmt}", + [Test, ValidatingTest]), + make_test_group("Output without node section", + "crm_mon -1 --exclude=nodes {fmt}", + [Test, ValidatingTest]), + # The next test doesn't need to be performed for other output formats. It's + # really just a test to make sure that blank lines are correct. + Test("Output with only the node section", + "crm_mon -1 --exclude=all --include=nodes"), + # XML includes everything already so there's no need for a complete test + Test("Complete text output", "crm_mon -1 --include=all"), + # XML includes detailed output already + Test("Complete text output with detail", "crm_mon -1R --include=all"), + Test("Complete brief text output", "crm_mon -1 --include=all --brief"), + Test("Complete text output grouped by node", + "crm_mon -1 --include=all --group-by-node"), + # XML does not have a brief output option + Test("Complete brief text output grouped by node", + "crm_mon -1 --include=all --group-by-node --brief"), + ValidatingTest("Output grouped by node", + "crm_mon --output-as=xml --group-by-node"), + make_test_group("Complete output filtered by node", + "crm_mon -1 --include=all --node=cluster01 {fmt}", + [Test, ValidatingTest]), + make_test_group("Complete output filtered by tag", + "crm_mon -1 --include=all --node=even-nodes {fmt}", + [Test, ValidatingTest]), + make_test_group("Complete output filtered by resource tag", + "crm_mon -1 --include=all --resource=fencing-rscs {fmt}", + [Test, ValidatingTest]), + make_test_group("Output filtered by node that doesn't exist", + "crm_mon -1 --node=blah {fmt}", + [Test, ValidatingTest]), + Test("Basic text output with inactive resources", "crm_mon -1 -r"), + # XML already includes inactive resources + Test("Basic text output with inactive resources, filtered by node", + "crm_mon -1 -r --node=cluster02"), + make_test_group("Complete output filtered by primitive resource", + "crm_mon -1 --include=all --resource=Fencing {fmt}", + [Test, ValidatingTest]), + make_test_group("Complete output filtered by group resource", + "crm_mon -1 --include=all --resource=exim-group {fmt}", + [Test, ValidatingTest]), + Test("Complete text output filtered by group resource member", + "crm_mon -1 --include=all --resource=Public-IP"), + ValidatingTest("Output filtered by group resource member", + "crm_mon --output-as=xml --resource=Email"), + make_test_group("Complete output filtered by clone resource", + "crm_mon -1 --include=all --resource=ping-clone {fmt}", + [Test, ValidatingTest]), + make_test_group("Complete output filtered by clone resource instance", + "crm_mon -1 --include=all --resource=ping {fmt}", + [Test, ValidatingTest]), + Test("Complete text output filtered by exact clone resource instance", + "crm_mon -1 --include=all --show-detail --resource=ping:0"), + ValidatingTest("Output filtered by exact clone resource instance", + "crm_mon --output-as=xml --resource=ping:1"), + make_test_group("Output filtered by resource that doesn't exist", + "crm_mon -1 --resource=blah {fmt}", + [Test, ValidatingTest]), + Test("Basic text output with inactive resources, filtered by tag", + "crm_mon -1 -r --resource=inactive-rscs"), + Test("Basic text output with inactive resources, filtered by bundle resource", + "crm_mon -1 -r --resource=httpd-bundle"), + ValidatingTest("Output filtered by inactive bundle resource", + "crm_mon --output-as=xml --resource=httpd-bundle"), + Test("Basic text output with inactive resources, filtered by bundled IP address resource", + "crm_mon -1 -r --resource=httpd-bundle-ip-192.168.122.131"), + ValidatingTest("Output filtered by bundled IP address resource", + "crm_mon --output-as=xml --resource=httpd-bundle-ip-192.168.122.132"), + Test("Basic text output with inactive resources, filtered by bundled container", + "crm_mon -1 -r --resource=httpd-bundle-docker-1"), + ValidatingTest("Output filtered by bundled container", + "crm_mon --output-as=xml --resource=httpd-bundle-docker-2"), + Test("Basic text output with inactive resources, filtered by bundle connection", + "crm_mon -1 -r --resource=httpd-bundle-0"), + ValidatingTest("Output filtered by bundle connection", + "crm_mon --output-as=xml --resource=httpd-bundle-0"), + Test("Basic text output with inactive resources, filtered by bundled primitive resource", + "crm_mon -1 -r --resource=httpd"), + ValidatingTest("Output filtered by bundled primitive resource", + "crm_mon --output-as=xml --resource=httpd"), + Test("Complete text output, filtered by clone name in cloned group", + "crm_mon -1 --include=all --show-detail --resource=mysql-clone-group"), + ValidatingTest("Output, filtered by clone name in cloned group", + "crm_mon --output-as=xml --resource=mysql-clone-group"), + Test("Complete text output, filtered by group name in cloned group", + "crm_mon -1 --include=all --show-detail --resource=mysql-group"), + ValidatingTest("Output, filtered by group name in cloned group", + "crm_mon --output-as=xml --resource=mysql-group"), + Test("Complete text output, filtered by exact group instance name in cloned group", + "crm_mon -1 --include=all --show-detail --resource=mysql-group:1"), + ValidatingTest("Output, filtered by exact group instance name in cloned group", + "crm_mon --output-as=xml --resource=mysql-group:1"), + Test("Complete text output, filtered by primitive name in cloned group", + "crm_mon -1 --include=all --show-detail --resource=mysql-proxy"), + ValidatingTest("Output, filtered by primitive name in cloned group", + "crm_mon --output-as=xml --resource=mysql-proxy"), + Test("Complete text output, filtered by exact primitive instance name in cloned group", + "crm_mon -1 --include=all --show-detail --resource=mysql-proxy:1"), + ValidatingTest("Output, filtered by exact primitive instance name in cloned group", + "crm_mon --output-as=xml --resource=mysql-proxy:1"), + ] + + partial_tests = [ + Test("Output of partially active resources", "crm_mon -1 --show-detail"), + ValidatingTest("Output of partially active resources", "crm_mon --output-as=xml"), + Test("Output of partially active resources, with inactive resources", + "crm_mon -1 -r --show-detail"), + # XML already includes inactive resources + Test("Complete brief text output, with inactive resources", + "crm_mon -1 -r --include=all --brief --show-detail"), + # XML does not have a brief output option + Test("Text output of partially active group", "crm_mon -1 --resource=partially-active-group"), + Test("Text output of partially active group, with inactive resources", + "crm_mon -1 --resource=partially-active-group -r"), + Test("Text output of active member of partially active group", + "crm_mon -1 --resource=dummy-1"), + Test("Text output of inactive member of partially active group", + "crm_mon -1 --resource=dummy-2 --show-detail"), + Test("Complete brief text output grouped by node, with inactive resources", + "crm_mon -1 -r --include=all --group-by-node --brief --show-detail"), + Test("Text output of partially active resources, with inactive resources, filtered by node", + "crm_mon -1 -r --node=cluster01"), + ValidatingTest("Output of partially active resources, filtered by node", + "crm_mon --output-as=xml --node=cluster01"), + ] + + unmanaged_tests = [ + make_test_group("Output of active unmanaged resource on offline node", + "crm_mon -1 {fmt}", + [Test, ValidatingTest]), + Test("Brief text output of active unmanaged resource on offline node", + "crm_mon -1 --brief"), + Test("Brief text output of active unmanaged resource on offline node, grouped by node", + "crm_mon -1 --brief --group-by-node"), + ] + + maint1_tests = [ + make_test_group("Output of all resources with maintenance-mode enabled", + "crm_mon -1 -r {fmt}", + [Test, ValidatingTest], + setup="crm_attribute -n maintenance-mode -v true", + teardown="crm_attribute -n maintenance-mode -v false"), + make_test_group("Output of all resources with maintenance enabled for a node", + "crm_mon -1 -r {fmt}", + [Test, ValidatingTest], + setup="crm_attribute -n maintenance -N cluster02 -v true", + teardown="crm_attribute -n maintenance -N cluster02 -v false"), + ] + + maint2_tests = [ + # The fence resource is excluded, for comparison + make_test_group("Output of all resources with maintenance meta attribute true", + "crm_mon -1 -r {fmt}", + [Test, ValidatingTest]), + ] + + t180_tests = [ + Test("Text output of guest node's container on different node from its remote resource", + "crm_mon -1"), + Test("Complete text output of guest node's container on different node from its remote resource", + "crm_mon -1 --show-detail"), + ] + + return [ + TestGroup(basic_tests, + env={"CIB_file": "{cts_cli_data}/crm_mon.xml"}), + Test("Check that CIB_file=\"-\" works", "crm_mon -1", + env={"CIB_file": "-"}, + stdin=pathlib.Path(apply_substitutions("{cts_cli_data}/crm_mon.xml"))), + TestGroup(partial_tests, + env={"CIB_file": "{cts_cli_data}/crm_mon-partial.xml"}), + TestGroup(unmanaged_tests, + env={"CIB_file": "{cts_cli_data}/crm_mon-unmanaged.xml"}), + TestGroup(maint1_tests, + cib_gen=partial(copy_existing_cib, "{cts_cli_data}/crm_mon.xml")), + TestGroup(maint2_tests, + env={"CIB_file": "{cts_cli_data}/crm_mon-rsc-maint.xml"}), + TestGroup(t180_tests, + env={"CIB_file": "{cts_cli_data}/crm_mon-T180.xml"}), + ] + + def build_options(): """Handle command line arguments.""" parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description="Command line tool regression tests", epilog="Default tests: %s\n" "Other tests: agents (must be run in an installed environment)" % " ".join(default_tests)) parser.add_argument("-j", "--jobs", metavar="JOBS", default=cpu_count() - 1, type=int, help="The number of tests to run simultaneously") parser.add_argument("-p", "--path", metavar="DIR", action="append", help="Look for executables in DIR (may be specified multiple times)") parser.add_argument("-r", "--run-only", metavar="TEST", choices=default_tests + other_tests, action="append", help="Run only specified tests (may be specified multiple times)") parser.add_argument("-s", "--save", action="store_true", help="Save actual output as expected output") parser.add_argument("-v", "--valgrind", action="store_true", help="Run all commands under valgrind") parser.add_argument("-V", "--verbose", action="store_true", help="Display any differences from expected output") args = parser.parse_args() if args.path is None: args.path = [] return args def setup_environment(valgrind): """Set various environment variables needed for operation.""" if valgrind: os.environ["G_SLICE"] = "always-malloc" # Ensure all command output is in portable locale for comparison os.environ["LC_ALL"] = "C" # Log test errors to stderr os.environ["PCMK_stderr"] = "1" # Because we will change the value of PCMK_trace_functions and then reset it # back to some initial value at various points, it's easiest to assume it is # defined but empty by default if "PCMK_trace_functions" not in os.environ: os.environ["PCMK_trace_functions"] = "" def path_prepend(p): """Add another directory to the front of $PATH.""" old = os.environ["PATH"] os.environ["PATH"] = "%s:%s" % (p, old) def setup_path(opts_path): """Set the PATH environment variable appropriately for the tests.""" srcdir = os.path.dirname(test_home) # Add any search paths given on the command line for p in opts_path: path_prepend(p) if os.path.exists("%s/tools/crm_simulate" % srcdir): print("Using local binaries from: %s" % srcdir) path_prepend("%s/tools" % srcdir) for daemon in ["based", "controld", "fenced", "schedulerd"]: path_prepend("%s/daemons/%s" % (srcdir, daemon)) print("Using local schemas from: %s/xml" % srcdir) os.environ["PCMK_schema_directory"] = "%s/xml" % srcdir else: path_prepend(BuildOptions.DAEMON_DIR) os.environ["PCMK_schema_directory"] = BuildOptions.SCHEMA_DIR def _run_one(valgrind, r): """Run and return a TestGroup object.""" # See comments in run_regression_tests. r.run(valgrind=valgrind) return r def run_regression_tests(regs, jobs, valgrind=False): """Run the given tests and return the modified objects.""" executed = [] with Pool(processes=jobs) as pool: # What we really want to do here is: # pool.map(lambda r: r.run(),regs) # # However, multiprocessing uses pickle somehow in its operation, and python # doesn't want to pickle a lambda (nor a nested function within this one). # Thus, we need to use the _run_one wrapper at the file level just to call # run(). Further, if we don't return the modified object from that and then # return the list of modified objects here, it looks like the rest of the # program will use the originals, before this was ever run. executed = pool.map(partial(_run_one, valgrind), regs) return executed def results(regs, save, verbose): """Print the output from each regression test, returning the number whose output differs.""" output_differs = 0 if verbose: print("\n\nResults") for r in regs: r.write() r.diff() if not r.identical: output_differs += 1 if save: dest = "%s/cli/regression.%s.exp" % (test_home, r.name) copyfile(r.results_file, dest) return output_differs def summary(regs, output_differs, verbose): """Print the summary output for the entire test run.""" test_failures = 0 test_successes = 0 for r in regs: test_failures += r.failures test_successes += r.successes print("\n\nSummary") # First, print all the Passed/Failed lines from each Test run. for r in regs: print("\n".join(r.summary)) # Then, print information specific to each result possibility. Basically, # if there were failures then we print the output differences, leave the # failed output files in place, and exit with an error. Otherwise, clean up # anything that passed. if test_failures > 0 and output_differs > 0: print("%d test failed; see output in:" % test_failures) for r in regs: r.process_results(verbose) return ExitStatus.ERROR if test_failures > 0: print("%d tests failed" % test_failures) for r in regs: r.process_results(verbose) return ExitStatus.ERROR if output_differs: print("%d tests passed but output was unexpected; see output in:" % test_successes) for r in regs: r.process_results(verbose) return ExitStatus.DIGEST print("%d tests passed" % test_successes) for r in regs: r.cleanup() return ExitStatus.OK regression_classes = [ DaemonsRegressionTest, + CrmMonRegressionTest, ] def main(): """Run command line regression tests as specified by arguments.""" opts = build_options() setup_environment(opts.valgrind) setup_path(opts.path) # Filter the list of all regression test classes to include only those that # were requested on the command line. If empty, this defaults to default_tests. if not opts.run_only: opts.run_only = default_tests regs = [] for cls in regression_classes: obj = cls() if obj.name in opts.run_only: regs.append(obj) regs = run_regression_tests(regs, max(1, opts.jobs), valgrind=opts.valgrind) output_differs = results(regs, opts.save, opts.verbose) rc = summary(regs, output_differs, opts.verbose) sys.exit(rc) if __name__ == "__main__": main()